@lax-wp/design-system 0.13.75 → 0.13.76

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 (25) hide show
  1. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
  2. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
  3. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +24 -24
  4. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
  5. package/dist/components/data-display/infinite-table/body/cell/InlineCurrencyField.cjs.js +1 -1
  6. package/dist/components/data-display/infinite-table/body/cell/InlineCurrencyField.cjs.js.map +1 -1
  7. package/dist/components/data-display/infinite-table/body/cell/InlineCurrencyField.es.js +2 -2
  8. package/dist/components/data-display/infinite-table/body/cell/InlineCurrencyField.es.js.map +1 -1
  9. package/dist/components/navigation/tabs/TabSwitch.cjs.js +1 -1
  10. package/dist/components/navigation/tabs/TabSwitch.cjs.js.map +1 -1
  11. package/dist/components/navigation/tabs/TabSwitch.es.js +57 -60
  12. package/dist/components/navigation/tabs/TabSwitch.es.js.map +1 -1
  13. package/dist/components/navigation/tabs/Tabs.cjs.js +1 -1
  14. package/dist/components/navigation/tabs/Tabs.cjs.js.map +1 -1
  15. package/dist/components/navigation/tabs/Tabs.es.js +381 -402
  16. package/dist/components/navigation/tabs/Tabs.es.js.map +1 -1
  17. package/dist/hooks/useTextWidth.cjs.js +1 -1
  18. package/dist/hooks/useTextWidth.cjs.js.map +1 -1
  19. package/dist/hooks/useTextWidth.es.js +14 -11
  20. package/dist/hooks/useTextWidth.es.js.map +1 -1
  21. package/dist/utils/countryFlags.cjs.js +2 -2
  22. package/dist/utils/countryFlags.cjs.js.map +1 -1
  23. package/dist/utils/countryFlags.es.js +11 -12
  24. package/dist/utils/countryFlags.es.js.map +1 -1
  25. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/DataCell.tsx"],"sourcesContent":["import { useTheme } from '../../../../../hooks/useTheme';\nimport { formatCurrency } from '../../../../../utils/formatters';\nimport { formatDate } from '../../../../../utils/formatters';\nimport { getTableRowBgClassNamesByStatus } from '../../../../../constants/table';\nimport type { ICell, IPendingEdit, ValidateAndSaveResult } from '../../types';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport Tooltip from '../../../../tooltip/Tooltip';\nimport { Typography } from '../../../../data-display/typography/Typography';\nimport { KeyboardArrowDownIcon, KeyboardArrowRightFilledIcon, LinkIcon, LoadingSpinnerIcon } from '../../../../icon';\nimport { OpenInNewRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { TableContext } from '../../context';\nimport { InlineEditField } from './InlineEditField';\nimport { CELL_DEFAULT_RIGHT_OFFSET, CELL_INDENT_PER_LEVEL_PX, CELL_STICKY_SHADOW_DARK, CELL_STICKY_SHADOW_LIGHT } from '../../constants';\n\ntype CellProps = {\n cell: ICell;\n id: string | number;\n nextWidthSum: number;\n isLastCell: boolean;\n rowHovering: string | number | null;\n index: number;\n isFirstStickyCell: boolean;\n handleCellClick: (e?: React.MouseEvent) => void | null;\n currentData: { is_row_modified?: boolean; is_deleted?: boolean; is_added?: boolean };\n highlightSubstring?: (value: string) => JSX.Element;\n is_read: boolean;\n is_modified: boolean;\n is_row_modified: boolean;\n is_deleted: boolean;\n is_added: boolean;\n level: number;\n inlineEditing: string | null;\n isInlineEditing?: boolean;\n setRowHovering: (id: string | number | null) => void;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n cellRef: React.RefObject<HTMLDivElement>;\n handleUpdateCellData: (directValue?: string | boolean | null, meta?: { currency_code?: string | null; reference?: unknown | null;[key: string]: unknown | null } | null) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n loadingExpand: boolean;\n toggleRowExpand: () => void;\n isDraggingOver?: boolean;\n isLoading?: boolean;\n is_incomplete?: boolean;\n pendingEdit?: IPendingEdit;\n hasPendingEdit?: boolean;\n pendingValidationError?: string | null;\n};\n\nlet interval: ReturnType<typeof setInterval> | undefined;\n\nconst formatDurationFallback = (duration: unknown): string => {\n const durationInMs = Number(duration);\n\n if (Number.isNaN(durationInMs) || duration === null || duration === undefined) {\n return '0ms';\n }\n\n if (durationInMs >= 86400000) {\n const days = Math.floor(durationInMs / 86400000);\n const hours = Math.floor((durationInMs % 86400000) / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${days}d ${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 3600000) {\n const hours = Math.floor(durationInMs / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 60000) {\n const minutes = Math.floor(durationInMs / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 1000) {\n return `${(durationInMs / 1000).toFixed(2)}s`;\n }\n\n return `${durationInMs}ms`;\n};\n\nconst CellWrapper = ({ children, withLink, linkTo, rowData, disableRowClick }: { children: React.ReactNode; withLink?: boolean; linkTo?: (id: string, _rowData?: Record<string, unknown>) => string; rowData?: Record<string, unknown>; disableRowClick?: boolean }) => {\n return withLink && !disableRowClick ? <Link to={linkTo?.(rowData?.id as string, rowData) || ''}>{children}</Link> : children;\n};\n\nconst DataCellInner: React.FC<CellProps> = ({\n cell, id, nextWidthSum, isLastCell, rowHovering, index, isFirstStickyCell, handleCellClick, currentData, highlightSubstring,\n is_read, is_modified, is_row_modified, is_deleted, is_added, level, inlineEditing, isInlineEditing, setRowHovering,\n handleCellValueChange, cellRef, handleUpdateCellData, registerValidation, loadingExpand, toggleRowExpand,\n isDraggingOver, isLoading, is_incomplete, pendingEdit, hasPendingEdit, pendingValidationError,\n}) => {\n const {\n cascadingTableConfig, originalsOnly, maxLevel, showNewItem, expandedRows, rowLinkConfig, multiSelectConfig,\n cellEditing, cellEditingValue, allowInlineEdit, fieldOperationLoading, pendingEdits: contextPendingEdits,\n selectedRowId,\n } = useContext(TableContext);\n\n const isSelectedRow =\n selectedRowId !== null && selectedRowId !== undefined && String(selectedRowId) === String(id);\n\n const tableConfig = useTableConfig();\n\n const rowCellMeta = cell?.column?.key ? (cell?.row?.original?.__cellMetadata as Record<string, Record<string, unknown>> | undefined)?.[cell.column.key] : undefined;\n const isLocked = rowCellMeta?.is_locked ?? cell?.column?.is_locked;\n const cellValidationError = (cell?.column?.key ? contextPendingEdits?.[id]?.[cell.column.key]?.validationError : null) || pendingValidationError || null;\n const isActuallyInlineEditing = inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled;\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const { theme } = useTheme();\n const isDark = theme === 'dark';\n const onMouseEnter = useCallback(() => setRowHovering(id), [setRowHovering, id]);\n const onMouseLeave = useCallback(() => setRowHovering(null), [setRowHovering]);\n\n const getNodeExecutionDuration = tableConfig?.formatDuration;\n const [cellValue, setCellValue] = useState(\n cell?.column?.dataType === 'duration' && cell?.value\n ? getNodeExecutionDuration\n ? getNodeExecutionDuration(cell.value)\n : formatDurationFallback(cell.value)\n : cell.value,\n );\n const [tooltipText, setTooltipText] = useState<string | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n const [urlTooltipOpen, setUrlTooltipOpen] = useState(false);\n const [truncateTooltipOpen, setTruncateTooltipOpen] = useState(false);\n const textRef = useRef<HTMLSpanElement>(null);\n const urlTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const truncateTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const { selectedColumnIds = [] } = multiSelectConfig || {};\n const shouldHighlight = !Object.prototype.hasOwnProperty.call(cell?.column?.meta ?? {}, 'shouldHighlight') || cell?.column?.meta?.shouldHighlight;\n\n const checkTruncation = useCallback(() => {\n if (textRef.current) {\n setIsTruncated(textRef.current.scrollWidth > textRef.current.clientWidth);\n }\n }, []);\n\n const handleUrlTooltipChange = useCallback((open: boolean) => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n\n if (open) {\n setUrlTooltipOpen(true);\n } else {\n urlTooltipTimer.current = setTimeout(() => setUrlTooltipOpen(false), 200);\n }\n }, []);\n\n const handleTruncateTooltipChange = useCallback((open: boolean) => {\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n\n if (open) {\n setTruncateTooltipOpen(true);\n } else {\n truncateTooltipTimer.current = setTimeout(() => setTruncateTooltipOpen(false), 200);\n }\n }, []);\n\n const bgColor = cn({\n 'bg-amber-100 dark:bg-amber-900/30': hasPendingEdit,\n 'bg-neutral-100 dark:bg-black-600': rowHovering === id && !isInlineEditing && !hasPendingEdit && !(is_deleted || currentData?.is_deleted) && !(is_added || currentData?.is_added),\n 'bg-error-200 dark:bg-error-900': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_deleted || currentData?.is_deleted),\n 'bg-success-100 dark:bg-success-800': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_added || currentData?.is_added),\n 'bg-warning-100 dark:bg-warning-950': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified),\n // 'bg-primary-50 dark:bg-black-700': !is_incomplete && !is_read && showNewItem && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-warning-50 dark:bg-orange-900': (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-error-100 dark:bg-error-975': (is_deleted || currentData?.is_deleted) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-success-50 dark:bg-success-900': (is_added || currentData?.is_added) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-900': (isDraggingOver || isInlineEditing) && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-800': selectedColumnIds?.includes(cell.column.id) && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-100 dark:bg-primary-950': isSelectedRow && rowHovering !== id && !isInlineEditing && !hasPendingEdit && !isLoading,\n [getTableRowBgClassNamesByStatus[cell?.row?.original?.__rowBgStatus as string]]: cell?.row?.original?.__rowBgStatus && !isInlineEditing && !hasPendingEdit,\n });\n\n const onClick = (e: React.MouseEvent) => { if (cell.column?.disableRowClick) return; handleCellClick(e); };\n\n useEffect(() => {\n const isRunning = cell?.row?.original?.status === 'running';\n if (isRunning && cell.column?.dataType === 'duration') {\n interval = setInterval(() => {\n const startedTime = new Date(formatDate((cell?.row?.original?.created_at || cell?.row?.original?.executed_on) as string | undefined, { withTime: true, format: 'yyyy-MM-dd HH:mm:ss' }) as unknown as Date);\n const timeDiff = Math.abs(new Date().getTime() - new Date(startedTime).getTime());\n setCellValue(getNodeExecutionDuration ? getNodeExecutionDuration(timeDiff) : formatDurationFallback(timeDiff));\n }, 500);\n }\n return () => { if (interval) clearInterval(interval); };\n }, [cellValue, cell.value, cell?.row?.original?.created_at, cell?.row?.original?.executed_on, cell?.row?.original?.status, cell.column?.dataType, getNodeExecutionDuration]);\n\n useEffect(() => {\n if (cell?.column?.tooltipCellKey || cell?.column?.type?.toLowerCase() === 'url') {\n if (cell?.column?.type?.toLowerCase() === 'url') setTooltipText(cell?.value as string | null);\n else setTooltipText(cell?.row?.original?.[String(cell?.column?.tooltipCellKey)] as string | null);\n }\n }, [cell?.column?.tooltipCellKey, cell?.row?.original, cell?.column?.type, cell?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'currency') {\n if (pendingEdit?.value !== undefined) {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n const currencyCode = pendingEdit?.meta?.currency_code || rawData?.[headerKey]?.currency_code || 'USD';\n setCellValue(formatCurrency(pendingEdit.value, currencyCode as string));\n } else {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n setCellValue(formatCurrency(cell?.value, (rawData?.[headerKey]?.currency_code as string) || 'USD'));\n }\n }\n }, [cell?.value, cell?.column?.type, cell?.column?.Header, cell?.row?.original?.__rawData, pendingEdit?.value, pendingEdit?.meta?.currency_code]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'percentage') {\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value?.toString() + '%' || '');\n else setCellValue(cell?.value?.toString() + '%' || '');\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['date', 'datetime'].includes(columnType)) {\n if (pendingEdit?.value !== undefined) {\n const hasTime = columnType === 'datetime';\n const formattedValue = formatDate(pendingEdit.value as string, { withTime: hasTime, skipTimezone: true });\n setCellValue(formattedValue || pendingEdit.value);\n } else setCellValue(cell.value);\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['currency', 'percentage', 'duration', 'boolean', 'date', 'datetime'].includes(columnType)) return;\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value);\n else if (cell?.column?.dataType !== 'duration') setCellValue(cell.value);\n }, [cell?.value, cell?.column?.type, cell?.column?.dataType, pendingEdit?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'boolean' && allowInlineEdit) {\n const rawValue = pendingEdit?.value !== undefined ? pendingEdit.value : cell?.value;\n const booleanValue = rawValue === true || rawValue === 'true' || rawValue === 'True' || rawValue === 'Yes' || rawValue === 1;\n setCellValue(booleanValue ? 'Yes' : 'No');\n }\n }, [cell?.value, cell?.column?.type, allowInlineEdit, pendingEdit?.value]);\n\n useEffect(() => {\n return () => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n };\n }, []);\n\n const isUiElementCell = React.isValidElement(cellValue);\n\n return (\n <td\n key={index} id={cell.value as string | undefined} data-column-key={cell?.column?.key} {...cell.getCellProps()}\n onClick={rowLinkConfig?.isEnabled ? undefined : onClick}\n className={cn('h-row', {\n 'sticky left-0': cell?.column?.sticky,\n relative: !cell?.column?.sticky,\n 'w-full': isLastCell,\n 'overflow-visible': inlineEditing === cell.column.key,\n /** Chips/badges: avoid vertical clip from overflow-x-hidden + truncate (see isUiElementCell branch below) */\n 'overflow-x-hidden overflow-y-visible': inlineEditing !== cell.column.key && isUiElementCell,\n 'overflow-hidden': inlineEditing !== cell.column.key && !isUiElementCell,\n },\n cellValidationError && !isActuallyInlineEditing ? 'outline outline-2 outline-error-500 -outline-offset-2 z-[5]' : '',\n `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`,\n )}\n style={{ minWidth: `${cell.column.width}px`, maxWidth: `${cell.column.width}px`, right: cell?.column?.sticky ? `${nextWidthSum}px` : CELL_DEFAULT_RIGHT_OFFSET, paddingLeft: level > 0 && index === 0 ? `${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined }}\n onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}\n >\n <CellWrapper withLink={rowLinkConfig?.isEnabled} linkTo={rowLinkConfig?.linkTo || undefined} rowData={cell?.row?.original} disableRowClick={cell?.column?.disableRowClick}>\n {(Array.isArray(cellEditing) ? cellEditing.includes(`${id}-${cell?.column?.id}`) : cellEditing === `${id}-${cell?.column?.id}`) ? (\n <div className='h-row top-0 font-medium font-inter w-full absolute flex items-center px-4'>\n <span className='text-neutral-400 dark:text-black-400 truncate'>\n {(() => {\n const currentCellId = `${id}-${cell?.column?.id}`;\n const editValue = typeof cellEditingValue === 'object' ? cellEditingValue?.[currentCellId] : cellEditingValue;\n const columnType = cell?.column?.type?.toLowerCase();\n\n if (columnType === 'boolean') {\n return (editValue as unknown) === true || editValue === 'true' || editValue === 'True' ? 'Yes' : 'No';\n }\n\n if ((columnType === 'date' || columnType === 'datetime') && editValue) {\n const hasTime = columnType === 'datetime';\n return formatDate(editValue as string, { withTime: hasTime, skipTimezone: true }) || String(editValue);\n }\n\n return editValue !== undefined && editValue !== null ? String(editValue) : (cellValue as React.ReactNode);\n })()}\n </span>\n <div className='ml-2 flex items-center gap-1.5'><LoadingSpinnerIcon className='spinner text-neutral-600 dark:text-white' size={12} /></div>\n </div>\n ) : inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled ? (\n <div className='h-row w-full absolute top-0 left-0 flex items-center' style={{ marginLeft: level > 0 && index === 0 ? `-${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined, width: level > 0 && index === 0 ? `calc(100% + ${level * CELL_INDENT_PER_LEVEL_PX}px)` : '100%' }}>\n <InlineEditField cell={cell} id={id} inlineEditing={inlineEditing} cellRef={cellRef} handleCellValueChange={handleCellValueChange} handleUpdateCellData={handleUpdateCellData} registerValidation={registerValidation} />\n </div>\n ) : (\n <>\n {level > 0 && index === 0 && <div className='h-row border-l border-neutral-300 dark:border-black-600 ml-2' />}\n <div className='min-h-6'>\n <Tooltip\n title={tooltipText && cell?.column?.type?.toLowerCase() !== 'url' ? tooltipText : undefined}\n hideTooltip={!tooltipText || cell?.column?.type?.toLowerCase() === 'url'}\n delayShow\n placement='top'\n >\n <div className={cn(`h-row top-0 font-medium font-inter overflow-index-auto whitespace-nowrap text-ellipsis dark:text-black-200 w-full absolute flex items-center ${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`, isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-x-hidden', { 'border border-b-0 border-t-0 border-primary-600 dark:border-blue-800': selectedColumnIds?.includes(cell.column.id) })}\n style={cell?.column?.sticky && isFirstStickyCell ? { boxShadow: isDark ? CELL_STICKY_SHADOW_DARK : CELL_STICKY_SHADOW_LIGHT } : {}}>\n {cascadingTableConfig?.isCascading && !originalsOnly && index === 0 && (\n <div className={cn('w-[22px] h-row flex items-center px-4', `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`)} id='cascading'>\n {maxLevel! > level && (cell?.row?.original?.__has_children || cascadingTableConfig?.showAllDropdown) && (\n <div>{loadingExpand ? <LoadingSpinnerIcon className='text-neutral-600 dark:text-white' size={8} /> : <div>{expandedRows?.[id]?.isOpen ? <KeyboardArrowDownIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} /> : <KeyboardArrowRightFilledIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} />}</div>}</div>\n )}\n </div>\n )}\n\n {cell?.column?.type?.toLowerCase() === 'url' && tooltipText ? (\n <Tooltip\n title={(\n <div onMouseEnter={() => handleUrlTooltipChange(true)} onMouseLeave={() => handleUrlTooltipChange(false)}>\n <a href={tooltipText} target='_blank' rel='noopener noreferrer' onClick={(e) => e.stopPropagation()}>\n <div className='flex gap-1 items-center w-full'>\n <div className='w-4 h-4'>\n <LinkIcon height={16} width={16} />\n </div>\n <Typography variant='medium' size='small' className='truncate' appearance='custom'>{tooltipText}</Typography>\n <OpenInNewRounded sx={{ height: '16px', width: '16px', color: '#016DCF' }} />\n </div>\n </a>\n </div>\n )}\n placement='top'\n open={urlTooltipOpen}\n onOpenChange={handleUrlTooltipChange}\n className='block w-full min-w-0 overflow-hidden'\n >\n <div className='w-full h-full flex items-center px-4 min-w-0 overflow-hidden text-primary-400'>\n <span ref={textRef} onMouseEnter={checkTruncation} className='truncate w-full'>\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n ) : (\n <Tooltip\n title={\n isTruncated && cellValue && !isUiElementCell ? (\n <div\n onMouseEnter={() => handleTruncateTooltipChange(true)}\n onMouseLeave={() => handleTruncateTooltipChange(false)}\n className='max-h-96 overflow-y-auto whitespace-pre-wrap break-words no-scroll'\n >\n {String(cellValue)}\n </div>\n ) : undefined\n }\n placement='top'\n delayShow\n hideTooltip={!!tooltipText}\n open={isTruncated && !tooltipText && !isUiElementCell ? truncateTooltipOpen : undefined}\n onOpenChange={isTruncated && !tooltipText && !isUiElementCell ? handleTruncateTooltipChange : undefined}\n className={cn('block w-full min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}\n >\n <div className={cn('w-full h-full flex items-center px-4 min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}>\n <span\n ref={isUiElementCell ? undefined : textRef}\n onMouseEnter={isUiElementCell ? undefined : checkTruncation}\n className={cn(isUiElementCell ? 'flex min-w-0 max-w-full items-center justify-start gap-1' : 'truncate w-full')}\n >\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : React.isValidElement(cellValue)\n ? (typeof (cellValue as React.ReactElement<Record<string, unknown>>).type === 'string'\n ? cellValue\n : React.cloneElement(cellValue as React.ReactElement<Record<string, unknown>>, {\n ...((cellValue as React.ReactElement<Record<string, unknown>>).props as Record<string, unknown>),\n containerWidth: cell.column.width,\n }))\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n )}\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </CellWrapper>\n {cellValidationError && !isActuallyInlineEditing && (\n <div className='absolute bottom-0 left-0 right-0 h-row flex items-end pointer-events-none z-[5]'>\n <div className='w-full bg-error-50 dark:bg-error-975 px-1.5 py-0.5 truncate'><span className='text-error-600 text-2xs font-medium leading-none'>{cellValidationError}</span></div>\n </div>\n )}\n {isFieldOperationLoading && !(inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled) && (\n <div className='absolute top-0 right-0 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-10'>\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n </div>\n )}\n </td>\n );\n};\n\nexport const DataCell = React.memo(DataCellInner);\n"],"names":["interval","formatDurationFallback","duration","durationInMs","days","hours","minutes","seconds","CellWrapper","children","withLink","linkTo","rowData","disableRowClick","jsx","Link","DataCellInner","cell","id","nextWidthSum","isLastCell","rowHovering","index","isFirstStickyCell","handleCellClick","currentData","highlightSubstring","is_read","is_modified","is_row_modified","is_deleted","is_added","level","inlineEditing","isInlineEditing","setRowHovering","handleCellValueChange","cellRef","handleUpdateCellData","registerValidation","loadingExpand","toggleRowExpand","isDraggingOver","isLoading","is_incomplete","pendingEdit","hasPendingEdit","pendingValidationError","cascadingTableConfig","originalsOnly","maxLevel","showNewItem","expandedRows","rowLinkConfig","multiSelectConfig","cellEditing","cellEditingValue","allowInlineEdit","fieldOperationLoading","contextPendingEdits","selectedRowId","useContext","TableContext","isSelectedRow","tableConfig","useTableConfig","isLocked","cellValidationError","isActuallyInlineEditing","isFieldOperationLoading","theme","useTheme","isDark","onMouseEnter","useCallback","onMouseLeave","getNodeExecutionDuration","cellValue","setCellValue","useState","tooltipText","setTooltipText","isTruncated","setIsTruncated","urlTooltipOpen","setUrlTooltipOpen","truncateTooltipOpen","setTruncateTooltipOpen","textRef","useRef","urlTooltipTimer","truncateTooltipTimer","selectedColumnIds","shouldHighlight","checkTruncation","handleUrlTooltipChange","open","handleTruncateTooltipChange","bgColor","cn","getTableRowBgClassNamesByStatus","onClick","e","useEffect","startedTime","formatDate","timeDiff","rawData","headerKey","currencyCode","formatCurrency","columnType","hasTime","formattedValue","rawValue","isUiElementCell","React","jsxs","CELL_DEFAULT_RIGHT_OFFSET","CELL_INDENT_PER_LEVEL_PX","currentCellId","editValue","LoadingSpinnerIcon","InlineEditField","Fragment","Tooltip","CELL_STICKY_SHADOW_DARK","CELL_STICKY_SHADOW_LIGHT","KeyboardArrowDownIcon","KeyboardArrowRightFilledIcon","LinkIcon","Typography","OpenInNewRounded","DataCell"],"mappings":"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"}
1
+ {"version":3,"file":"DataCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/DataCell.tsx"],"sourcesContent":["import { useTheme } from '../../../../../hooks/useTheme';\nimport { formatCurrency } from '../../../../../utils/formatters';\nimport { formatDate } from '../../../../../utils/formatters';\nimport { getTableRowBgClassNamesByStatus } from '../../../../../constants/table';\nimport type { ICell, IPendingEdit, ValidateAndSaveResult } from '../../types';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport Tooltip from '../../../../tooltip/Tooltip';\nimport { Typography } from '../../../../data-display/typography/Typography';\nimport { KeyboardArrowDownIcon, KeyboardArrowRightFilledIcon, LinkIcon, LoadingSpinnerIcon } from '../../../../icon';\nimport { OpenInNewRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { TableContext } from '../../context';\nimport { InlineEditField } from './InlineEditField';\nimport { CELL_DEFAULT_RIGHT_OFFSET, CELL_INDENT_PER_LEVEL_PX, CELL_STICKY_SHADOW_DARK, CELL_STICKY_SHADOW_LIGHT } from '../../constants';\n\ntype CellProps = {\n cell: ICell;\n id: string | number;\n nextWidthSum: number;\n isLastCell: boolean;\n rowHovering: string | number | null;\n index: number;\n isFirstStickyCell: boolean;\n handleCellClick: (e?: React.MouseEvent) => void | null;\n currentData: { is_row_modified?: boolean; is_deleted?: boolean; is_added?: boolean };\n highlightSubstring?: (value: string) => JSX.Element;\n is_read: boolean;\n is_modified: boolean;\n is_row_modified: boolean;\n is_deleted: boolean;\n is_added: boolean;\n level: number;\n inlineEditing: string | null;\n isInlineEditing?: boolean;\n setRowHovering: (id: string | number | null) => void;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n cellRef: React.RefObject<HTMLDivElement>;\n handleUpdateCellData: (directValue?: string | boolean | null, meta?: { currency_code?: string | null; reference?: unknown | null;[key: string]: unknown | null } | null) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n loadingExpand: boolean;\n toggleRowExpand: () => void;\n isDraggingOver?: boolean;\n isLoading?: boolean;\n is_incomplete?: boolean;\n pendingEdit?: IPendingEdit;\n hasPendingEdit?: boolean;\n pendingValidationError?: string | null;\n};\n\nlet interval: ReturnType<typeof setInterval> | undefined;\n\nconst formatDurationFallback = (duration: unknown): string => {\n const durationInMs = Number(duration);\n\n if (Number.isNaN(durationInMs) || duration === null || duration === undefined) {\n return '0ms';\n }\n\n if (durationInMs >= 86400000) {\n const days = Math.floor(durationInMs / 86400000);\n const hours = Math.floor((durationInMs % 86400000) / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${days}d ${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 3600000) {\n const hours = Math.floor(durationInMs / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 60000) {\n const minutes = Math.floor(durationInMs / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 1000) {\n return `${(durationInMs / 1000).toFixed(2)}s`;\n }\n\n return `${durationInMs}ms`;\n};\n\nconst CellWrapper = ({ children, withLink, linkTo, rowData, disableRowClick }: { children: React.ReactNode; withLink?: boolean; linkTo?: (id: string, _rowData?: Record<string, unknown>) => string; rowData?: Record<string, unknown>; disableRowClick?: boolean }) => {\n return withLink && !disableRowClick ? <Link to={linkTo?.(rowData?.id as string, rowData) || ''}>{children}</Link> : children;\n};\n\nconst DataCellInner: React.FC<CellProps> = ({\n cell, id, nextWidthSum, isLastCell, rowHovering, index, isFirstStickyCell, handleCellClick, currentData, highlightSubstring,\n is_read, is_modified, is_row_modified, is_deleted, is_added, level, inlineEditing, isInlineEditing, setRowHovering,\n handleCellValueChange, cellRef, handleUpdateCellData, registerValidation, loadingExpand, toggleRowExpand,\n isDraggingOver, isLoading, is_incomplete, pendingEdit, hasPendingEdit, pendingValidationError,\n}) => {\n const {\n cascadingTableConfig, originalsOnly, maxLevel, showNewItem, expandedRows, rowLinkConfig, multiSelectConfig,\n cellEditing, cellEditingValue, allowInlineEdit, fieldOperationLoading, pendingEdits: contextPendingEdits,\n selectedRowId,\n } = useContext(TableContext);\n\n const isSelectedRow =\n selectedRowId !== null && selectedRowId !== undefined && String(selectedRowId) === String(id);\n\n const tableConfig = useTableConfig();\n\n const rowCellMeta = cell?.column?.key ? (cell?.row?.original?.__cellMetadata as Record<string, Record<string, unknown>> | undefined)?.[cell.column.key] : undefined;\n const isLocked = rowCellMeta?.is_locked ?? cell?.column?.is_locked;\n const cellValidationError = (cell?.column?.key ? contextPendingEdits?.[id]?.[cell.column.key]?.validationError : null) || pendingValidationError || null;\n const isActuallyInlineEditing = inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled;\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const { theme } = useTheme();\n const isDark = theme === 'dark';\n const onMouseEnter = useCallback(() => setRowHovering(id), [setRowHovering, id]);\n const onMouseLeave = useCallback(() => setRowHovering(null), [setRowHovering]);\n\n const getNodeExecutionDuration = tableConfig?.formatDuration;\n const [cellValue, setCellValue] = useState(\n cell?.column?.dataType === 'duration' && cell?.value\n ? getNodeExecutionDuration\n ? getNodeExecutionDuration(cell.value)\n : formatDurationFallback(cell.value)\n : cell.value,\n );\n const [tooltipText, setTooltipText] = useState<string | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n const [urlTooltipOpen, setUrlTooltipOpen] = useState(false);\n const [truncateTooltipOpen, setTruncateTooltipOpen] = useState(false);\n const textRef = useRef<HTMLSpanElement>(null);\n const urlTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const truncateTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const { selectedColumnIds = [] } = multiSelectConfig || {};\n const shouldHighlight = !Object.prototype.hasOwnProperty.call(cell?.column?.meta ?? {}, 'shouldHighlight') || cell?.column?.meta?.shouldHighlight;\n\n const checkTruncation = useCallback(() => {\n if (textRef.current) {\n setIsTruncated(textRef.current.scrollWidth > textRef.current.clientWidth);\n }\n }, []);\n\n const handleUrlTooltipChange = useCallback((open: boolean) => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n\n if (open) {\n setUrlTooltipOpen(true);\n } else {\n urlTooltipTimer.current = setTimeout(() => setUrlTooltipOpen(false), 200);\n }\n }, []);\n\n const handleTruncateTooltipChange = useCallback((open: boolean) => {\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n\n if (open) {\n setTruncateTooltipOpen(true);\n } else {\n truncateTooltipTimer.current = setTimeout(() => setTruncateTooltipOpen(false), 200);\n }\n }, []);\n\n const bgColor = cn({\n 'bg-amber-100 dark:bg-amber-900/30': hasPendingEdit,\n 'bg-neutral-100 dark:bg-black-600': rowHovering === id && !isInlineEditing && !hasPendingEdit && !(is_deleted || currentData?.is_deleted) && !(is_added || currentData?.is_added),\n 'bg-error-200 dark:bg-error-900': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_deleted || currentData?.is_deleted),\n 'bg-success-100 dark:bg-success-800': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_added || currentData?.is_added),\n 'bg-warning-100 dark:bg-warning-950': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified),\n // 'bg-primary-50 dark:bg-black-700': !is_incomplete && !is_read && showNewItem && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-warning-50 dark:bg-orange-900': (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-error-100 dark:bg-error-975': (is_deleted || currentData?.is_deleted) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-success-50 dark:bg-success-900': (is_added || currentData?.is_added) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-900': (isDraggingOver || isInlineEditing) && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-800': selectedColumnIds?.includes(cell.column.id) && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-100 dark:bg-primary-950': isSelectedRow && rowHovering !== id && !isInlineEditing && !hasPendingEdit && !isLoading,\n [getTableRowBgClassNamesByStatus[cell?.row?.original?.__rowBgStatus as string]]: cell?.row?.original?.__rowBgStatus && !isInlineEditing && !hasPendingEdit,\n });\n\n const onClick = (e: React.MouseEvent) => { if (cell.column?.disableRowClick) return; handleCellClick(e); };\n\n useEffect(() => {\n const isRunning = cell?.row?.original?.status === 'running';\n if (isRunning && cell.column?.dataType === 'duration') {\n interval = setInterval(() => {\n const startedTime = new Date(formatDate((cell?.row?.original?.created_at || cell?.row?.original?.executed_on) as string | undefined, { withTime: true, format: 'yyyy-MM-dd HH:mm:ss' }) as unknown as Date);\n const timeDiff = Math.abs(new Date().getTime() - new Date(startedTime).getTime());\n setCellValue(getNodeExecutionDuration ? getNodeExecutionDuration(timeDiff) : formatDurationFallback(timeDiff));\n }, 500);\n }\n return () => { if (interval) clearInterval(interval); };\n }, [cellValue, cell.value, cell?.row?.original?.created_at, cell?.row?.original?.executed_on, cell?.row?.original?.status, cell.column?.dataType, getNodeExecutionDuration]);\n\n useEffect(() => {\n if (cell?.column?.tooltipCellKey || cell?.column?.type?.toLowerCase() === 'url') {\n if (cell?.column?.type?.toLowerCase() === 'url') setTooltipText(cell?.value as string | null);\n else setTooltipText(cell?.row?.original?.[String(cell?.column?.tooltipCellKey)] as string | null);\n }\n }, [cell?.column?.tooltipCellKey, cell?.row?.original, cell?.column?.type, cell?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'currency') {\n if (pendingEdit?.value !== undefined) {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n const currencyCode = pendingEdit?.meta?.currency_code || rawData?.[headerKey]?.currency_code || 'USD';\n setCellValue(formatCurrency(pendingEdit.value, currencyCode as string));\n } else {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n setCellValue(formatCurrency(cell?.value, (rawData?.[headerKey]?.currency_code as string) || 'USD'));\n }\n }\n }, [cell?.value, cell?.column?.type, cell?.column?.Header, cell?.row?.original?.__rawData, pendingEdit?.value, pendingEdit?.meta?.currency_code]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'percentage') {\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value?.toString() + '%' || '');\n else setCellValue(cell?.value?.toString() + '%' || '');\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['date', 'datetime'].includes(columnType)) {\n if (pendingEdit?.value !== undefined) {\n const hasTime = columnType === 'datetime';\n const formattedValue = formatDate(pendingEdit.value as string, { withTime: hasTime, skipTimezone: true });\n setCellValue(formattedValue || pendingEdit.value);\n } else setCellValue(cell.value);\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['currency', 'percentage', 'duration', 'boolean', 'date', 'datetime'].includes(columnType)) return;\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value);\n else if (cell?.column?.dataType !== 'duration') setCellValue(cell.value);\n }, [cell?.value, cell?.column?.type, cell?.column?.dataType, pendingEdit?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'boolean' && allowInlineEdit) {\n const rawValue = pendingEdit?.value !== undefined ? pendingEdit.value : cell?.value;\n const booleanValue = rawValue === true || rawValue === 'true' || rawValue === 'True' || rawValue === 'Yes' || rawValue === 1;\n setCellValue(booleanValue ? 'Yes' : 'No');\n }\n }, [cell?.value, cell?.column?.type, allowInlineEdit, pendingEdit?.value]);\n\n useEffect(() => {\n return () => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n };\n }, []);\n\n const isUiElementCell = React.isValidElement(cellValue);\n\n return (\n <td\n key={index} id={cell.value as string | undefined} data-column-key={cell?.column?.key} {...cell.getCellProps()}\n onClick={rowLinkConfig?.isEnabled ? undefined : onClick}\n className={cn('h-row', {\n 'sticky left-0': cell?.column?.sticky,\n relative: !cell?.column?.sticky,\n 'w-full': isLastCell,\n 'overflow-visible': inlineEditing === cell.column.key,\n /** Chips/badges: avoid vertical clip from overflow-x-hidden + truncate (see isUiElementCell branch below) */\n 'overflow-x-hidden overflow-y-visible': inlineEditing !== cell.column.key && isUiElementCell,\n 'overflow-hidden': inlineEditing !== cell.column.key && !isUiElementCell,\n },\n cellValidationError && !isActuallyInlineEditing ? 'outline outline-2 outline-error-500 -outline-offset-2 z-[5]' : '',\n `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`,\n )}\n style={{ minWidth: `${cell.column.width}px`, maxWidth: `${cell.column.width}px`, right: cell?.column?.sticky ? `${nextWidthSum}px` : CELL_DEFAULT_RIGHT_OFFSET, paddingLeft: level > 0 && index === 0 ? `${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined }}\n onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}\n >\n <CellWrapper withLink={rowLinkConfig?.isEnabled} linkTo={rowLinkConfig?.linkTo || undefined} rowData={cell?.row?.original} disableRowClick={cell?.column?.disableRowClick}>\n {(Array.isArray(cellEditing) ? cellEditing.includes(`${id}-${cell?.column?.id}`) : cellEditing === `${id}-${cell?.column?.id}`) ? (\n <div className='h-row top-0 font-medium font-inter w-full absolute flex items-center px-4'>\n <span className='text-neutral-400 dark:text-black-400 truncate'>\n {(() => {\n const currentCellId = `${id}-${cell?.column?.id}`;\n const editValue = typeof cellEditingValue === 'object' ? cellEditingValue?.[currentCellId] : cellEditingValue;\n const columnType = cell?.column?.type?.toLowerCase();\n\n if (columnType === 'boolean') {\n return (editValue as unknown) === true || editValue === 'true' || editValue === 'True' ? 'Yes' : 'No';\n }\n\n if ((columnType === 'date' || columnType === 'datetime') && editValue) {\n const hasTime = columnType === 'datetime';\n return formatDate(editValue as string, { withTime: hasTime, skipTimezone: true }) || String(editValue);\n }\n\n return editValue !== undefined && editValue !== null ? String(editValue) : (cellValue as React.ReactNode);\n })()}\n </span>\n <div className='ml-2 flex items-center gap-1.5'><LoadingSpinnerIcon className='spinner text-neutral-600 dark:text-white' size={12} /></div>\n </div>\n ) : inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled ? (\n <div className='h-row w-full absolute top-0 left-0 flex items-center' style={{ marginLeft: level > 0 && index === 0 ? `-${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined, width: level > 0 && index === 0 ? `calc(100% + ${level * CELL_INDENT_PER_LEVEL_PX}px)` : '100%' }}>\n <InlineEditField cell={cell} id={id} inlineEditing={inlineEditing} cellRef={cellRef} handleCellValueChange={handleCellValueChange} handleUpdateCellData={handleUpdateCellData} registerValidation={registerValidation} />\n </div>\n ) : (\n <>\n {level > 0 && index === 0 && <div className='h-row border-l border-neutral-300 dark:border-black-600 ml-2' />}\n <div className='min-h-6'>\n <Tooltip\n title={tooltipText && cell?.column?.type?.toLowerCase() !== 'url' ? tooltipText : undefined}\n hideTooltip={!tooltipText || cell?.column?.type?.toLowerCase() === 'url'}\n delayShow\n placement='top'\n >\n <div className={cn(`h-row top-0 font-medium font-inter overflow-index-auto whitespace-nowrap text-ellipsis dark:text-black-200 w-full absolute flex items-center ${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`, isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-x-hidden', { 'border border-b-0 border-t-0 border-primary-600 dark:border-blue-800': selectedColumnIds?.includes(cell.column.id) })}\n style={cell?.column?.sticky && isFirstStickyCell ? { boxShadow: isDark ? CELL_STICKY_SHADOW_DARK : CELL_STICKY_SHADOW_LIGHT } : {}}>\n {cascadingTableConfig?.isCascading && !originalsOnly && index === 0 && (\n <div className={cn('w-[22px] h-row flex items-center px-4', `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`)} id='cascading'>\n {maxLevel! > level && (cell?.row?.original?.__has_children || cascadingTableConfig?.showAllDropdown) && (\n <div>{loadingExpand ? <LoadingSpinnerIcon className='text-neutral-600 dark:text-white' size={8} /> : <div>{expandedRows?.[id]?.isOpen ? <KeyboardArrowDownIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} /> : <KeyboardArrowRightFilledIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} />}</div>}</div>\n )}\n </div>\n )}\n\n {cell?.column?.type?.toLowerCase() === 'url' && tooltipText ? (\n <Tooltip\n title={(\n <div onMouseEnter={() => handleUrlTooltipChange(true)} onMouseLeave={() => handleUrlTooltipChange(false)}>\n <a href={tooltipText} target='_blank' rel='noopener noreferrer' onClick={(e) => e.stopPropagation()}>\n <div className='flex gap-1 items-center w-full'>\n <div className='w-4 h-4'>\n <LinkIcon height={16} width={16} />\n </div>\n <Typography variant='medium' size='small' className='truncate' appearance='custom'>{tooltipText}</Typography>\n <OpenInNewRounded sx={{ height: '16px', width: '16px', color: '#016DCF' }} />\n </div>\n </a>\n </div>\n )}\n placement='top'\n open={urlTooltipOpen}\n onOpenChange={handleUrlTooltipChange}\n className='block w-full min-w-0 overflow-hidden'\n >\n <div className='w-full h-row flex items-center px-4 min-w-0 overflow-hidden text-primary-400'>\n <span ref={textRef} onMouseEnter={checkTruncation} className='truncate w-full'>\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n ) : (\n <Tooltip\n title={\n isTruncated && cellValue && !isUiElementCell ? (\n <div\n onMouseEnter={() => handleTruncateTooltipChange(true)}\n onMouseLeave={() => handleTruncateTooltipChange(false)}\n className='max-h-96 overflow-y-auto whitespace-pre-wrap break-words no-scroll'\n >\n {String(cellValue)}\n </div>\n ) : undefined\n }\n placement='top'\n delayShow\n hideTooltip={!!tooltipText}\n open={isTruncated && !tooltipText && !isUiElementCell ? truncateTooltipOpen : undefined}\n onOpenChange={isTruncated && !tooltipText && !isUiElementCell ? handleTruncateTooltipChange : undefined}\n className={cn('block w-full min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}\n >\n <div className={cn('w-full h-row flex items-center px-4 min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}>\n <span\n ref={isUiElementCell ? undefined : textRef}\n onMouseEnter={isUiElementCell ? undefined : checkTruncation}\n className={cn(isUiElementCell ? 'flex min-w-0 max-w-full items-center justify-start gap-1' : 'truncate w-full')}\n >\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : React.isValidElement(cellValue)\n ? (typeof (cellValue as React.ReactElement<Record<string, unknown>>).type === 'string'\n ? cellValue\n : React.cloneElement(cellValue as React.ReactElement<Record<string, unknown>>, {\n ...((cellValue as React.ReactElement<Record<string, unknown>>).props as Record<string, unknown>),\n containerWidth: cell.column.width,\n }))\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n )}\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </CellWrapper>\n {cellValidationError && !isActuallyInlineEditing && (\n <div className='absolute bottom-0 left-0 right-0 h-row flex items-end pointer-events-none z-[5]'>\n <div className='w-full bg-error-50 dark:bg-error-975 px-1.5 py-0.5 truncate'><span className='text-error-600 text-2xs font-medium leading-none'>{cellValidationError}</span></div>\n </div>\n )}\n {isFieldOperationLoading && !(inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled) && (\n <div className='absolute top-0 right-0 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-10'>\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n </div>\n )}\n </td>\n );\n};\n\nexport const DataCell = React.memo(DataCellInner);\n"],"names":["interval","formatDurationFallback","duration","durationInMs","days","hours","minutes","seconds","CellWrapper","children","withLink","linkTo","rowData","disableRowClick","jsx","Link","DataCellInner","cell","id","nextWidthSum","isLastCell","rowHovering","index","isFirstStickyCell","handleCellClick","currentData","highlightSubstring","is_read","is_modified","is_row_modified","is_deleted","is_added","level","inlineEditing","isInlineEditing","setRowHovering","handleCellValueChange","cellRef","handleUpdateCellData","registerValidation","loadingExpand","toggleRowExpand","isDraggingOver","isLoading","is_incomplete","pendingEdit","hasPendingEdit","pendingValidationError","cascadingTableConfig","originalsOnly","maxLevel","showNewItem","expandedRows","rowLinkConfig","multiSelectConfig","cellEditing","cellEditingValue","allowInlineEdit","fieldOperationLoading","contextPendingEdits","selectedRowId","useContext","TableContext","isSelectedRow","tableConfig","useTableConfig","isLocked","cellValidationError","isActuallyInlineEditing","isFieldOperationLoading","theme","useTheme","isDark","onMouseEnter","useCallback","onMouseLeave","getNodeExecutionDuration","cellValue","setCellValue","useState","tooltipText","setTooltipText","isTruncated","setIsTruncated","urlTooltipOpen","setUrlTooltipOpen","truncateTooltipOpen","setTruncateTooltipOpen","textRef","useRef","urlTooltipTimer","truncateTooltipTimer","selectedColumnIds","shouldHighlight","checkTruncation","handleUrlTooltipChange","open","handleTruncateTooltipChange","bgColor","cn","getTableRowBgClassNamesByStatus","onClick","e","useEffect","startedTime","formatDate","timeDiff","rawData","headerKey","currencyCode","formatCurrency","columnType","hasTime","formattedValue","rawValue","isUiElementCell","React","jsxs","CELL_DEFAULT_RIGHT_OFFSET","CELL_INDENT_PER_LEVEL_PX","currentCellId","editValue","LoadingSpinnerIcon","InlineEditField","Fragment","Tooltip","CELL_STICKY_SHADOW_DARK","CELL_STICKY_SHADOW_LIGHT","KeyboardArrowDownIcon","KeyboardArrowRightFilledIcon","LinkIcon","Typography","OpenInNewRounded","DataCell"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),B=require("../../../../forms/currency-input/currency.constant.cjs.js"),K=require("../../../../../utils/countryFlags.cjs.js"),F=require("../../../../../_virtual/index.cjs.js"),r=require("react"),U=require("../../context.cjs.js"),m=new Map;let b=null;const O=({id:n,value:s,onChange:d,onBlur:h,currencyCode:E="USD",autoFocus:q=!1,inputStyle:M,disabled:y=!1})=>{const{openCurrencyDropdown:g,closeCurrencyDropdown:k,currencyDropdownConfig:o,setCurrencyForCell:C,getCurrencyForCell:T}=r.useContext(U.TableContext),p=T?.(n)||E||"USD",[u,v]=r.useState(p),[R,S]=r.useState(s),c=r.useRef(s),a=r.useRef(null),x=r.useRef(null),i=r.useRef(!1),w=r.useRef(d);r.useEffect(()=>{c.current=R},[R]),r.useEffect(()=>{w.current=d},[d]);const D=r.useRef(!1);r.useEffect(()=>{D.current||(S(s),c.current=s,D.current=!0)},[s]),r.useEffect(()=>{p!==u&&v(p)},[p,u]),r.useLayoutEffect(()=>{const e=a.current;if(!e)return;const t=m.get(n);t?(e.value=c.current||"",e.focus(),e.setSelectionRange(t.start,t.end)):b!==n&&(e.value=c.current||"",e.focus())},[]);const N=e=>{if(e==null||e==="")return"";const t=Number(e);return isNaN(t)?String(e):t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},I=e=>{const t=e.target.value;if(t!==""&&(Number(t)<0||!/^\d*\.?\d*$/.test(t))){e.target.value=c.current==="0"?"":c.current||"";return}m.set(n,{start:e.target.selectionStart??0,end:e.target.selectionEnd??0});const f=t===""||t===null||t===void 0?"0":t;S(f),c.current=f,d(f,u)},L=()=>{a.current&&(a.current.value=c.current||"")},P=r.useCallback(()=>{b=n,m.delete(n),a.current&&(a.current.value=N(c.current)),setTimeout(()=>{!i.current&&!o&&h?.()},150),requestAnimationFrame(()=>{b=null})},[n,h,o]),j=r.useCallback(e=>{v(e),C?.(n,e);const t=c.current,f=t===""||t===null||t===void 0?"0":t;w.current(f,e),i.current=!1},[n,C]),_=r.useCallback(e=>{if(e.stopPropagation(),e.preventDefault(),i.current=!0,o)k?.(),i.current=!1;else if(x.current&&g){const t=x.current.getBoundingClientRect();g({anchorRect:t,currentCurrency:u,onSelect:j})}},[o,g,k,u,j]);return r.useEffect(()=>{o||setTimeout(()=>{i.current=!1},100)},[o]),l.jsx("div",{className:"flex flex-col gap-0 mb-0 w-full h-full",children:l.jsxs("label",{className:"relative block w-full h-full",children:[l.jsx("span",{className:"absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white z-10",children:B.CURRENCY_SYMBOLS[u]}),l.jsx("input",{ref:a,placeholder:"0.00",type:"text",inputMode:"decimal",className:F("pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium","text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600","border-gray-300 dark:border-black-600","disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400"),onChange:I,onFocus:L,onBlur:P,onKeyDown:e=>{e.stopPropagation(),!(e.key.length>1||e.ctrlKey||e.metaKey)&&(e.key>="0"&&e.key<="9"||e.key==="."&&!e.currentTarget.value.includes(".")||e.preventDefault())},defaultValue:N(s),id:n,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",...M},autoComplete:"off",autoFocus:q,disabled:y}),l.jsx("div",{ref:x,className:F("absolute inset-y-0 right-1 flex items-center h-full",y?"pointer-events-none opacity-50":"cursor-pointer"),onClick:_,onMouseDown:e=>{e.stopPropagation(),e.preventDefault(),i.current=!0},children:l.jsxs("div",{className:"px-2 py-1 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors",children:[K.getFlagComponent(u),l.jsx("span",{className:"font-medium",children:u}),l.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})})]})})};exports.InlineCurrencyField=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),B=require("../../../../forms/currency-input/currency.constant.cjs.js"),K=require("../../../../../utils/countryFlags.cjs.js"),F=require("../../../../../_virtual/index.cjs.js"),r=require("react"),U=require("../../context.cjs.js"),m=new Map;let b=null;const O=({id:n,value:s,onChange:d,onBlur:h,currencyCode:E="USD",autoFocus:q=!1,inputStyle:M,disabled:y=!1})=>{const{openCurrencyDropdown:g,closeCurrencyDropdown:k,currencyDropdownConfig:o,setCurrencyForCell:C,getCurrencyForCell:T}=r.useContext(U.TableContext),p=T?.(n)||E||"USD",[u,v]=r.useState(p),[R,S]=r.useState(s),c=r.useRef(s),a=r.useRef(null),x=r.useRef(null),i=r.useRef(!1),w=r.useRef(d);r.useEffect(()=>{c.current=R},[R]),r.useEffect(()=>{w.current=d},[d]);const D=r.useRef(!1);r.useEffect(()=>{D.current||(S(s),c.current=s,D.current=!0)},[s]),r.useEffect(()=>{p!==u&&v(p)},[p,u]),r.useLayoutEffect(()=>{const e=a.current;if(!e)return;const t=m.get(n);t?(e.value=c.current||"",e.focus(),e.setSelectionRange(t.start,t.end)):b!==n&&(e.value=c.current||"",e.focus())},[]);const N=e=>{if(e==null||e==="")return"";const t=Number(e);return isNaN(t)?String(e):t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},I=e=>{const t=e.target.value;if(t!==""&&(Number(t)<0||!/^\d*\.?\d*$/.test(t))){e.target.value=c.current==="0"?"":c.current||"";return}m.set(n,{start:e.target.selectionStart??0,end:e.target.selectionEnd??0});const f=t===""||t===null||t===void 0?"0":t;S(f),c.current=f,d(f,u)},L=()=>{a.current&&(a.current.value=c.current||"")},P=r.useCallback(()=>{b=n,m.delete(n),a.current&&(a.current.value=N(c.current)),setTimeout(()=>{!i.current&&!o&&h?.()},150),requestAnimationFrame(()=>{b=null})},[n,h,o]),j=r.useCallback(e=>{v(e),C?.(n,e);const t=c.current,f=t===""||t===null||t===void 0?"0":t;w.current(f,e),i.current=!1},[n,C]),_=r.useCallback(e=>{if(e.stopPropagation(),e.preventDefault(),i.current=!0,o)k?.(),i.current=!1;else if(x.current&&g){const t=x.current.getBoundingClientRect();g({anchorRect:t,currentCurrency:u,onSelect:j})}},[o,g,k,u,j]);return r.useEffect(()=>{o||setTimeout(()=>{i.current=!1},100)},[o]),l.jsx("div",{className:"flex flex-col gap-0 mb-0 w-full h-full",children:l.jsxs("label",{className:"relative block w-full h-full",children:[l.jsx("span",{className:"absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10",children:B.CURRENCY_SYMBOLS[u]}),l.jsx("input",{ref:a,placeholder:"0.00",type:"text",inputMode:"decimal",className:F("pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium","text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600","border-gray-300 dark:border-black-600","disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400"),onChange:I,onFocus:L,onBlur:P,onKeyDown:e=>{e.stopPropagation(),!(e.key.length>1||e.ctrlKey||e.metaKey)&&(e.key>="0"&&e.key<="9"||e.key==="."&&!e.currentTarget.value.includes(".")||e.preventDefault())},defaultValue:N(s),id:n,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",...M},autoComplete:"off",autoFocus:q,disabled:y}),l.jsx("div",{ref:x,className:F("absolute inset-y-0 right-1 flex items-center h-full",y?"pointer-events-none opacity-50":"cursor-pointer"),onClick:_,onMouseDown:e=>{e.stopPropagation(),e.preventDefault(),i.current=!0},children:l.jsxs("div",{className:"px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors",children:[K.getFlagComponent(u),l.jsx("span",{className:"font-medium",children:u}),l.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})})]})})};exports.InlineCurrencyField=O;
2
2
  //# sourceMappingURL=InlineCurrencyField.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlineCurrencyField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"yVAkBMA,MAA2B,IACjC,IAAIC,EAAkC,KAE/B,MAAMC,EAA0D,CAAC,CACtE,GAAAC,EACA,MAAAC,EACA,SAAAC,EACA,OAAAC,EACA,aAAAC,EAAe,MACf,UAAAC,EAAY,GACZ,WAAAC,EACA,SAAAC,EAAW,EACb,IAAM,CACJ,KAAM,CAAE,qBAAAC,EAAsB,sBAAAC,EAAuB,uBAAAC,EAAwB,mBAAAC,EAAoB,mBAAAC,CAAA,EAAuBC,EAAAA,WAAWC,cAAY,EAEzIC,EADkBH,IAAqBZ,CAAE,GACFI,GAAgB,MACvD,CAACY,EAAkBC,CAAmB,EAAIC,EAAAA,SAAiBH,CAAiB,EAC5E,CAACI,EAAeC,CAAgB,EAAIF,EAAAA,SAASjB,CAAK,EAClDoB,EAAmBC,EAAAA,OAAOrB,CAAK,EAC/BsB,EAAWD,EAAAA,OAAyB,IAAI,EACxCE,EAAaF,EAAAA,OAAuB,IAAI,EACxCG,EAAmBH,EAAAA,OAAO,EAAK,EAC/BI,EAAcJ,EAAAA,OAAOpB,CAAQ,EAEnCyB,EAAAA,UAAU,IAAM,CACdN,EAAiB,QAAUF,CAC7B,EAAG,CAACA,CAAa,CAAC,EAElBQ,EAAAA,UAAU,IAAM,CACdD,EAAY,QAAUxB,CACxB,EAAG,CAACA,CAAQ,CAAC,EAEb,MAAM0B,EAAoBN,EAAAA,OAAO,EAAK,EACtCK,EAAAA,UAAU,IAAM,CACTC,EAAkB,UACrBR,EAAiBnB,CAAK,EACtBoB,EAAiB,QAAUpB,EAC3B2B,EAAkB,QAAU,GAEhC,EAAG,CAAC3B,CAAK,CAAC,EAEV0B,EAAAA,UAAU,IAAM,CACVZ,IAAsBC,GACxBC,EAAoBF,CAAiB,CAEzC,EAAG,CAACA,EAAmBC,CAAgB,CAAC,EAExCa,EAAAA,gBAAgB,IAAM,CACpB,MAAMC,EAAKP,EAAS,QACpB,GAAI,CAACO,EAAI,OAET,MAAMC,EAASlC,EAAqB,IAAIG,CAAE,EACtC+B,GACFD,EAAG,MAAQT,EAAiB,SAAW,GACvCS,EAAG,MAAA,EACHA,EAAG,kBAAkBC,EAAO,MAAOA,EAAO,GAAG,GACpCjC,IAAqBE,IAC9B8B,EAAG,MAAQT,EAAiB,SAAW,GACvCS,EAAG,MAAA,EAEP,EAAG,CAAA,CAAE,EAEL,MAAME,EAAkBC,GAAoD,CAC1E,GAAIA,GAAgB,MAAqCA,IAAgB,GAAI,MAAO,GACpF,MAAMC,EAAS,OAAOD,CAAW,EACjC,OAAI,MAAMC,CAAM,EAAU,OAAOD,CAAW,EACrCC,EAAO,eAAe,QAAS,CAAE,sBAAuB,EAAG,sBAAuB,EAAG,CAC9F,EAEMC,EAAkB,GAA2C,CACjE,MAAMC,EAAS,EAAE,OAAO,MACxB,GAAIA,IAAW,KAAO,OAAOA,CAAM,EAAI,GAAK,CAAC,cAAc,KAAKA,CAAM,GAAI,CACxE,EAAE,OAAO,MAAQf,EAAiB,UAAY,IAAM,GAAKA,EAAiB,SAAW,GACrF,MACF,CAEAxB,EAAqB,IAAIG,EAAI,CAC3B,MAAO,EAAE,OAAO,gBAAkB,EAClC,IAAK,EAAE,OAAO,cAAgB,CAAA,CAC/B,EAED,MAAMqC,EAAeD,IAAW,IAAMA,IAAW,MAAQA,IAAW,OAAY,IAAMA,EACtFhB,EAAiBiB,CAAY,EAC7BhB,EAAiB,QAAUgB,EAC3BnC,EAASmC,EAAcrB,CAAgB,CACzC,EAEMsB,EAAc,IAAM,CACpBf,EAAS,UACXA,EAAS,QAAQ,MAAQF,EAAiB,SAAW,GAEzD,EAEMkB,EAAaC,EAAAA,YAAY,IAAM,CACnC1C,EAAmBE,EACnBH,EAAqB,OAAOG,CAAE,EAC1BuB,EAAS,UACXA,EAAS,QAAQ,MAAQS,EAAeX,EAAiB,OAAO,GAElE,WAAW,IAAM,CACX,CAACI,EAAiB,SAAW,CAACf,GAAwBP,IAAA,CAC5D,EAAG,GAAG,EACN,sBAAsB,IAAM,CAC1BL,EAAmB,IACrB,CAAC,CACH,EAAG,CAACE,EAAIG,EAAQO,CAAsB,CAAC,EAEjC+B,EAAuBD,EAAAA,YAC1BE,GAAwB,CACvBzB,EAAoByB,CAAW,EAC/B/B,IAAqBX,EAAI0C,CAAW,EACpC,MAAMC,EAAetB,EAAiB,QAChCgB,EAAeM,IAAiB,IAAMA,IAAiB,MAAQA,IAAiB,OAAY,IAAMA,EACxGjB,EAAY,QAAQW,EAAcK,CAAW,EAC7CjB,EAAiB,QAAU,EAC7B,EACA,CAACzB,EAAIW,CAAkB,CAAA,EAGnBiC,EAAuBJ,EAAAA,YAC1B,GAAwB,CAIvB,GAHA,EAAE,gBAAA,EACF,EAAE,eAAA,EACFf,EAAiB,QAAU,GACvBf,EACFD,IAAA,EACAgB,EAAiB,QAAU,WAClBD,EAAW,SAAWhB,EAAsB,CACrD,MAAMqC,EAAOrB,EAAW,QAAQ,sBAAA,EAChChB,EAAqB,CAAE,WAAYqC,EAAM,gBAAiB7B,EAAkB,SAAUyB,EAAsB,CAC9G,CACF,EACA,CAAC/B,EAAwBF,EAAsBC,EAAuBO,EAAkByB,CAAoB,CAAA,EAG9Gd,OAAAA,EAAAA,UAAU,IAAM,CACTjB,GACH,WAAW,IAAM,CACfe,EAAiB,QAAU,EAC7B,EAAG,GAAG,CAEV,EAAG,CAACf,CAAsB,CAAC,QAGxB,MAAA,CAAI,UAAU,yCACb,SAAAoC,EAAAA,KAAC,QAAA,CAAM,UAAU,+BACf,SAAA,CAAAC,MAAC,OAAA,CAAK,UAAU,yFACb,SAAAC,EAAAA,iBAAiBhC,CAAgB,EACpC,EACA+B,EAAAA,IAAC,QAAA,CACC,IAAKxB,EACL,YAAY,OACZ,KAAK,OACL,UAAU,UACV,UAAW0B,EACT,iGACA,kEACA,wCACA,8FAAA,EAEF,SAAUd,EACV,QAASG,EACT,OAAQC,EACR,UAAY,GAAM,CAChB,EAAE,gBAAA,EACE,IAAE,IAAI,OAAS,GAAK,EAAE,SAAW,EAAE,WACnC,EAAE,KAAO,KAAO,EAAE,KAAO,KACzB,EAAE,MAAQ,KAAO,CAAC,EAAE,cAAc,MAAM,SAAS,GAAG,GACxD,EAAE,eAAA,EACJ,EACA,aAAcP,EAAe/B,CAAK,EAClC,GAAAD,EACA,MAAO,CAAE,OAAQ,oBAAqB,OAAQ,OAAQ,UAAW,sEAAuE,GAAGM,CAAA,EAC3I,aAAa,MACb,UAAAD,EACA,SAAAE,CAAA,CAAA,EAEFwC,EAAAA,IAAC,MAAA,CACC,IAAKvB,EACL,UAAWyB,EAAG,sDAAuD1C,EAAW,iCAAmC,gBAAgB,EACnI,QAASqC,EACT,YAAc,GAAM,CAAE,EAAE,gBAAA,EAAmB,EAAE,eAAA,EAAkBnB,EAAiB,QAAU,EAAM,EAEhG,SAAAqB,EAAAA,KAAC,MAAA,CAAI,UAAU,qJACZ,SAAA,CAAAI,EAAAA,iBAAiBlC,CAAgB,EAClC+B,EAAAA,IAAC,OAAA,CAAK,UAAU,cAAe,SAAA/B,EAAiB,EAChD+B,EAAAA,IAAC,OAAI,UAAU,UAAU,KAAK,OAAO,OAAO,eAAe,QAAQ,YACjE,eAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,YAAa,EAAG,EAAE,iBAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"InlineCurrencyField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
@@ -80,7 +80,7 @@ const ee = ({
80
80
  s.current = !1;
81
81
  }, 100);
82
82
  }, [u]), /* @__PURE__ */ o("div", { className: "flex flex-col gap-0 mb-0 w-full h-full", children: /* @__PURE__ */ T("label", { className: "relative block w-full h-full", children: [
83
- /* @__PURE__ */ o("span", { className: "absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white z-10", children: O[l] }),
83
+ /* @__PURE__ */ o("span", { className: "absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10", children: O[l] }),
84
84
  /* @__PURE__ */ o(
85
85
  "input",
86
86
  {
@@ -117,7 +117,7 @@ const ee = ({
117
117
  onMouseDown: (e) => {
118
118
  e.stopPropagation(), e.preventDefault(), s.current = !0;
119
119
  },
120
- children: /* @__PURE__ */ T("div", { className: "px-2 py-1 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors", children: [
120
+ children: /* @__PURE__ */ T("div", { className: "px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors", children: [
121
121
  Y(l),
122
122
  /* @__PURE__ */ o("span", { className: "font-medium", children: l }),
123
123
  /* @__PURE__ */ o("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ o("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
@@ -1 +1 @@
1
- {"version":3,"file":"InlineCurrencyField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
1
+ {"version":3,"file":"InlineCurrencyField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("../../../_virtual/index.cjs.js"),x=require("./Children.cjs.js"),P=require("react-i18next"),S=require("../../tooltip/Tooltip.cjs.js"),M=({showCounts:v=!0,title:e,icon:h,suffixRecord:m,classValue:N,isSelected:n,selectedClassValue:f,textClassValue:w,selectedId:C,iconsOnly:s,draggingTab:y,disableAnimation:q,tabOptions:j,color:d="light",href:i,onClick:l,role:T,ariaSelected:$,tabIndex:I,onKeyDown:K})=>{const{t:o}=P.useTranslation(),u={selectedId:C,isSelected:n,selectedClassValue:f,textClassValue:w,disableAnimation:q},b={role:T,"aria-selected":$,tabIndex:I,onKeyDown:K,...s&&e?{"aria-label":o(e)}:{}},k=r.jsxs("div",{className:a("flex items-center text-center","opacity-100",s?"":"gap-1.5"),children:[h?r.jsx("div",{className:n?"opacity-100":`opacity-40 ${d==="dark"?"dark:opacity-100 dark:text-black-100":""}`,children:h}):null,r.jsx("div",{className:n?"opacity-100":"opacity-80",children:s?null:o(e||"")}),e!=="More..."&&m?.[e||""]!==void 0&&v?r.jsx("span",{className:a("ml-2 text-xs leading-4 font-normal border rounded-full pr-2 pl-2 border-1",n?a("text-primary-700 border-primary-200 dark:!border-primary-600 border-1",d==="dark"?"text-white bg-primary-700":"bg-neutral-100 dark:bg-primary-700 dark:text-white"):a("text-neutral-500 dark:text-neutral-400 border-neutral-300 dark:border-neutral-500 border-1",d==="dark"?"bg-neutral-800 dark:bg-neutral-700 dark:border-neutral-800":"bg-neutral-100 dark:bg-transparent")),children:String(m?.[e||""]??"0")}):null]}),c=s&&e?r.jsx(S,{title:o(e),delayShow:!0,children:k}):k,p=a(N,y?"opacity-0 cursor-grabbing":"","focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:outline-none"),g=t=>{t.metaKey||t.ctrlKey||t.shiftKey||t.button!==0||(t.preventDefault(),l?.())};return j?r.jsx("div",{id:`btn-tabs-tabswitch-${e}`,className:p,...b,children:r.jsx(x.Children,{...u,children:r.jsxs("div",{className:"flex items-center gap-1",children:[i?r.jsx("a",{href:i,onClick:g,className:"contents uppercase",tabIndex:-1,children:c}):r.jsx("button",{type:"button",onClick:l,className:"contents uppercase",tabIndex:-1,children:c}),j]})})}):i?r.jsx("a",{id:`btn-tabs-tabswitch-${e}`,href:i,className:p,onClick:g,...b,children:r.jsx(x.Children,{...u,children:c})}):r.jsx("button",{id:`btn-tabs-tabswitch-${e}`,className:p,type:"button",onClick:l,...b,children:r.jsx(x.Children,{...u,children:c})})};exports.TabSwitch=M;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("../../../_virtual/index.cjs.js"),u=require("./Children.cjs.js"),P=require("react-i18next"),T=({showCounts:g=!0,title:e,icon:p,suffixRecord:x,classValue:j,isSelected:n,selectedClassValue:v,textClassValue:N,selectedId:f,iconsOnly:h,draggingTab:m,disableAnimation:w,tabOptions:y,color:c="light",href:s,onClick:d,role:C,ariaSelected:q,tabIndex:$,onKeyDown:I})=>{const{t:K}=P.useTranslation(),l={selectedId:f,isSelected:n,selectedClassValue:v,textClassValue:N,disableAnimation:w},o={role:C,"aria-selected":q,tabIndex:$,onKeyDown:I},i=r.jsxs("div",{className:a("flex items-center text-center","opacity-100",h?"":"gap-1.5"),children:[p?r.jsx("div",{className:n?"opacity-100":`opacity-40 ${c==="dark"?"dark:opacity-100 dark:text-black-100":""}`,children:p}):null,r.jsx("div",{className:n?"opacity-100":"opacity-80",children:h?null:K(e||"")}),e!=="More..."&&x?.[e||""]!==void 0&&g?r.jsx("span",{className:a("ml-2 text-xs leading-4 font-normal border rounded-full pr-2 pl-2 border-1",n?a("text-primary-700 border-primary-200 dark:!border-primary-600 border-1",c==="dark"?"text-white bg-primary-700":"bg-neutral-100 dark:bg-primary-700 dark:text-white"):a("text-neutral-500 dark:text-neutral-400 border-neutral-300 dark:border-neutral-500 border-1",c==="dark"?"bg-neutral-800 dark:bg-neutral-700 dark:border-neutral-800":"bg-neutral-100 dark:bg-transparent")),children:String(x?.[e||""]??"0")}):null]}),b=a(j,m?"opacity-0 cursor-grabbing":"","focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:outline-none"),k=t=>{t.metaKey||t.ctrlKey||t.shiftKey||t.button!==0||(t.preventDefault(),d?.())};return y?r.jsx("div",{id:`btn-tabs-tabswitch-${e}`,className:b,...o,children:r.jsx(u.Children,{...l,children:r.jsxs("div",{className:"flex items-center gap-1",children:[s?r.jsx("a",{href:s,onClick:k,className:"contents uppercase",tabIndex:-1,children:i}):r.jsx("button",{type:"button",onClick:d,className:"contents uppercase",tabIndex:-1,children:i}),y]})})}):s?r.jsx("a",{id:`btn-tabs-tabswitch-${e}`,href:s,className:b,onClick:k,...o,children:r.jsx(u.Children,{...l,children:i})}):r.jsx("button",{id:`btn-tabs-tabswitch-${e}`,className:b,type:"button",onClick:d,...o,children:r.jsx(u.Children,{...l,children:i})})};exports.TabSwitch=T;
2
2
  //# sourceMappingURL=TabSwitch.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabSwitch.cjs.js","sources":["../../../../src/components/navigation/tabs/TabSwitch.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport type { MouseEvent } from 'react';\nimport { Children } from './Children';\nimport { useTranslation } from 'react-i18next'\nimport Tooltip from '../../tooltip/Tooltip';\nimport type { TabSwitchProps } from './types';\n\nexport const TabSwitch = ({\n showCounts = true,\n title,\n icon,\n suffixRecord,\n classValue,\n isSelected,\n selectedClassValue,\n textClassValue,\n selectedId,\n iconsOnly,\n draggingTab,\n disableAnimation,\n tabOptions,\n color = 'light',\n href,\n onClick,\n role,\n ariaSelected,\n tabIndex,\n onKeyDown,\n}: TabSwitchProps) => {\n const { t } = useTranslation();\n const childrenProps = {\n selectedId,\n isSelected,\n selectedClassValue,\n textClassValue,\n disableAnimation,\n };\n\n const ariaProps = {\n role,\n 'aria-selected': ariaSelected,\n tabIndex,\n onKeyDown,\n // Icon-only tabs have no visible label — expose the name to assistive tech\n ...(iconsOnly && title ? { 'aria-label': t(title) } : {}),\n };\n\n const text = (\n <div className={classNames('flex items-center text-center', draggingTab ? 'opacity-100' : 'opacity-100', !iconsOnly ? 'gap-1.5' : '')}>\n {icon ? (\n <div className={isSelected ? 'opacity-100' : `opacity-40 ${color === 'dark' ? 'dark:opacity-100 dark:text-black-100' : ''}`}>\n {icon}\n </div>\n ) : null}\n <div className={isSelected ? 'opacity-100' : 'opacity-80'}>\n {iconsOnly ? null : t(title || '')}\n </div>\n {title !== 'More...' && suffixRecord?.[title || ''] !== undefined && showCounts ? (\n <span\n className={classNames(\n 'ml-2 text-xs leading-4 font-normal border rounded-full pr-2 pl-2 border-1',\n isSelected\n ? classNames(\n 'text-primary-700 border-primary-200 dark:!border-primary-600 border-1',\n color === 'dark'\n ? 'text-white bg-primary-700'\n : 'bg-neutral-100 dark:bg-primary-700 dark:text-white',\n )\n : classNames(\n 'text-neutral-500 dark:text-neutral-400 border-neutral-300 dark:border-neutral-500 border-1',\n color === 'dark'\n ? 'bg-neutral-800 dark:bg-neutral-700 dark:border-neutral-800'\n : 'bg-neutral-100 dark:bg-transparent',\n ),\n )}\n >\n {String(suffixRecord?.[title || ''] ?? '0')}\n </span>\n ) : null}\n </div>\n );\n\n // Icon-only tabs have no visible label — show the tab name on hover\n const content =\n iconsOnly && title ? <Tooltip title={t(title)} delayShow>{text}</Tooltip> : text;\n\n const sharedClassName = classNames(\n classValue,\n draggingTab ? 'opacity-0 cursor-grabbing' : '',\n 'focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:outline-none',\n );\n\n const handleLinkClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0) return;\n e.preventDefault();\n onClick?.();\n };\n\n if (tabOptions) {\n return (\n <div id={`btn-tabs-tabswitch-${title}`} className={sharedClassName} {...ariaProps}>\n <Children {...childrenProps}>\n <div className=\"flex items-center gap-1\">\n {href ? (\n <a href={href} onClick={handleLinkClick} className=\"contents uppercase\" tabIndex={-1}>\n {content}\n </a>\n ) : (\n <button type=\"button\" onClick={onClick} className=\"contents uppercase\" tabIndex={-1}>\n {content}\n </button>\n )}\n {tabOptions}\n </div>\n </Children>\n </div>\n );\n }\n\n if (href) {\n return (\n <a\n id={`btn-tabs-tabswitch-${title}`}\n href={href}\n className={sharedClassName}\n onClick={handleLinkClick}\n {...ariaProps}\n >\n <Children {...childrenProps}>{content}</Children>\n </a>\n );\n }\n\n return (\n <button\n id={`btn-tabs-tabswitch-${title}`}\n className={sharedClassName}\n type='button'\n onClick={onClick}\n {...ariaProps}\n >\n <Children {...childrenProps}>{content}</Children>\n </button>\n );\n};\n"],"names":["TabSwitch","showCounts","title","icon","suffixRecord","classValue","isSelected","selectedClassValue","textClassValue","selectedId","iconsOnly","draggingTab","disableAnimation","tabOptions","color","href","onClick","role","ariaSelected","tabIndex","onKeyDown","t","useTranslation","childrenProps","ariaProps","text","jsxs","classNames","jsx","content","Tooltip","sharedClassName","handleLinkClick","e","Children"],"mappings":"qQAOaA,EAAY,CAAC,CACxB,WAAAC,EAAa,GACb,MAAAC,EACA,KAAAC,EACA,aAAAC,EACA,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,WAAAC,EACA,UAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,MAAAC,EAAQ,QACR,KAAAC,EACA,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAC,CACF,IAAsB,CACpB,KAAM,CAAE,EAAAC,CAAA,EAAMC,iBAAA,EACRC,EAAgB,CACpB,WAAAd,EACA,WAAAH,EACA,mBAAAC,EACA,eAAAC,EACA,iBAAAI,CAAA,EAGIY,EAAY,CAChB,KAAAP,EACA,gBAAiBC,EACjB,SAAAC,EACA,UAAAC,EAEA,GAAIV,GAAaR,EAAQ,CAAE,aAAcmB,EAAEnB,CAAK,GAAM,CAAA,CAAC,EAGnDuB,EACJC,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAW,gCAA+C,cAAgCjB,EAAwB,GAAZ,SAAc,EACjI,SAAA,CAAAP,EACCyB,EAAAA,IAAC,MAAA,CAAI,UAAWtB,EAAa,cAAgB,cAAcQ,IAAU,OAAS,uCAAyC,EAAE,GACtH,SAAAX,CAAA,CACH,EACE,KACJyB,EAAAA,IAAC,MAAA,CAAI,UAAWtB,EAAa,cAAgB,aAC1C,SAAAI,EAAY,KAAOW,EAAEnB,GAAS,EAAE,CAAA,CACnC,EACCA,IAAU,WAAaE,IAAeF,GAAS,EAAE,IAAM,QAAaD,EACnE2B,EAAAA,IAAC,OAAA,CACC,UAAWD,EACT,4EACArB,EACIqB,EACA,wEACAb,IAAU,OACN,4BACA,oDAAA,EAEJa,EACA,6FACAb,IAAU,OACN,6DACA,oCAAA,CACN,EAGH,SAAA,OAAOV,IAAeF,GAAS,EAAE,GAAK,GAAG,CAAA,CAAA,EAE1C,IAAA,EACN,EAII2B,EACJnB,GAAaR,EAAQ0B,EAAAA,IAACE,EAAA,CAAQ,MAAOT,EAAEnB,CAAK,EAAG,UAAS,GAAE,SAAAuB,CAAA,CAAK,EAAaA,EAExEM,EAAkBJ,EACtBtB,EACAM,EAAc,4BAA8B,GAC5C,gFAAA,EAGIqB,EAAmBC,GAAqC,CACxDA,EAAE,SAAWA,EAAE,SAAWA,EAAE,UAAYA,EAAE,SAAW,IACzDA,EAAE,eAAA,EACFjB,IAAA,EACF,EAEA,OAAIH,QAEC,MAAA,CAAI,GAAI,sBAAsBX,CAAK,GAAI,UAAW6B,EAAkB,GAAGP,EACtE,eAACU,EAAAA,SAAA,CAAU,GAAGX,EACZ,SAAAG,OAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAX,EACCa,EAAAA,IAAC,KAAE,KAAAb,EAAY,QAASiB,EAAiB,UAAU,qBAAqB,SAAU,GAC/E,SAAAH,CAAA,CACH,EAEAD,EAAAA,IAAC,SAAA,CAAO,KAAK,SAAS,QAAAZ,EAAkB,UAAU,qBAAqB,SAAU,GAC9E,SAAAa,CAAA,CACH,EAEDhB,CAAA,CAAA,CACH,EACF,EACF,EAIAE,EAEAa,EAAAA,IAAC,IAAA,CACC,GAAI,sBAAsB1B,CAAK,GAC/B,KAAAa,EACA,UAAWgB,EACX,QAASC,EACR,GAAGR,EAEJ,SAAAI,EAAAA,IAACM,EAAAA,SAAA,CAAU,GAAGX,EAAgB,SAAAM,CAAA,CAAQ,CAAA,CAAA,EAM1CD,EAAAA,IAAC,SAAA,CACC,GAAI,sBAAsB1B,CAAK,GAC/B,UAAW6B,EACX,KAAK,SACL,QAAAf,EACC,GAAGQ,EAEJ,SAAAI,EAAAA,IAACM,EAAAA,SAAA,CAAU,GAAGX,EAAgB,SAAAM,CAAA,CAAQ,CAAA,CAAA,CAG5C"}
1
+ {"version":3,"file":"TabSwitch.cjs.js","sources":["../../../../src/components/navigation/tabs/TabSwitch.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport type { MouseEvent } from 'react';\nimport { Children } from './Children';\nimport { useTranslation } from 'react-i18next'\nimport type { TabSwitchProps } from './types';\n\nexport const TabSwitch = ({\n showCounts = true,\n title,\n icon,\n suffixRecord,\n classValue,\n isSelected,\n selectedClassValue,\n textClassValue,\n selectedId,\n iconsOnly,\n draggingTab,\n disableAnimation,\n tabOptions,\n color = 'light',\n href,\n onClick,\n role,\n ariaSelected,\n tabIndex,\n onKeyDown,\n}: TabSwitchProps) => {\n const { t } = useTranslation();\n const childrenProps = {\n selectedId,\n isSelected,\n selectedClassValue,\n textClassValue,\n disableAnimation,\n };\n\n const ariaProps = {\n role,\n 'aria-selected': ariaSelected,\n tabIndex,\n onKeyDown,\n };\n\n const text = (\n <div className={classNames('flex items-center text-center', draggingTab ? 'opacity-100' : 'opacity-100', !iconsOnly ? 'gap-1.5' : '')}>\n {icon ? (\n <div className={isSelected ? 'opacity-100' : `opacity-40 ${color === 'dark' ? 'dark:opacity-100 dark:text-black-100' : ''}`}>\n {icon}\n </div>\n ) : null}\n <div className={isSelected ? 'opacity-100' : 'opacity-80'}>\n {iconsOnly ? null : t(title || '')}\n </div>\n {title !== 'More...' && suffixRecord?.[title || ''] !== undefined && showCounts ? (\n <span\n className={classNames(\n 'ml-2 text-xs leading-4 font-normal border rounded-full pr-2 pl-2 border-1',\n isSelected\n ? classNames(\n 'text-primary-700 border-primary-200 dark:!border-primary-600 border-1',\n color === 'dark'\n ? 'text-white bg-primary-700'\n : 'bg-neutral-100 dark:bg-primary-700 dark:text-white',\n )\n : classNames(\n 'text-neutral-500 dark:text-neutral-400 border-neutral-300 dark:border-neutral-500 border-1',\n color === 'dark'\n ? 'bg-neutral-800 dark:bg-neutral-700 dark:border-neutral-800'\n : 'bg-neutral-100 dark:bg-transparent',\n ),\n )}\n >\n {String(suffixRecord?.[title || ''] ?? '0')}\n </span>\n ) : null}\n </div>\n );\n\n const sharedClassName = classNames(\n classValue,\n draggingTab ? 'opacity-0 cursor-grabbing' : '',\n 'focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:outline-none',\n );\n\n const handleLinkClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0) return;\n e.preventDefault();\n onClick?.();\n };\n\n if (tabOptions) {\n return (\n <div id={`btn-tabs-tabswitch-${title}`} className={sharedClassName} {...ariaProps}>\n <Children {...childrenProps}>\n <div className=\"flex items-center gap-1\">\n {href ? (\n <a href={href} onClick={handleLinkClick} className=\"contents uppercase\" tabIndex={-1}>\n {text}\n </a>\n ) : (\n <button type=\"button\" onClick={onClick} className=\"contents uppercase\" tabIndex={-1}>\n {text}\n </button>\n )}\n {tabOptions}\n </div>\n </Children>\n </div>\n );\n }\n\n if (href) {\n return (\n <a\n id={`btn-tabs-tabswitch-${title}`}\n href={href}\n className={sharedClassName}\n onClick={handleLinkClick}\n {...ariaProps}\n >\n <Children {...childrenProps}>{text}</Children>\n </a>\n );\n }\n\n return (\n <button\n id={`btn-tabs-tabswitch-${title}`}\n className={sharedClassName}\n type='button'\n onClick={onClick}\n {...ariaProps}\n >\n <Children {...childrenProps}>{text}</Children>\n </button>\n );\n};\n"],"names":["TabSwitch","showCounts","title","icon","suffixRecord","classValue","isSelected","selectedClassValue","textClassValue","selectedId","iconsOnly","draggingTab","disableAnimation","tabOptions","color","href","onClick","role","ariaSelected","tabIndex","onKeyDown","t","useTranslation","childrenProps","ariaProps","text","jsxs","classNames","jsx","sharedClassName","handleLinkClick","e","Children"],"mappings":"2NAMaA,EAAY,CAAC,CACxB,WAAAC,EAAa,GACb,MAAAC,EACA,KAAAC,EACA,aAAAC,EACA,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,WAAAC,EACA,UAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,MAAAC,EAAQ,QACR,KAAAC,EACA,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAC,CACF,IAAsB,CACpB,KAAM,CAAE,EAAAC,CAAA,EAAMC,iBAAA,EACRC,EAAgB,CACpB,WAAAd,EACA,WAAAH,EACA,mBAAAC,EACA,eAAAC,EACA,iBAAAI,CAAA,EAGIY,EAAY,CAChB,KAAAP,EACA,gBAAiBC,EACjB,SAAAC,EACA,UAAAC,CAAA,EAGIK,EACJC,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAW,gCAA+C,cAAgCjB,EAAwB,GAAZ,SAAc,EACjI,SAAA,CAAAP,EACCyB,EAAAA,IAAC,MAAA,CAAI,UAAWtB,EAAa,cAAgB,cAAcQ,IAAU,OAAS,uCAAyC,EAAE,GACtH,SAAAX,CAAA,CACH,EACE,KACJyB,EAAAA,IAAC,MAAA,CAAI,UAAWtB,EAAa,cAAgB,aAC1C,SAAAI,EAAY,KAAOW,EAAEnB,GAAS,EAAE,CAAA,CACnC,EACCA,IAAU,WAAaE,IAAeF,GAAS,EAAE,IAAM,QAAaD,EACnE2B,EAAAA,IAAC,OAAA,CACC,UAAWD,EACT,4EACArB,EACIqB,EACA,wEACAb,IAAU,OACN,4BACA,oDAAA,EAEJa,EACA,6FACAb,IAAU,OACN,6DACA,oCAAA,CACN,EAGH,SAAA,OAAOV,IAAeF,GAAS,EAAE,GAAK,GAAG,CAAA,CAAA,EAE1C,IAAA,EACN,EAGI2B,EAAkBF,EACtBtB,EACAM,EAAc,4BAA8B,GAC5C,gFAAA,EAGImB,EAAmBC,GAAqC,CACxDA,EAAE,SAAWA,EAAE,SAAWA,EAAE,UAAYA,EAAE,SAAW,IACzDA,EAAE,eAAA,EACFf,IAAA,EACF,EAEA,OAAIH,QAEC,MAAA,CAAI,GAAI,sBAAsBX,CAAK,GAAI,UAAW2B,EAAkB,GAAGL,EACtE,eAACQ,EAAAA,SAAA,CAAU,GAAGT,EACZ,SAAAG,OAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAX,EACCa,EAAAA,IAAC,KAAE,KAAAb,EAAY,QAASe,EAAiB,UAAU,qBAAqB,SAAU,GAC/E,SAAAL,CAAA,CACH,EAEAG,EAAAA,IAAC,SAAA,CAAO,KAAK,SAAS,QAAAZ,EAAkB,UAAU,qBAAqB,SAAU,GAC9E,SAAAS,CAAA,CACH,EAEDZ,CAAA,CAAA,CACH,EACF,EACF,EAIAE,EAEAa,EAAAA,IAAC,IAAA,CACC,GAAI,sBAAsB1B,CAAK,GAC/B,KAAAa,EACA,UAAWc,EACX,QAASC,EACR,GAAGN,EAEJ,SAAAI,EAAAA,IAACI,EAAAA,SAAA,CAAU,GAAGT,EAAgB,SAAAE,CAAA,CAAK,CAAA,CAAA,EAMvCG,EAAAA,IAAC,SAAA,CACC,GAAI,sBAAsB1B,CAAK,GAC/B,UAAW2B,EACX,KAAK,SACL,QAAAb,EACC,GAAGQ,EAEJ,SAAAI,EAAAA,IAACI,EAAAA,SAAA,CAAU,GAAGT,EAAgB,SAAAE,CAAA,CAAK,CAAA,CAAA,CAGzC"}