@lax-wp/design-system 0.14.40 → 0.14.42

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.
Files changed (91) hide show
  1. package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +2 -0
  2. package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -0
  3. package/dist/components/data-display/infinite-table/CellContextMenuPortal.d.ts +30 -0
  4. package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +248 -0
  5. package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -0
  6. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
  7. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
  8. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +166 -149
  9. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
  10. package/dist/components/data-display/infinite-table/constants.cjs.js +1 -1
  11. package/dist/components/data-display/infinite-table/constants.cjs.js.map +1 -1
  12. package/dist/components/data-display/infinite-table/constants.d.ts +8 -0
  13. package/dist/components/data-display/infinite-table/constants.es.js +24 -20
  14. package/dist/components/data-display/infinite-table/constants.es.js.map +1 -1
  15. package/dist/components/data-display/infinite-table/context.cjs.js +1 -1
  16. package/dist/components/data-display/infinite-table/context.cjs.js.map +1 -1
  17. package/dist/components/data-display/infinite-table/context.d.ts +5 -2
  18. package/dist/components/data-display/infinite-table/context.es.js +3 -1
  19. package/dist/components/data-display/infinite-table/context.es.js.map +1 -1
  20. package/dist/components/data-display/infinite-table/copy-text.cjs.js +2 -0
  21. package/dist/components/data-display/infinite-table/copy-text.cjs.js.map +1 -0
  22. package/dist/components/data-display/infinite-table/copy-text.d.ts +13 -0
  23. package/dist/components/data-display/infinite-table/copy-text.es.js +56 -0
  24. package/dist/components/data-display/infinite-table/copy-text.es.js.map +1 -0
  25. package/dist/components/data-display/infinite-table/head/cell/index.cjs.js +1 -1
  26. package/dist/components/data-display/infinite-table/head/cell/index.cjs.js.map +1 -1
  27. package/dist/components/data-display/infinite-table/head/cell/index.es.js +44 -46
  28. package/dist/components/data-display/infinite-table/head/cell/index.es.js.map +1 -1
  29. package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
  30. package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
  31. package/dist/components/data-display/infinite-table/index.d.ts +1 -1
  32. package/dist/components/data-display/infinite-table/index.es.js +623 -606
  33. package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
  34. package/dist/components/data-display/infinite-table/types.d.ts +75 -4
  35. package/dist/components/data-display/label-value/LabelValue.cjs.js +1 -1
  36. package/dist/components/data-display/label-value/LabelValue.cjs.js.map +1 -1
  37. package/dist/components/data-display/label-value/LabelValue.es.js +1 -1
  38. package/dist/components/data-display/label-value/LabelValue.es.js.map +1 -1
  39. package/dist/components/floating-bar/FloatingBar.cjs.js +1 -1
  40. package/dist/components/floating-bar/FloatingBar.cjs.js.map +1 -1
  41. package/dist/components/floating-bar/FloatingBar.es.js +32 -29
  42. package/dist/components/floating-bar/FloatingBar.es.js.map +1 -1
  43. package/dist/components/forms/currency-input/CurrencyInputField.cjs.js +1 -1
  44. package/dist/components/forms/currency-input/CurrencyInputField.cjs.js.map +1 -1
  45. package/dist/components/forms/currency-input/CurrencyInputField.es.js +24 -24
  46. package/dist/components/forms/currency-input/CurrencyInputField.es.js.map +1 -1
  47. package/dist/components/forms/icon-picker/IconPicker.cjs.js +1 -1
  48. package/dist/components/forms/icon-picker/IconPicker.cjs.js.map +1 -1
  49. package/dist/components/forms/icon-picker/IconPicker.es.js +79 -65
  50. package/dist/components/forms/icon-picker/IconPicker.es.js.map +1 -1
  51. package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js +1 -1
  52. package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js.map +1 -1
  53. package/dist/components/forms/master-data-input/MasterDataInputField.es.js +2 -2
  54. package/dist/components/forms/master-data-input/MasterDataInputField.es.js.map +1 -1
  55. package/dist/components/forms/md-input/RichMarkdownInput.cjs.js +1 -1
  56. package/dist/components/forms/md-input/RichMarkdownInput.cjs.js.map +1 -1
  57. package/dist/components/forms/md-input/RichMarkdownInput.es.js +39 -38
  58. package/dist/components/forms/md-input/RichMarkdownInput.es.js.map +1 -1
  59. package/dist/components/icons/ShieldIcon.cjs.js +2 -0
  60. package/dist/components/icons/ShieldIcon.cjs.js.map +1 -0
  61. package/dist/components/icons/ShieldIcon.d.ts +20 -0
  62. package/dist/components/icons/ShieldIcon.es.js +30 -0
  63. package/dist/components/icons/ShieldIcon.es.js.map +1 -0
  64. package/dist/components/navigation/tabs/TabSwitch.cjs.js +1 -1
  65. package/dist/components/navigation/tabs/TabSwitch.cjs.js.map +1 -1
  66. package/dist/components/navigation/tabs/TabSwitch.d.ts +3 -1
  67. package/dist/components/navigation/tabs/TabSwitch.es.js +88 -67
  68. package/dist/components/navigation/tabs/TabSwitch.es.js.map +1 -1
  69. package/dist/components/navigation/tabs/Tabs.cjs.js +1 -1
  70. package/dist/components/navigation/tabs/Tabs.cjs.js.map +1 -1
  71. package/dist/components/navigation/tabs/Tabs.d.ts +1 -1
  72. package/dist/components/navigation/tabs/Tabs.es.js +339 -325
  73. package/dist/components/navigation/tabs/Tabs.es.js.map +1 -1
  74. package/dist/components/navigation/tabs/types.cjs.js.map +1 -1
  75. package/dist/components/navigation/tabs/types.d.ts +13 -0
  76. package/dist/components/navigation/tabs/types.es.js.map +1 -1
  77. package/dist/constants/colors.cjs.js +2 -0
  78. package/dist/constants/colors.cjs.js.map +1 -0
  79. package/dist/constants/colors.es.js +9 -0
  80. package/dist/constants/colors.es.js.map +1 -0
  81. package/dist/index.cjs.js +1 -1
  82. package/dist/index.d.ts +3 -1
  83. package/dist/index.es.js +325 -323
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/providers/design-system-provider/types.d.ts +1 -0
  86. package/dist/utils/table.cjs.js +1 -1
  87. package/dist/utils/table.cjs.js.map +1 -1
  88. package/dist/utils/table.d.ts +1 -0
  89. package/dist/utils/table.es.js +26 -25
  90. package/dist/utils/table.es.js.map +1 -1
  91. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../src/components/data-display/infinite-table/index.tsx"],"sourcesContent":["import { useCheckbox } from \"../../../hooks/useCheckbox\";\nimport { useTableConfig } from \"../../../providers/design-system-provider/hooks\";\nimport {\n canEditTableView,\n mergeViewColumnsWithTableColumns,\n} from \"../../../utils/table\";\nimport Button from \"../../button/Button\";\nimport { FloatingBar } from \"../../floating-bar/FloatingBar\";\nimport { NoDataFound, NoDataFoundWidgets } from \"../empty-state\";\nimport { Typography } from \"../typography/Typography\";\nimport {\n DndContext,\n DragOverlay,\n type DragEndEvent,\n type DragStartEvent,\n type DropAnimation,\n MouseSensor,\n TouchSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AutoSizer as _AutoSizer } from \"react-virtualized-auto-sizer\";\nimport { createPortal } from \"react-dom\";\nimport type { Row as ReactTableRow } from \"react-table\";\nimport { useResizeColumns, useTable } from \"react-table\";\n\nimport { Body } from \"./body\";\nimport { validateCellValue } from \"./validateCell\";\nimport { Row } from \"./body/rows/row\";\nimport { TableContext } from \"./context\";\nimport { CurrencyDropdownPortal } from \"./CurrencyDropdownPortal\";\nimport { Head } from \"./head\";\nimport { PendingEditsFloatingBar } from \"./PendingEditsFloatingBar\";\nimport type {\n ICurrencyDropdownConfig,\n IColumn,\n IMasterDataModalConfig,\n ITableProps,\n ITableView,\n PendingEditsMap,\n IPendingEdit,\n} from \"./types\";\nimport { Add2Icon } from \"../../icon\";\nimport {\n TOOLBAR_FIRST_BREAKPOINT,\n TOOLBAR_SECOND_BREAKPOINT,\n DEFAULT_PAGE_SIZE,\n DEFAULT_COLUMN_MIN_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n DEFAULT_COLUMN_MAX_WIDTH,\n DND_ACTIVATION_DISTANCE,\n DROP_ANIMATION_EASING,\n DROP_ANIMATION_DURATION,\n SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK,\n SCROLL_TO_CELL_LEFT_OFFSET,\n ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH,\n ROW_OPTIONS_COLUMN_WIDTH,\n OS_VIEWPORT_SELECTOR,\n DATA_ROW_ID_ATTR,\n DATA_COLUMN_KEY_ATTR,\n} from \"./constants\";\nimport { getRowSlotHeight, useRowHeight } from \"./useRowHeight\";\n\nconst AutoSizer = _AutoSizer as unknown as React.ComponentType<{\n renderProp: (size: { width: number; height: number }) => React.ReactNode;\n style?: React.CSSProperties;\n}>;\n\nconst CREATE_COLUMN_LABEL = \"Create Column\";\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-_]/g, \"\");\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = {\n search: \"\",\n handleSearch: () => null,\n allowAStarSearch: false,\n },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = {\n onSort: () => null,\n columnSort: { field: \"\", order: \"\" },\n onRemoveSort: () => null,\n },\n headerConfig = {\n showExportButton: null,\n showFilters: true,\n showSorts: true,\n showSearch: true,\n showTableView: true,\n showTableViewAsModal: false,\n content: null,\n postContent: null,\n preContent: null,\n isLoading: false,\n showDivider: false,\n },\n hoverConfig = null,\n columns,\n modelName,\n enableMasterDataEnumSuggestions = false,\n agreementId,\n enumSuggestionsExtraParams,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\n showSubHeader = true,\n tableActions,\n rowOptions,\n hideRowOptionWidth,\n checkboxUtilities,\n isLoading = false,\n onScroll,\n onScrolling,\n isColumnConfigurable,\n onAddColumnClick,\n emptyMessage,\n noDataWidget,\n buttons,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n originalsOnly,\n disableOptionsForRowIndex,\n tableHeightClass = \"h-[calc(100vh-220px)]\",\n getFullRowDataOnClick,\n selectedRowId = null,\n onRowEdit,\n onBulkRowEdit,\n inlineEditColumns,\n isResizable = true,\n paginationConfig,\n dndSortableUtils,\n multipleContexts,\n withSortable,\n withDraggable,\n enableRootDrag,\n pageSize = DEFAULT_PAGE_SIZE,\n onCascadingRowExpand,\n totalItems,\n showRecordCount = false,\n getInnerRowData,\n maxLevel,\n expandedRows = {},\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n isOverlayLoading,\n style = {},\n floatingBarConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n setHeaderOnParent,\n optimizeTable = false,\n multiSelectConfig,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions,\n showDataTypeIcon = false,\n rowAdditionalActions,\n rowAdditionalActionsWidth,\n setVisibleHeaders,\n cellEditing = null,\n cellEditingValue = null,\n allowInlineEdit = false,\n onFieldOperationFlow,\n fieldOperationLoading = null,\n onTableActionsReady,\n onPendingEditsChange,\n onCancelPendingEdits,\n }: ITableProps) => {\n const tableConfig = useTableConfig();\n\n // Row slot height tracks the `h-row` viewport clamp so the paginated\n // container sizes to the rows the virtualized body actually renders.\n const rowSlotHeight = getRowSlotHeight(useRowHeight());\n\n const isSearch = Boolean(searchConfig?.search);\n\n const isFilters = filterConfig?.columnFilters?.length > 0;\n const isAnyFilters = isSearch || isFilters;\n\n const isCheckbox = Boolean(checkboxUtilities);\n\n const defaultTableView =\n tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] =\n useState<ITableView | null>(defaultTableView || null);\n const isReadOnlyView = !canEditTableView(\n selectedTableView,\n tableConfig?.getUserId?.()\n );\n const [showFilters, setShowFilters] = useState(false);\n const [showSorts, setShowSorts] = useState(false);\n const [newFilterColumn, setNewFilterColumn] = useState<unknown>(null);\n const [tableHeaders, setTableHeaders] = useState<IColumn[]>(columns);\n const isEmpty = (data.length === 0 || !tableHeaders.length) && !isLoading;\n const [showHeaderOptions, setShowHeaderOptions] = useState<string | null>(\n null\n );\n const [showDataFilterModal, setShowDataFilterModal] =\n useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(\n null\n );\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<\n string | null\n >(null);\n const [sortableListByContext, setSortableListByContext] = useState<\n Record<string, unknown>\n >({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(\n null\n );\n const [dndLoading, setDndLoading] = useState<boolean>(false);\n const [headerDivWidth, setHeaderDivWidth] = useState(0);\n const headerDivRef = useRef<HTMLDivElement>(null);\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const [tableContainerSize, setTableContainerSize] = useState({\n width: 0,\n height: 0,\n });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{\n rowId: string;\n columnKey: string;\n } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] =\n useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{\n value: unknown;\n reference: unknown;\n } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] =\n useState<ICurrencyDropdownConfig | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<\n Record<string, string>\n >({});\n const hasAppliedInitialFilters = useRef(false);\n const userClearedFiltersRef = useRef(false);\n\n const selectedTableViewRef = useRef(selectedTableView);\n selectedTableViewRef.current = selectedTableView;\n const tableConfigRef = useRef(tableConfig);\n tableConfigRef.current = tableConfig;\n const columnsRef = useRef(columns);\n columnsRef.current = columns;\n const filterConfigRef = useRef(filterConfig);\n filterConfigRef.current = filterConfig;\n const headerGroupsRef = useRef<unknown[] | null>(null);\n const resolveTableViewRef = useRef<() => ITableView>(\n () => ({}) as ITableView\n );\n const computeListRef = useRef<() => unknown>(() => ({}));\n\n const [pendingEdits, setPendingEdits] = useState<PendingEditsMap>({});\n\n const addPendingEdit = useCallback(\n (rowId: string, columnKey: string, edit: IPendingEdit) => {\n setPendingEdits((prev) => {\n const existingEdit = prev[rowId]?.[columnKey];\n let resolvedValidationError: string | null | undefined =\n edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n resolvedValidationError = !result.isValid\n ? result.error || \"Invalid\"\n : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return {\n ...prev,\n [rowId]: {\n ...(prev[rowId] || {}),\n [columnKey]: {\n ...edit,\n validationError: resolvedValidationError ?? null,\n },\n },\n };\n });\n },\n [tableHeaders]\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some(\n (rowEdits) => Object.keys(rowEdits).length > 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady)\n onTableActionsReady({\n addPendingEdit: addPendingEdit as (\n rowId: string,\n columnKey: string,\n edit: { value: unknown; originalValue?: unknown; meta?: unknown }\n ) => void,\n hasPendingEdits,\n });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback(\n (rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId];\n void _removed;\n if (Object.keys(rest).length === 0) delete newEdits[rowId];\n else newEdits[rowId] = rest;\n }\n return newEdits;\n });\n },\n []\n );\n\n const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined =>\n pendingEdits[rowId]?.[columnKey],\n [pendingEdits]\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean =>\n Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits]\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0)\n onCancelPendingEdits(pendingEdits);\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [fieldOperationLoading, onCancelPendingEdits, pendingEdits]);\n\n const scrollToCell = useCallback(\n (rowId: string, columnKey: string, rowIndex: number) => {\n setTimeout(() => {\n tableConfig?.dispatchEvent?.(\"SCROLL_TO_TABLE_ROW\", { rowIndex });\n const colIndex = tableHeaders.findIndex(\n (col) => col.key === columnKey\n );\n setTimeout(() => {\n const cellElement = document.querySelector(\n `[${DATA_ROW_ID_ATTR}=\"${rowId}\"] [${DATA_COLUMN_KEY_ATTR}=\"${columnKey}\"]`\n );\n if (cellElement) {\n cellElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n } else if (colIndex > 0) {\n const scrollContainer =\n document.querySelector(OS_VIEWPORT_SELECTOR);\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky)\n scrollLeft +=\n col?.width || SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK;\n }\n scrollLeft = Math.max(\n 0,\n scrollLeft - SCROLL_TO_CELL_LEFT_OFFSET\n );\n scrollContainer.scrollTo({\n left: scrollLeft,\n behavior: \"smooth\",\n });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig]\n );\n\n const validateAllPendingEdits = useCallback(\n (\n editsToValidate: PendingEditsMap\n ): {\n hasErrors: boolean;\n updatedEdits: PendingEditsMap;\n firstError: { rowId: string; columnKey: string } | null;\n errorTypes: Set<string>;\n } => {\n let hasErrors = false;\n let firstError: { rowId: string; columnKey: string } | null = null;\n const updatedEdits: PendingEditsMap = {};\n const errorTypes = new Set<string>();\n\n Object.entries(editsToValidate).forEach(([rowId, rowEdits]) => {\n updatedEdits[rowId] = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n if (!result.isValid) {\n hasErrors = true;\n if (result.error) errorTypes.add(result.error);\n if (!firstError) firstError = { rowId, columnKey };\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: result.error,\n };\n } else {\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: null,\n };\n }\n });\n });\n\n return { hasErrors, updatedEdits, firstError, errorTypes };\n },\n [tableHeaders]\n );\n\n const getValidationToastMessage = useCallback((errorTypes: Set<string>) => {\n const hasRequired = errorTypes.has(\"Field required\");\n const hasFormat = errorTypes.size > (hasRequired ? 1 : 0);\n if (hasRequired && hasFormat)\n return \"Missing required field(s) and invalid format detected. Please review highlighted field(s).\";\n if (hasRequired)\n return \"Missing required field(s). Please review highlighted field(s).\";\n return \"Invalid field value(s). Please review highlighted field(s).\";\n }, []);\n\n const saveAllPendingEdits = useCallback(() => {\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const editedRows: Array<Record<string, unknown>> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<\n string,\n { value: unknown; meta?: unknown }\n > = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n editedRows.push({ ...updatedRow, __editedFields: editedFields });\n }\n });\n\n if (editedRows.length > 0) {\n if (onBulkRowEdit) onBulkRowEdit(editedRows);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: editedRows,\n });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits)\n onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [fieldOperationLoading, onCancelPendingEdits, pendingEdits]\n );\n\n const saveRowPendingEdits = useCallback(\n (rowId: string) => {\n const rowEdits = pendingEdits[rowId];\n if (!rowEdits || Object.keys(rowEdits).length === 0) return;\n\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({\n ...prev,\n [rowId]: updatedEdits[rowId],\n }));\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> =\n {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n\n const editedRowData = { ...updatedRow, __editedFields: editedFields };\n\n if (onBulkRowEdit) onBulkRowEdit([editedRowData]);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: [editedRowData],\n });\n\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce(\n (total, rowEdits) => total + Object.keys(rowEdits).length,\n 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: IPendingEdit[\"meta\"];\n originalMeta?: IPendingEdit[\"originalMeta\"];\n rowIndex: number;\n }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({\n rowId,\n columnKey,\n fieldName: column?.Header || column?.display_name || columnKey,\n value: edit.value,\n originalValue: edit.originalValue,\n meta: edit.meta,\n originalMeta: edit.originalMeta,\n rowIndex,\n });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<\n string,\n { rowId: string; rowIndex: number; editCount: number }\n >();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n rowsMap.set(rowId, {\n rowId,\n rowIndex,\n editCount: Object.keys(rowEdits).length,\n });\n });\n return Array.from(rowsMap.values()).sort(\n (a, b) => a.rowIndex - b.rowIndex\n );\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback(\n (config: IMasterDataModalConfig) => setMasterDataModalConfig(config),\n []\n );\n const closeMasterDataModal = useCallback(\n () => setMasterDataModalConfig(null),\n []\n );\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected)\n masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal]\n );\n\n const clearSelectedMasterData = useCallback(\n () => setSelectedMasterData(null),\n []\n );\n\n const openCurrencyDropdown = useCallback(\n (config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config),\n []\n );\n const closeCurrencyDropdown = useCallback(\n () => setCurrencyDropdownConfig(null),\n []\n );\n\n const setCurrencyForCell = useCallback(\n (cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\n },\n []\n );\n\n const getCurrencyForCell = useCallback(\n (cellKey: string): string | undefined => selectedCurrenciesMap[cellKey],\n [selectedCurrenciesMap]\n );\n\n const fallbackHeight = useMemo(() => {\n const pxMatch = tableHeightClass.match(/h-\\[(\\d+px)\\]/);\n if (pxMatch) return pxMatch[1];\n const calcMatch = tableHeightClass.match(/h-\\[(calc\\(.+\\))\\]/);\n if (calcMatch)\n return calcMatch[1].replace(/([+-])/g, \" $1 \").replace(/\\s+/g, \" \");\n return undefined;\n }, [tableHeightClass]);\n\n const emptySwitchProps = {\n isEmpty,\n isFilters: isAnyFilters,\n isColumnConfigurable,\n handleOnClick: onAddColumnClick,\n emptyMessage,\n buttons,\n noDataWidget,\n };\n const translatedCreateColumnLabel =\n tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters\n ? \"No Results Found\"\n : emptyMessage || \"No Data Found\";\n const resolvedEmptyText =\n typeof defaultEmptyText === \"string\"\n ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText)\n : defaultEmptyText;\n\n const loaderData = { __isLoading: true };\n const cellLoaders = new Array(1).fill(loaderData);\n const tableLoaders = new Array(pageSize).fill(loaderData);\n\n const visibleColumns = useMemo(\n () => tableHeaders.filter((header) => Boolean(header?.visible)),\n [tableHeaders]\n );\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [\n ...data,\n ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : []),\n ],\n defaultColumn: {\n minWidth: DEFAULT_COLUMN_MIN_WIDTH,\n width: DEFAULT_COLUMN_WIDTH,\n maxWidth: DEFAULT_COLUMN_MAX_WIDTH,\n },\n },\n useResizeColumns\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } =\n table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(\n headerGroups[0]?.headers?.map(\n (header) => (header as unknown as Record<string, unknown>)?.Header\n )\n );\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{\n headers?: Array<Record<string, unknown>>;\n }> | null;\n setVisibleHeaders?.(\n groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []\n );\n }\n }, [headerKeys, setVisibleHeaders]);\n\n const { checkboxConfig } = useCheckbox({\n rows: rows as never,\n checkedIds: checkboxUtilities?.checkedIds as string[],\n isCheckAllDisabled: checkboxUtilities?.isCheckAllDisabled,\n selectionDisabledRowIds: checkboxUtilities?.selectionDisabledRowIds,\n rawData,\n onAllChecked: setIsAllChecked,\n setCheckedIds: checkboxUtilities?.setCheckedIds as (\n ids: string[]\n ) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as {\n checkedIds: string[];\n tooltip: string;\n highlight: string;\n },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n })\n );\n\n const dropAnimation: DropAnimation = {\n easing: DROP_ANIMATION_EASING,\n duration: DROP_ANIMATION_DURATION,\n };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce(\n (acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter(\n (e) => (e.original as Record<string, unknown>)?.type === contextKey\n );\n return acc;\n },\n {}\n );\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(\n rows.find(\n (item) =>\n (item.original as Record<string, unknown>)?.id === active?.id\n ) ?? null\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(\n active,\n over,\n sortableListByContext,\n (newState: Record<string, unknown>) => {\n setSortableListByContext(newState as Record<string, unknown>);\n setDndLoading(true);\n dndSortableUtils.onDragSuccess?.({\n draggedId: active.id as string,\n droppedId: over.id as string,\n draggedType: (active.data.current as Record<string, unknown>)\n ?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\n });\n }\n );\n }\n setActiveItem(null);\n };\n\n const handleDragCancel = () => setActiveItem(null);\n\n const toggleHeaderOption = (key: string) => {\n if (!sortConfig?.onSort && !filterConfig?.onFilter) return;\n if (showHeaderOptions === key) setShowHeaderOptions(null);\n else setShowHeaderOptions(key);\n };\n\n const toggleDataFilterModal = (col: unknown) => {\n setDataFilterColumn(col);\n setShowDataFilterModal(!showDataFilterModal);\n setShowHeaderOptions(null);\n };\n\n const handleRemoveSort = useCallback(() => {\n if (sortConfig?.onRemoveSort) sortConfig.onRemoveSort();\n else if (sortConfig?.onSort) sortConfig.onSort(\"\", \"\");\n }, [sortConfig]);\n\n const toggleShowFilters = useCallback((col: unknown = null) => {\n setNewFilterColumn(col);\n setShowFilters((prev) => (col ? true : !prev));\n }, []);\n const toggleShowSorts = useCallback(\n () => setShowSorts((prev) => !prev),\n []\n );\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (\n headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>\n )?.filter((header) => header?.visible !== false);\n for (let i = 0; i < reverseHeaders.length; i++) {\n if (reverseHeaders[i].sticky) return i - 1;\n }\n return reverseHeaders.length - 1;\n };\n\n const getSumOfNextVisibleColumnWidth = useCallback(\n (currentIndex: number) => {\n let sum = 0;\n for (let i = currentIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].visible !== false)\n sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions)\n sum +=\n rowAdditionalActionsWidth || ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH;\n if (rowOptions)\n sum += hideRowOptionWidth ? 0 : ROW_OPTIONS_COLUMN_WIDTH;\n return sum;\n },\n [\n visibleColumns,\n rowAdditionalActionsWidth,\n hideRowOptionWidth,\n rowAdditionalActions,\n rowOptions,\n ]\n );\n\n const resolveTableView = (): ITableView => {\n const userId = tableConfig?.getUserId?.();\n return {\n ...(selectedTableView || {}),\n name: selectedTableView?.name || \"Untitled View\",\n created_by: selectedTableView?.created_by || userId,\n filters: selectedTableView?.filters || filterConfig?.columnFilters,\n id: selectedTableView?.id || \"untitled-view\",\n table_key: selectedTableView?.table_key || tableKey,\n columns:\n selectedTableView?.columns ||\n columns?.map((column, index) => ({\n name: column.Header,\n width: column.width,\n visible: column.visible,\n sticky: column.sticky,\n order: index + 1,\n display_name: column.Header,\n sequence: index + 1,\n Header: column.Header,\n })),\n };\n };\n resolveTableViewRef.current = resolveTableView;\n\n const handleUpdateColumnWidth = (columnName: string, width: number) => {\n if (isReadOnlyView) return;\n\n const updatedTableView = resolveTableView();\n setSelectedTableView({\n ...updatedTableView,\n columns: updatedTableView?.columns?.map((column) =>\n column.name === columnName ? { ...column, width } : column\n ),\n unsaved: true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n if (isReadOnlyView) return;\n const currentView = selectedTableViewRef.current;\n if (\n JSON.stringify(currentView?.filters || []) !==\n JSON.stringify(filterConfig?.columnFilters || [])\n ) {\n const hasViewFilters = (currentView?.filters?.length ?? 0) > 0;\n const hasConfigFilters = filterConfig?.columnFilters?.length > 0;\n // Skip sync only during the initial load window where the view already has filters\n // but they haven't propagated to columnFilters yet. If the user explicitly cleared\n // filters from ActiveFilters (X button or Clear), we must propagate the empty state.\n const isClearingFilters =\n hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({\n ...updatedTableView,\n filters: JSON.parse(\n JSON.stringify(filterConfig?.columnFilters || [])\n ),\n unsaved: true,\n });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters, isReadOnlyView]);\n\n const handleActiveRemoveFilter = useCallback(\n (key: string) => {\n userClearedFiltersRef.current = true;\n filterConfig?.onRemoveFilter?.(key);\n },\n [filterConfig?.onRemoveFilter]\n );\n\n const handleActiveClearFilter = useCallback(() => {\n userClearedFiltersRef.current = true;\n filterConfig?.onClearFilter?.();\n }, [filterConfig?.onClearFilter]);\n\n useEffect(() => {\n if (sortConfig?.columnSort?.field) {\n setShowSorts(true);\n if (sortConfig.columnSort.order === \"asc\") {\n setIsShowSortArrowAsc(sortConfig.columnSort.field);\n setIsShowSortArrowDesc(null);\n } else if (sortConfig.columnSort.order === \"desc\") {\n setIsShowSortArrowDesc(sortConfig.columnSort.field);\n setIsShowSortArrowAsc(null);\n }\n } else {\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(null);\n }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n selectedTableViewRef.current?.columns || [],\n columns\n )\n );\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved)\n tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => {\n setSortableListByContext(\n computeListRef.current() as Record<string, unknown>\n );\n }, [rows.length]);\n\n useEffect(() => {\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n defaultTableView?.columns || [],\n columnsRef.current\n )\n );\n }\n if (\n defaultTableView?.filters &&\n defaultTableView.filters.length > 0 &&\n !hasAppliedInitialFilters.current\n ) {\n requestAnimationFrame(() => {\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n });\n hasAppliedInitialFilters.current = true;\n } else if (\n defaultTableView?.filters &&\n hasAppliedInitialFilters.current\n ) {\n const filtersAreDifferent =\n JSON.stringify(defaultTableView.filters) !==\n JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent)\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) =>\n setHeaderDivWidth(entries[0].contentRect.width)\n );\n resizeObserver.observe(headerDivRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n useEffect(() => {\n if (!tableContainerRef.current) return;\n const resizeObserver = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect;\n setTableContainerSize({ width, height });\n });\n resizeObserver.observe(tableContainerRef.current);\n return () => resizeObserver.disconnect();\n }, []);\n\n const tableHeader = (\n <Head\n isResizable={isResizable}\n headerGroups={headerGroups as never}\n isCheckbox={isCheckbox}\n checkboxConfig={checkboxConfig}\n isAllChecked={isAllChecked}\n showHeaderOptions={showHeaderOptions ?? \"\"}\n setShowHeaderOptions={setShowHeaderOptions}\n isShowSortArrowAsc={isShowSortArrowAsc}\n isShowSortArrowDesc={isShowSortArrowDesc}\n onSort={\n sortConfig?.onSort as\n | ((field: string, order?: string) => void)\n | undefined\n }\n onFilter={filterConfig?.onFilter}\n toggleHeaderOption={toggleHeaderOption}\n setIsShowSortArrowAsc={setIsShowSortArrowAsc}\n setIsShowSortArrowDesc={setIsShowSortArrowDesc}\n toggleDataFilterModal={toggleShowFilters}\n rowOptions={(Array.isArray(rowOptions) ? rowOptions : []) as unknown[]}\n isColumnConfigurable={isColumnConfigurable ?? false}\n onAddColumnClick={\n onAddColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onEditColumnClick={\n onEditColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onDeleteColumnClick={\n onDeleteColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n tableActions={tableActions || null}\n isLoading={isLoading}\n rowAdditionalActions={\n (rowAdditionalActions ?? null) as (() => React.ReactNode) | null\n }\n showPendingEditsColumn={pendingEditsCount > 0}\n />\n );\n\n const tableView = (\n <>\n {dndLoading || isOverlayLoading ? (\n <div className=\"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700\" />\n ) : null}\n <div\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800\"\n >\n {isEmpty ? (\n <div className=\"z-10\">\n {tableHeader}\n <div className=\"absolute w-full\">\n {tableConfig?.renderEmpty ? (\n tableConfig.renderEmpty(emptySwitchProps)\n ) : (\n <div className=\"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8\">\n {noDataWidget && !isAnyFilters ? (\n <NoDataFoundWidgets widgetType=\"TABLE\" />\n ) : (\n <NoDataFound text={resolvedEmptyText} />\n )}\n {isColumnConfigurable && !isAnyFilters ? (\n <div className=\"my-4\">\n <Button\n id=\"btn-table-shell-create-column\"\n status=\"primary\"\n appearance=\"ghost\"\n onClick={\n onAddColumnClick as\n | ((\n event: React.MouseEvent<HTMLButtonElement>\n ) => void)\n | undefined\n }\n >\n <Add2Icon className=\"text-white dark:text-white\" />{\" \"}\n {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button\n key={`${button.label}-${index}`}\n status=\"secondary\"\n id={getEmptyButtonId(button.label, index)}\n onClick={button.onClick}\n >\n {tableConfig?.t?.(button.label) ?? button.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n ) : (\n <AutoSizer\n style={{ width: \"100%\", height: \"100%\" }}\n renderProp={({ width, height }) => {\n const effectiveWidth =\n width > 0 ? width : tableContainerSize.width;\n const effectiveHeight =\n height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps:\n getTableBodyProps as unknown as () => Record<\n string,\n unknown\n >,\n rows: rows as never,\n prepareRow: prepareRow as never,\n isLoading,\n onScroll,\n onScrolling,\n columns,\n width: effectiveWidth,\n height: effectiveHeight,\n withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n {tableHeader}\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const tableBodyWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const TableHeaderComponent = useMemo(() => {\n if (tableConfig?.renderTableHeader) {\n return tableConfig.renderTableHeader({\n tableKey,\n search: searchConfig?.search,\n handleSearch: searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterCounts: filterConfig?.columnFilters?.length,\n columns,\n columnFilters: filterConfig?.columnFilters,\n setSelectedTableView,\n selectedTableView,\n enableTableView: headerConfig?.showTableView,\n modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter,\n data: enumSuggestionsData ?? data,\n tableHeaders,\n showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions,\n inlineActions: headerConfig?.inlineActions,\n showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts,\n showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading),\n setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch),\n withContent: !!headerConfig?.content,\n setShowFilters,\n sort: sortConfig?.columnSort,\n onSort: sortConfig?.onSort,\n onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n onExportClick: headerConfig?.onExportClick,\n agreementId,\n enumSuggestionsExtraParams,\n });\n }\n return null;\n }, [\n tableKey,\n searchConfig?.search,\n searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterConfig?.columnFilters,\n columns,\n setSelectedTableView,\n selectedTableView,\n headerConfig,\n modelName,\n filterConfig?.onRemoveFilter,\n filterConfig?.onClearFilter,\n filterConfig?.onFilter,\n data,\n enumSuggestionsData,\n tableHeaders,\n sortConfig?.columnSort,\n sortConfig?.onSort,\n handleRemoveSort,\n tableConfig,\n searchConfig?.allowAStarSearch,\n enableMasterDataEnumSuggestions,\n agreementId,\n enumSuggestionsExtraParams,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper,\n tableBodyWrapper,\n lastNonStickyColumnIndex,\n search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters,\n onRowClick,\n onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter,\n toggleShowFilters,\n toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n rowOptions,\n checkboxConfig,\n onResetFilter: filterConfig?.onResetFilter,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n activeInlineEdit,\n setActiveInlineEdit,\n originalsOnly,\n disableOptionsForRowIndex,\n getFullRowDataOnClick,\n selectedRowId,\n getSumOfNextVisibleColumnWidth,\n onRowEdit,\n inlineEditColumns,\n tableActions,\n dndSortableUtils,\n withSortable,\n withDraggable,\n onCascadingRowExpand,\n getInnerRowData,\n tableHeaders,\n maxLevel,\n expandedRows,\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter,\n handleUpdateColumnWidth,\n isTableViewReadOnly: isReadOnlyView,\n multiSelectConfig,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions: setShowHeaderContextOptions as\n | ((value: string | null) => void)\n | undefined,\n headerDivWidth,\n showDataTypeIcon,\n rowAdditionalActions,\n hoverConfig,\n rowAdditionalActionsWidth,\n cellEditing,\n cellEditingValue,\n openMasterDataModal,\n closeMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n allowInlineEdit,\n openCurrencyDropdown,\n closeCurrencyDropdown,\n currencyDropdownConfig,\n selectedCurrenciesMap,\n setCurrencyForCell,\n getCurrencyForCell,\n pendingEdits,\n addPendingEdit,\n removePendingEdit,\n getPendingEdit,\n hasPendingEdit,\n clearAllPendingEdits,\n saveAllPendingEdits,\n clearRowPendingEdits,\n saveRowPendingEdits,\n pendingEditsCount,\n scrollToCell,\n onFieldOperationFlow,\n fieldOperationLoading,\n validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"flex-col items-stretch\"\n : \"flex-row flex-wrap items-center\"\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full flex-wrap\"\n : \"\"\n } ${headerConfig?.content ? \"min-w-0 flex-1\" : \"shrink-0\"}`}\n >\n {headerConfig?.content ? (\n <div\n className={`min-w-0 ${headerDivWidth < TOOLBAR_FIRST_BREAKPOINT ? \"w-full\" : \"flex-1\"}`}\n >\n {headerConfig.content}\n </div>\n ) : null}\n {showRecordCount ? (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography\n size=\"small\"\n variant=\"semibold\"\n appearance=\"title\"\n >\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography\n size=\"small\"\n variant=\"regular\"\n appearance=\"subtitle\"\n >\n total records\n </Typography>\n </div>\n ) : headerConfig?.preContent ? (\n <div className=\"flex min-w-0 shrink-0 justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : headerConfig?.content\n ? \"shrink-0\"\n : \"flex-1\"\n } ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"flex-col\" : \"flex-row flex-wrap\"} ${\n headerConfig?.postContent ? \"gap-2\" : \"\"\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className=\"flex w-full justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < TOOLBAR_SECOND_BREAKPOINT\n ? \"w-full\"\n : headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : \"\"\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div\n className={`flex justify-end items-center ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"w-full\" : \"\"}`}\n >\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? (\n <div className=\"border-b pb-2 w-full dark:bg-black-800\" />\n ) : null}\n {showSubHeader && (showFilters || showSorts) ? (\n <div className=\"flex justify-between items-center pb-4 dark:bg-black-800\">\n <div className=\"flex gap-2 items-center\">\n {showSorts && tableConfig?.renderSortItem\n ? tableConfig.renderSortItem({\n sort: sortConfig?.columnSort,\n onRemoveSort: handleRemoveSort,\n onSort: sortConfig?.onSort,\n tableHeaders,\n data,\n disabled: isReadOnlyView,\n })\n : null}\n {showFilters &&\n showSorts &&\n sortConfig?.columnSort?.field !== \"\" ? (\n <div className=\"h-8 w-[1px] flex-shrink-0 bg-neutral-200\" />\n ) : null}\n {showFilters ? (\n <div className=\"flex gap-2 items-center\">\n {(isFilters || filterConfig?.onResetFilter) &&\n tableConfig?.renderActiveFilters &&\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters,\n onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter,\n onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n modelName,\n enableMasterDataEnumSuggestions,\n noSpacing: true,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n data: enumSuggestionsData ?? data,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n {tableConfig?.renderFilterButtons &&\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter,\n onClose: toggleDataFilterModal,\n modelName,\n enableMasterDataEnumSuggestions,\n defaultFilterColumn: newFilterColumn,\n resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n data: enumSuggestionsData ?? data,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? (\n <FloatingBar {...floatingBarConfig} />\n ) : null}\n {!showHeader && showRecordCount ? (\n <div className=\"flex items-center gap-1.5 mb-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography size=\"small\" variant=\"semibold\" appearance=\"title\">\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography size=\"small\" variant=\"regular\" appearance=\"subtitle\">\n total records\n </Typography>\n </div>\n ) : !showHeader && headerConfig?.preContent ? (\n <div className=\"flex items-center mb-2\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n ref={tableContainerRef}\n className={`w-full ${paginationConfig ? `h-auto` : tableHeightClass} rounded-lg relative border overflow-x-hidden`}\n style={{\n ...(paginationConfig\n ? {\n height:\n data?.length > 0\n ? `${(data?.length + 1) * rowSlotHeight + 4}px`\n : \"350px\",\n }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCorners}\n >\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay\n adjustScale={true}\n dropAnimation={dropAnimation}\n >\n <table\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse\"\n >\n <tbody\n {...getTableBodyProps()}\n className=\"bg-transparent divide-y divide-neutral-200\"\n >\n {void prepareRow(activeItem)}\n <Row\n key={\n (activeItem.original as Record<string, unknown>)\n .id as string\n }\n row={activeItem as never}\n index={rows?.findIndex(\n (item) =>\n item.id ===\n (activeItem.original as Record<string, unknown>)\n .id\n )}\n />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById(\"full-screen-container\") ||\n document.body\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination\n ? tableConfig.renderPagination(paginationConfig)\n : null}\n\n {tableConfig?.renderMasterDataModal &&\n tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig,\n onSelected: handleMasterDataSelected,\n onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName,\n masterDataFormula: masterDataModalConfig?.masterDataFormula,\n masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName,\n masterDataId: masterDataModalConfig?.masterDataName,\n showFilters: true,\n })}\n\n <CurrencyDropdownPortal\n config={currencyDropdownConfig}\n onClose={closeCurrencyDropdown}\n />\n\n <PendingEditsFloatingBar\n pendingEditsCount={pendingEditsCount}\n pendingEditsList={pendingEditsList}\n rowsWithPendingEdits={rowsWithPendingEdits}\n fieldOperationLoading={fieldOperationLoading}\n onClearAll={clearAllPendingEdits}\n onSaveAll={saveAllPendingEdits}\n onScrollToCell={scrollToCell}\n />\n </TableContext.Provider>\n );\n }\n);\n"],"names":["AutoSizer","_AutoSizer","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementId","enumSuggestionsExtraParams","enumSuggestionsData","data","onRowClick","showHeader","showSubHeader","tableActions","rowOptions","hideRowOptionWidth","checkboxUtilities","isLoading","onScroll","onScrolling","isColumnConfigurable","onAddColumnClick","emptyMessage","noDataWidget","buttons","onEditColumnClick","onDeleteColumnClick","onRowTooltipClick","tooltiptext","cascadingTableConfig","originalsOnly","disableOptionsForRowIndex","tableHeightClass","getFullRowDataOnClick","selectedRowId","onRowEdit","onBulkRowEdit","inlineEditColumns","isResizable","paginationConfig","dndSortableUtils","multipleContexts","withSortable","withDraggable","enableRootDrag","pageSize","DEFAULT_PAGE_SIZE","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","rowSlotHeight","getRowSlotHeight","useRowHeight","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","isReadOnlyView","canEditTableView","showFilters","setShowFilters","showSorts","setShowSorts","newFilterColumn","setNewFilterColumn","tableHeaders","setTableHeaders","isEmpty","showHeaderOptions","setShowHeaderOptions","showDataFilterModal","setShowDataFilterModal","dataFilterColumn","setDataFilterColumn","isAllChecked","setIsAllChecked","isShowSortArrowAsc","setIsShowSortArrowAsc","isShowSortArrowDesc","setIsShowSortArrowDesc","sortableListByContext","setSortableListByContext","activeItem","setActiveItem","dndLoading","setDndLoading","headerDivWidth","setHeaderDivWidth","headerDivRef","useRef","tableContainerRef","tableContainerSize","setTableContainerSize","activeInlineEdit","setActiveInlineEdit","masterDataModalConfig","setMasterDataModalConfig","selectedMasterData","setSelectedMasterData","currencyDropdownConfig","setCurrencyDropdownConfig","selectedCurrenciesMap","setSelectedCurrenciesMap","hasAppliedInitialFilters","userClearedFiltersRef","selectedTableViewRef","tableConfigRef","columnsRef","filterConfigRef","headerGroupsRef","resolveTableViewRef","computeListRef","pendingEdits","setPendingEdits","addPendingEdit","useCallback","rowId","columnKey","edit","prev","existingEdit","resolvedValidationError","column","col","result","validateCellValue","hasPendingEdits","rowEdits","useEffect","removePendingEdit","newEdits","_removed","rest","getPendingEdit","hasPendingEdit","clearAllPendingEdits","scrollToCell","rowIndex","colIndex","cellElement","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","scrollContainer","OS_VIEWPORT_SELECTOR","scrollLeft","i","SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK","SCROLL_TO_CELL_LEFT_OFFSET","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","n","k","saveRowPendingEdits","editedRowData","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","DEFAULT_COLUMN_MIN_WIDTH","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAX_WIDTH","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","DND_ACTIVATION_DISTANCE","TouchSensor","dropAnimation","DROP_ANIMATION_EASING","DROP_ANIMATION_DURATION","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH","ROW_OPTIONS_COLUMN_WIDTH","resolveTableView","userId","handleUpdateColumnWidth","columnName","width","updatedTableView","currentView","hasViewFilters","hasConfigFilters","handleActiveRemoveFilter","handleActiveClearFilter","mergeViewColumnsWithTableColumns","resizeObserver","entries","height","tableHeader","jsx","Head","tableView","jsxs","Fragment","NoDataFoundWidgets","NoDataFound","Button","Add2Icon","button","effectiveWidth","effectiveHeight","Body","tableWrapper","forwardRef","props","ref","tableBodyWrapper","TableHeaderComponent","TableContext","TOOLBAR_FIRST_BREAKPOINT","Typography","TOOLBAR_SECOND_BREAKPOINT","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","PendingEditsFloatingBar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwEA,MAAMA,KAAYC,IAKZC,KAAsB,iBAEtBC,KAAmB,CAACC,GAAeC,MAMhC,gBALMD,EACV,YAAA,EACA,KAAA,EACA,QAAQ,QAAQ,GAAG,EACnB,QAAQ,gBAAgB,EAAE,KACEC,CAAK,IAGzBC,KAAgBC,GAAM;AAAA,EACjC,CAAC;AAAA,IACC,UAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,MACb,QAAQ;AAAA,MACR,cAAc,MAAM;AAAA,MACpB,kBAAkB;AAAA,IAAA;AAAA,IAEpB,cAAAC,IAAe;AAAA,MACb,eAAe,CAAA;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,MACtB,eAAe,MAAM;AAAA,MACrB,eAAe,MAAM,QAAQ,QAAQ,EAAE;AAAA,MACvC,uBAAuB,MAAM,QAAQ,QAAQ,CAAA,CAAE;AAAA,IAAA;AAAA,IAEjD,YAAAC,IAAa;AAAA,MACX,QAAQ,MAAM;AAAA,MACd,YAAY,EAAE,OAAO,IAAI,OAAO,GAAA;AAAA,MAChC,cAAc,MAAM;AAAA,IAAA;AAAA,IAEtB,cAAAC,IAAe;AAAA,MACb,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,sBAAsB;AAAA,MACtB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,aAAa;AAAA,IAAA;AAAA,IAEf,aAAAC,KAAc;AAAA,IACd,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,iCAAAC,IAAkC;AAAA,IAClC,aAAAC;AAAA,IACA,4BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,MAAAC,IAAO,CAAA;AAAA,IACP,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC,KAAgB;AAAA,IAChB,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,WAAAC,KAAY;AAAA,IACZ,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,SAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,kBAAAC,KAAmB;AAAA,IACnB,uBAAAC;AAAA,IACA,eAAAC,KAAgB;AAAA,IAChB,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC,KAAc;AAAA,IACd,kBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC,KAAWC;AAAA,IACX,sBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC,KAAkB;AAAA,IAClB,iBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC,KAAe,CAAA;AAAA,IACf,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,OAAAC,KAAQ,CAAA;AAAA,IACR,mBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,eAAAC,KAAgB;AAAA,IAChB,mBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,kBAAAC,KAAmB;AAAA,IACnB,sBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC,KAAc;AAAA,IACd,kBAAAC,KAAmB;AAAA,IACnB,iBAAAC,KAAkB;AAAA,IAClB,sBAAAC;AAAA,IACA,uBAAAC,IAAwB;AAAA,IACxB,qBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA,MACiB;AACjB,UAAMC,IAAcC,GAAA,GAIdC,KAAgBC,GAAiBC,IAAc,GAE/CC,KAAW,EAAQxF,GAAc,QAEjCyF,KAAYxF,GAAc,eAAe,SAAS,GAClDyF,IAAeF,MAAYC,IAE3BE,KAAa,EAAQzE,GAErB0E,IACJT,GAAa,eAAepF,CAAkB,KAAK,MAC/C,CAAC8F,GAAmBC,CAAoB,IAC5CC,EAA4BH,KAAoB,IAAI,GAChDI,IAAiB,CAACC;AAAA,MACtBJ;AAAA,MACAV,GAAa,YAAA;AAAA,IAAY,GAErB,CAACe,IAAaC,EAAc,IAAIJ,EAAS,EAAK,GAC9C,CAACK,IAAWC,EAAY,IAAIN,EAAS,EAAK,GAC1C,CAACO,IAAiBC,EAAkB,IAAIR,EAAkB,IAAI,GAC9D,CAACS,GAAcC,EAAe,IAAIV,EAAoB1F,CAAO,GAC7DqG,MAAW/F,EAAK,WAAW,KAAK,CAAC6F,EAAa,WAAW,CAACrF,IAC1D,CAACwF,IAAmBC,EAAoB,IAAIb;AAAA,MAChD;AAAA,IAAA,GAEI,CAACc,IAAqBC,EAAsB,IAChDf,EAAkB,EAAK,GACnB,CAACgB,IAAkBC,EAAmB,IAAIjB,EAAkB,IAAI,GAChE,CAACkB,IAAcC,EAAe,IAAInB,EAAS,EAAK,GAChD,CAACoB,IAAoBC,EAAqB,IAAIrB;AAAA,MAClD;AAAA,IAAA,GAEI,CAACsB,IAAqBC,EAAsB,IAAIvB,EAEpD,IAAI,GACA,CAACwB,IAAuBC,EAAwB,IAAIzB,EAExD,CAAA,CAAE,GACE,CAAC0B,GAAYC,EAAa,IAAI3B;AAAA,MAClC;AAAA,IAAA,GAEI,CAAC4B,IAAYC,EAAa,IAAI7B,EAAkB,EAAK,GACrD,CAAC8B,GAAgBC,EAAiB,IAAI/B,EAAS,CAAC,GAChDgC,KAAeC,EAAuB,IAAI,GAC1CC,KAAoBD,EAAuB,IAAI,GAC/C,CAACE,IAAoBC,EAAqB,IAAIpC,EAAS;AAAA,MAC3D,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA,CACT,GACK,CAACqC,IAAkBC,CAAmB,IAAItC,EAGtC,IAAI,GACR,CAACuC,GAAuBC,EAAwB,IACpDxC,EAAwC,IAAI,GACxC,CAACyC,IAAoBC,EAAqB,IAAI1C,EAG1C,IAAI,GACR,CAAC2C,IAAwBC,EAAyB,IACtD5C,EAAyC,IAAI,GACzC,CAAC6C,IAAuBC,CAAwB,IAAI9C,EAExD,CAAA,CAAE,GACE+C,KAA2Bd,EAAO,EAAK,GACvCe,KAAwBf,EAAO,EAAK,GAEpCgB,KAAuBhB,EAAOnC,CAAiB;AACrD,IAAAmD,GAAqB,UAAUnD;AAC/B,UAAMoD,KAAiBjB,EAAO7C,CAAW;AACzC,IAAA8D,GAAe,UAAU9D;AACzB,UAAM+D,KAAalB,EAAO3H,CAAO;AACjC,IAAA6I,GAAW,UAAU7I;AACrB,UAAM8I,KAAkBnB,EAAO/H,CAAY;AAC3C,IAAAkJ,GAAgB,UAAUlJ;AAC1B,UAAMmJ,KAAkBpB,EAAyB,IAAI,GAC/CqB,KAAsBrB;AAAA,MAC1B,OAAO,CAAA;AAAA,IAAC,GAEJsB,KAAiBtB,EAAsB,OAAO,CAAA,EAAG,GAEjD,CAACuB,GAAcC,CAAe,IAAIzD,EAA0B,CAAA,CAAE,GAE9D0D,KAAiBC;AAAA,MACrB,CAACC,GAAeC,GAAmBC,MAAuB;AACxD,QAAAL,EAAgB,CAACM,MAAS;AACxB,gBAAMC,IAAeD,EAAKH,CAAK,IAAIC,CAAS;AAC5C,cAAII,IACFH,EAAK;AACP,cAAIG,MAA4B,QAAW;AACzC,kBAAMC,IAASzD,EAAa,KAAK,CAAC0D,MAAQA,EAAI,QAAQN,CAAS;AAC/D,gBAAIK,GAAQ;AACV,oBAAME,IAASC;AAAA,gBACbP,EAAK;AAAA,gBACLI;AAAA,cAAA;AAEF,cAAAD,IAA2BG,EAAO,UAE9B,OADAA,EAAO,SAAS;AAAA,YAEtB;AACE,cAAAH,IAA0BD,GAAc,mBAAmB;AAAA,UAE/D;AACA,iBAAO;AAAA,YACL,GAAGD;AAAA,YACH,CAACH,CAAK,GAAG;AAAA,cACP,GAAIG,EAAKH,CAAK,KAAK,CAAA;AAAA,cACnB,CAACC,CAAS,GAAG;AAAA,gBACX,GAAGC;AAAA,gBACH,iBAAiBG,KAA2B;AAAA,cAAA;AAAA,YAC9C;AAAA,UACF;AAAA,QAEJ,CAAC;AAAA,MACH;AAAA,MACA,CAACxD,CAAY;AAAA,IAAA,GAGT6D,KAAkBX,EAAY,MAC3B,OAAO,OAAOH,CAAY,EAAE;AAAA,MACjC,CAACe,MAAa,OAAO,KAAKA,CAAQ,EAAE,SAAS;AAAA,IAAA,GAE9C,CAACf,CAAY,CAAC;AAEjB,IAAAgB,EAAU,MAAM;AACd,MAAIvF,MACFA,GAAoB;AAAA,QAClB,gBAAAyE;AAAA,QAKA,iBAAAY;AAAA,MAAA,CACD;AAAA,IACL,GAAG,CAACrF,IAAqByE,IAAgBY,EAAe,CAAC;AAEzD,UAAMG,KAAoBd;AAAA,MACxB,CAACC,GAAeC,MAAsB;AACpC,QAAAJ,EAAgB,CAACM,MAAS;AACxB,gBAAMW,IAAW,EAAE,GAAGX,EAAA;AACtB,cAAIW,EAASd,CAAK,GAAG;AACnB,kBAAM,EAAE,CAACC,CAAS,GAAGc,GAAU,GAAGC,EAAA,IAASF,EAASd,CAAK;AAEzD,YAAI,OAAO,KAAKgB,CAAI,EAAE,WAAW,IAAG,OAAOF,EAASd,CAAK,IACpDc,EAASd,CAAK,IAAIgB;AAAA,UACzB;AACA,iBAAOF;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,CAAA;AAAA,IAAC,GAGGG,KAAiBlB;AAAA,MACrB,CAACC,GAAeC,MACdL,EAAaI,CAAK,IAAIC,CAAS;AAAA,MACjC,CAACL,CAAY;AAAA,IAAA,GAGTsB,KAAiBnB;AAAA,MACrB,CAACC,GAAeC,MACd,EAAQL,EAAaI,CAAK,IAAIC,CAAS;AAAA,MACzC,CAACL,CAAY;AAAA,IAAA,GAGTuB,KAAuBpB,EAAY,MAAM;AAC7C,MAAI3E,MACAG,KAAwB,OAAO,KAAKqE,CAAY,EAAE,SAAS,KAC7DrE,EAAqBqE,CAAY,GACnCC,EAAgB,CAAA,CAAE,GAClBX,EAAyB,CAAA,CAAE,GAC3BR,EAAoB,IAAI;AAAA,IAC1B,GAAG,CAACtD,GAAuBG,GAAsBqE,CAAY,CAAC,GAExDwB,IAAerB;AAAA,MACnB,CAACC,GAAeC,GAAmBoB,MAAqB;AACtD,mBAAW,MAAM;AACf,UAAA7F,GAAa,gBAAgB,uBAAuB,EAAE,UAAA6F,EAAA,CAAU;AAChE,gBAAMC,IAAWzE,EAAa;AAAA,YAC5B,CAAC0D,MAAQA,EAAI,QAAQN;AAAA,UAAA;AAEvB,qBAAW,MAAM;AACf,kBAAMsB,IAAc,SAAS;AAAA,cAC3B,IAAIC,EAAgB,KAAKxB,CAAK,OAAOyB,EAAoB,KAAKxB,CAAS;AAAA,YAAA;AAEzE,gBAAIsB;AACF,cAAAA,EAAY,eAAe;AAAA,gBACzB,UAAU;AAAA,gBACV,OAAO;AAAA,gBACP,QAAQ;AAAA,cAAA,CACT;AAAA,qBACQD,IAAW,GAAG;AACvB,oBAAMI,IACJ,SAAS,cAAcC,EAAoB;AAC7C,kBAAID,GAAiB;AACnB,oBAAIE,IAAa;AACjB,yBAASC,IAAI,GAAGA,IAAIP,GAAUO,KAAK;AACjC,wBAAMtB,IAAM1D,EAAagF,CAAC;AAC1B,kBAAKtB,GAAK,WACRqB,KACErB,GAAK,SAASuB;AAAA,gBACpB;AACA,gBAAAF,IAAa,KAAK;AAAA,kBAChB;AAAA,kBACAA,IAAaG;AAAA,gBAAA,GAEfL,EAAgB,SAAS;AAAA,kBACvB,MAAME;AAAA,kBACN,UAAU;AAAA,gBAAA,CACX;AAAA,cACH;AAAA,YACF;AACA,YAAAlD,EAAoB,EAAE,OAAAsB,GAAO,WAAAC,GAAW;AAAA,UAC1C,GAAG,GAAG;AAAA,QACR,GAAG,GAAG;AAAA,MACR;AAAA,MACA,CAACpD,GAAcrB,CAAW;AAAA,IAAA,GAGtBwG,IAA0BjC;AAAA,MAC9B,CACEkC,MAMG;AACH,YAAIC,IAAY,IACZC,IAA0D;AAC9D,cAAMC,IAAgC,CAAA,GAChCC,wBAAiB,IAAA;AAEvB,sBAAO,QAAQJ,CAAe,EAAE,QAAQ,CAAC,CAACjC,GAAOW,CAAQ,MAAM;AAC7D,UAAAyB,EAAapC,CAAK,IAAI,CAAA,GACtB,OAAO,QAAQW,CAAQ,EAAE,QAAQ,CAAC,CAACV,GAAWC,CAAI,MAAM;AACtD,kBAAMI,IAASzD,EAAa,KAAK,CAAC0D,MAAQA,EAAI,QAAQN,CAAS,GACzDO,IAASC;AAAA,cACbP,EAAK;AAAA,cACLI;AAAA,YAAA;AAEF,YAAKE,EAAO,UASV4B,EAAapC,CAAK,EAAEC,CAAS,IAAI;AAAA,cAC/B,GAAGC;AAAA,cACH,iBAAiB;AAAA,YAAA,KAVnBgC,IAAY,IACR1B,EAAO,SAAO6B,EAAW,IAAI7B,EAAO,KAAK,GACxC2B,MAAYA,IAAa,EAAE,OAAAnC,GAAO,WAAAC,EAAA,IACvCmC,EAAapC,CAAK,EAAEC,CAAS,IAAI;AAAA,cAC/B,GAAGC;AAAA,cACH,iBAAiBM,EAAO;AAAA,YAAA;AAAA,UAQ9B,CAAC;AAAA,QACH,CAAC,GAEM,EAAE,WAAA0B,GAAW,cAAAE,GAAc,YAAAD,GAAY,YAAAE,EAAA;AAAA,MAChD;AAAA,MACA,CAACxF,CAAY;AAAA,IAAA,GAGTyF,KAA4BvC,EAAY,CAACsC,MAA4B;AACzE,YAAME,IAAcF,EAAW,IAAI,gBAAgB,GAC7CG,IAAYH,EAAW,QAAQE,IAAc,IAAI;AACvD,aAAIA,KAAeC,IACV,+FACLD,IACK,mEACF;AAAA,IACT,GAAG,CAAA,CAAE,GAECE,KAAsB1C,EAAY,MAAM;AAC5C,YAAM,EAAE,WAAAmC,GAAW,cAAAE,GAAc,YAAAD,GAAY,YAAAE,EAAA,IAC3CL,EAAwBpC,CAAY;AACtC,UAAIsC,GAAW;AAMb,YALArC,EAAgBuC,CAAY,GAC5B5G,GAAa;AAAA,UACX;AAAA,UACA8G,GAA0BD,CAAU;AAAA,QAAA,GAElCF,GAAY;AACd,gBAAMd,IAAWrK,EAAK;AAAA,YACpB,CAAC0L,MAAiCA,EAAI,OAAOP,EAAY;AAAA,UAAA;AAE3D,UAAAf,EAAae,EAAY,OAAOA,EAAY,WAAWd,CAAQ;AAAA,QACjE;AACA;AAAA,MACF;AAEA,YAAMsB,IAA6C,CAAA;AACnD,aAAO,QAAQ/C,CAAY,EAAE,QAAQ,CAAC,CAACI,GAAOW,CAAQ,MAAM;AAC1D,cAAMiC,IAAc5L,EAAK;AAAA,UACvB,CAAC0L,MAAiCA,EAAI,OAAO1C;AAAA,QAAA;AAE/C,YAAI4C,GAAa;AACf,gBAAMC,IAAa,EAAE,GAAGD,EAAA,GAClBE,IAGF,CAAA;AACJ,iBAAO,QAAQnC,CAAQ,EAAE,QAAQ,CAAC,CAACV,GAAWC,CAAI,MAAM;AACtD,YAAA2C,EAAW5C,CAAS,IAAIC,EAAK,OAC7B4C,EAAa7C,CAAS,IAAI,EAAE,OAAOC,EAAK,OAAO,MAAMA,EAAK,KAAA;AAAA,UAC5D,CAAC,GACDyC,EAAW,KAAK,EAAE,GAAGE,GAAY,gBAAgBC,GAAc;AAAA,QACjE;AAAA,MACF,CAAC,GAEGH,EAAW,SAAS,MAClBhK,MAA6BgK,CAAU,IAClCjK,KACPA,EAAU,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,QACtC,QAAQ;AAAA,QACR,MAAMiK;AAAA,MAAA,CACP,IAGL9C,EAAgB,CAAA,CAAE,GAClBX,EAAyB,CAAA,CAAE,GAC3BR,EAAoB,IAAI;AAAA,IAC1B,GAAG;AAAA,MACDkB;AAAA,MACA5I;AAAA,MACA0B;AAAA,MACAC;AAAA,MACAqJ;AAAA,MACAM;AAAA,MACAlB;AAAA,MACA5F;AAAA,IAAA,CACD,GAEKuH,KAAuBhD;AAAA,MAC3B,CAACC,MAAkB;AACjB,YAAI5E,EAAuB;AAC3B,cAAMuF,IAAWf,EAAaI,CAAK;AACnC,QAAIW,KAAYpF,KACdA,EAAqB,EAAE,CAACyE,CAAK,GAAGW,GAAU,GAC5Cd,EAAgB,CAACM,MAAS;AACxB,gBAAM6C,IAAI,EAAE,GAAG7C,EAAA;AACf,wBAAO6C,EAAEhD,CAAK,GACPgD;AAAA,QACT,CAAC,GACD9D,EAAyB,CAACiB,MAAS;AACjC,gBAAM6C,IAAI,EAAE,GAAG7C,EAAA;AACf,wBAAO,KAAK6C,CAAC,EAAE,QAAQ,CAACC,MAAM;AAC5B,YAAIA,EAAE,WAAW,GAAGjD,CAAK,GAAG,KAAG,OAAOgD,EAAEC,CAAC;AAAA,UAC3C,CAAC,GACMD;AAAA,QACT,CAAC,GACDtE,EAAoB,IAAI;AAAA,MAC1B;AAAA,MACA,CAACtD,GAAuBG,GAAsBqE,CAAY;AAAA,IAAA,GAGtDsD,KAAsBnD;AAAA,MAC1B,CAACC,MAAkB;AACjB,cAAMW,IAAWf,EAAaI,CAAK;AACnC,YAAI,CAACW,KAAY,OAAO,KAAKA,CAAQ,EAAE,WAAW,EAAG;AAErD,cAAM,EAAE,WAAAuB,GAAW,cAAAE,GAAc,YAAAD,GAAY,YAAAE,MAC3CL,EAAwB,EAAE,CAAChC,CAAK,GAAGW,GAAU;AAC/C,YAAIuB,GAAW;AASb,cARArC,EAAgB,CAACM,OAAU;AAAA,YACzB,GAAGA;AAAA,YACH,CAACH,CAAK,GAAGoC,EAAapC,CAAK;AAAA,UAAA,EAC3B,GACFxE,GAAa;AAAA,YACX;AAAA,YACA8G,GAA0BD,CAAU;AAAA,UAAA,GAElCF,GAAY;AACd,kBAAMd,IAAWrK,EAAK;AAAA,cACpB,CAAC0L,MAAiCA,EAAI,OAAOP,EAAY;AAAA,YAAA;AAE3D,YAAAf,EAAae,EAAY,OAAOA,EAAY,WAAWd,CAAQ;AAAA,UACjE;AACA;AAAA,QACF;AAEA,cAAMuB,IAAc5L,EAAK;AAAA,UACvB,CAAC0L,MAAiCA,EAAI,OAAO1C;AAAA,QAAA;AAE/C,YAAI,CAAC4C,EAAa;AAClB,cAAMC,IAAa,EAAE,GAAGD,EAAA,GAClBE,IACJ,CAAA;AACF,eAAO,QAAQnC,CAAQ,EAAE,QAAQ,CAAC,CAACV,GAAWC,CAAI,MAAM;AACtD,UAAA2C,EAAW5C,CAAS,IAAIC,EAAK,OAC7B4C,EAAa7C,CAAS,IAAI,EAAE,OAAOC,EAAK,OAAO,MAAMA,EAAK,KAAA;AAAA,QAC5D,CAAC;AAED,cAAMiD,IAAgB,EAAE,GAAGN,GAAY,gBAAgBC,EAAA;AAEvD,QAAInK,IAAeA,EAAc,CAACwK,CAAa,CAAC,IACvCzK,KACPA,EAAU,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,UACtC,QAAQ;AAAA,UACR,MAAM,CAACyK,CAAa;AAAA,QAAA,CACrB,GAEHtD,EAAgB,CAACM,MAAS;AACxB,gBAAM6C,IAAI,EAAE,GAAG7C,EAAA;AACf,wBAAO6C,EAAEhD,CAAK,GACPgD;AAAA,QACT,CAAC,GACD9D,EAAyB,CAACiB,MAAS;AACjC,gBAAM6C,IAAI,EAAE,GAAG7C,EAAA;AACf,wBAAO,KAAK6C,CAAC,EAAE,QAAQ,CAACC,OAAM;AAC5B,YAAIA,GAAE,WAAW,GAAGjD,CAAK,GAAG,KAAG,OAAOgD,EAAEC,EAAC;AAAA,UAC3C,CAAC,GACMD;AAAA,QACT,CAAC,GACDtE,EAAoB,IAAI;AAAA,MAC1B;AAAA,MACA;AAAA,QACEkB;AAAA,QACA5I;AAAA,QACA0B;AAAA,QACAC;AAAA,QACAqJ;AAAA,QACAM;AAAA,QACAlB;AAAA,QACA5F;AAAA,MAAA;AAAA,IACF,GAGI4H,IAAoBC,EAAQ,MACzB,OAAO,OAAOzD,CAAY,EAAE;AAAA,MACjC,CAAC0D,GAAO3C,MAAa2C,IAAQ,OAAO,KAAK3C,CAAQ,EAAE;AAAA,MACnD;AAAA,IAAA,GAED,CAACf,CAAY,CAAC;AAEjB,IAAAgB,EAAU,MAAM;AACd,MAAAtF,KAAuB8H,IAAoB,GAAGA,CAAiB;AAAA,IACjE,GAAG,CAACA,GAAmB9H,EAAoB,CAAC;AAE5C,UAAMiI,KAAmBF,EAAQ,MAAM;AACrC,YAAMG,IASD,CAAA;AACL,oBAAO,QAAQ5D,CAAY,EAAE,QAAQ,CAAC,CAACI,GAAOW,CAAQ,MAAM;AAC1D,cAAMU,IAAWrK,EAAK;AAAA,UACpB,CAAC0L,MAAiCA,EAAI,OAAO1C;AAAA,QAAA;AAE/C,eAAO,QAAQW,CAAQ,EAAE,QAAQ,CAAC,CAACV,GAAWC,CAAI,MAAM;AACtD,gBAAMI,IAASzD,EAAa,KAAK,CAAC0D,MAAQA,EAAI,QAAQN,CAAS;AAC/D,UAAAuD,EAAK,KAAK;AAAA,YACR,OAAAxD;AAAA,YACA,WAAAC;AAAA,YACA,WAAWK,GAAQ,UAAUA,GAAQ,gBAAgBL;AAAA,YACrD,OAAOC,EAAK;AAAA,YACZ,eAAeA,EAAK;AAAA,YACpB,MAAMA,EAAK;AAAA,YACX,cAAcA,EAAK;AAAA,YACnB,UAAAmB;AAAA,UAAA,CACD;AAAA,QACH,CAAC;AAAA,MACH,CAAC,GACMmC;AAAA,IACT,GAAG,CAAC5D,GAAc/C,GAAc7F,CAAI,CAAC,GAE/ByM,KAAuBJ,EAAQ,MAAM;AACzC,YAAMK,wBAAc,IAAA;AAIpB,oBAAO,QAAQ9D,CAAY,EAAE,QAAQ,CAAC,CAACI,GAAOW,CAAQ,MAAM;AAC1D,cAAMU,IAAWrK,EAAK;AAAA,UACpB,CAAC0L,MAAiCA,EAAI,OAAO1C;AAAA,QAAA;AAE/C,QAAA0D,EAAQ,IAAI1D,GAAO;AAAA,UACjB,OAAAA;AAAA,UACA,UAAAqB;AAAA,UACA,WAAW,OAAO,KAAKV,CAAQ,EAAE;AAAA,QAAA,CAClC;AAAA,MACH,CAAC,GACM,MAAM,KAAK+C,EAAQ,OAAA,CAAQ,EAAE;AAAA,QAClC,CAACC,GAAGC,MAAMD,EAAE,WAAWC,EAAE;AAAA,MAAA;AAAA,IAE7B,GAAG,CAAChE,GAAc5I,CAAI,CAAC,GAEjB6M,KAAsB9D;AAAA,MAC1B,CAAC+D,MAAmClF,GAAyBkF,CAAM;AAAA,MACnE,CAAA;AAAA,IAAC,GAEGC,KAAuBhE;AAAA,MAC3B,MAAMnB,GAAyB,IAAI;AAAA,MACnC,CAAA;AAAA,IAAC,GAGGoF,KAA2BjE;AAAA,MAC/B,CAACkE,GAAgBvB,MAAkB;AACjC,QAAA5D,GAAsB,EAAE,OAAAmF,GAAO,WAAWvB,EAAA,CAAK,GAC3C/D,GAAuB,cACzBA,EAAsB,WAAWsF,GAAOvB,CAAG,GAC7CqB,GAAA;AAAA,MACF;AAAA,MACA,CAACpF,GAAuBoF,EAAoB;AAAA,IAAA,GAGxCG,KAA0BnE;AAAA,MAC9B,MAAMjB,GAAsB,IAAI;AAAA,MAChC,CAAA;AAAA,IAAC,GAGGqF,KAAuBpE;AAAA,MAC3B,CAAC+D,MAAoC9E,GAA0B8E,CAAM;AAAA,MACrE,CAAA;AAAA,IAAC,GAEGM,KAAwBrE;AAAA,MAC5B,MAAMf,GAA0B,IAAI;AAAA,MACpC,CAAA;AAAA,IAAC,GAGGqF,KAAqBtE;AAAA,MACzB,CAACuE,GAAiBC,MAAqB;AACrC,QAAArF,EAAyB,CAACiB,OAAU,EAAE,GAAGA,GAAM,CAACmE,CAAO,GAAGC,EAAA,EAAW;AAAA,MACvE;AAAA,MACA,CAAA;AAAA,IAAC,GAGGC,KAAqBzE;AAAA,MACzB,CAACuE,MAAwCrF,GAAsBqF,CAAO;AAAA,MACtE,CAACrF,EAAqB;AAAA,IAAA,GAGlBwF,KAAiBpB,EAAQ,MAAM;AACnC,YAAMqB,IAAUnM,GAAiB,MAAM,eAAe;AACtD,UAAImM,EAAS,QAAOA,EAAQ,CAAC;AAC7B,YAAMC,IAAYpM,GAAiB,MAAM,oBAAoB;AAC7D,UAAIoM;AACF,eAAOA,EAAU,CAAC,EAAE,QAAQ,WAAW,MAAM,EAAE,QAAQ,QAAQ,GAAG;AAAA,IAEtE,GAAG,CAACpM,EAAgB,CAAC,GAEfqM,KAAmB;AAAA,MACvB,SAAA7H;AAAA,MACA,WAAWhB;AAAA,MACX,sBAAApE;AAAA,MACA,eAAeC;AAAA,MACf,cAAAC;AAAA,MACA,SAAAE;AAAA,MACA,cAAAD;AAAA,IAAA,GAEI+M,KACJrJ,GAAa,IAAI1F,EAAmB,KAAKA,IACrCgP,KAAmB/I,IACrB,qBACAlE,MAAgB,iBACdkN,KACJ,OAAOD,MAAqB,WACvBtJ,GAAa,IAAIsJ,EAAgB,KAAKA,KACvCA,IAEAE,KAAa,EAAE,aAAa,GAAA,GAC5BC,KAAc,IAAI,MAAM,CAAC,EAAE,KAAKD,EAAU,GAC1CE,KAAe,IAAI,MAAM9L,EAAQ,EAAE,KAAK4L,EAAU,GAElDG,IAAiB9B;AAAA,MACrB,MAAMxG,EAAa,OAAO,CAACuI,MAAW,EAAQA,GAAQ,OAAQ;AAAA,MAC9D,CAACvI,CAAY;AAAA,IAAA,GAGTwI,KAAQC;AAAA,MACZ;AAAA,QACE,SAAS/K,KAAgB4K,IAAiBtI;AAAA,QAC1C,MAAM;AAAA,UACJ,GAAG7F;AAAA,UACH,GAAIQ,KAAaR,GAAM,SAASiO,KAAcC,KAAgB,CAAA;AAAA,QAAC;AAAA,QAEjE,eAAe;AAAA,UACb,UAAUK;AAAA,UACV,OAAOC;AAAA,UACP,UAAUC;AAAA,QAAA;AAAA,MACZ;AAAA,MAEFC;AAAA,IAAA,GAGI,EAAE,eAAAC,IAAe,mBAAAC,IAAmB,cAAAC,IAAc,YAAAC,IAAY,MAAAC,MAClEV;AACF,IAAA5F,GAAgB,UAAUoG;AAE1B,UAAMG,KAAa,KAAK;AAAA,MACtBH,GAAa,CAAC,GAAG,SAAS;AAAA,QACxB,CAACT,MAAYA,GAA+C;AAAA,MAAA;AAAA,IAC9D;AAEF,IAAAxE,EAAU,MAAM;AACd,UAAI7F,IAAmB;AACrB,cAAMkL,IAASxG,GAAgB;AAG/B,QAAA1E;AAAA,UACEkL,IAAS,CAAC,GAAG,SAAS,IAAI,CAACb,MAAWA,GAAQ,MAAgB,KAAK,CAAA;AAAA,QAAC;AAAA,MAExE;AAAA,IACF,GAAG,CAACY,IAAYjL,EAAiB,CAAC;AAElC,UAAM,EAAE,gBAAAmL,GAAA,IAAmBC,GAAY;AAAA,MACrC,MAAAJ;AAAA,MACA,YAAYxO,GAAmB;AAAA,MAC/B,oBAAoBA,GAAmB;AAAA,MACvC,yBAAyBA,GAAmB;AAAA,MAC5C,SAAAuC;AAAA,MACA,cAAcyD;AAAA,MACd,eAAehG,GAAmB;AAAA,MAGlC,kBAAkBA,GAAmB;AAAA,IAAA,CAKtC,GAEK6O,KAAUC;AAAA,MACdC,GAAUC,IAAa;AAAA,QACrB,sBAAsB,EAAE,UAAUC,GAAA;AAAA,MAAwB,CAC3D;AAAA,MACDF,GAAUG,IAAa;AAAA,QACrB,sBAAsB,EAAE,UAAUD,GAAA;AAAA,MAAwB,CAC3D;AAAA,IAAA,GAGGE,KAA+B;AAAA,MACnC,QAAQC;AAAA,MACR,UAAUC;AAAA,IAAA;AAGZ,aAASC,KAAc;AACrB,aAAI,CAAC7N,IAAkB,UAAU,CAACC,KAAqB8M,IAChD/M,GAAiB;AAAA,QACtB,CAAC8N,GAA8BC,OAC7BD,EAAIC,CAAU,IAAIhB,EAAK;AAAA,UACrB,CAACiB,MAAOA,EAAE,UAAsC,SAASD;AAAA,QAAA,GAEpDD;AAAA,QAET,CAAA;AAAA,MAAC;AAAA,IAEL;AACA,IAAAnH,GAAe,UAAUkH;AAEzB,UAAMI,KAAkB,CAACC,MAA0B;AACjD,YAAM,EAAE,QAAAC,MAAWD;AACnB,MAAAnJ;AAAA,QACEgI,EAAK;AAAA,UACH,CAACqB,MACEA,EAAK,UAAsC,OAAOD,GAAQ;AAAA,QAAA,KAC1D;AAAA,MAAA;AAAA,IAET,GAEME,KAAgB,CAACH,MAAwB;AAC7C,YAAM,EAAE,QAAAC,GAAQ,MAAAG,EAAA,IAASJ;AACzB,MAAKI,MACDvO,IAAkB,mBACpBA,GAAiB;AAAA,QACfoO;AAAA,QACAG;AAAA,QACA1J;AAAA,QACA,CAAC2J,MAAsC;AACrC,UAAA1J,GAAyB0J,CAAmC,GAC5DtJ,GAAc,EAAI,GAClBlF,GAAiB,gBAAgB;AAAA,YAC/B,WAAWoO,EAAO;AAAA,YAClB,WAAWG,EAAK;AAAA,YAChB,aAAcH,EAAO,KAAK,SACtB;AAAA,YACJ,aAAcG,EAAK,KAAK,SAAqC;AAAA,YAC7D,aAAaC;AAAA,YACb,IAAI,MAAMtJ,GAAc,EAAK;AAAA,UAAA,CAC9B;AAAA,QACH;AAAA,MAAA,GAGJF,GAAc,IAAI;AAAA,IACpB,GAEMyJ,KAAmB,MAAMzJ,GAAc,IAAI,GAE3C0J,KAAqB,CAACC,MAAgB;AAC1C,MAAI,CAACnR,GAAY,UAAU,CAACD,GAAc,YACX2G,GAA3BD,OAAsB0K,IAA0B,OAC1BA,CAD8B;AAAA,IAE1D,GAEMC,KAAwB,CAACpH,MAAiB;AAC9C,MAAAlD,GAAoBkD,CAAG,GACvBpD,GAAuB,CAACD,EAAmB,GAC3CD,GAAqB,IAAI;AAAA,IAC3B,GAEM2K,KAAmB7H,EAAY,MAAM;AACzC,MAAIxJ,GAAY,eAAcA,EAAW,aAAA,IAChCA,GAAY,UAAQA,EAAW,OAAO,IAAI,EAAE;AAAA,IACvD,GAAG,CAACA,CAAU,CAAC,GAETsR,KAAoB9H,EAAY,CAACQ,IAAe,SAAS;AAC7D,MAAA3D,GAAmB2D,CAAG,GACtB/D,GAAe,CAAC2D,MAAUI,IAAM,KAAO,CAACJ,CAAK;AAAA,IAC/C,GAAG,CAAA,CAAE,GACC2H,KAAkB/H;AAAA,MACtB,MAAMrD,GAAa,CAACyD,MAAS,CAACA,CAAI;AAAA,MAClC,CAAA;AAAA,IAAC,GAGG4H,KAA2B,MAAM;AACrC,YAAMC,IACJnC,GAAa,CAAC,GAAG,SAChB,OAAO,CAACT,MAAWA,GAAQ,YAAY,EAAK;AAC/C,eAASvD,IAAI,GAAGA,IAAImG,EAAe,QAAQnG;AACzC,YAAImG,EAAenG,CAAC,EAAE,eAAeA,IAAI;AAE3C,aAAOmG,EAAe,SAAS;AAAA,IACjC,GAEMC,KAAiClI;AAAA,MACrC,CAACmI,MAAyB;AACxB,YAAIC,IAAM;AACV,iBAAStG,IAAIqG,IAAe,GAAGrG,IAAIsD,EAAe,QAAQtD;AACxD,UAAIsD,EAAetD,CAAC,EAAE,YAAY,OAChCsG,KAAOhD,EAAetD,CAAC,EAAE,SAAS;AAEtC,eAAIhH,OACFsN,KACErN,MAA6BsN,KAC7B/Q,MACF8Q,KAAO7Q,KAAqB,IAAI+Q,KAC3BF;AAAA,MACT;AAAA,MACA;AAAA,QACEhD;AAAA,QACArK;AAAA,QACAxD;AAAA,QACAuD;AAAA,QACAxD;AAAA,MAAA;AAAA,IACF,GAGIiR,KAAmB,MAAkB;AACzC,YAAMC,IAAS/M,GAAa,YAAA;AAC5B,aAAO;AAAA,QACL,GAAIU,KAAqB,CAAA;AAAA,QACzB,MAAMA,GAAmB,QAAQ;AAAA,QACjC,YAAYA,GAAmB,cAAcqM;AAAA,QAC7C,SAASrM,GAAmB,WAAW5F,GAAc;AAAA,QACrD,IAAI4F,GAAmB,MAAM;AAAA,QAC7B,WAAWA,GAAmB,aAAa9F;AAAA,QAC3C,SACE8F,GAAmB,WACnBxF,GAAS,IAAI,CAAC4J,GAAQrK,OAAW;AAAA,UAC/B,MAAMqK,EAAO;AAAA,UACb,OAAOA,EAAO;AAAA,UACd,SAASA,EAAO;AAAA,UAChB,QAAQA,EAAO;AAAA,UACf,OAAOrK,IAAQ;AAAA,UACf,cAAcqK,EAAO;AAAA,UACrB,UAAUrK,IAAQ;AAAA,UAClB,QAAQqK,EAAO;AAAA,QAAA,EACf;AAAA,MAAA;AAAA,IAER;AACA,IAAAZ,GAAoB,UAAU4I;AAE9B,UAAME,KAA0B,CAACC,GAAoBC,MAAkB;AACrE,UAAIrM,EAAgB;AAEpB,YAAMsM,IAAmBL,GAAA;AACzB,MAAAnM,EAAqB;AAAA,QACnB,GAAGwM;AAAA,QACH,SAASA,GAAkB,SAAS;AAAA,UAAI,CAACrI,MACvCA,EAAO,SAASmI,IAAa,EAAE,GAAGnI,GAAQ,OAAAoI,MAAUpI;AAAA,QAAA;AAAA,QAEtD,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAEA,IAAAM,EAAU,MAAM;AAEd,UADItK,GAAc,eAAe,SAAS,QAAkB,EAAI,GAC5D+F,EAAgB;AACpB,YAAMuM,IAAcvJ,GAAqB;AACzC,UACE,KAAK,UAAUuJ,GAAa,WAAW,CAAA,CAAE,MACzC,KAAK,UAAUtS,GAAc,iBAAiB,CAAA,CAAE,GAChD;AACA,cAAMuS,KAAkBD,GAAa,SAAS,UAAU,KAAK,GACvDE,IAAmBxS,GAAc,eAAe,SAAS;AAM/D,YAAI,EADFuS,KAAkB,CAACC,KAAoB,CAAC1J,GAAsB,UACxC;AACtB,gBAAMuJ,IAAmBjJ,GAAoB,QAAA;AAC7C,UAAAvD,EAAqB;AAAA,YACnB,GAAGwM;AAAA,YACH,SAAS,KAAK;AAAA,cACZ,KAAK,UAAUrS,GAAc,iBAAiB,CAAA,CAAE;AAAA,YAAA;AAAA,YAElD,SAAS;AAAA,UAAA,CACV;AAAA,QACH;AACA,QAAA8I,GAAsB,UAAU;AAAA,MAClC;AAAA,IACF,GAAG,CAAC9I,GAAc,eAAe+F,CAAc,CAAC;AAEhD,UAAM0M,KAA2BhJ;AAAA,MAC/B,CAAC2H,MAAgB;AACf,QAAAtI,GAAsB,UAAU,IAChC9I,GAAc,iBAAiBoR,CAAG;AAAA,MACpC;AAAA,MACA,CAACpR,GAAc,cAAc;AAAA,IAAA,GAGzB0S,KAA0BjJ,EAAY,MAAM;AAChD,MAAAX,GAAsB,UAAU,IAChC9I,GAAc,gBAAA;AAAA,IAChB,GAAG,CAACA,GAAc,aAAa,CAAC;AAEhC,IAAAsK,EAAU,MAAM;AACd,MAAIrK,GAAY,YAAY,SAC1BmG,GAAa,EAAI,GACbnG,EAAW,WAAW,UAAU,SAClCkH,GAAsBlH,EAAW,WAAW,KAAK,GACjDoH,GAAuB,IAAI,KAClBpH,EAAW,WAAW,UAAU,WACzCoH,GAAuBpH,EAAW,WAAW,KAAK,GAClDkH,GAAsB,IAAI,OAG5BA,GAAsB,IAAI,GAC1BE,GAAuB,IAAI;AAAA,IAE/B,GAAG,CAACpH,GAAY,YAAY,OAAOA,GAAY,YAAY,KAAK,CAAC,GAEjEqK,EAAU,MAAM;AACd,MAAA9D;AAAA,QACEmM;AAAA,UACE5J,GAAqB,SAAS,WAAW,CAAA;AAAA,UACzC3I;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ,GAAG,CAACA,CAAO,CAAC,GAEZkK,EAAU,MAAM;AACd,MAAI1E,GAAmB,WACrBoD,GAAe,SAAS,mBAAmBpD,CAAiB;AAAA,IAChE,GAAG,CAACA,CAAiB,CAAC,GAEtB0E,EAAU,MAAM;AACd,MAAA/C;AAAA,QACE8B,GAAe,QAAA;AAAA,MAAQ;AAAA,IAE3B,GAAG,CAACoG,EAAK,MAAM,CAAC,GAEhBnF,EAAU,MAAM;AACd,MAAAzE,EAAqBF,KAAoB,IAAI,GACzCA,GAAkB,WACpBa;AAAA,QACEmM;AAAA,UACEhN,GAAkB,WAAW,CAAA;AAAA,UAC7BsD,GAAW;AAAA,QAAA;AAAA,MACb,GAIFtD,GAAkB,WAClBA,EAAiB,QAAQ,SAAS,KAClC,CAACkD,GAAyB,WAE1B,sBAAsB,MAAM;AAC1B,QAAAK,GAAgB,SAAS,WAAWvD,EAAiB,OAAO;AAAA,MAC9D,CAAC,GACDkD,GAAyB,UAAU,MAEnClD,GAAkB,WAClBkD,GAAyB,WAGvB,KAAK,UAAUlD,EAAiB,OAAO,MACvC,KAAK,UAAUuD,GAAgB,SAAS,aAAa,KAErDA,GAAgB,SAAS,WAAWvD,EAAiB,OAAO;AAAA,IAElE,GAAG,CAACA,CAAgB,CAAC,GAErB2E,EAAU,MAAM;AACd,UAAIxC,GAAa,SAAS;AACxB,cAAM8K,IAAiB,IAAI;AAAA,UAAe,CAACC,MACzChL,GAAkBgL,EAAQ,CAAC,EAAE,YAAY,KAAK;AAAA,QAAA;AAEhD,eAAAD,EAAe,QAAQ9K,GAAa,OAAO,GACpC,MAAM8K,EAAe,WAAA;AAAA,MAC9B;AAAA,IACF,GAAG,CAAA,CAAE,GAELtI,EAAU,MAAM;AACd,UAAI,CAACtC,GAAkB,QAAS;AAChC,YAAM4K,IAAiB,IAAI,eAAe,CAACC,MAAY;AACrD,cAAM,EAAE,OAAAT,GAAO,QAAAU,EAAA,IAAWD,EAAQ,CAAC,EAAE;AACrC,QAAA3K,GAAsB,EAAE,OAAAkK,GAAO,QAAAU,GAAQ;AAAA,MACzC,CAAC;AACD,aAAAF,EAAe,QAAQ5K,GAAkB,OAAO,GACzC,MAAM4K,EAAe,WAAA;AAAA,IAC9B,GAAG,CAAA,CAAE;AAEL,UAAMG,KACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,aAAA1Q;AAAA,QACA,cAAAgN;AAAA,QACA,YAAA7J;AAAA,QACA,gBAAAkK;AAAA,QACA,cAAA5I;AAAA,QACA,mBAAmBN,MAAqB;AAAA,QACxC,sBAAAC;AAAA,QACA,oBAAAO;AAAA,QACA,qBAAAE;AAAA,QACA,QACEnH,GAAY;AAAA,QAId,UAAUD,GAAc;AAAA,QACxB,oBAAAmR;AAAA,QACA,uBAAAhK;AAAA,QACA,wBAAAE;AAAA,QACA,uBAAuBkK;AAAA,QACvB,YAAa,MAAM,QAAQxQ,CAAU,IAAIA,IAAa,CAAA;AAAA,QACtD,sBAAsBM,MAAwB;AAAA,QAC9C,kBAAAC;AAAA,QAOA,mBAAAI;AAAA,QAOA,qBAAAC;AAAA,QAOA,cAAcb,MAAgB;AAAA,QAC9B,WAAAI;AAAA,QACA,sBACGqD,MAAwB;AAAA,QAE3B,wBAAwBuI,IAAoB;AAAA,MAAA;AAAA,IAAA,GAI1CoG,KACJ,gBAAAC,EAAAC,IAAA,EACG,UAAA;AAAA,MAAA1L,MAAchE,KACb,gBAAAsP,EAAC,OAAA,EAAI,WAAU,8GAA6G,IAC1H;AAAA,MACJ,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG3D,GAAA;AAAA,UACJ,WAAU;AAAA,UAET,UAAA5I,KACC,gBAAA0M,EAAC,OAAA,EAAI,WAAU,QACZ,UAAA;AAAA,YAAAJ;AAAA,YACD,gBAAAC,EAAC,OAAA,EAAI,WAAU,mBACZ,UAAA9N,GAAa,cACZA,EAAY,YAAYoJ,EAAgB,IAExC,gBAAA6E,EAAC,OAAA,EAAI,WAAU,0GACZ,UAAA;AAAA,cAAA3R,MAAgB,CAACiE,IAChB,gBAAAuN,EAACK,IAAA,EAAmB,YAAW,SAAQ,IAEvC,gBAAAL,EAACM,IAAA,EAAY,MAAM7E,GAAA,CAAmB;AAAA,cAEvCpN,MAAwB,CAACoE,IACxB,gBAAAuN,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAG;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,QAAO;AAAA,kBACP,YAAW;AAAA,kBACX,SACEjS;AAAA,kBAOF,UAAA;AAAA,oBAAA,gBAAA0R,EAACQ,IAAA,EAAS,WAAU,6BAAA,CAA6B;AAAA,oBAAG;AAAA,oBACnDjF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,GAEL,IACE;AAAA,cACH,CAAC9I,KACAhE,IAAS,IAAI,CAACgS,GAAQ9T,MACpB,gBAAAqT;AAAA,gBAACO;AAAA,gBAAA;AAAA,kBAEC,QAAO;AAAA,kBACP,IAAI9T,GAAiBgU,EAAO,OAAO9T,CAAK;AAAA,kBACxC,SAAS8T,EAAO;AAAA,kBAEf,UAAAvO,GAAa,IAAIuO,EAAO,KAAK,KAAKA,EAAO;AAAA,gBAAA;AAAA,gBALrC,GAAGA,EAAO,KAAK,IAAI9T,CAAK;AAAA,cAAA,CAOhC;AAAA,YAAA,EAAA,CACL,EAAA,CAEJ;AAAA,UAAA,EAAA,CACF,IAEA,gBAAAqT;AAAA,YAAC1T;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA;AAAA,cAChC,YAAY,CAAC,EAAE,OAAA8S,GAAO,QAAAU,QAAa;AACjC,sBAAMY,IACJtB,IAAQ,IAAIA,IAAQnK,GAAmB,OACnC0L,IACJb,IAAS,IAAIA,IAAS7K,GAAmB;AAC3C,uBAAOyL,IAAiB,KAAKC,IAAkB,IAC7C,gBAAAX;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBAEG,mBAAAtE;AAAA,oBAKA,MAAAG;AAAA,oBACA,YAAAD;AAAA,oBACA,WAAAtO;AAAA,oBACA,UAAAC;AAAA,oBACA,aAAAC;AAAA,oBACA,SAAAhB;AAAA,oBACA,OAAOsT;AAAA,oBACP,QAAQC;AAAA,oBACR,cAAAhR;AAAA,oBACA,kBAAkB5C,GAAc,oBAAoB;AAAA,kBACtD;AAAA,gBAAA,IAEA;AAAA,cACN;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,GACF,GAGI8T,KAAeC,GAGnB,CAACC,GAAOC,MACR,gBAAAb,EAAC,OAAA,EAAI,WAAU,iBAAiB,GAAGY,GAAO,KAAAC,GACvC,UAAA;AAAA,MAAAjB;AAAA,MACD,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BAA0B,aAAO,SAAA,CAAS;AAAA,IAAA,EAAA,CAC3D,CACD,GAEKiB,KAAmBH,GAGvB,CAACC,GAAOC,MACR,gBAAAhB,EAAC,SAAI,WAAU,iBAAiB,GAAGe,GAAO,KAAAC,GACxC,4BAAC,OAAA,EAAI,WAAU,0BAA0B,UAAAD,GAAO,UAAS,GAC3D,CACD,GAEKG,KAAuBnH,EAAQ,MAC/B7H,GAAa,oBACRA,EAAY,kBAAkB;AAAA,MACnC,UAAApF;AAAA,MACA,QAAQC,GAAc;AAAA,MACtB,cAAcA,GAAc;AAAA,MAC5B,mBAAAwR;AAAA,MACA,iBAAAC;AAAA,MACA,cAAcxR,GAAc,eAAe;AAAA,MAC3C,SAAAI;AAAA,MACA,eAAeJ,GAAc;AAAA,MAC7B,sBAAA6F;AAAA,MACA,mBAAAD;AAAA,MACA,iBAAiB1F,GAAc;AAAA,MAC/B,WAAAG;AAAA,MACA,iCAAAC;AAAA,MACA,gBAAgBN,GAAc;AAAA,MAC9B,eAAeA,GAAc;AAAA,MAC7B,UAAUA,GAAc;AAAA,MACxB,MAAMS,MAAuBC;AAAA,MAC7B,cAAA6F;AAAA,MACA,sBAAsBrG,GAAc;AAAA,MACpC,mBAAmBA,GAAc;AAAA,MACjC,eAAeA,GAAc;AAAA,MAC7B,aAAaA,GAAc;AAAA,MAC3B,WAAWA,GAAc;AAAA,MACzB,YAAYA,GAAc;AAAA,MAC1B,WAAW,EAAQA,GAAc;AAAA,MACjC,iBAAAsG;AAAA,MACA,kBAAkB,EAAQzG,GAAc;AAAA,MACxC,aAAa,CAAC,CAACG,GAAc;AAAA,MAC7B,gBAAAgG;AAAA,MACA,MAAMjG,GAAY;AAAA,MAClB,QAAQA,GAAY;AAAA,MACpB,cAAcqR;AAAA,MACd,kBAAkBpR,GAAc;AAAA,MAChC,eAAeA,GAAc;AAAA,MAC7B,aAAAK;AAAA,MACA,4BAAAC;AAAA,IAAA,CACD,IAEI,MACN;AAAA,MACDV;AAAA,MACAC,GAAc;AAAA,MACdA,GAAc;AAAA,MACdwR;AAAA,MACAC;AAAA,MACAxR,GAAc;AAAA,MACdI;AAAA,MACAyF;AAAA,MACAD;AAAA,MACA1F;AAAA,MACAG;AAAA,MACAL,GAAc;AAAA,MACdA,GAAc;AAAA,MACdA,GAAc;AAAA,MACdU;AAAA,MACAD;AAAA,MACA8F;AAAA,MACAtG,GAAY;AAAA,MACZA,GAAY;AAAA,MACZqR;AAAA,MACApM;AAAA,MACAnF,GAAc;AAAA,MACdO;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA,CACD;AAED,WAAA8J,EAAU,MAAM;AACd,MAAItG,SAAqCkQ,EAAoB;AAAA,IAC/D,GAAG,CAACA,IAAsBlQ,EAAiB,CAAC,GAG1C,gBAAAmP;AAAA,MAACgB,GAAa;AAAA,MAAb;AAAA,QACC,OAAO;AAAA,UACL,cAAAN;AAAA,UACA,kBAAAI;AAAA,UACA,0BAAAxC;AAAA,UACA,QAAQ1R,GAAc;AAAA,UACtB,eAAeC,GAAc;AAAA,UAC7B,YAAAW;AAAA,UACA,QAAQV,GAAY;AAAA,UACpB,UAAUD,GAAc;AAAA,UACxB,mBAAAuR;AAAA,UACA,iBAAAC;AAAA,UACA,gBAAgBxR,GAAc;AAAA,UAC9B,eAAeA,GAAc;AAAA,UAC7B,YAAAe;AAAA,UACA,gBAAA6O;AAAA,UACA,eAAe5P,GAAc;AAAA,UAC7B,sBAAAqB;AAAA,UACA,kBAAAC;AAAA,UACA,mBAAAI;AAAA,UACA,qBAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,aAAAC;AAAA,UACA,sBAAAC;AAAA,UACA,kBAAAqG;AAAA,UACA,qBAAAC;AAAA,UACA,eAAArG;AAAA,UACA,2BAAAC;AAAA,UACA,uBAAAE;AAAA,UACA,eAAAC;AAAA,UACA,gCAAAwP;AAAA,UACA,WAAAvP;AAAA,UACA,mBAAAE;AAAA,UACA,cAAAxB;AAAA,UACA,kBAAA2B;AAAA,UACA,cAAAE;AAAA,UACA,eAAAC;AAAA,UACA,sBAAAI;AAAA,UACA,iBAAAG;AAAA,UACA,cAAAoD;AAAA,UACA,UAAAnD;AAAA,UACA,cAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,aAAAC;AAAA,UACA,SAAAC;AAAA,UACA,YAAAC;AAAA,UACA,YAAAI;AAAA,UACA,eAAAC;AAAA,UACA,qBAAAC;AAAA,UACA,uBAAuB/D,GAAc;AAAA,UACrC,yBAAAkS;AAAA,UACA,qBAAqBnM;AAAA,UACrB,mBAAA7B;AAAA,UACA,sBAAAC;AAAA,UACA,0BAAAC;AAAA,UACA,6BAAAC;AAAA,UAGA,gBAAAuD;AAAA,UACA,kBAAAtD;AAAA,UACA,sBAAAC;AAAA,UACA,aAAApE;AAAA,UACA,2BAAAqE;AAAA,UACA,aAAAE;AAAA,UACA,kBAAAC;AAAA,UACA,qBAAA4I;AAAA,UACA,sBAAAE;AAAA,UACA,oBAAAlF;AAAA,UACA,yBAAAqF;AAAA,UACA,iBAAAhJ;AAAA,UACA,sBAAAiJ;AAAA,UACA,uBAAAC;AAAA,UACA,wBAAArF;AAAA,UACA,uBAAAE;AAAA,UACA,oBAAAoF;AAAA,UACA,oBAAAG;AAAA,UACA,cAAA5E;AAAA,UACA,gBAAAE;AAAA,UACA,mBAAAe;AAAA,UACA,gBAAAI;AAAA,UACA,gBAAAC;AAAA,UACA,sBAAAC;AAAA,UACA,qBAAAsB;AAAA,UACA,sBAAAM;AAAA,UACA,qBAAAG;AAAA,UACA,mBAAAE;AAAA,UACA,cAAAhC;AAAA,UACA,sBAAAjG;AAAA,UACA,uBAAAC;AAAA,UACA,yBAAA4G;AAAA,QAAA;AAAA,QAGD,UAAA;AAAA,UAAA9K,KACC,gBAAAuS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKrL;AAAA,cACL,WAAW,gEACTF,IAAiBwM,IACb,2BACA,iCACN;AAAA,cAEA,UAAA;AAAA,gBAAA,gBAAAjB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAW,qCACTvL,IAAiBwM,IACb,qBACA,EACN,IAAIlU,GAAc,UAAU,mBAAmB,UAAU;AAAA,oBAExD,UAAA;AAAA,sBAAAA,GAAc,UACb,gBAAA8S;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW,WAAWpL,IAAiBwM,IAA2B,WAAW,QAAQ;AAAA,0BAEpF,UAAAlU,EAAa;AAAA,wBAAA;AAAA,sBAAA,IAEd;AAAA,sBACHgD,KACC,gBAAAiQ,EAAC,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,wBAAA,gBAAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAM;AAAA,4BACN,OAAM;AAAA,4BACN,QAAO;AAAA,4BACP,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,QAAO;AAAA,4BACP,aAAY;AAAA,4BACZ,eAAc;AAAA,4BACd,gBAAe;AAAA,4BACf,WAAU;AAAA,4BACV,eAAW;AAAA,4BAEX,UAAA;AAAA,8BAAA,gBAAAH,EAAC,WAAA,EAAQ,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,IAAA,CAAI;AAAA,8BACtC,gBAAAA,EAAC,QAAA,EAAK,GAAE,wCAAA,CAAwC;AAAA,8BAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,wCAAA,CAAwC;AAAA,8BAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,0CAAA,CAA0C;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEpD,gBAAAA;AAAA,0BAACqB;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,SAAQ;AAAA,4BACR,YAAW;AAAA,4BAET,WAAApR,MAAcvC,EAAK,QAAQ,eAAA;AAAA,0BAAe;AAAA,wBAAA;AAAA,wBAE9C,gBAAAsS;AAAA,0BAACqB;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,SAAQ;AAAA,4BACR,YAAW;AAAA,4BACZ,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED,EAAA,CACF,IACEnU,GAAc,aAChB,gBAAA8S,EAAC,SAAI,WAAU,oDACZ,UAAA9S,EAAa,WAAA,CAChB,IACE;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEN,gBAAAiT;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAW,yCACTvL,IAAiBwM,IACb,WACAlU,GAAc,UACZ,aACA,QACR,IAAI0H,IAAiB0M,KAA4B,aAAa,oBAAoB,IAChFpU,GAAc,cAAc,UAAU,EACxC;AAAA,oBAEC,UAAA;AAAA,sBAAAgD,MAAmBhD,GAAc,aAChC,gBAAA8S,EAAC,OAAA,EAAI,WAAU,0CACZ,UAAA9S,EAAa,YAChB,IACE;AAAA,sBACJ,gBAAA8S;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW,yCACTpL,IAAiB0M,MAEb1M,IAAiBwM,IADjB,WAGE,EACR;AAAA,0BAEC,UAAAF;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAEFhU,GAAc,cACb,gBAAA8S;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW,iCAAiCpL,IAAiB0M,KAA4B,WAAW,EAAE;AAAA,0BAErG,UAAApU,EAAa;AAAA,wBAAA;AAAA,sBAAA,IAEd;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACN;AAAA,YAAA;AAAA,UAAA,IAEA;AAAA,UACHA,GAAc,cACb,gBAAA8S,EAAC,OAAA,EAAI,WAAU,0CAAyC,IACtD;AAAA,UACHnS,OAAkBoF,MAAeE,MAChC,gBAAA6M,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,YAAAhN,MAAajB,GAAa,iBACvBA,EAAY,eAAe;AAAA,cACzB,MAAMjF,GAAY;AAAA,cAClB,cAAcqR;AAAA,cACd,QAAQrR,GAAY;AAAA,cACpB,cAAAsG;AAAA,cACA,MAAA7F;AAAA,cACA,UAAUqF;AAAA,YAAA,CACX,IACD;AAAA,YACHE,MACDE,MACAlG,GAAY,YAAY,UAAU,KAChC,gBAAA+S,EAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C,IACxD;AAAA,YACH/M,KACC,gBAAAkN,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,eAAA3N,MAAaxF,GAAc,kBAC3BkF,GAAa,uBACbA,EAAY,oBAAoB;AAAA,gBAC9B,SAASlF,GAAc;AAAA,gBACvB,gBAAgByS;AAAA,gBAChB,eAAeC;AAAA,gBACf,eAAe1S,GAAc;AAAA,gBAC7B,UAAUA,GAAc;AAAA,gBACxB,cAAAuG;AAAA,gBACA,eAAevG,GAAc;AAAA,gBAC7B,WAAAK;AAAA,gBACA,iCAAAC;AAAA,gBACA,WAAW;AAAA,gBACX,aAAaN,GAAc;AAAA,gBAC3B,SAASA,GAAc;AAAA,gBACvB,MAAMS,MAAuBC;AAAA,gBAC7B,aAAAH;AAAA,gBACA,4BAAAC;AAAA,gBACA,UAAUuF;AAAA,cAAA,CACX;AAAA,cACFb,GAAa,uBACZA,EAAY,oBAAoB;AAAA,gBAC9B,eAAelF,GAAc;AAAA,gBAC7B,SAASqR;AAAA,gBACT,WAAAhR;AAAA,gBACA,iCAAAC;AAAA,gBACA,qBAAqB+F;AAAA,gBACrB,0BAA0B,MAAMC,GAAmB,IAAI;AAAA,gBACvD,QAAQQ;AAAA,gBACR,UAAU9G,GAAc;AAAA,gBACxB,cAAAuG;AAAA,gBACA,eAAevG,GAAc;AAAA,gBAC7B,MAAMS,MAAuBC;AAAA,gBAC7B,aAAaV,GAAc;AAAA,gBAC3B,SAASA,GAAc;AAAA,gBACvB,aAAAO;AAAA,gBACA,4BAAAC;AAAA,gBACA,UAAUuF;AAAA,cAAA,CACX;AAAA,YAAA,EAAA,CACL,IACE;AAAA,UAAA,EAAA,CACN,GACF,IACE;AAAA,UACHnC,MAAqB,OAAO,KAAKA,EAAiB,EAAE,SACnD,gBAAAoP,EAACuB,IAAA,EAAa,GAAG3Q,GAAA,CAAmB,IAClC;AAAA,UACH,CAAChD,MAAcsC,KACd,gBAAAiQ,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,WAAU;AAAA,gBACV,eAAW;AAAA,gBAEX,UAAA;AAAA,kBAAA,gBAAAH,EAAC,WAAA,EAAQ,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,IAAA,CAAI;AAAA,kBACtC,gBAAAA,EAAC,QAAA,EAAK,GAAE,wCAAA,CAAwC;AAAA,kBAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,wCAAA,CAAwC;AAAA,kBAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,0CAAA,CAA0C;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEpD,gBAAAA,EAACqB,IAAA,EAAW,MAAK,SAAQ,SAAQ,YAAW,YAAW,SACnD,WAAApR,MAAcvC,EAAK,QAAQ,eAAA,GAC/B;AAAA,YACA,gBAAAsS,EAACqB,MAAW,MAAK,SAAQ,SAAQ,WAAU,YAAW,YAAW,UAAA,gBAAA,CAEjE;AAAA,UAAA,EAAA,CACF,IACE,CAACzT,MAAcV,GAAc,aAC/B,gBAAA8S,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAA9S,EAAa,WAAA,CAChB,IACE;AAAA,UACJ,gBAAA8S;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKhL;AAAA,cACL,WAAW,UAAUxF,KAAmB,WAAWP,EAAgB;AAAA,cACnE,OAAO;AAAA,gBACL,GAAIO,KACA;AAAA,kBACE,QACE9B,GAAM,SAAS,IACX,IAAIA,GAAM,SAAS,KAAK0E,KAAgB,CAAC,OACzC;AAAA,gBAAA,IAER,EAAE,QAAQ+I,GAAA;AAAA,gBACd,GAAGxK;AAAA,cAAA;AAAA,cAGJ,eACCuP,KAEA,gBAAAC;AAAA,gBAACqB;AAAA,gBAAA;AAAA,kBACC,SAAA1E;AAAA,kBACA,WAAWiB;AAAA,kBACX,aAAaJ;AAAA,kBACb,cAAcO;AAAA,kBACd,oBAAoBuD;AAAA,kBAEnB,UAAA;AAAA,oBAAAvB;AAAA,oBACA1L,IACGkN;AAAA,sBACE,gBAAA1B;AAAA,wBAAC2B;AAAA,wBAAA;AAAA,0BACC,aAAa;AAAA,0BACb,eAAAvE;AAAA,0BAEA,UAAA,gBAAA4C;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACE,GAAG3D,GAAA;AAAA,8BACJ,WAAU;AAAA,8BAEV,UAAA,gBAAA8D;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACE,GAAG7D,GAAA;AAAA,kCACJ,WAAU;AAAA,kCAET,UAAA;AAAA,oCAAA,KAAKE,GAAWhI,CAAU;AAAA,oCAC3B,gBAAAwL;AAAA,sCAAC4B;AAAA,sCAAA;AAAA,wCAKC,KAAKpN;AAAA,wCACL,OAAOiI,GAAM;AAAA,0CACX,CAACqB,MACCA,EAAK,OACJtJ,EAAW,SACT;AAAA,wCAAA;AAAA,sCACP;AAAA,sCATGA,EAAW,SACT;AAAA,oCAAA;AAAA,kCASP;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,sBAEF,SAAS,eAAe,uBAAuB,KAC7C,SAAS;AAAA,oBAAA,IAEb;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACN;AAAA,UAAA;AAAA,UAGHhF,MAAoB0C,GAAa,mBAC9BA,EAAY,iBAAiB1C,EAAgB,IAC7C;AAAA,UAEH0C,GAAa,yBACZA,EAAY,sBAAsB;AAAA,YAChC,WAAW,CAAC,CAACmD;AAAA,YACb,YAAYqF;AAAA,YACZ,SAASD;AAAA,YACT,sBAAsBpF,GAAuB;AAAA,YAC7C,mBAAmBA,GAAuB;AAAA,YAC1C,mBAAmBA,GAAuB;AAAA,YAC1C,gBAAgBA,GAAuB;AAAA,YACvC,cAAcA,GAAuB;AAAA,YACrC,aAAa;AAAA,UAAA,CACd;AAAA,UAEH,gBAAA2K;AAAA,YAAC6B;AAAA,YAAA;AAAA,cACC,QAAQpM;AAAA,cACR,SAASqF;AAAA,YAAA;AAAA,UAAA;AAAA,UAGX,gBAAAkF;AAAA,YAAC8B;AAAA,YAAA;AAAA,cACC,mBAAAhI;AAAA,cACA,kBAAAG;AAAA,cACA,sBAAAE;AAAA,cACA,uBAAArI;AAAA,cACA,YAAY+F;AAAA,cACZ,WAAWsB;AAAA,cACX,gBAAgBrB;AAAA,YAAA;AAAA,UAAA;AAAA,QAClB;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../src/components/data-display/infinite-table/index.tsx"],"sourcesContent":["import { useCheckbox } from \"../../../hooks/useCheckbox\";\nimport { useTableConfig } from \"../../../providers/design-system-provider/hooks\";\nimport {\n isModifiedGlobalView,\n mergeViewColumnsWithTableColumns,\n} from \"../../../utils/table\";\nimport Button from \"../../button/Button\";\nimport { FloatingBar } from \"../../floating-bar/FloatingBar\";\nimport { NoDataFound, NoDataFoundWidgets } from \"../empty-state\";\nimport { Typography } from \"../typography/Typography\";\nimport {\n DndContext,\n DragOverlay,\n type DragEndEvent,\n type DragStartEvent,\n type DropAnimation,\n MouseSensor,\n TouchSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AutoSizer as _AutoSizer } from \"react-virtualized-auto-sizer\";\nimport { createPortal } from \"react-dom\";\nimport type { Row as ReactTableRow } from \"react-table\";\nimport { useResizeColumns, useTable } from \"react-table\";\n\nimport { Body } from \"./body\";\nimport { validateCellValue } from \"./validateCell\";\nimport { Row } from \"./body/rows/row\";\nimport { TableContext } from \"./context\";\nimport { CellContextMenuPortal } from \"./CellContextMenuPortal\";\nimport { CurrencyDropdownPortal } from \"./CurrencyDropdownPortal\";\nimport { Head } from \"./head\";\nimport { PendingEditsFloatingBar } from \"./PendingEditsFloatingBar\";\nimport type {\n ICellContextMenuState,\n ICurrencyDropdownConfig,\n IColumn,\n IMasterDataModalConfig,\n ITableProps,\n ITableView,\n PendingEditsMap,\n IPendingEdit,\n} from \"./types\";\nimport { Add2Icon } from \"../../icon\";\nimport {\n TOOLBAR_FIRST_BREAKPOINT,\n TOOLBAR_SECOND_BREAKPOINT,\n DEFAULT_PAGE_SIZE,\n DEFAULT_COLUMN_MIN_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n DEFAULT_COLUMN_MAX_WIDTH,\n DND_ACTIVATION_DISTANCE,\n DROP_ANIMATION_EASING,\n DROP_ANIMATION_DURATION,\n SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK,\n SCROLL_TO_CELL_LEFT_OFFSET,\n ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH,\n ROW_OPTIONS_COLUMN_WIDTH,\n OS_VIEWPORT_SELECTOR,\n DATA_ROW_ID_ATTR,\n DATA_COLUMN_KEY_ATTR,\n} from \"./constants\";\nimport { getRowSlotHeight, useRowHeight } from \"./useRowHeight\";\n\nconst AutoSizer = _AutoSizer as unknown as React.ComponentType<{\n renderProp: (size: { width: number; height: number }) => React.ReactNode;\n style?: React.CSSProperties;\n}>;\n\nconst CREATE_COLUMN_LABEL = \"Create Column\";\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-_]/g, \"\");\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = {\n search: \"\",\n handleSearch: () => null,\n allowAStarSearch: false,\n },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = {\n onSort: () => null,\n columnSort: { field: \"\", order: \"\" },\n onRemoveSort: () => null,\n },\n headerConfig = {\n showExportButton: null,\n showFilters: true,\n showSorts: true,\n showSearch: true,\n showTableView: true,\n showTableViewAsModal: false,\n content: null,\n postContent: null,\n preContent: null,\n isLoading: false,\n showDivider: false,\n },\n hoverConfig = null,\n columns,\n modelName,\n enableMasterDataEnumSuggestions = false,\n agreementId,\n enumSuggestionsExtraParams,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\n showSubHeader = true,\n tableActions,\n rowOptions,\n hideRowOptionWidth,\n checkboxUtilities,\n isLoading = false,\n onScroll,\n onScrolling,\n isColumnConfigurable,\n onAddColumnClick,\n emptyMessage,\n noDataWidget,\n buttons,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n originalsOnly,\n disableOptionsForRowIndex,\n tableHeightClass = \"h-[calc(100vh-220px)]\",\n getFullRowDataOnClick,\n selectedRowId = null,\n onRowEdit,\n onBulkRowEdit,\n inlineEditColumns,\n isResizable = true,\n paginationConfig,\n dndSortableUtils,\n multipleContexts,\n withSortable,\n withDraggable,\n enableRootDrag,\n pageSize = DEFAULT_PAGE_SIZE,\n onCascadingRowExpand,\n totalItems,\n showRecordCount = false,\n getInnerRowData,\n maxLevel,\n expandedRows = {},\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n isOverlayLoading,\n style = {},\n floatingBarConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n setHeaderOnParent,\n optimizeTable = false,\n multiSelectConfig,\n cellContextMenuConfig,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions,\n showDataTypeIcon = false,\n rowAdditionalActions,\n rowAdditionalActionsWidth,\n setVisibleHeaders,\n cellEditing = null,\n cellEditingValue = null,\n allowInlineEdit = false,\n onFieldOperationFlow,\n fieldOperationLoading = null,\n onTableActionsReady,\n onPendingEditsChange,\n onCancelPendingEdits,\n }: ITableProps) => {\n const tableConfig = useTableConfig();\n\n // Row slot height tracks the `h-row` viewport clamp so the paginated\n // container sizes to the rows the virtualized body actually renders.\n const rowSlotHeight = getRowSlotHeight(useRowHeight());\n\n const isSearch = Boolean(searchConfig?.search);\n\n const isFilters = filterConfig?.columnFilters?.length > 0;\n const isAnyFilters = isSearch || isFilters;\n\n const isCheckbox = Boolean(checkboxUtilities);\n\n const defaultTableView =\n tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] =\n useState<ITableView | null>(defaultTableView || null);\n const isGlobalViewModified = isModifiedGlobalView(\n selectedTableView,\n tableConfig?.getUserId?.()\n );\n const [showFilters, setShowFilters] = useState(false);\n const [showSorts, setShowSorts] = useState(false);\n const [newFilterColumn, setNewFilterColumn] = useState<unknown>(null);\n const [tableHeaders, setTableHeaders] = useState<IColumn[]>(columns);\n const isEmpty = (data.length === 0 || !tableHeaders.length) && !isLoading;\n const [showHeaderOptions, setShowHeaderOptions] = useState<string | null>(\n null\n );\n const [showDataFilterModal, setShowDataFilterModal] =\n useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(\n null\n );\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<\n string | null\n >(null);\n const [sortableListByContext, setSortableListByContext] = useState<\n Record<string, unknown>\n >({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(\n null\n );\n const [dndLoading, setDndLoading] = useState<boolean>(false);\n const [headerDivWidth, setHeaderDivWidth] = useState(0);\n const headerDivRef = useRef<HTMLDivElement>(null);\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const [tableContainerSize, setTableContainerSize] = useState({\n width: 0,\n height: 0,\n });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{\n rowId: string;\n columnKey: string;\n } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] =\n useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{\n value: unknown;\n reference: unknown;\n } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] =\n useState<ICurrencyDropdownConfig | null>(null);\n const [cellContextMenu, setCellContextMenu] =\n useState<ICellContextMenuState | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<\n Record<string, string>\n >({});\n const hasAppliedInitialFilters = useRef(false);\n const userClearedFiltersRef = useRef(false);\n\n const selectedTableViewRef = useRef(selectedTableView);\n selectedTableViewRef.current = selectedTableView;\n const tableConfigRef = useRef(tableConfig);\n tableConfigRef.current = tableConfig;\n const columnsRef = useRef(columns);\n columnsRef.current = columns;\n const filterConfigRef = useRef(filterConfig);\n filterConfigRef.current = filterConfig;\n const headerGroupsRef = useRef<unknown[] | null>(null);\n const resolveTableViewRef = useRef<() => ITableView>(\n () => ({}) as ITableView\n );\n const computeListRef = useRef<() => unknown>(() => ({}));\n\n const [pendingEdits, setPendingEdits] = useState<PendingEditsMap>({});\n\n const addPendingEdit = useCallback(\n (rowId: string, columnKey: string, edit: IPendingEdit) => {\n setPendingEdits((prev) => {\n const existingEdit = prev[rowId]?.[columnKey];\n let resolvedValidationError: string | null | undefined =\n edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n resolvedValidationError = !result.isValid\n ? result.error || \"Invalid\"\n : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return {\n ...prev,\n [rowId]: {\n ...(prev[rowId] || {}),\n [columnKey]: {\n ...edit,\n validationError: resolvedValidationError ?? null,\n },\n },\n };\n });\n },\n [tableHeaders]\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some(\n (rowEdits) => Object.keys(rowEdits).length > 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady)\n onTableActionsReady({\n addPendingEdit: addPendingEdit as (\n rowId: string,\n columnKey: string,\n edit: { value: unknown; originalValue?: unknown; meta?: unknown }\n ) => void,\n hasPendingEdits,\n });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback(\n (rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId];\n void _removed;\n if (Object.keys(rest).length === 0) delete newEdits[rowId];\n else newEdits[rowId] = rest;\n }\n return newEdits;\n });\n },\n []\n );\n\n const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined =>\n pendingEdits[rowId]?.[columnKey],\n [pendingEdits]\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean =>\n Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits]\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0)\n onCancelPendingEdits(pendingEdits);\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [fieldOperationLoading, onCancelPendingEdits, pendingEdits]);\n\n const scrollToCell = useCallback(\n (rowId: string, columnKey: string, rowIndex: number) => {\n setTimeout(() => {\n tableConfig?.dispatchEvent?.(\"SCROLL_TO_TABLE_ROW\", { rowIndex });\n const colIndex = tableHeaders.findIndex(\n (col) => col.key === columnKey\n );\n setTimeout(() => {\n const cellElement = document.querySelector(\n `[${DATA_ROW_ID_ATTR}=\"${rowId}\"] [${DATA_COLUMN_KEY_ATTR}=\"${columnKey}\"]`\n );\n if (cellElement) {\n cellElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n } else if (colIndex > 0) {\n const scrollContainer =\n document.querySelector(OS_VIEWPORT_SELECTOR);\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky)\n scrollLeft +=\n col?.width || SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK;\n }\n scrollLeft = Math.max(\n 0,\n scrollLeft - SCROLL_TO_CELL_LEFT_OFFSET\n );\n scrollContainer.scrollTo({\n left: scrollLeft,\n behavior: \"smooth\",\n });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig]\n );\n\n const validateAllPendingEdits = useCallback(\n (\n editsToValidate: PendingEditsMap\n ): {\n hasErrors: boolean;\n updatedEdits: PendingEditsMap;\n firstError: { rowId: string; columnKey: string } | null;\n errorTypes: Set<string>;\n } => {\n let hasErrors = false;\n let firstError: { rowId: string; columnKey: string } | null = null;\n const updatedEdits: PendingEditsMap = {};\n const errorTypes = new Set<string>();\n\n Object.entries(editsToValidate).forEach(([rowId, rowEdits]) => {\n updatedEdits[rowId] = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n if (!result.isValid) {\n hasErrors = true;\n if (result.error) errorTypes.add(result.error);\n if (!firstError) firstError = { rowId, columnKey };\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: result.error,\n };\n } else {\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: null,\n };\n }\n });\n });\n\n return { hasErrors, updatedEdits, firstError, errorTypes };\n },\n [tableHeaders]\n );\n\n const getValidationToastMessage = useCallback((errorTypes: Set<string>) => {\n const hasRequired = errorTypes.has(\"Field required\");\n const hasFormat = errorTypes.size > (hasRequired ? 1 : 0);\n if (hasRequired && hasFormat)\n return \"Missing required field(s) and invalid format detected. Please review highlighted field(s).\";\n if (hasRequired)\n return \"Missing required field(s). Please review highlighted field(s).\";\n return \"Invalid field value(s). Please review highlighted field(s).\";\n }, []);\n\n const saveAllPendingEdits = useCallback(() => {\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const editedRows: Array<Record<string, unknown>> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<\n string,\n { value: unknown; meta?: unknown }\n > = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n editedRows.push({ ...updatedRow, __editedFields: editedFields });\n }\n });\n\n if (editedRows.length > 0) {\n if (onBulkRowEdit) onBulkRowEdit(editedRows);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: editedRows,\n });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits)\n onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [fieldOperationLoading, onCancelPendingEdits, pendingEdits]\n );\n\n const saveRowPendingEdits = useCallback(\n (rowId: string) => {\n const rowEdits = pendingEdits[rowId];\n if (!rowEdits || Object.keys(rowEdits).length === 0) return;\n\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({\n ...prev,\n [rowId]: updatedEdits[rowId],\n }));\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> =\n {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n\n const editedRowData = { ...updatedRow, __editedFields: editedFields };\n\n if (onBulkRowEdit) onBulkRowEdit([editedRowData]);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: [editedRowData],\n });\n\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce(\n (total, rowEdits) => total + Object.keys(rowEdits).length,\n 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: IPendingEdit[\"meta\"];\n originalMeta?: IPendingEdit[\"originalMeta\"];\n rowIndex: number;\n }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({\n rowId,\n columnKey,\n fieldName: column?.Header || column?.display_name || columnKey,\n value: edit.value,\n originalValue: edit.originalValue,\n meta: edit.meta,\n originalMeta: edit.originalMeta,\n rowIndex,\n });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<\n string,\n { rowId: string; rowIndex: number; editCount: number }\n >();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n rowsMap.set(rowId, {\n rowId,\n rowIndex,\n editCount: Object.keys(rowEdits).length,\n });\n });\n return Array.from(rowsMap.values()).sort(\n (a, b) => a.rowIndex - b.rowIndex\n );\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback(\n (config: IMasterDataModalConfig) => setMasterDataModalConfig(config),\n []\n );\n const closeMasterDataModal = useCallback(\n () => setMasterDataModalConfig(null),\n []\n );\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected)\n masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal]\n );\n\n const clearSelectedMasterData = useCallback(\n () => setSelectedMasterData(null),\n []\n );\n\n const openCurrencyDropdown = useCallback(\n (config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config),\n []\n );\n const closeCurrencyDropdown = useCallback(\n () => setCurrencyDropdownConfig(null),\n []\n );\n\n const openCellContextMenu = useCallback(\n (state: ICellContextMenuState) => setCellContextMenu(state),\n []\n );\n const closeCellContextMenu = useCallback(() => setCellContextMenu(null), []);\n\n const setCurrencyForCell = useCallback(\n (cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\n },\n []\n );\n\n const getCurrencyForCell = useCallback(\n (cellKey: string): string | undefined => selectedCurrenciesMap[cellKey],\n [selectedCurrenciesMap]\n );\n\n const fallbackHeight = useMemo(() => {\n const pxMatch = tableHeightClass.match(/h-\\[(\\d+px)\\]/);\n if (pxMatch) return pxMatch[1];\n const calcMatch = tableHeightClass.match(/h-\\[(calc\\(.+\\))\\]/);\n if (calcMatch)\n return calcMatch[1].replace(/([+-])/g, \" $1 \").replace(/\\s+/g, \" \");\n return undefined;\n }, [tableHeightClass]);\n\n const emptySwitchProps = {\n isEmpty,\n isFilters: isAnyFilters,\n isColumnConfigurable,\n handleOnClick: onAddColumnClick,\n emptyMessage,\n buttons,\n noDataWidget,\n };\n const translatedCreateColumnLabel =\n tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters\n ? \"No Results Found\"\n : emptyMessage || \"No Data Found\";\n const resolvedEmptyText =\n typeof defaultEmptyText === \"string\"\n ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText)\n : defaultEmptyText;\n\n const loaderData = { __isLoading: true };\n const cellLoaders = new Array(1).fill(loaderData);\n const tableLoaders = new Array(pageSize).fill(loaderData);\n\n const visibleColumns = useMemo(\n () => tableHeaders.filter((header) => Boolean(header?.visible)),\n [tableHeaders]\n );\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [\n ...data,\n ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : []),\n ],\n defaultColumn: {\n minWidth: DEFAULT_COLUMN_MIN_WIDTH,\n width: DEFAULT_COLUMN_WIDTH,\n maxWidth: DEFAULT_COLUMN_MAX_WIDTH,\n },\n },\n useResizeColumns\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } =\n table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(\n headerGroups[0]?.headers?.map(\n (header) => (header as unknown as Record<string, unknown>)?.Header\n )\n );\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{\n headers?: Array<Record<string, unknown>>;\n }> | null;\n setVisibleHeaders?.(\n groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []\n );\n }\n }, [headerKeys, setVisibleHeaders]);\n\n const { checkboxConfig } = useCheckbox({\n rows: rows as never,\n checkedIds: checkboxUtilities?.checkedIds as string[],\n isCheckAllDisabled: checkboxUtilities?.isCheckAllDisabled,\n selectionDisabledRowIds: checkboxUtilities?.selectionDisabledRowIds,\n rawData,\n onAllChecked: setIsAllChecked,\n setCheckedIds: checkboxUtilities?.setCheckedIds as (\n ids: string[]\n ) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as {\n checkedIds: string[];\n tooltip: string;\n highlight: string;\n },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n })\n );\n\n const dropAnimation: DropAnimation = {\n easing: DROP_ANIMATION_EASING,\n duration: DROP_ANIMATION_DURATION,\n };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce(\n (acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter(\n (e) => (e.original as Record<string, unknown>)?.type === contextKey\n );\n return acc;\n },\n {}\n );\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(\n rows.find(\n (item) =>\n (item.original as Record<string, unknown>)?.id === active?.id\n ) ?? null\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(\n active,\n over,\n sortableListByContext,\n (newState: Record<string, unknown>) => {\n setSortableListByContext(newState as Record<string, unknown>);\n setDndLoading(true);\n dndSortableUtils.onDragSuccess?.({\n draggedId: active.id as string,\n droppedId: over.id as string,\n draggedType: (active.data.current as Record<string, unknown>)\n ?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\n });\n }\n );\n }\n setActiveItem(null);\n };\n\n const handleDragCancel = () => setActiveItem(null);\n\n const toggleHeaderOption = (key: string) => {\n if (!sortConfig?.onSort && !filterConfig?.onFilter) return;\n if (showHeaderOptions === key) setShowHeaderOptions(null);\n else setShowHeaderOptions(key);\n };\n\n const toggleDataFilterModal = (col: unknown) => {\n setDataFilterColumn(col);\n setShowDataFilterModal(!showDataFilterModal);\n setShowHeaderOptions(null);\n };\n\n const handleRemoveSort = useCallback(() => {\n if (sortConfig?.onRemoveSort) sortConfig.onRemoveSort();\n else if (sortConfig?.onSort) sortConfig.onSort(\"\", \"\");\n }, [sortConfig]);\n\n const toggleShowFilters = useCallback((col: unknown = null) => {\n setNewFilterColumn(col);\n setShowFilters((prev) => (col ? true : !prev));\n }, []);\n const toggleShowSorts = useCallback(\n () => setShowSorts((prev) => !prev),\n []\n );\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (\n headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>\n )?.filter((header) => header?.visible !== false);\n for (let i = 0; i < reverseHeaders.length; i++) {\n if (reverseHeaders[i].sticky) return i - 1;\n }\n return reverseHeaders.length - 1;\n };\n\n const getSumOfNextVisibleColumnWidth = useCallback(\n (currentIndex: number) => {\n let sum = 0;\n for (let i = currentIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].visible !== false)\n sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions)\n sum +=\n rowAdditionalActionsWidth || ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH;\n if (rowOptions)\n sum += hideRowOptionWidth ? 0 : ROW_OPTIONS_COLUMN_WIDTH;\n return sum;\n },\n [\n visibleColumns,\n rowAdditionalActionsWidth,\n hideRowOptionWidth,\n rowAdditionalActions,\n rowOptions,\n ]\n );\n\n const resolveTableView = (): ITableView => {\n const userId = tableConfig?.getUserId?.();\n return {\n ...(selectedTableView || {}),\n name: selectedTableView?.name || \"Untitled View\",\n created_by: selectedTableView?.created_by || userId,\n filters: selectedTableView?.filters || filterConfig?.columnFilters,\n id: selectedTableView?.id || \"untitled-view\",\n table_key: selectedTableView?.table_key || tableKey,\n columns:\n selectedTableView?.columns ||\n columns?.map((column, index) => ({\n name: column.Header,\n width: column.width,\n visible: column.visible,\n sticky: column.sticky,\n order: index + 1,\n display_name: column.Header,\n sequence: index + 1,\n Header: column.Header,\n })),\n };\n };\n resolveTableViewRef.current = resolveTableView;\n\n const handleUpdateColumnWidth = (columnName: string, width: number) => {\n const updatedTableView = resolveTableView();\n setSelectedTableView({\n ...updatedTableView,\n columns: updatedTableView?.columns?.map((column) =>\n column.name === columnName ? { ...column, width } : column\n ),\n unsaved: true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n const currentView = selectedTableViewRef.current;\n if (\n JSON.stringify(currentView?.filters || []) !==\n JSON.stringify(filterConfig?.columnFilters || [])\n ) {\n const hasViewFilters = (currentView?.filters?.length ?? 0) > 0;\n const hasConfigFilters = filterConfig?.columnFilters?.length > 0;\n // Skip sync only during the initial load window where the view already has filters\n // but they haven't propagated to columnFilters yet. If the user explicitly cleared\n // filters from ActiveFilters (X button or Clear), we must propagate the empty state.\n const isClearingFilters =\n hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({\n ...updatedTableView,\n filters: JSON.parse(\n JSON.stringify(filterConfig?.columnFilters || [])\n ),\n unsaved: true,\n });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters]);\n\n const handleActiveRemoveFilter = useCallback(\n (key: string) => {\n userClearedFiltersRef.current = true;\n filterConfig?.onRemoveFilter?.(key);\n },\n [filterConfig?.onRemoveFilter]\n );\n\n const handleActiveClearFilter = useCallback(() => {\n userClearedFiltersRef.current = true;\n filterConfig?.onClearFilter?.();\n }, [filterConfig?.onClearFilter]);\n\n useEffect(() => {\n if (sortConfig?.columnSort?.field) {\n setShowSorts(true);\n if (sortConfig.columnSort.order === \"asc\") {\n setIsShowSortArrowAsc(sortConfig.columnSort.field);\n setIsShowSortArrowDesc(null);\n } else if (sortConfig.columnSort.order === \"desc\") {\n setIsShowSortArrowDesc(sortConfig.columnSort.field);\n setIsShowSortArrowAsc(null);\n }\n } else {\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(null);\n }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n selectedTableViewRef.current?.columns || [],\n columns\n )\n );\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved && !isGlobalViewModified)\n tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => {\n setSortableListByContext(\n computeListRef.current() as Record<string, unknown>\n );\n }, [rows.length]);\n\n useEffect(() => {\n if (isGlobalViewModified) return;\n\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n defaultTableView?.columns || [],\n columnsRef.current\n )\n );\n }\n if (\n defaultTableView?.filters &&\n defaultTableView.filters.length > 0 &&\n !hasAppliedInitialFilters.current\n ) {\n requestAnimationFrame(() => {\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n });\n hasAppliedInitialFilters.current = true;\n } else if (\n defaultTableView?.filters &&\n hasAppliedInitialFilters.current\n ) {\n const filtersAreDifferent =\n JSON.stringify(defaultTableView.filters) !==\n JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent)\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) =>\n setHeaderDivWidth(entries[0].contentRect.width)\n );\n resizeObserver.observe(headerDivRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n useEffect(() => {\n if (!tableContainerRef.current) return;\n const resizeObserver = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect;\n setTableContainerSize({ width, height });\n });\n resizeObserver.observe(tableContainerRef.current);\n return () => resizeObserver.disconnect();\n }, []);\n\n const tableHeader = (\n <Head\n isResizable={isResizable}\n headerGroups={headerGroups as never}\n isCheckbox={isCheckbox}\n checkboxConfig={checkboxConfig}\n isAllChecked={isAllChecked}\n showHeaderOptions={showHeaderOptions ?? \"\"}\n setShowHeaderOptions={setShowHeaderOptions}\n isShowSortArrowAsc={isShowSortArrowAsc}\n isShowSortArrowDesc={isShowSortArrowDesc}\n onSort={\n sortConfig?.onSort as\n | ((field: string, order?: string) => void)\n | undefined\n }\n onFilter={filterConfig?.onFilter}\n toggleHeaderOption={toggleHeaderOption}\n setIsShowSortArrowAsc={setIsShowSortArrowAsc}\n setIsShowSortArrowDesc={setIsShowSortArrowDesc}\n toggleDataFilterModal={toggleShowFilters}\n rowOptions={(Array.isArray(rowOptions) ? rowOptions : []) as unknown[]}\n isColumnConfigurable={isColumnConfigurable ?? false}\n onAddColumnClick={\n onAddColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onEditColumnClick={\n onEditColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onDeleteColumnClick={\n onDeleteColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n tableActions={tableActions || null}\n isLoading={isLoading}\n rowAdditionalActions={\n (rowAdditionalActions ?? null) as (() => React.ReactNode) | null\n }\n showPendingEditsColumn={pendingEditsCount > 0}\n />\n );\n\n const tableView = (\n <>\n {dndLoading || isOverlayLoading ? (\n <div className=\"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700\" />\n ) : null}\n <div\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800\"\n >\n {isEmpty ? (\n <div className=\"z-10\">\n {tableHeader}\n <div className=\"absolute w-full\">\n {tableConfig?.renderEmpty ? (\n tableConfig.renderEmpty(emptySwitchProps)\n ) : (\n <div className=\"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8\">\n {noDataWidget && !isAnyFilters ? (\n <NoDataFoundWidgets widgetType=\"TABLE\" />\n ) : (\n <NoDataFound text={resolvedEmptyText} />\n )}\n {isColumnConfigurable && !isAnyFilters ? (\n <div className=\"my-4\">\n <Button\n id=\"btn-table-shell-create-column\"\n status=\"primary\"\n appearance=\"ghost\"\n onClick={\n onAddColumnClick as\n | ((\n event: React.MouseEvent<HTMLButtonElement>\n ) => void)\n | undefined\n }\n >\n <Add2Icon className=\"text-white dark:text-white\" />{\" \"}\n {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button\n key={`${button.label}-${index}`}\n status=\"secondary\"\n id={getEmptyButtonId(button.label, index)}\n onClick={button.onClick}\n >\n {tableConfig?.t?.(button.label) ?? button.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n ) : (\n <AutoSizer\n style={{ width: \"100%\", height: \"100%\" }}\n renderProp={({ width, height }) => {\n const effectiveWidth =\n width > 0 ? width : tableContainerSize.width;\n const effectiveHeight =\n height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps:\n getTableBodyProps as unknown as () => Record<\n string,\n unknown\n >,\n rows: rows as never,\n prepareRow: prepareRow as never,\n isLoading,\n onScroll,\n onScrolling,\n columns,\n width: effectiveWidth,\n height: effectiveHeight,\n withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n {tableHeader}\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const tableBodyWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const TableHeaderComponent = useMemo(() => {\n if (tableConfig?.renderTableHeader) {\n return tableConfig.renderTableHeader({\n tableKey,\n search: searchConfig?.search,\n handleSearch: searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterCounts: filterConfig?.columnFilters?.length,\n columns,\n columnFilters: filterConfig?.columnFilters,\n setSelectedTableView,\n selectedTableView,\n enableTableView: headerConfig?.showTableView,\n modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter,\n data: enumSuggestionsData ?? data,\n tableHeaders,\n showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions,\n inlineActions: headerConfig?.inlineActions,\n showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts,\n showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading),\n setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch),\n withContent: !!headerConfig?.content,\n setShowFilters,\n sort: sortConfig?.columnSort,\n onSort: sortConfig?.onSort,\n onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n onExportClick: headerConfig?.onExportClick,\n agreementId,\n enumSuggestionsExtraParams,\n });\n }\n return null;\n }, [\n tableKey,\n searchConfig?.search,\n searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterConfig?.columnFilters,\n columns,\n setSelectedTableView,\n selectedTableView,\n headerConfig,\n modelName,\n filterConfig?.onRemoveFilter,\n filterConfig?.onClearFilter,\n filterConfig?.onFilter,\n data,\n enumSuggestionsData,\n tableHeaders,\n sortConfig?.columnSort,\n sortConfig?.onSort,\n handleRemoveSort,\n tableConfig,\n searchConfig?.allowAStarSearch,\n enableMasterDataEnumSuggestions,\n agreementId,\n enumSuggestionsExtraParams,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper,\n tableBodyWrapper,\n lastNonStickyColumnIndex,\n search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters,\n onRowClick,\n onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter,\n toggleShowFilters,\n toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n rowOptions,\n checkboxConfig,\n onResetFilter: filterConfig?.onResetFilter,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n activeInlineEdit,\n setActiveInlineEdit,\n originalsOnly,\n disableOptionsForRowIndex,\n getFullRowDataOnClick,\n selectedRowId,\n getSumOfNextVisibleColumnWidth,\n onRowEdit,\n inlineEditColumns,\n tableActions,\n dndSortableUtils,\n withSortable,\n withDraggable,\n onCascadingRowExpand,\n getInnerRowData,\n tableHeaders,\n maxLevel,\n expandedRows,\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter,\n handleUpdateColumnWidth,\n multiSelectConfig,\n cellContextMenuConfig,\n openCellContextMenu,\n closeCellContextMenu,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions: setShowHeaderContextOptions as\n | ((value: string | null) => void)\n | undefined,\n headerDivWidth,\n showDataTypeIcon,\n rowAdditionalActions,\n hoverConfig,\n rowAdditionalActionsWidth,\n cellEditing,\n cellEditingValue,\n openMasterDataModal,\n closeMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n allowInlineEdit,\n openCurrencyDropdown,\n closeCurrencyDropdown,\n currencyDropdownConfig,\n selectedCurrenciesMap,\n setCurrencyForCell,\n getCurrencyForCell,\n pendingEdits,\n addPendingEdit,\n removePendingEdit,\n getPendingEdit,\n hasPendingEdit,\n clearAllPendingEdits,\n saveAllPendingEdits,\n clearRowPendingEdits,\n saveRowPendingEdits,\n pendingEditsCount,\n scrollToCell,\n onFieldOperationFlow,\n fieldOperationLoading,\n validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"flex-col items-stretch\"\n : \"flex-row flex-wrap items-center\"\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full flex-wrap\"\n : \"\"\n } ${headerConfig?.content ? \"min-w-0 flex-1\" : \"shrink-0\"}`}\n >\n {headerConfig?.content ? (\n <div\n className={`min-w-0 ${headerDivWidth < TOOLBAR_FIRST_BREAKPOINT ? \"w-full\" : \"flex-1\"}`}\n >\n {headerConfig.content}\n </div>\n ) : null}\n {showRecordCount ? (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography\n size=\"small\"\n variant=\"semibold\"\n appearance=\"title\"\n >\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography\n size=\"small\"\n variant=\"regular\"\n appearance=\"subtitle\"\n >\n total records\n </Typography>\n </div>\n ) : headerConfig?.preContent ? (\n <div className=\"flex min-w-0 shrink-0 justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : headerConfig?.content\n ? \"shrink-0\"\n : \"flex-1\"\n } ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"flex-col\" : \"flex-row flex-wrap\"} ${\n headerConfig?.postContent ? \"gap-2\" : \"\"\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className=\"flex w-full justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < TOOLBAR_SECOND_BREAKPOINT\n ? \"w-full\"\n : headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : \"\"\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div\n className={`flex justify-end items-center ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"w-full\" : \"\"}`}\n >\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? (\n <div className=\"border-b pb-2 w-full dark:bg-black-800\" />\n ) : null}\n {showSubHeader && (showFilters || showSorts) ? (\n <div className=\"flex justify-between items-center pb-4 dark:bg-black-800\">\n <div className=\"flex gap-2 items-center\">\n {showSorts && tableConfig?.renderSortItem\n ? tableConfig.renderSortItem({\n sort: sortConfig?.columnSort,\n onRemoveSort: handleRemoveSort,\n onSort: sortConfig?.onSort,\n tableHeaders,\n data,\n })\n : null}\n {showFilters &&\n showSorts &&\n sortConfig?.columnSort?.field !== \"\" ? (\n <div className=\"h-8 w-[1px] flex-shrink-0 bg-neutral-200\" />\n ) : null}\n {showFilters ? (\n <div className=\"flex gap-2 items-center\">\n {(isFilters || filterConfig?.onResetFilter) &&\n tableConfig?.renderActiveFilters &&\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters,\n onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter,\n onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n modelName,\n enableMasterDataEnumSuggestions,\n noSpacing: true,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n data: enumSuggestionsData ?? data,\n agreementId,\n enumSuggestionsExtraParams,\n })}\n {tableConfig?.renderFilterButtons &&\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter,\n onClose: toggleDataFilterModal,\n modelName,\n enableMasterDataEnumSuggestions,\n defaultFilterColumn: newFilterColumn,\n resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n data: enumSuggestionsData ?? data,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementId,\n enumSuggestionsExtraParams,\n })}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? (\n <FloatingBar {...floatingBarConfig} />\n ) : null}\n {!showHeader && showRecordCount ? (\n <div className=\"flex items-center gap-1.5 mb-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography size=\"small\" variant=\"semibold\" appearance=\"title\">\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography size=\"small\" variant=\"regular\" appearance=\"subtitle\">\n total records\n </Typography>\n </div>\n ) : !showHeader && headerConfig?.preContent ? (\n <div className=\"flex items-center mb-2\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n ref={tableContainerRef}\n className={`w-full ${paginationConfig ? `h-auto` : tableHeightClass} rounded-lg relative border overflow-x-hidden`}\n style={{\n ...(paginationConfig\n ? {\n height:\n data?.length > 0\n ? `${(data?.length + 1) * rowSlotHeight + 4}px`\n : \"350px\",\n }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCorners}\n >\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay\n adjustScale={true}\n dropAnimation={dropAnimation}\n >\n <table\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse\"\n >\n <tbody\n {...getTableBodyProps()}\n className=\"bg-transparent divide-y divide-neutral-200\"\n >\n {void prepareRow(activeItem)}\n <Row\n key={\n (activeItem.original as Record<string, unknown>)\n .id as string\n }\n row={activeItem as never}\n index={rows?.findIndex(\n (item) =>\n item.id ===\n (activeItem.original as Record<string, unknown>)\n .id\n )}\n />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById(\"full-screen-container\") ||\n document.body\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination\n ? tableConfig.renderPagination(paginationConfig)\n : null}\n\n {tableConfig?.renderMasterDataModal &&\n tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig,\n onSelected: handleMasterDataSelected,\n onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName,\n masterDataFormula: masterDataModalConfig?.masterDataFormula,\n masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName,\n masterDataId: masterDataModalConfig?.masterDataName,\n showFilters: true,\n })}\n\n <CurrencyDropdownPortal\n config={currencyDropdownConfig}\n onClose={closeCurrencyDropdown}\n />\n\n <CellContextMenuPortal\n state={cellContextMenu}\n config={cellContextMenuConfig}\n rowOptions={rowOptions}\n asyncRowOptionsFilter={filterConfig?.asyncRowOptionsFilter}\n checkedIds={checkboxConfig?.checkedIds}\n rows={data}\n columns={tableHeaders}\n rowLinkConfig={rowLinkConfig}\n onClose={closeCellContextMenu}\n />\n\n <PendingEditsFloatingBar\n pendingEditsCount={pendingEditsCount}\n pendingEditsList={pendingEditsList}\n rowsWithPendingEdits={rowsWithPendingEdits}\n fieldOperationLoading={fieldOperationLoading}\n onClearAll={clearAllPendingEdits}\n onSaveAll={saveAllPendingEdits}\n onScrollToCell={scrollToCell}\n />\n </TableContext.Provider>\n );\n }\n);\n"],"names":["AutoSizer","_AutoSizer","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementId","enumSuggestionsExtraParams","enumSuggestionsData","data","onRowClick","showHeader","showSubHeader","tableActions","rowOptions","hideRowOptionWidth","checkboxUtilities","isLoading","onScroll","onScrolling","isColumnConfigurable","onAddColumnClick","emptyMessage","noDataWidget","buttons","onEditColumnClick","onDeleteColumnClick","onRowTooltipClick","tooltiptext","cascadingTableConfig","originalsOnly","disableOptionsForRowIndex","tableHeightClass","getFullRowDataOnClick","selectedRowId","onRowEdit","onBulkRowEdit","inlineEditColumns","isResizable","paginationConfig","dndSortableUtils","multipleContexts","withSortable","withDraggable","enableRootDrag","pageSize","DEFAULT_PAGE_SIZE","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","cellContextMenuConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","rowSlotHeight","getRowSlotHeight","useRowHeight","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","isGlobalViewModified","isModifiedGlobalView","showFilters","setShowFilters","showSorts","setShowSorts","newFilterColumn","setNewFilterColumn","tableHeaders","setTableHeaders","isEmpty","showHeaderOptions","setShowHeaderOptions","showDataFilterModal","setShowDataFilterModal","dataFilterColumn","setDataFilterColumn","isAllChecked","setIsAllChecked","isShowSortArrowAsc","setIsShowSortArrowAsc","isShowSortArrowDesc","setIsShowSortArrowDesc","sortableListByContext","setSortableListByContext","activeItem","setActiveItem","dndLoading","setDndLoading","headerDivWidth","setHeaderDivWidth","headerDivRef","useRef","tableContainerRef","tableContainerSize","setTableContainerSize","activeInlineEdit","setActiveInlineEdit","masterDataModalConfig","setMasterDataModalConfig","selectedMasterData","setSelectedMasterData","currencyDropdownConfig","setCurrencyDropdownConfig","cellContextMenu","setCellContextMenu","selectedCurrenciesMap","setSelectedCurrenciesMap","hasAppliedInitialFilters","userClearedFiltersRef","selectedTableViewRef","tableConfigRef","columnsRef","filterConfigRef","headerGroupsRef","resolveTableViewRef","computeListRef","pendingEdits","setPendingEdits","addPendingEdit","useCallback","rowId","columnKey","edit","prev","existingEdit","resolvedValidationError","column","col","result","validateCellValue","hasPendingEdits","rowEdits","useEffect","removePendingEdit","newEdits","_removed","rest","getPendingEdit","hasPendingEdit","clearAllPendingEdits","scrollToCell","rowIndex","colIndex","cellElement","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","scrollContainer","OS_VIEWPORT_SELECTOR","scrollLeft","i","SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK","SCROLL_TO_CELL_LEFT_OFFSET","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","n","k","saveRowPendingEdits","editedRowData","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","openCellContextMenu","state","closeCellContextMenu","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","DEFAULT_COLUMN_MIN_WIDTH","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAX_WIDTH","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","DND_ACTIVATION_DISTANCE","TouchSensor","dropAnimation","DROP_ANIMATION_EASING","DROP_ANIMATION_DURATION","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH","ROW_OPTIONS_COLUMN_WIDTH","resolveTableView","userId","handleUpdateColumnWidth","columnName","width","updatedTableView","currentView","hasViewFilters","hasConfigFilters","handleActiveRemoveFilter","handleActiveClearFilter","mergeViewColumnsWithTableColumns","resizeObserver","entries","height","tableHeader","jsx","Head","tableView","jsxs","Fragment","NoDataFoundWidgets","NoDataFound","Button","Add2Icon","button","effectiveWidth","effectiveHeight","Body","tableWrapper","forwardRef","props","ref","tableBodyWrapper","TableHeaderComponent","TableContext","TOOLBAR_FIRST_BREAKPOINT","Typography","TOOLBAR_SECOND_BREAKPOINT","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","CellContextMenuPortal","PendingEditsFloatingBar"],"mappings":"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"}
@@ -98,6 +98,11 @@ export type TExpandedRowState = {
98
98
  data?: unknown[];
99
99
  level?: number;
100
100
  };
101
+ /** Turns every data cell of a row into a link to `linkTo(rowId, rowData)`. */
102
+ export interface IRowLinkConfig {
103
+ isEnabled: boolean;
104
+ linkTo: (id: string, rowData?: any) => string;
105
+ }
101
106
  export interface ITableProps {
102
107
  tableKey: TTableKey;
103
108
  modelName?: string;
@@ -149,10 +154,7 @@ export interface ITableProps {
149
154
  isCellClickDisabled?: boolean;
150
155
  rowOptions?: any[] | ((...args: any[]) => any[] | null) | null;
151
156
  hideRowOptionWidth?: boolean;
152
- rowLinkConfig?: {
153
- isEnabled: boolean;
154
- linkTo: (id: string, rowData?: any) => string;
155
- };
157
+ rowLinkConfig?: IRowLinkConfig;
156
158
  isColumnConfigurable?: boolean;
157
159
  onAddColumnClick?: (...args: any[]) => void;
158
160
  onEditColumnClick?: (...args: any[]) => void;
@@ -219,6 +221,11 @@ export interface ITableProps {
219
221
  onCascadingRowExpand?: (...args: any[]) => void;
220
222
  optimizeTable?: boolean;
221
223
  multiSelectConfig?: IMultiSelectConfig;
224
+ /**
225
+ * Right-click menu on data cells. Enabled by default with a "Copy content" item;
226
+ * pass `items` to extend it, or `isEnabled: false` to keep the native browser menu.
227
+ */
228
+ cellContextMenuConfig?: ICellContextMenuConfig;
222
229
  headerContextOptions?: ReactNode;
223
230
  showHeaderContextOptions?: string;
224
231
  setShowHeaderContextOptions?: (value: string) => void;
@@ -324,3 +331,67 @@ export type ValidateAndSaveResult = {
324
331
  [key: string]: unknown | null;
325
332
  } | null;
326
333
  };
334
+ /**
335
+ * The right-clicked cell, handed to every context-menu item so consumers can
336
+ * build actions from the cell / row that was clicked.
337
+ */
338
+ export interface ICellContextMenuTarget {
339
+ rowId: TId;
340
+ rowData: Record<string, unknown>;
341
+ columnKey: string;
342
+ column: ICell['column'];
343
+ /** Raw cell value as it comes from the data source. */
344
+ value: unknown;
345
+ /** Plain text rendering of the cell — what the built-in "Copy Cell" item writes to the clipboard. */
346
+ text: string;
347
+ cell: ICell;
348
+ }
349
+ export interface ICellContextMenuContext extends ICellContextMenuTarget {
350
+ /** Closes the menu — call it from an item that opted into `keepOpenOnClick`. */
351
+ close: () => void;
352
+ }
353
+ export interface ICellContextMenuItem {
354
+ /** Unique key for the item. */
355
+ key: string;
356
+ label: ReactNode;
357
+ /** Leading icon node. */
358
+ icon?: ReactNode;
359
+ onClick?: (context: ICellContextMenuContext) => void | Promise<void>;
360
+ /** Hidden when this resolves to false. */
361
+ isVisible?: boolean | ((context: ICellContextMenuContext) => boolean);
362
+ isDisabled?: boolean | ((context: ICellContextMenuContext) => boolean);
363
+ /** Draws a separator above the item. */
364
+ withDividerBefore?: boolean;
365
+ /** Renders the item in the destructive style. */
366
+ isDanger?: boolean;
367
+ /** Keeps the menu open after `onClick` (default: the menu closes). */
368
+ keepOpenOnClick?: boolean;
369
+ /** Right-aligned hint, e.g. a keyboard shortcut. */
370
+ shortcut?: ReactNode;
371
+ }
372
+ export interface ICellContextMenuConfig {
373
+ /** Defaults to true — set false to fall back to the native browser menu. */
374
+ isEnabled?: boolean;
375
+ /** Items appended after the built-ins. A function is resolved against the right-clicked cell. */
376
+ items?: ICellContextMenuItem[] | ((context: ICellContextMenuContext) => ICellContextMenuItem[]);
377
+ /** Drops the built-in items so `items` fully owns the menu. */
378
+ hideDefaultItems?: boolean;
379
+ /** Return true to suppress the menu (and keep the native one) for a given cell. */
380
+ isDisabledForCell?: (target: ICellContextMenuTarget) => boolean;
381
+ /** Called after any built-in copy item writes to the clipboard. */
382
+ onCopy?: (text: string, target: ICellContextMenuTarget) => void;
383
+ /** Label override for the built-in "Copy Cell" item. */
384
+ copyLabel?: string;
385
+ /** Drops the "Copy Link" / "Open in New Tab" items a table with `rowLinkConfig` gets by default. */
386
+ hideLinkItems?: boolean;
387
+ /** Append the table's `rowOptions` (the three-dot row actions) to the menu. Defaults to true. */
388
+ includeRowOptions?: boolean;
389
+ /** Extra classes for the menu container. */
390
+ className?: string;
391
+ }
392
+ export interface ICellContextMenuState {
393
+ /** Viewport coordinates of the right click. */
394
+ x: number;
395
+ y: number;
396
+ target: ICellContextMenuTarget;
397
+ }