@owp/core 2.5.8 → 2.5.10

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 (66) hide show
  1. package/dist/_virtual/index16.js +4 -4
  2. package/dist/_virtual/index17.js +4 -4
  3. package/dist/_virtual/index18.js +4 -4
  4. package/dist/_virtual/index19.js +4 -4
  5. package/dist/components/OwpDialog/OwpDialog.js +67 -46
  6. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  7. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +162 -153
  8. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  9. package/dist/components/OwpTable/OwpDataTable.js +297 -283
  10. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  11. package/dist/components/OwpTable/OwpFieldTable.js +98 -86
  12. package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
  13. package/dist/components/OwpTable/OwpTable.js +145 -127
  14. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  15. package/dist/components/OwpTable/internal/defaultTableStyle.js +21 -15
  16. package/dist/components/OwpTable/internal/defaultTableStyle.js.map +1 -1
  17. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +195 -147
  18. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  19. package/dist/constants/tableTheme.js.map +1 -1
  20. package/dist/features/themePreview/components/ThemePreviewCanvas.js +300 -263
  21. package/dist/features/themePreview/components/ThemePreviewCanvas.js.map +1 -1
  22. package/dist/features/themePreview/components/ThemePreviewCanvasSections.js +148 -141
  23. package/dist/features/themePreview/components/ThemePreviewCanvasSections.js.map +1 -1
  24. package/dist/features/themePreview/components/ThemePreviewColorField.js +168 -138
  25. package/dist/features/themePreview/components/ThemePreviewColorField.js.map +1 -1
  26. package/dist/features/themePreview/components/ThemePreviewControls.js +410 -218
  27. package/dist/features/themePreview/components/ThemePreviewControls.js.map +1 -1
  28. package/dist/features/themePreview/components/themePreviewCanvas.shared.js +145 -125
  29. package/dist/features/themePreview/components/themePreviewCanvas.shared.js.map +1 -1
  30. package/dist/features/themePreview/configs/table.js +4 -2
  31. package/dist/features/themePreview/configs/table.js.map +1 -1
  32. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +124 -118
  33. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  34. package/dist/features/themePreview/hooks/useThemePreview.js +275 -193
  35. package/dist/features/themePreview/hooks/useThemePreview.js.map +1 -1
  36. package/dist/features/themePreview/utils/themePreviewDefinitions.js +8 -0
  37. package/dist/features/themePreview/utils/themePreviewDefinitions.js.map +1 -1
  38. package/dist/features/themePreview/utils/themePreviewSettings.js +188 -151
  39. package/dist/features/themePreview/utils/themePreviewSettings.js.map +1 -1
  40. package/dist/features/themePreview.js +18 -17
  41. package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
  42. package/dist/layout/components/toolbar/ToolbarLayout.js +36 -35
  43. package/dist/layout/components/toolbar/ToolbarLayout.js.map +1 -1
  44. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/RestartAltOutlined.js +9 -0
  45. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/RestartAltOutlined.js.map +1 -0
  46. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  47. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  48. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
  49. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  50. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  51. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  52. package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
  53. package/dist/owp-app.css +1 -1
  54. package/dist/types/components/OwpDialog/OwpDialog.d.ts +2 -0
  55. package/dist/types/components/OwpTable/OwpFieldTable.d.ts +3 -2
  56. package/dist/types/components/OwpTable/internal/defaultTableStyle.d.ts +2 -0
  57. package/dist/types/constants/tableTheme.d.ts +1 -0
  58. package/dist/types/features/themePreview/components/ThemePreviewColorField.d.ts +3 -1
  59. package/dist/types/features/themePreview/components/ThemePreviewControls.d.ts +4 -1
  60. package/dist/types/features/themePreview/configs/settings.d.ts +2 -0
  61. package/dist/types/features/themePreview/configs/table.d.ts +2 -0
  62. package/dist/types/features/themePreview/hooks/useThemePreview.d.ts +3 -0
  63. package/dist/types/features/themePreview/utils/index.d.ts +1 -1
  64. package/dist/types/features/themePreview/utils/themePreviewSettings.d.ts +11 -1
  65. package/dist/types/types/OwpTableThemeTypes.d.ts +8 -0
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"OwpDataTable.js","sources":["../../../src/components/OwpTable/OwpDataTable.tsx"],"sourcesContent":["import {\n resolveOwpGridTheme,\n type OwpResolvedGridThemeConfigType,\n} from '@/constants/gridTheme';\nimport {\n resolveOwpTableTheme,\n type OwpResolvedTableThemeConfigType,\n} from '@/constants/tableTheme';\nimport {\n getTreeGridFontFaceStyles,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { Divider, TextField, Typography, TypographyProps } from '@mui/material';\nimport Checkbox, { checkboxClasses } from '@mui/material/Checkbox';\nimport { grey } from '@mui/material/colors';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell, { TableCellProps } from '@mui/material/TableCell';\nimport TableContainer, { TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport { type SxProps, type Theme, useTheme } from '@mui/material/styles';\nimport { isArray, isBoolean, isEmpty, isEqual, isNumber, uniqueId } from 'es-toolkit/compat';\nimport { ChangeEvent, MouseEvent, ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { OwpNumberField } from '../OwpNumberField';\nimport {\n getTreeGridBodyCellSx,\n getTreeGridBodyRowSx,\n getTreeGridContainerSx,\n getTreeGridHeaderCellSx,\n TREEGRID_TABLE_BODY_BORDER_COLOR,\n TREEGRID_TABLE_HEADER_BORDER_COLOR,\n} from './internal/treeGridTableStyle';\nimport {\n defaultStyledTableTheme,\n defaultTableSortLabelSx,\n getDefaultTableCellSx,\n getDefaultTableHeaderCellSx,\n getDefaultTableHeaderLabelSx,\n} from './internal/defaultTableStyle';\n\ntype Row = object;\ntype TableCellAlign = NonNullable<TableCellProps['align']>;\n\ninterface HeadCell {\n enablePadding?: boolean;\n id: string;\n label: string;\n sx?: TypographyProps['sx'];\n inputLabel?: string;\n rangeKey?: string;\n rangeLabel?: { start: string; end: string };\n align?: string;\n valueAlign?: string;\n canTextField?: boolean;\n textFieldType?: string;\n}\n\ninterface DataTableHeadProps {\n sx?: TableCellProps['sx'];\n headCells: HeadCell[];\n numSelected: number;\n onRequestSort: (event: MouseEvent<unknown>, property: string) => void;\n onSelectAllClick: (event: ChangeEvent<HTMLInputElement>) => void;\n order: Order;\n orderBy: string;\n rowCount: number;\n canCheckbox?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n gridTheme: OwpResolvedGridThemeConfigType;\n tableTheme: OwpResolvedTableThemeConfigType;\n}\n\ninterface OwpDataTableProps<T extends Row = Row> {\n className?: string;\n sx?: TableContainerProps['sx'];\n headSx?: TableCellProps['sx'];\n headCells: HeadCell[];\n rows?: T[];\n canCheckbox?: boolean;\n canTotalCountRow?: boolean;\n selected?: T[];\n onSelect?: (rows: T[] | []) => void;\n onBlur?: (evt: OwpDataTableBlurEvent, dataIndex: number) => void;\n canSelectingSingle?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n fixedRowCount?: number;\n}\n\nconst defaultHeadCellsSx = (\n tableTheme: OwpResolvedTableThemeConfigType,\n fallbackBackgroundColor: string,\n) =>\n ({\n ...getDefaultTableHeaderCellSx(tableTheme, fallbackBackgroundColor),\n borderBottom: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n }) as const;\n\nconst headerBorderRight = {\n borderRight: `1px solid ${TREEGRID_TABLE_HEADER_BORDER_COLOR}`,\n};\n\nconst DEFAULT_TABLE_BORDER_COLOR = grey[400];\n\nconst defaultRowBorderRight = {\n borderRight: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n};\n\nconst treeGridRowBorderRight = {\n borderRight: `1px solid ${TREEGRID_TABLE_BODY_BORDER_COLOR}`,\n};\n\nconst getDefaultTableBodyCellSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n ...getDefaultTableCellSx(tableTheme),\n }) as const;\n\nconst defaultHeaderDividerSx = {\n borderRight: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n} as const;\n\nconst tableRadiusZeroSx = {\n borderRadius: 0,\n} as const;\n\nconst lastRowRadiusZeroSx = {\n '& > th, & > td': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n} as const;\n\nconst treeGridSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n display: 'flex',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n fontWeight: 'inherit',\n justifyContent: 'center',\n lineHeight: 'inherit',\n overflow: 'hidden',\n position: 'relative',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n margin: 0,\n position: 'absolute',\n right: 0,\n },\n} as const;\n\n/**\n * sx 병합 유틸\n * @param styles 병합 대상 sx 목록\n */\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\n/**\n * 고정 row 수 계산\n * @param fixedRowCount 고정 row 수\n */\nconst getFixedRowCount = (fixedRowCount?: number) => {\n if (!isNumber(fixedRowCount) || fixedRowCount < 1) {\n return undefined;\n }\n\n return fixedRowCount;\n};\n\n/**\n * 빈 row 목록 생성\n * @param count 생성 수\n */\nconst createEmptyRows = (count: number) => Array.from({ length: count }, () => ({}) as Row);\n\n/**\n * TableCell align 정규화\n * @param align align 값\n * @param fallback 기본 align 값\n */\nconst getTableCellAlign = (align: string | undefined, fallback: TableCellAlign): TableCellAlign => {\n switch (align) {\n case 'center':\n case 'right':\n case 'left':\n case 'inherit':\n case 'justify':\n return align;\n default:\n return fallback;\n }\n};\n\n/**\n * row 값 조회\n * @param row row 값\n * @param key 조회 key\n */\nconst getRowValue = (row: Row, key?: string) => {\n if (!key) {\n return undefined;\n }\n\n return (row as Record<string, unknown>)?.[key];\n};\n\nconst getComparableValue = (value: unknown) => {\n if (typeof value === 'string' || isNumber(value)) {\n return value;\n }\n\n return undefined;\n};\n\nfunction descendingComparator(a: Row, b: Row, orderBy: string) {\n const aValue = getComparableValue(getRowValue(a, orderBy));\n const bValue = getComparableValue(getRowValue(b, orderBy));\n\n if (bValue == null && aValue == null) {\n return 0;\n }\n if (bValue == null) {\n return -1;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue < aValue) {\n return -1;\n }\n if (bValue > aValue) {\n return 1;\n }\n return 0;\n}\n\ntype Order = 'asc' | 'desc';\ntype OwpDataTableBlurEvent = Record<string, unknown> & {\n target: {\n value: string | number | undefined;\n };\n};\n\nfunction getComparator(order: Order, orderBy: string): (a: Row, b: Row) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\ntype RowRangeValue = {\n start?: string | number;\n end?: string | number;\n};\n\nconst getRowRangeValue = (row: Row, rangeKey?: string) => {\n if (!rangeKey) {\n return undefined;\n }\n\n return getRowValue(row, rangeKey) as RowRangeValue | undefined;\n};\n\nconst getRangeLabel = (row: Row, cell: HeadCell) => {\n if (!(cell.inputLabel ?? cell.rangeKey)) {\n return '';\n }\n\n const rangeValue = getRowRangeValue(row, cell.rangeKey);\n\n return `${cell.rangeLabel?.start ? `${cell.rangeLabel?.start}: ` : ''}${rangeValue?.start} ~ ${cell.rangeLabel?.end ? `${cell.rangeLabel?.end}: ` : ''}${rangeValue?.end}`;\n};\n\nconst getRowTabIndex = (row: Row, fallbackIndex: number) => {\n const rowIndex = getRowValue(row, 'index');\n\n return isNumber(rowIndex) ? rowIndex : fallbackIndex;\n};\n\nconst getEditableCellSx = (\n valueAlign?: HeadCell['valueAlign'],\n fontSize?: number | string,\n) => ({\n '& input': {\n fontSize,\n textAlign: valueAlign ?? 'center',\n },\n '& .MuiInputBase-input': {\n fontSize,\n },\n height: 34,\n});\n\nfunction DataTableHead(props: DataTableHeadProps) {\n const theme = useTheme();\n const {\n sx,\n headCells,\n onSelectAllClick,\n order,\n orderBy,\n numSelected,\n rowCount,\n onRequestSort,\n canCheckbox,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle,\n gridTheme,\n tableTheme,\n } = props;\n const createSortHandler = (property: string) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n <TableRow\n sx={mergeSx(\n canUseTreeGridStyle && { height: gridTheme.header.height },\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {canCheckbox && (\n <TableCell\n padding=\"checkbox\"\n sx={mergeSx(\n {\n ...defaultHeadCellsSx(tableTheme, theme.palette.grey[200]),\n },\n !canUseTreeGridStyle && defaultHeaderDividerSx,\n canUseTreeGridStyle && headerBorderRight,\n canUseTreeGridStyle && getTreeGridHeaderCellSx(gridTheme),\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Checkbox\n color=\"default\"\n sx={mergeSx(\n {\n [`&, &.${checkboxClasses.checked}`]: canUseTreeGridStyle\n ? { color: grey[50] }\n : { color: 'inherit' },\n },\n canUseTreeGridStyle && { p: 0 },\n )}\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n />\n </TableCell>\n )}\n {headCells.map((headCell, index) => (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'pl-20'}\n key={headCell.id}\n align={getTableCellAlign(headCell.align, 'center')}\n padding={headCell.enablePadding ? 'normal' : 'none'}\n sortDirection={orderBy === headCell.id ? order : false}\n sx={mergeSx(\n {\n ...defaultHeadCellsSx(tableTheme, theme.palette.grey[200]),\n },\n !canUseTreeGridStyle && headCells.length - 1 !== index && defaultHeaderDividerSx,\n canUseTreeGridStyle && headCells.length - 1 !== index && headerBorderRight,\n canUseTreeGridStyle && getTreeGridHeaderCellSx(gridTheme),\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n canUseTreeGridStyle && headCell?.sx,\n )}\n >\n {canUseOrderBy ? (\n <TableSortLabel\n sx={canUseTreeGridStyle ? treeGridSortLabelSx : defaultTableSortLabelSx}\n active={orderBy === headCell.id}\n direction={orderBy === headCell.id ? order : 'asc'}\n onClick={createSortHandler(headCell.id)}\n >\n {canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography sx={mergeSx(getDefaultTableHeaderLabelSx(tableTheme), headCell?.sx)}>\n {headCell.label}\n </Typography>\n )}\n </TableSortLabel>\n ) : canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography sx={mergeSx(getDefaultTableHeaderLabelSx(tableTheme), headCell?.sx)}>\n {headCell.label}\n </Typography>\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\n/**\n * OwpDataTable 컴포넌트\n * @param className CSS 클래스명\n * @param sx sx 값\n * @param headSx headSx 값\n * @param headCells headCells 값\n * @param rows 행 데이터 목록\n * @param selected selected 값\n * @param canTableRadiusZero 테이블 radius 0 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param fixedRowCount 고정 row 수\n */\nexport function OwpDataTable<T extends Row = Row>({\n className,\n sx,\n headSx,\n headCells,\n rows,\n selected,\n canCheckbox,\n canTotalCountRow,\n canSelectingSingle,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle = false,\n fixedRowCount,\n onSelect,\n onBlur,\n}: OwpDataTableProps<T>) {\n const currentSettings = useGetCurrentSettings();\n const [order, setOrder] = useState<Order>('asc');\n const [orderBy, setOrderBy] = useState<string>('');\n const [selectedRows, setSelectedRows] = useState<T[] | []>([]);\n const tableIdRef = useRef(uniqueId('owp-data-table'));\n const useFixedRowCount = useMemo(() => getFixedRowCount(fixedRowCount), [fixedRowCount]);\n const resolvedRows = useMemo(() => {\n const nextRows = isArray(rows) ? rows : [];\n\n return useFixedRowCount ? nextRows.slice(0, useFixedRowCount) : nextRows;\n }, [rows, useFixedRowCount]);\n const resolvedHeadCells = useMemo(() => headCells ?? [], [headCells]);\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentSettings?.theme?.main?.grid),\n [currentSettings],\n );\n const tableTheme = useMemo(\n () => resolveOwpTableTheme(currentSettings?.theme?.main?.table, defaultStyledTableTheme),\n [currentSettings],\n );\n const useTableRadiusZero = canUseTreeGridStyle ? canTableRadiusZero !== false : !!canTableRadiusZero;\n const useCheckBox = isBoolean(canCheckbox) ? canCheckbox : true;\n const useTotalCountRow = isBoolean(canTotalCountRow) ? canTotalCountRow : true;\n\n useEffect(() => {\n if (!isEmpty(selected)) {\n setSelectedRows(selected);\n }\n }, [selected]);\n\n useEffect(() => {\n onSelect?.(selectedRows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRows]);\n\n const handleRequestSort = (_: MouseEvent<unknown>, property: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n };\n\n const handleSelectAllClick = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n setSelectedRows(resolvedRows);\n return;\n }\n setSelectedRows([]);\n };\n\n const handleClick = (_: MouseEvent<unknown>, row: T) => {\n if (canSelectingSingle) {\n setSelectedRows([row]);\n return;\n }\n setSelectedRows((prev: T[]) => {\n const isIncluded = !!prev.find((item) => isEqual(item, row));\n return isIncluded ? prev?.filter((item: T) => !isEqual(item, row)) : [...prev, row];\n });\n };\n\n const visibleRows = useMemo(\n () => [...resolvedRows].sort(getComparator(order, orderBy)),\n [order, orderBy, resolvedRows],\n );\n const displayRows = useMemo(() => {\n if (!useFixedRowCount || visibleRows.length >= useFixedRowCount) {\n return visibleRows;\n }\n\n return [...visibleRows, ...createEmptyRows(useFixedRowCount - visibleRows.length)];\n }, [useFixedRowCount, visibleRows]);\n\n return (\n <Paper\n className={className}\n sx={mergeSx(\n { width: '100%' },\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {canUseTreeGridStyle && <GlobalStyles styles={getTreeGridFontFaceStyles()} />}\n <TableContainer\n sx={mergeSx(\n { height: useFixedRowCount ? 'auto' : 500, borderRadius: 2 },\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useFixedRowCount && { overflowY: 'hidden' },\n useTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Table\n stickyHeader={!canUseTreeGridStyle}\n sx={mergeSx({ minWidth: 200 }, useTableRadiusZero && tableRadiusZeroSx)}\n aria-labelledby=\"owp-data-table\"\n >\n <DataTableHead\n sx={headSx}\n headCells={resolvedHeadCells}\n gridTheme={treeGridTheme}\n tableTheme={tableTheme}\n numSelected={selectedRows.length}\n order={order}\n orderBy={orderBy}\n onSelectAllClick={handleSelectAllClick}\n canCheckbox={!canSelectingSingle && useCheckBox}\n canUseOrderBy={canUseOrderBy}\n canTableRadiusZero={useTableRadiusZero}\n canUseTreeGridStyle={canUseTreeGridStyle}\n onRequestSort={handleRequestSort}\n rowCount={resolvedRows.length}\n />\n <TableBody sx={mergeSx(useTableRadiusZero && tableRadiusZeroSx)}>\n {displayRows.map((row, index) => {\n const isItemSelected = selectedRows.some((item) => isEqual(item, row));\n const isLastRow = displayRows.length - 1 === index;\n const isPlaceholderRow = useFixedRowCount ? index >= visibleRows.length : false;\n const labelId = `${tableIdRef.current}-${index}`;\n\n return (\n <TableRow\n hover\n role={canUseTreeGridStyle ? undefined : 'checkbox'}\n aria-checked={canUseTreeGridStyle ? undefined : isItemSelected}\n tabIndex={-1}\n key={`${labelId}-row-${index}`}\n selected={isItemSelected}\n sx={mergeSx(\n { cursor: isPlaceholderRow ? 'default' : 'pointer' },\n canUseTreeGridStyle &&\n getTreeGridBodyRowSx(treeGridTheme, {\n canHover: !isPlaceholderRow,\n selected: isItemSelected,\n }),\n canUseTreeGridStyle && { height: 30 },\n useTableRadiusZero && tableRadiusZeroSx,\n useTableRadiusZero && isLastRow && lastRowRadiusZeroSx,\n )}\n >\n {useCheckBox && (\n <TableCell\n padding=\"checkbox\"\n onClick={(event) => {\n if (!isPlaceholderRow) {\n handleClick(event, row as T);\n }\n }}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight,\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n <Checkbox\n color=\"default\"\n checked={isItemSelected}\n disabled={isPlaceholderRow}\n sx={mergeSx(canUseTreeGridStyle && { p: 0 })}\n />\n </TableCell>\n )}\n {resolvedHeadCells.map((cell, cellIndex) => {\n const _key = `${labelId}-row-${index}-cell-${cellIndex}`;\n const rangeLabel = getRangeLabel(row, cell);\n const rowTabIndex = getRowTabIndex(row, index);\n const cellValue = getRowValue(row, String(cell?.id));\n if (cellIndex === 0) {\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n component={canUseTreeGridStyle ? 'td' : 'th'}\n id={labelId}\n scope={canUseTreeGridStyle ? undefined : 'row'}\n padding=\"none\"\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n resolvedHeadCells.length > 1 &&\n (canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cellValue as ReactNode}\n </TableCell>\n );\n }\n\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n resolvedHeadCells.length - 1 !== cellIndex &&\n (canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cell?.canTextField ? (\n cell?.textFieldType === 'number' ? (\n <OwpNumberField\n variant=\"standard\"\n decimalScale={2}\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(\n cell?.valueAlign,\n canUseTreeGridStyle\n ? treeGridTheme.cell.fontSize\n : tableTheme.cell.fontSize,\n )}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n isAllowed={(values) => {\n const { floatValue } = values;\n const end = getRowRangeValue(row, cell?.rangeKey)?.end;\n\n if (isNumber(floatValue) && isNumber(end)) {\n return floatValue <= end;\n }\n\n return true;\n }}\n value={cellValue as string | number | undefined}\n onBlur={(evt) => {\n const start = getRowRangeValue(row, cell?.rangeKey)?.start;\n const nextValue = evt.target.value?.replace(/,/g, '');\n\n onBlur?.(\n {\n ...evt,\n target: {\n ...evt.target,\n value:\n isNumber(start) && nextValue !== ''\n ? Number(start > Number(nextValue) ? start : nextValue)\n : nextValue,\n },\n },\n rowTabIndex,\n );\n }}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(\n cell?.valueAlign,\n canUseTreeGridStyle\n ? treeGridTheme.cell.fontSize\n : tableTheme.cell.fontSize,\n )}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n type={cell?.textFieldType ?? 'text'}\n defaultValue={\n cellValue as string | number | readonly string[] | undefined\n }\n onBlur={(evt) =>\n onBlur?.(\n { ...evt, target: { ...evt.target, value: evt.target.value } },\n rowTabIndex,\n )\n }\n />\n )\n ) : (\n (cellValue as ReactNode)\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n {useTotalCountRow && <Divider sx={mergeSx(useTableRadiusZero && tableRadiusZeroSx)} />}\n {useTotalCountRow && (\n <Typography\n className=\"w-full py-8 pr-12\"\n align=\"right\"\n sx={mergeSx(\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n 전체: {resolvedRows.length.toLocaleString()} 건\n </Typography>\n )}\n </Paper>\n );\n}\n"],"names":["defaultHeadCellsSx","__name","tableTheme","fallbackBackgroundColor","getDefaultTableHeaderCellSx","DEFAULT_TABLE_BORDER_COLOR","headerBorderRight","TREEGRID_TABLE_HEADER_BORDER_COLOR","grey","defaultRowBorderRight","treeGridRowBorderRight","TREEGRID_TABLE_BODY_BORDER_COLOR","getDefaultTableBodyCellSx","getDefaultTableCellSx","defaultHeaderDividerSx","tableRadiusZeroSx","lastRowRadiusZeroSx","treeGridSortLabelSx","mergeSx","styles","acc","style","isArray","getFixedRowCount","fixedRowCount","isNumber","createEmptyRows","count","getTableCellAlign","align","fallback","getRowValue","row","key","getComparableValue","value","descendingComparator","a","b","orderBy","aValue","bValue","getComparator","order","getRowRangeValue","rangeKey","getRangeLabel","cell","rangeValue","_a","_b","_c","_d","getRowTabIndex","fallbackIndex","rowIndex","getEditableCellSx","valueAlign","fontSize","DataTableHead","props","theme","useTheme","sx","headCells","onSelectAllClick","numSelected","rowCount","onRequestSort","canCheckbox","canUseOrderBy","canTableRadiusZero","canUseTreeGridStyle","gridTheme","createSortHandler","property","event","TableHead","jsxs","TableRow","jsx","TableCell","getTreeGridHeaderCellSx","Checkbox","checkboxClasses","headCell","index","TableSortLabel","defaultTableSortLabelSx","Typography","getDefaultTableHeaderLabelSx","OwpDataTable","className","headSx","rows","selected","canTotalCountRow","canSelectingSingle","onSelect","onBlur","currentSettings","useGetCurrentSettings","setOrder","useState","setOrderBy","selectedRows","setSelectedRows","tableIdRef","useRef","uniqueId","useFixedRowCount","useMemo","resolvedRows","nextRows","resolvedHeadCells","treeGridTheme","resolveOwpGridTheme","resolveOwpTableTheme","defaultStyledTableTheme","useTableRadiusZero","useCheckBox","isBoolean","useTotalCountRow","useEffect","isEmpty","handleRequestSort","_","handleSelectAllClick","handleClick","prev","item","isEqual","visibleRows","displayRows","Paper","getTreeGridContainerSx","GlobalStyles","getTreeGridFontFaceStyles","TableContainer","Table","TableBody","isItemSelected","isLastRow","isPlaceholderRow","labelId","getTreeGridBodyRowSx","getTreeGridBodyCellSx","cellIndex","_key","rangeLabel","rowTabIndex","cellValue","OwpNumberField","values","floatValue","end","evt","start","nextValue","TextField","Divider"],"mappings":"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"}
1
+ {"version":3,"file":"OwpDataTable.js","sources":["../../../src/components/OwpTable/OwpDataTable.tsx"],"sourcesContent":["import {\n resolveOwpGridTheme,\n type OwpResolvedGridThemeConfigType,\n} from '@/constants/gridTheme';\nimport {\n resolveOwpTableTheme,\n type OwpResolvedTableThemeConfigType,\n} from '@/constants/tableTheme';\nimport {\n getTreeGridFontFaceStyles,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { Divider, TextField, Typography, TypographyProps } from '@mui/material';\nimport Checkbox, { checkboxClasses } from '@mui/material/Checkbox';\nimport { grey } from '@mui/material/colors';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell, { TableCellProps } from '@mui/material/TableCell';\nimport TableContainer, { TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport { type SxProps, type Theme, useTheme } from '@mui/material/styles';\nimport { isArray, isBoolean, isEmpty, isEqual, isNumber, uniqueId } from 'es-toolkit/compat';\nimport { ChangeEvent, MouseEvent, ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { OwpNumberField } from '../OwpNumberField';\nimport {\n getTreeGridBodyCellSx,\n getTreeGridBodyRowSx,\n getTreeGridContainerSx,\n getTreeGridHeaderCellSx,\n TREEGRID_TABLE_BODY_BORDER_COLOR,\n TREEGRID_TABLE_HEADER_BORDER_COLOR,\n} from './internal/treeGridTableStyle';\nimport {\n defaultStyledTableTheme,\n defaultTableSortLabelSx,\n getDefaultTableCellSx,\n getDefaultTableHeaderCellSx,\n getDefaultTableHeaderLabelSx,\n} from './internal/defaultTableStyle';\n\ntype Row = object;\ntype TableCellAlign = NonNullable<TableCellProps['align']>;\n\ninterface HeadCell {\n enablePadding?: boolean;\n id: string;\n label: string;\n sx?: TypographyProps['sx'];\n inputLabel?: string;\n rangeKey?: string;\n rangeLabel?: { start: string; end: string };\n align?: string;\n valueAlign?: string;\n canTextField?: boolean;\n textFieldType?: string;\n}\n\ninterface DataTableHeadProps {\n sx?: TableCellProps['sx'];\n headCells: HeadCell[];\n numSelected: number;\n onRequestSort: (event: MouseEvent<unknown>, property: string) => void;\n onSelectAllClick: (event: ChangeEvent<HTMLInputElement>) => void;\n order: Order;\n orderBy: string;\n rowCount: number;\n canCheckbox?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n gridTheme: OwpResolvedGridThemeConfigType;\n tableTheme: OwpResolvedTableThemeConfigType;\n}\n\ninterface OwpDataTableProps<T extends Row = Row> {\n className?: string;\n sx?: TableContainerProps['sx'];\n headSx?: TableCellProps['sx'];\n headCells: HeadCell[];\n rows?: T[];\n canCheckbox?: boolean;\n canTotalCountRow?: boolean;\n selected?: T[];\n onSelect?: (rows: T[] | []) => void;\n onBlur?: (evt: OwpDataTableBlurEvent, dataIndex: number) => void;\n canSelectingSingle?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n fixedRowCount?: number;\n}\n\nconst defaultHeadCellsSx = (\n tableTheme: OwpResolvedTableThemeConfigType,\n fallbackBackgroundColor: string,\n) =>\n ({\n ...getDefaultTableHeaderCellSx(tableTheme, fallbackBackgroundColor),\n borderBottom: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n }) as const;\n\nconst headerBorderRight = {\n borderRight: `1px solid ${TREEGRID_TABLE_HEADER_BORDER_COLOR}`,\n};\n\nconst DEFAULT_TABLE_BORDER_COLOR = grey[400];\n\nconst defaultRowBorderRight = {\n borderRight: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n};\n\nconst treeGridRowBorderRight = {\n borderRight: `1px solid ${TREEGRID_TABLE_BODY_BORDER_COLOR}`,\n};\n\nconst getDefaultTableBodyCellSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n ...getDefaultTableCellSx(tableTheme),\n }) as const;\n\nconst defaultHeaderDividerSx = {\n borderRight: `1px solid ${DEFAULT_TABLE_BORDER_COLOR}`,\n} as const;\n\nconst tableRadiusZeroSx = {\n borderRadius: 0,\n} as const;\n\nconst lastRowRadiusZeroSx = {\n '& > th, & > td': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n} as const;\n\nconst treeGridSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n display: 'flex',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n fontWeight: 'inherit',\n justifyContent: 'center',\n lineHeight: 'inherit',\n overflow: 'hidden',\n position: 'relative',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n margin: 0,\n position: 'absolute',\n right: 0,\n },\n} as const;\n\n/**\n * sx 병합 유틸\n * @param styles 병합 대상 sx 목록\n */\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\n/**\n * 고정 row 수 계산\n * @param fixedRowCount 고정 row 수\n */\nconst getFixedRowCount = (fixedRowCount?: number) => {\n if (!isNumber(fixedRowCount) || fixedRowCount < 1) {\n return undefined;\n }\n\n return fixedRowCount;\n};\n\n/**\n * 빈 row 목록 생성\n * @param count 생성 수\n */\nconst createEmptyRows = (count: number) => Array.from({ length: count }, () => ({}) as Row);\n\n/**\n * TableCell align 정규화\n * @param align align 값\n * @param fallback 기본 align 값\n */\nconst getTableCellAlign = (align: string | undefined, fallback: TableCellAlign): TableCellAlign => {\n switch (align) {\n case 'center':\n case 'right':\n case 'left':\n case 'inherit':\n case 'justify':\n return align;\n default:\n return fallback;\n }\n};\n\n/**\n * row 값 조회\n * @param row row 값\n * @param key 조회 key\n */\nconst getRowValue = (row: Row, key?: string) => {\n if (!key) {\n return undefined;\n }\n\n return (row as Record<string, unknown>)?.[key];\n};\n\nconst getComparableValue = (value: unknown) => {\n if (typeof value === 'string' || isNumber(value)) {\n return value;\n }\n\n return undefined;\n};\n\nfunction descendingComparator(a: Row, b: Row, orderBy: string) {\n const aValue = getComparableValue(getRowValue(a, orderBy));\n const bValue = getComparableValue(getRowValue(b, orderBy));\n\n if (bValue == null && aValue == null) {\n return 0;\n }\n if (bValue == null) {\n return -1;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue < aValue) {\n return -1;\n }\n if (bValue > aValue) {\n return 1;\n }\n return 0;\n}\n\ntype Order = 'asc' | 'desc';\ntype OwpDataTableBlurEvent = Record<string, unknown> & {\n target: {\n value: string | number | undefined;\n };\n};\n\nfunction getComparator(order: Order, orderBy: string): (a: Row, b: Row) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\ntype RowRangeValue = {\n start?: string | number;\n end?: string | number;\n};\n\nconst getRowRangeValue = (row: Row, rangeKey?: string) => {\n if (!rangeKey) {\n return undefined;\n }\n\n return getRowValue(row, rangeKey) as RowRangeValue | undefined;\n};\n\nconst getRangeLabel = (row: Row, cell: HeadCell) => {\n if (!(cell.inputLabel ?? cell.rangeKey)) {\n return '';\n }\n\n const rangeValue = getRowRangeValue(row, cell.rangeKey);\n\n return `${cell.rangeLabel?.start ? `${cell.rangeLabel?.start}: ` : ''}${rangeValue?.start} ~ ${cell.rangeLabel?.end ? `${cell.rangeLabel?.end}: ` : ''}${rangeValue?.end}`;\n};\n\nconst getRowTabIndex = (row: Row, fallbackIndex: number) => {\n const rowIndex = getRowValue(row, 'index');\n\n return isNumber(rowIndex) ? rowIndex : fallbackIndex;\n};\n\nconst getEditableCellSx = (\n valueAlign?: HeadCell['valueAlign'],\n fontSize?: number | string,\n) => ({\n '& input': {\n fontSize,\n textAlign: valueAlign ?? 'center',\n },\n '& .MuiInputBase-input': {\n fontSize,\n },\n height: 34,\n});\n\nfunction DataTableHead(props: DataTableHeadProps) {\n const theme = useTheme();\n const {\n sx,\n headCells,\n onSelectAllClick,\n order,\n orderBy,\n numSelected,\n rowCount,\n onRequestSort,\n canCheckbox,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle,\n gridTheme,\n tableTheme,\n } = props;\n const createSortHandler = (property: string) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n <TableRow\n sx={mergeSx(\n canUseTreeGridStyle && { height: gridTheme.header.height },\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {canCheckbox && (\n <TableCell\n padding=\"checkbox\"\n sx={mergeSx(\n {\n ...defaultHeadCellsSx(tableTheme, theme.palette.grey[200]),\n },\n !canUseTreeGridStyle && defaultHeaderDividerSx,\n canUseTreeGridStyle && headerBorderRight,\n canUseTreeGridStyle && getTreeGridHeaderCellSx(gridTheme),\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Checkbox\n color=\"default\"\n sx={mergeSx(\n {\n [`&, &.${checkboxClasses.checked}`]: canUseTreeGridStyle\n ? { color: grey[50] }\n : { color: 'inherit' },\n },\n canUseTreeGridStyle && { p: 0 },\n )}\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n />\n </TableCell>\n )}\n {headCells.map((headCell, index) => (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'pl-20'}\n key={headCell.id}\n align={getTableCellAlign(headCell.align, 'center')}\n padding={headCell.enablePadding ? 'normal' : 'none'}\n sortDirection={orderBy === headCell.id ? order : false}\n sx={mergeSx(\n {\n ...defaultHeadCellsSx(tableTheme, theme.palette.grey[200]),\n },\n !canUseTreeGridStyle && headCells.length - 1 !== index && defaultHeaderDividerSx,\n canUseTreeGridStyle && headCells.length - 1 !== index && headerBorderRight,\n canUseTreeGridStyle && getTreeGridHeaderCellSx(gridTheme),\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n canUseTreeGridStyle && headCell?.sx,\n )}\n >\n {canUseOrderBy ? (\n <TableSortLabel\n sx={canUseTreeGridStyle ? treeGridSortLabelSx : defaultTableSortLabelSx}\n active={orderBy === headCell.id}\n direction={orderBy === headCell.id ? order : 'asc'}\n onClick={createSortHandler(headCell.id)}\n >\n {canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography sx={mergeSx(getDefaultTableHeaderLabelSx(tableTheme), headCell?.sx)}>\n {headCell.label}\n </Typography>\n )}\n </TableSortLabel>\n ) : canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography sx={mergeSx(getDefaultTableHeaderLabelSx(tableTheme), headCell?.sx)}>\n {headCell.label}\n </Typography>\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\n/**\n * OwpDataTable 컴포넌트\n * @param className CSS 클래스명\n * @param sx sx 값\n * @param headSx headSx 값\n * @param headCells headCells 값\n * @param rows 행 데이터 목록\n * @param selected selected 값\n * @param canTableRadiusZero 테이블 radius 0 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param fixedRowCount 고정 row 수\n */\nexport function OwpDataTable<T extends Row = Row>({\n className,\n sx,\n headSx,\n headCells,\n rows,\n selected,\n canCheckbox,\n canTotalCountRow,\n canSelectingSingle,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle = false,\n fixedRowCount,\n onSelect,\n onBlur,\n}: OwpDataTableProps<T>) {\n const currentSettings = useGetCurrentSettings();\n const [order, setOrder] = useState<Order>('asc');\n const [orderBy, setOrderBy] = useState<string>('');\n const [selectedRows, setSelectedRows] = useState<T[] | []>([]);\n const tableIdRef = useRef(uniqueId('owp-data-table'));\n const useFixedRowCount = useMemo(() => getFixedRowCount(fixedRowCount), [fixedRowCount]);\n const resolvedRows = useMemo(() => {\n const nextRows = isArray(rows) ? rows : [];\n\n return useFixedRowCount ? nextRows.slice(0, useFixedRowCount) : nextRows;\n }, [rows, useFixedRowCount]);\n const resolvedHeadCells = useMemo(() => headCells ?? [], [headCells]);\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentSettings?.theme?.main?.grid),\n [currentSettings],\n );\n const tableTheme = useMemo(\n () => resolveOwpTableTheme(currentSettings?.theme?.main?.table, defaultStyledTableTheme),\n [currentSettings],\n );\n const tableRowBackgroundColor = currentSettings?.theme?.main?.table?.row?.backgroundColor;\n const tableRowHoverBackgroundColor =\n currentSettings?.theme?.main?.table?.row?.hoverBackgroundColor;\n const tableRowSelectedBackgroundColor =\n currentSettings?.theme?.main?.table?.row?.selectedBackgroundColor;\n const useTableRadiusZero = canUseTreeGridStyle ? canTableRadiusZero !== false : !!canTableRadiusZero;\n const useCheckBox = isBoolean(canCheckbox) ? canCheckbox : true;\n const useTotalCountRow = isBoolean(canTotalCountRow) ? canTotalCountRow : true;\n\n useEffect(() => {\n if (!isEmpty(selected)) {\n setSelectedRows(selected);\n }\n }, [selected]);\n\n useEffect(() => {\n onSelect?.(selectedRows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRows]);\n\n const handleRequestSort = (_: MouseEvent<unknown>, property: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n };\n\n const handleSelectAllClick = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n setSelectedRows(resolvedRows);\n return;\n }\n setSelectedRows([]);\n };\n\n const handleClick = (_: MouseEvent<unknown>, row: T) => {\n if (canSelectingSingle) {\n setSelectedRows([row]);\n return;\n }\n setSelectedRows((prev: T[]) => {\n const isIncluded = !!prev.find((item) => isEqual(item, row));\n return isIncluded ? prev?.filter((item: T) => !isEqual(item, row)) : [...prev, row];\n });\n };\n\n const visibleRows = useMemo(\n () => [...resolvedRows].sort(getComparator(order, orderBy)),\n [order, orderBy, resolvedRows],\n );\n const displayRows = useMemo(() => {\n if (!useFixedRowCount || visibleRows.length >= useFixedRowCount) {\n return visibleRows;\n }\n\n return [...visibleRows, ...createEmptyRows(useFixedRowCount - visibleRows.length)];\n }, [useFixedRowCount, visibleRows]);\n\n return (\n <Paper\n className={className}\n sx={mergeSx(\n { width: '100%' },\n !canUseTreeGridStyle &&\n tableRowBackgroundColor && { backgroundColor: tableRowBackgroundColor },\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {canUseTreeGridStyle && <GlobalStyles styles={getTreeGridFontFaceStyles()} />}\n <TableContainer\n sx={mergeSx(\n { height: useFixedRowCount ? 'auto' : 500, borderRadius: 2 },\n !canUseTreeGridStyle &&\n tableRowBackgroundColor && { backgroundColor: tableRowBackgroundColor },\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useFixedRowCount && { overflowY: 'hidden' },\n useTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Table\n stickyHeader={!canUseTreeGridStyle}\n sx={mergeSx({ minWidth: 200 }, useTableRadiusZero && tableRadiusZeroSx)}\n aria-labelledby=\"owp-data-table\"\n >\n <DataTableHead\n sx={headSx}\n headCells={resolvedHeadCells}\n gridTheme={treeGridTheme}\n tableTheme={tableTheme}\n numSelected={selectedRows.length}\n order={order}\n orderBy={orderBy}\n onSelectAllClick={handleSelectAllClick}\n canCheckbox={!canSelectingSingle && useCheckBox}\n canUseOrderBy={canUseOrderBy}\n canTableRadiusZero={useTableRadiusZero}\n canUseTreeGridStyle={canUseTreeGridStyle}\n onRequestSort={handleRequestSort}\n rowCount={resolvedRows.length}\n />\n <TableBody sx={mergeSx(useTableRadiusZero && tableRadiusZeroSx)}>\n {displayRows.map((row, index) => {\n const isItemSelected = selectedRows.some((item) => isEqual(item, row));\n const isLastRow = displayRows.length - 1 === index;\n const isPlaceholderRow = useFixedRowCount ? index >= visibleRows.length : false;\n const labelId = `${tableIdRef.current}-${index}`;\n\n return (\n <TableRow\n hover\n role={canUseTreeGridStyle ? undefined : 'checkbox'}\n aria-checked={canUseTreeGridStyle ? undefined : isItemSelected}\n tabIndex={-1}\n key={`${labelId}-row-${index}`}\n selected={isItemSelected}\n sx={mergeSx(\n { cursor: isPlaceholderRow ? 'default' : 'pointer' },\n !canUseTreeGridStyle &&\n tableRowBackgroundColor &&\n !isItemSelected && { backgroundColor: tableRowBackgroundColor },\n !canUseTreeGridStyle &&\n tableRowHoverBackgroundColor &&\n !isPlaceholderRow &&\n !isItemSelected && {\n '&.MuiTableRow-hover:hover': {\n backgroundColor: tableRowHoverBackgroundColor,\n },\n },\n !canUseTreeGridStyle &&\n tableRowSelectedBackgroundColor &&\n isItemSelected && {\n '&.Mui-selected, &.Mui-selected:hover': {\n backgroundColor: tableRowSelectedBackgroundColor,\n },\n },\n canUseTreeGridStyle &&\n getTreeGridBodyRowSx(treeGridTheme, {\n canHover: !isPlaceholderRow,\n selected: isItemSelected,\n }),\n canUseTreeGridStyle && { height: 30 },\n useTableRadiusZero && tableRadiusZeroSx,\n useTableRadiusZero && isLastRow && lastRowRadiusZeroSx,\n )}\n >\n {useCheckBox && (\n <TableCell\n padding=\"checkbox\"\n onClick={(event) => {\n if (!isPlaceholderRow) {\n handleClick(event, row as T);\n }\n }}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight,\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n <Checkbox\n color=\"default\"\n checked={isItemSelected}\n disabled={isPlaceholderRow}\n sx={mergeSx(canUseTreeGridStyle && { p: 0 })}\n />\n </TableCell>\n )}\n {resolvedHeadCells.map((cell, cellIndex) => {\n const _key = `${labelId}-row-${index}-cell-${cellIndex}`;\n const rangeLabel = getRangeLabel(row, cell);\n const rowTabIndex = getRowTabIndex(row, index);\n const cellValue = getRowValue(row, String(cell?.id));\n if (cellIndex === 0) {\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n component={canUseTreeGridStyle ? 'td' : 'th'}\n id={labelId}\n scope={canUseTreeGridStyle ? undefined : 'row'}\n padding=\"none\"\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n resolvedHeadCells.length > 1 &&\n (canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cellValue as ReactNode}\n </TableCell>\n );\n }\n\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n !canUseTreeGridStyle && getDefaultTableBodyCellSx(tableTheme),\n canUseTreeGridStyle && getTreeGridBodyCellSx(treeGridTheme),\n resolvedHeadCells.length - 1 !== cellIndex &&\n (canUseTreeGridStyle ? treeGridRowBorderRight : defaultRowBorderRight),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cell?.canTextField ? (\n cell?.textFieldType === 'number' ? (\n <OwpNumberField\n variant=\"standard\"\n decimalScale={2}\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(\n cell?.valueAlign,\n canUseTreeGridStyle\n ? treeGridTheme.cell.fontSize\n : tableTheme.cell.fontSize,\n )}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n isAllowed={(values) => {\n const { floatValue } = values;\n const end = getRowRangeValue(row, cell?.rangeKey)?.end;\n\n if (isNumber(floatValue) && isNumber(end)) {\n return floatValue <= end;\n }\n\n return true;\n }}\n value={cellValue as string | number | undefined}\n onBlur={(evt) => {\n const start = getRowRangeValue(row, cell?.rangeKey)?.start;\n const nextValue = evt.target.value?.replace(/,/g, '');\n\n onBlur?.(\n {\n ...evt,\n target: {\n ...evt.target,\n value:\n isNumber(start) && nextValue !== ''\n ? Number(start > Number(nextValue) ? start : nextValue)\n : nextValue,\n },\n },\n rowTabIndex,\n );\n }}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(\n cell?.valueAlign,\n canUseTreeGridStyle\n ? treeGridTheme.cell.fontSize\n : tableTheme.cell.fontSize,\n )}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n type={cell?.textFieldType ?? 'text'}\n defaultValue={\n cellValue as string | number | readonly string[] | undefined\n }\n onBlur={(evt) =>\n onBlur?.(\n { ...evt, target: { ...evt.target, value: evt.target.value } },\n rowTabIndex,\n )\n }\n />\n )\n ) : (\n (cellValue as ReactNode)\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n {useTotalCountRow && <Divider sx={mergeSx(useTableRadiusZero && tableRadiusZeroSx)} />}\n {useTotalCountRow && (\n <Typography\n className=\"w-full py-8 pr-12\"\n align=\"right\"\n sx={mergeSx(\n canUseTreeGridStyle && getTreeGridContainerSx(treeGridTheme),\n useTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n 전체: {resolvedRows.length.toLocaleString()} 건\n </Typography>\n )}\n </Paper>\n );\n}\n"],"names":["defaultHeadCellsSx","__name","tableTheme","fallbackBackgroundColor","getDefaultTableHeaderCellSx","DEFAULT_TABLE_BORDER_COLOR","headerBorderRight","TREEGRID_TABLE_HEADER_BORDER_COLOR","grey","defaultRowBorderRight","treeGridRowBorderRight","TREEGRID_TABLE_BODY_BORDER_COLOR","getDefaultTableBodyCellSx","getDefaultTableCellSx","defaultHeaderDividerSx","tableRadiusZeroSx","lastRowRadiusZeroSx","treeGridSortLabelSx","mergeSx","styles","acc","style","isArray","getFixedRowCount","fixedRowCount","isNumber","createEmptyRows","count","getTableCellAlign","align","fallback","getRowValue","row","key","getComparableValue","value","descendingComparator","a","b","orderBy","aValue","bValue","getComparator","order","getRowRangeValue","rangeKey","getRangeLabel","cell","rangeValue","_a","_b","_c","_d","getRowTabIndex","fallbackIndex","rowIndex","getEditableCellSx","valueAlign","fontSize","DataTableHead","props","theme","useTheme","sx","headCells","onSelectAllClick","numSelected","rowCount","onRequestSort","canCheckbox","canUseOrderBy","canTableRadiusZero","canUseTreeGridStyle","gridTheme","createSortHandler","property","event","TableHead","jsxs","TableRow","jsx","TableCell","getTreeGridHeaderCellSx","Checkbox","checkboxClasses","headCell","index","TableSortLabel","defaultTableSortLabelSx","Typography","getDefaultTableHeaderLabelSx","OwpDataTable","className","headSx","rows","selected","canTotalCountRow","canSelectingSingle","onSelect","onBlur","currentSettings","useGetCurrentSettings","setOrder","useState","setOrderBy","selectedRows","setSelectedRows","tableIdRef","useRef","uniqueId","useFixedRowCount","useMemo","resolvedRows","nextRows","resolvedHeadCells","treeGridTheme","resolveOwpGridTheme","resolveOwpTableTheme","defaultStyledTableTheme","tableRowBackgroundColor","tableRowHoverBackgroundColor","_h","_g","_f","_e","tableRowSelectedBackgroundColor","_l","_k","_j","_i","useTableRadiusZero","useCheckBox","isBoolean","useTotalCountRow","useEffect","isEmpty","handleRequestSort","_","handleSelectAllClick","handleClick","prev","item","isEqual","visibleRows","displayRows","Paper","getTreeGridContainerSx","GlobalStyles","getTreeGridFontFaceStyles","TableContainer","Table","TableBody","isItemSelected","isLastRow","isPlaceholderRow","labelId","getTreeGridBodyRowSx","getTreeGridBodyCellSx","cellIndex","_key","rangeLabel","rowTabIndex","cellValue","OwpNumberField","values","floatValue","end","evt","start","nextValue","TextField","Divider"],"mappings":"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"}
@@ -1,146 +1,158 @@
1
- var x = Object.defineProperty;
2
- var o = (e, t) => x(e, "name", { value: t, configurable: !0 });
3
- import { jsxs as u, jsx as d, Fragment as M } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
- import { resolveOwpTableTheme as b } from "../../constants/tableTheme.js";
5
- import { useGetCurrentSettings as N } from "../../hooks/useOwpSettings.js";
6
- import { TableCell as T, TableBody as k, Checkbox as A } from "@mui/material";
7
- import { clsx as E } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
8
- import H from "dayjs";
9
- import { useMemo as S, Fragment as _ } from "react";
10
- import { TREEGRID_TABLE_FONT_FAMILY_STACK as O } from "./internal/treeGridTableStyle.js";
11
- import { StyledTableRow as R, StyledTable as W } from "./OwpTable.js";
12
- import { isNaN as y } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isNaN.js";
13
- import { toNumber as B } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/toNumber.js";
14
- const L = 28, $ = {
1
+ var M = Object.defineProperty;
2
+ var i = (e, o) => M(e, "name", { value: o, configurable: !0 });
3
+ import { jsxs as u, jsx as d, Fragment as N } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
+ import { resolveOwpTableTheme as H } from "../../constants/tableTheme.js";
5
+ import { useGetCurrentSettings as B } from "../../hooks/useOwpSettings.js";
6
+ import { TableCell as F, TableBody as E, Box as _, Checkbox as O } from "@mui/material";
7
+ import { clsx as R } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
8
+ import v from "dayjs";
9
+ import { useMemo as L, Fragment as j } from "react";
10
+ import { getDefaultTableHeaderCellSx as W } from "./internal/defaultTableStyle.js";
11
+ import { TREEGRID_TABLE_FONT_FAMILY_STACK as $ } from "./internal/treeGridTableStyle.js";
12
+ import { StyledTableRow as I, StyledTable as q } from "./OwpTable.js";
13
+ import { isNaN as G } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isNaN.js";
14
+ import { toNumber as K } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/toNumber.js";
15
+ const V = 28, P = {
15
16
  "&&": {
16
- fontFamily: O,
17
+ fontFamily: $,
17
18
  fontSize: "1.7rem",
18
19
  fontWeight: 600,
19
20
  lineHeight: "normal",
20
21
  minHeight: "unset",
21
22
  padding: "7px 10px"
22
23
  }
23
- }, j = {
24
+ }, X = {
24
25
  borderRadius: 0,
25
26
  overflow: "visible"
26
- }, g = {
27
+ }, k = {
27
28
  borderTop: "1px solid #CDD8E4"
28
- }, G = /* @__PURE__ */ o((e) => e ? (Array.isArray(e) ? e : [e]).filter(Boolean) : [], "normalizeTableCellSx"), C = /* @__PURE__ */ o((...e) => e.flatMap(G).map(
29
- (t) => typeof t == "function" ? (a) => ({
30
- "&&&": t(a)
29
+ }, Y = /* @__PURE__ */ i((e) => e ? (Array.isArray(e) ? e : [e]).filter(Boolean) : [], "normalizeTableCellSx"), w = /* @__PURE__ */ i((...e) => e.flatMap(Y).map(
30
+ (o) => typeof o == "function" ? (n) => ({
31
+ "&&&": o(n)
31
32
  }) : {
32
- "&&&": t
33
+ "&&&": o
33
34
  }
34
- ), "getTreeGridCellOverrideSx"), s = {
35
+ ), "getTreeGridCellOverrideSx"), Z = /* @__PURE__ */ i((e) => {
36
+ if (!e)
37
+ return;
38
+ const o = Array.isArray(e) ? e : [e];
39
+ for (let n = o.length - 1; n >= 0; n -= 1) {
40
+ const t = o[n];
41
+ if (!(!t || typeof t == "function" || Array.isArray(t)) && typeof t == "object" && "fontSize" in t)
42
+ return t.fontSize;
43
+ }
44
+ }, "getTableCellFontSize"), m = {
35
45
  header: {
46
+ backgroundColor: "#eeeeee",
47
+ color: "#111827",
36
48
  fontSize: "1.7rem",
37
49
  fontWeight: 600
38
50
  },
39
51
  cell: {
52
+ backgroundColor: "#FFFFFF",
40
53
  fontSize: "1.7rem"
41
54
  }
42
- }, q = /* @__PURE__ */ o((e) => /* @__PURE__ */ u(M, { children: [
55
+ }, J = /* @__PURE__ */ i((e) => /* @__PURE__ */ u(N, { children: [
43
56
  e,
44
57
  /* @__PURE__ */ d("span", { className: "ml-4 text-red-600", children: "*" })
45
- ] }), "getRequiredTitle"), v = /* @__PURE__ */ o((e, t) => e == null ? void 0 : e[t], "getFieldTableValue"), K = /* @__PURE__ */ o((e, t) => typeof t == "function" ? t(e) : y(B(e)) ? e === "Y" : !!Number(e), "getCheckboxChecked"), V = /* @__PURE__ */ o((e) => e.withTime ? "YYYY-MM-DD HH:mm" : e.withTimeAndSec ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD", "getDateFormat"), I = /* @__PURE__ */ o((e, t, a) => {
46
- const i = v(t, e.key);
47
- return typeof e.render == "function" ? e.render() : e.useCheckbox ? /* @__PURE__ */ d(
48
- A,
58
+ ] }), "getRequiredTitle"), Q = /* @__PURE__ */ i((e, o) => e == null ? void 0 : e[o], "getFieldTableValue"), U = /* @__PURE__ */ i((e, o) => typeof o == "function" ? o(e) : G(K(e)) ? e === "Y" : !!Number(e), "getCheckboxChecked"), ee = /* @__PURE__ */ i((e) => e.withTime ? "YYYY-MM-DD HH:mm" : e.withTimeAndSec ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD", "getDateFormat"), re = /* @__PURE__ */ i((e, o, n) => {
59
+ const t = Q(o, e.key);
60
+ if (typeof e.render == "function") {
61
+ const l = e.render();
62
+ return (e.contentType ?? "input") === "text" ? /* @__PURE__ */ d(_, { sx: { px: 1.25 }, children: l }) : l;
63
+ }
64
+ return e.useCheckbox ? /* @__PURE__ */ d(
65
+ O,
49
66
  {
50
- checked: K(i, e.validate),
51
- sx: { "& .MuiSvgIcon-root": { fontSize: (a == null ? void 0 : a.fontSize) ?? L } }
67
+ checked: U(t, e.validate),
68
+ sx: {
69
+ "& .MuiSvgIcon-root": {
70
+ fontSize: Z(n) ?? V
71
+ }
72
+ }
52
73
  }
53
- ) : e.useDate ? i && H(i).format(V(e)) : e.disableLocaleString ? i : i == null ? void 0 : i.toLocaleString();
74
+ ) : e.useDate ? t && v(t).format(ee(e)) : e.disableLocaleString ? t : t == null ? void 0 : t.toLocaleString();
54
75
  }, "renderFieldTableCellValue");
55
- function ae({
76
+ function he({
56
77
  layout: e,
57
- titleWidth: t,
58
- titleSx: a,
59
- treeGridTitleCellSx: i,
60
- cellSx: h,
78
+ titleWidth: o,
79
+ titleSx: n,
80
+ treeGridTitleCellSx: t,
81
+ cellSx: l,
61
82
  data: c,
62
- colGroupSlot: w,
63
- className: z,
64
- tableLayout: F = "fixed",
65
- canUseTreeGridStyle: p = !1
83
+ colGroupSlot: D,
84
+ className: y,
85
+ tableLayout: z = "fixed",
86
+ canUseTreeGridStyle: s = !1
66
87
  }) {
67
- const m = N(), l = S(
68
- () => {
69
- var f, n;
70
- return b((n = (f = m == null ? void 0 : m.theme) == null ? void 0 : f.main) == null ? void 0 : n.table, {
71
- header: {
72
- backgroundColor: "",
73
- color: "inherit",
74
- fontSize: s.header.fontSize,
75
- fontWeight: s.header.fontWeight
76
- },
77
- cell: {
78
- fontSize: s.cell.fontSize
79
- }
80
- });
81
- },
82
- [m]
83
- ), Y = S(
88
+ var g, C, T, S, x;
89
+ const a = B(), h = ((x = (S = (T = (C = (g = a == null ? void 0 : a.theme) == null ? void 0 : g.main) == null ? void 0 : C.table) == null ? void 0 : T.field) == null ? void 0 : S.cell) == null ? void 0 : x.backgroundColor) ?? m.cell.backgroundColor, b = L(
84
90
  () => {
85
- var f, n, r;
86
- return b((r = (n = (f = m == null ? void 0 : m.theme) == null ? void 0 : f.main) == null ? void 0 : n.table) == null ? void 0 : r.field, {
91
+ var p, f, r;
92
+ return H((r = (f = (p = a == null ? void 0 : a.theme) == null ? void 0 : p.main) == null ? void 0 : f.table) == null ? void 0 : r.field, {
87
93
  header: {
88
- ...l.header,
89
- fontSize: s.header.fontSize,
90
- fontWeight: s.header.fontWeight
94
+ backgroundColor: m.header.backgroundColor,
95
+ color: m.header.color,
96
+ fontSize: m.header.fontSize,
97
+ fontWeight: m.header.fontWeight
91
98
  },
92
99
  cell: {
93
- ...l.cell,
94
- fontSize: s.cell.fontSize
100
+ backgroundColor: m.cell.backgroundColor,
101
+ fontSize: m.cell.fontSize
95
102
  }
96
103
  });
97
104
  },
98
- [l, m]
105
+ [a]
99
106
  );
100
107
  return /* @__PURE__ */ u(
101
- W,
108
+ q,
102
109
  {
103
- canUseTreeGridStyle: p,
104
- className: E("w-full", z),
105
- containerProps: { sx: p ? j : void 0 },
106
- tableTheme: Y,
107
- tableLayout: F,
110
+ canUseTreeGridStyle: s,
111
+ className: R("w-full", y),
112
+ containerProps: {
113
+ sx: [
114
+ s ? X : void 0,
115
+ !s && h ? { backgroundColor: h } : void 0
116
+ ]
117
+ },
118
+ tableTheme: b,
119
+ tableLayout: z,
108
120
  children: [
109
- w,
110
- /* @__PURE__ */ d(k, { children: e.map((f, n) => /* @__PURE__ */ d(R, { children: f.map((r, D) => /* @__PURE__ */ u(_, { children: [
121
+ D,
122
+ /* @__PURE__ */ d(E, { children: e.map((p, f) => /* @__PURE__ */ d(I, { children: p.map((r, A) => /* @__PURE__ */ u(j, { children: [
111
123
  /* @__PURE__ */ d(
112
- T,
124
+ F,
113
125
  {
114
126
  component: "th",
115
127
  className: "whitespace-pre-wrap",
116
- width: t ?? 200,
117
- sx: p ? [
118
- $,
119
- n === 0 && g,
120
- ...C(i, a)
121
- ] : a,
128
+ width: o ?? 200,
129
+ sx: s ? [
130
+ P,
131
+ f === 0 && k,
132
+ ...w(t, n)
133
+ ] : [W(b), ...Y(n)],
122
134
  rowSpan: r == null ? void 0 : r.rowSpan,
123
- children: r.required ? q(r.title) : r.title
135
+ children: r.required ? J(r.title) : r.title
124
136
  }
125
137
  ),
126
138
  /* @__PURE__ */ d(
127
- T,
139
+ F,
128
140
  {
129
141
  className: "whitespace-pre-wrap",
130
- sx: p ? [n === 0 && g, ...C(h)] : h,
142
+ sx: s ? [f === 0 && k, ...w(l)] : l,
131
143
  style: (r == null ? void 0 : r.style) ?? {},
132
144
  colSpan: r == null ? void 0 : r.colSpan,
133
145
  rowSpan: r == null ? void 0 : r.rowSpan,
134
- children: I(r, c, h)
146
+ children: re(r, c, l)
135
147
  }
136
148
  )
137
- ] }, `owp-field-cell-${n}-${D}`)) }, `owp-field-col-${n}`)) })
149
+ ] }, `owp-field-cell-${f}-${A}`)) }, `owp-field-col-${f}`)) })
138
150
  ]
139
151
  }
140
152
  );
141
153
  }
142
- o(ae, "OwpFieldTable");
154
+ i(he, "OwpFieldTable");
143
155
  export {
144
- ae as OwpFieldTable
156
+ he as OwpFieldTable
145
157
  };
146
158
  //# sourceMappingURL=OwpFieldTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpFieldTable.js","sources":["../../../src/components/OwpTable/OwpFieldTable.tsx"],"sourcesContent":["import {\n resolveOwpTableTheme,\n} from '@/constants/tableTheme';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport type { OwpTableVariantThemeConfigType } from '@/types/OwpTableThemeTypes';\nimport { Checkbox, TableBody, TableCell, type TableCellProps } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\nimport { isNaN, toNumber } from 'es-toolkit/compat';\nimport { Fragment, type CSSProperties, type ReactNode, useMemo } from 'react';\nimport { TREEGRID_TABLE_FONT_FAMILY_STACK } from './internal/treeGridTableStyle';\nimport { StyledTable, StyledTableRow } from './OwpTable';\n\ntype OwpFieldTableCell = {\n title: string;\n key: string;\n required?: boolean;\n disableLocaleString?: boolean;\n useDate?: boolean;\n withTime?: boolean;\n withTimeAndSec?: boolean;\n useCheckbox?: boolean;\n colSpan?: number;\n rowSpan?: number;\n style?: CSSProperties;\n render?: () => ReactNode;\n validate?: (v?: number | string) => boolean;\n};\n\ntype OwpFieldTableValue = string | number | '';\ntype OwpFieldTableDataRecord = Record<string, OwpFieldTableValue | undefined>;\n\ninterface OwpFieldTableProps {\n layout: OwpFieldTableCell[][];\n data?: OwpFieldTableDataRecord;\n titleSx?: TableCellProps['sx'];\n treeGridTitleCellSx?: TableCellProps['sx'] & CSSProperties;\n cellSx?: TableCellProps['sx'] & CSSProperties;\n titleWidth?: number | string;\n colGroupSlot?: ReactNode;\n className?: string;\n tableLayout?: 'auto' | 'fixed';\n canUseTreeGridStyle?: boolean;\n}\n\nconst DEFAULT_CHECKBOX_FONT_SIZE = 28;\n\nconst defaultTreeGridTitleCellSx = {\n '&&': {\n fontFamily: TREEGRID_TABLE_FONT_FAMILY_STACK,\n fontSize: '1.7rem',\n fontWeight: 600,\n lineHeight: 'normal',\n minHeight: 'unset',\n padding: '7px 10px',\n },\n} as const;\n\nconst treeGridContainerSx = {\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFirstRowCellSx = {\n borderTop: '1px solid #CDD8E4',\n} as const;\n\ntype TableCellSxItem = Exclude<SxProps<Theme>, readonly unknown[] | false | null | undefined>;\n\nconst normalizeTableCellSx = (\n style?: TableCellProps['sx'],\n): TableCellSxItem[] => {\n if (!style) {\n return [];\n }\n\n return (Array.isArray(style) ? style : [style]).filter(Boolean) as TableCellSxItem[];\n};\n\nconst getTreeGridCellOverrideSx = (\n ...styles: Array<TableCellProps['sx'] | undefined>\n): TableCellSxItem[] =>\n styles.flatMap(normalizeTableCellSx).map((style) =>\n typeof style === 'function'\n ? (theme: Theme) => ({\n '&&&': style(theme),\n })\n : {\n '&&&': style,\n },\n );\n\nconst defaultFieldTableTheme = {\n header: {\n fontSize: '1.7rem',\n fontWeight: 600,\n },\n cell: {\n fontSize: '1.7rem',\n },\n} satisfies OwpTableVariantThemeConfigType;\n\n/** 필수 헤더 타이틀 */\nconst getRequiredTitle = (title: string) => (\n <>\n {title}\n <span className=\"ml-4 text-red-600\">*</span>\n </>\n);\n\nconst getFieldTableValue = (data: OwpFieldTableProps['data'], key: string) => {\n return data?.[key];\n};\n\nconst getCheckboxChecked = (\n value: OwpFieldTableValue | undefined,\n validate?: OwpFieldTableCell['validate'],\n) => {\n if (typeof validate === 'function') {\n return validate(value);\n }\n\n if (isNaN(toNumber(value))) {\n return value === 'Y';\n }\n\n return Boolean(Number(value));\n};\n\nconst getDateFormat = (cell: OwpFieldTableCell) => {\n if (cell.withTime) {\n return 'YYYY-MM-DD HH:mm';\n }\n\n if (cell.withTimeAndSec) {\n return 'YYYY-MM-DD HH:mm:ss';\n }\n\n return 'YYYY-MM-DD';\n};\n\nconst renderFieldTableCellValue = (\n cell: OwpFieldTableCell,\n data: OwpFieldTableProps['data'],\n cellSx?: OwpFieldTableProps['cellSx'],\n): ReactNode => {\n const value = getFieldTableValue(data, cell.key);\n\n if (typeof cell.render === 'function') {\n return cell.render();\n }\n\n if (cell.useCheckbox) {\n return (\n <Checkbox\n checked={getCheckboxChecked(value, cell.validate)}\n sx={{ '& .MuiSvgIcon-root': { fontSize: cellSx?.fontSize ?? DEFAULT_CHECKBOX_FONT_SIZE } }}\n />\n );\n }\n\n if (cell.useDate) {\n return value ? dayjs(value).format(getDateFormat(cell)) : value;\n }\n\n if (cell.disableLocaleString) {\n return value;\n }\n\n return value?.toLocaleString();\n};\n\n/**\n * OwpFieldTable 컴포넌트\n * @param layout layout 값\n * @param titleWidth titleWidth 값\n * @param titleSx titleSx 값\n * @param treeGridTitleCellSx TreeGrid title cell sx 값\n * @param cellSx cellSx 값\n * @param data 데이터\n * @param colGroupSlot colGroupSlot 값\n * @param className className 값\n * @param tableLayout tableLayout 값\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n */\nexport function OwpFieldTable({\n layout,\n titleWidth,\n titleSx,\n treeGridTitleCellSx,\n cellSx,\n data,\n colGroupSlot,\n className,\n tableLayout = 'fixed',\n canUseTreeGridStyle = false,\n}: OwpFieldTableProps) {\n const currentSettings = useGetCurrentSettings();\n const baseTableTheme = useMemo(\n () =>\n resolveOwpTableTheme(currentSettings?.theme?.main?.table, {\n header: {\n backgroundColor: '',\n color: 'inherit',\n fontSize: defaultFieldTableTheme.header.fontSize,\n fontWeight: defaultFieldTableTheme.header.fontWeight,\n },\n cell: {\n fontSize: defaultFieldTableTheme.cell.fontSize,\n },\n }),\n [currentSettings],\n );\n const tableTheme = useMemo(\n () =>\n resolveOwpTableTheme(currentSettings?.theme?.main?.table?.field, {\n header: {\n ...baseTableTheme.header,\n fontSize: defaultFieldTableTheme.header.fontSize,\n fontWeight: defaultFieldTableTheme.header.fontWeight,\n },\n cell: {\n ...baseTableTheme.cell,\n fontSize: defaultFieldTableTheme.cell.fontSize,\n },\n }),\n [baseTableTheme, currentSettings],\n );\n\n return (\n <StyledTable\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx('w-full', className)}\n containerProps={{ sx: canUseTreeGridStyle ? treeGridContainerSx : undefined }}\n tableTheme={tableTheme}\n tableLayout={tableLayout}\n >\n {colGroupSlot}\n <TableBody>\n {layout.map((cols, rowIndex) => (\n <StyledTableRow key={`owp-field-col-${rowIndex}`}>\n {cols.map((col, colIndex) => (\n <Fragment key={`owp-field-cell-${rowIndex}-${colIndex}`}>\n <TableCell\n component=\"th\"\n className=\"whitespace-pre-wrap\"\n width={titleWidth ?? 200}\n sx={\n canUseTreeGridStyle\n ? [\n defaultTreeGridTitleCellSx,\n rowIndex === 0 && treeGridFirstRowCellSx,\n ...getTreeGridCellOverrideSx(treeGridTitleCellSx, titleSx),\n ]\n : titleSx\n }\n rowSpan={col?.rowSpan}\n >\n {col.required ? getRequiredTitle(col.title) : col.title}\n </TableCell>\n <TableCell\n className=\"whitespace-pre-wrap\"\n sx={\n canUseTreeGridStyle\n ? [rowIndex === 0 && treeGridFirstRowCellSx, ...getTreeGridCellOverrideSx(cellSx)]\n : cellSx\n }\n style={col?.style ?? {}}\n colSpan={col?.colSpan}\n rowSpan={col?.rowSpan}\n >\n {renderFieldTableCellValue(col, data, cellSx)}\n </TableCell>\n </Fragment>\n ))}\n </StyledTableRow>\n ))}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["DEFAULT_CHECKBOX_FONT_SIZE","defaultTreeGridTitleCellSx","TREEGRID_TABLE_FONT_FAMILY_STACK","treeGridContainerSx","treeGridFirstRowCellSx","normalizeTableCellSx","__name","style","getTreeGridCellOverrideSx","styles","theme","defaultFieldTableTheme","getRequiredTitle","title","jsxs","Fragment","jsx","getFieldTableValue","data","key","getCheckboxChecked","value","validate","isNaN","toNumber","getDateFormat","cell","renderFieldTableCellValue","cellSx","Checkbox","dayjs","OwpFieldTable","layout","titleWidth","titleSx","treeGridTitleCellSx","colGroupSlot","className","tableLayout","canUseTreeGridStyle","currentSettings","useGetCurrentSettings","baseTableTheme","useMemo","resolveOwpTableTheme","_b","_a","tableTheme","_c","StyledTable","clsx","TableBody","cols","rowIndex","StyledTableRow","col","colIndex","TableCell"],"mappings":"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"}
1
+ {"version":3,"file":"OwpFieldTable.js","sources":["../../../src/components/OwpTable/OwpFieldTable.tsx"],"sourcesContent":["import {\n resolveOwpTableTheme,\n} from '@/constants/tableTheme';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport type { OwpTableVariantThemeConfigType } from '@/types/OwpTableThemeTypes';\nimport { Box, Checkbox, TableBody, TableCell, type TableCellProps } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\nimport { isNaN, toNumber } from 'es-toolkit/compat';\nimport { Fragment, type CSSProperties, type ReactNode, useMemo } from 'react';\nimport { getDefaultTableHeaderCellSx } from './internal/defaultTableStyle';\nimport { TREEGRID_TABLE_FONT_FAMILY_STACK } from './internal/treeGridTableStyle';\nimport { StyledTable, StyledTableRow } from './OwpTable';\n\ntype OwpFieldTableCell = {\n title: string;\n key: string;\n contentType?: 'input' | 'text';\n required?: boolean;\n disableLocaleString?: boolean;\n useDate?: boolean;\n withTime?: boolean;\n withTimeAndSec?: boolean;\n useCheckbox?: boolean;\n colSpan?: number;\n rowSpan?: number;\n style?: CSSProperties;\n render?: () => ReactNode;\n validate?: (v?: number | string) => boolean;\n};\n\ntype OwpFieldTableValue = string | number | '';\ntype OwpFieldTableDataRecord = Record<string, OwpFieldTableValue | undefined>;\n\ninterface OwpFieldTableProps {\n layout: OwpFieldTableCell[][];\n data?: OwpFieldTableDataRecord;\n titleSx?: TableCellProps['sx'];\n treeGridTitleCellSx?: TableCellProps['sx'];\n cellSx?: TableCellProps['sx'];\n titleWidth?: number | string;\n colGroupSlot?: ReactNode;\n className?: string;\n tableLayout?: 'auto' | 'fixed';\n canUseTreeGridStyle?: boolean;\n}\n\nconst DEFAULT_CHECKBOX_FONT_SIZE = 28;\n\nconst defaultTreeGridTitleCellSx = {\n '&&': {\n fontFamily: TREEGRID_TABLE_FONT_FAMILY_STACK,\n fontSize: '1.7rem',\n fontWeight: 600,\n lineHeight: 'normal',\n minHeight: 'unset',\n padding: '7px 10px',\n },\n} as const;\n\nconst treeGridContainerSx = {\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFirstRowCellSx = {\n borderTop: '1px solid #CDD8E4',\n} as const;\n\ntype TableCellSxItem = Exclude<SxProps<Theme>, readonly unknown[] | false | null | undefined>;\n\nconst normalizeTableCellSx = (\n style?: TableCellProps['sx'],\n): TableCellSxItem[] => {\n if (!style) {\n return [];\n }\n\n return (Array.isArray(style) ? style : [style]).filter(Boolean) as TableCellSxItem[];\n};\n\nconst getTreeGridCellOverrideSx = (\n ...styles: Array<TableCellProps['sx'] | undefined>\n): TableCellSxItem[] =>\n styles.flatMap(normalizeTableCellSx).map((style) =>\n typeof style === 'function'\n ? (theme: Theme) => ({\n '&&&': style(theme),\n })\n : {\n '&&&': style,\n },\n );\n\nconst getTableCellFontSize = (\n style?: TableCellProps['sx'],\n): number | string | undefined => {\n if (!style) {\n return undefined;\n }\n\n const styleItems = Array.isArray(style) ? style : [style];\n\n for (let index = styleItems.length - 1; index >= 0; index -= 1) {\n const styleItem = styleItems[index];\n\n if (!styleItem || typeof styleItem === 'function' || Array.isArray(styleItem)) {\n continue;\n }\n\n if (typeof styleItem === 'object' && 'fontSize' in styleItem) {\n return styleItem.fontSize as number | string | undefined;\n }\n }\n\n return undefined;\n};\n\nconst defaultFieldTableTheme = {\n header: {\n backgroundColor: '#eeeeee',\n color: '#111827',\n fontSize: '1.7rem',\n fontWeight: 600,\n },\n cell: {\n backgroundColor: '#FFFFFF',\n fontSize: '1.7rem',\n },\n} satisfies OwpTableVariantThemeConfigType;\n\n/** 필수 헤더 타이틀 */\nconst getRequiredTitle = (title: string) => (\n <>\n {title}\n <span className=\"ml-4 text-red-600\">*</span>\n </>\n);\n\nconst getFieldTableValue = (data: OwpFieldTableProps['data'], key: string) => {\n return data?.[key];\n};\n\nconst getCheckboxChecked = (\n value: OwpFieldTableValue | undefined,\n validate?: OwpFieldTableCell['validate'],\n) => {\n if (typeof validate === 'function') {\n return validate(value);\n }\n\n if (isNaN(toNumber(value))) {\n return value === 'Y';\n }\n\n return Boolean(Number(value));\n};\n\nconst getDateFormat = (cell: OwpFieldTableCell) => {\n if (cell.withTime) {\n return 'YYYY-MM-DD HH:mm';\n }\n\n if (cell.withTimeAndSec) {\n return 'YYYY-MM-DD HH:mm:ss';\n }\n\n return 'YYYY-MM-DD';\n};\n\nconst renderFieldTableCellValue = (\n cell: OwpFieldTableCell,\n data: OwpFieldTableProps['data'],\n cellSx?: OwpFieldTableProps['cellSx'],\n): ReactNode => {\n const value = getFieldTableValue(data, cell.key);\n\n if (typeof cell.render === 'function') {\n const renderedContent = cell.render();\n const contentType = cell.contentType ?? 'input';\n\n return contentType === 'text'\n ? <Box sx={{ px: 1.25 }}>{renderedContent}</Box>\n : renderedContent;\n }\n\n if (cell.useCheckbox) {\n return (\n <Checkbox\n checked={getCheckboxChecked(value, cell.validate)}\n sx={{\n '& .MuiSvgIcon-root': {\n fontSize: getTableCellFontSize(cellSx) ?? DEFAULT_CHECKBOX_FONT_SIZE,\n },\n }}\n />\n );\n }\n\n if (cell.useDate) {\n return value ? dayjs(value).format(getDateFormat(cell)) : value;\n }\n\n if (cell.disableLocaleString) {\n return value;\n }\n\n return value?.toLocaleString();\n};\n\n/**\n * OwpFieldTable 컴포넌트\n * @param layout layout 값\n * @param titleWidth titleWidth 값\n * @param titleSx titleSx 값\n * @param treeGridTitleCellSx TreeGrid title cell sx 값\n * @param cellSx cellSx 값\n * @param data 데이터\n * @param colGroupSlot colGroupSlot 값\n * @param className className 값\n * @param tableLayout tableLayout 값\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n */\nexport function OwpFieldTable({\n layout,\n titleWidth,\n titleSx,\n treeGridTitleCellSx,\n cellSx,\n data,\n colGroupSlot,\n className,\n tableLayout = 'fixed',\n canUseTreeGridStyle = false,\n}: OwpFieldTableProps) {\n const currentSettings = useGetCurrentSettings();\n const tableBackgroundColor =\n currentSettings?.theme?.main?.table?.field?.cell?.backgroundColor ??\n defaultFieldTableTheme.cell.backgroundColor;\n const tableTheme = useMemo(\n () =>\n resolveOwpTableTheme(currentSettings?.theme?.main?.table?.field, {\n header: {\n backgroundColor: defaultFieldTableTheme.header.backgroundColor,\n color: defaultFieldTableTheme.header.color,\n fontSize: defaultFieldTableTheme.header.fontSize,\n fontWeight: defaultFieldTableTheme.header.fontWeight,\n },\n cell: {\n backgroundColor: defaultFieldTableTheme.cell.backgroundColor,\n fontSize: defaultFieldTableTheme.cell.fontSize,\n },\n }),\n [currentSettings],\n );\n\n return (\n <StyledTable\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx('w-full', className)}\n containerProps={{\n sx: [\n canUseTreeGridStyle ? treeGridContainerSx : undefined,\n !canUseTreeGridStyle && tableBackgroundColor\n ? { backgroundColor: tableBackgroundColor }\n : undefined,\n ],\n }}\n tableTheme={tableTheme}\n tableLayout={tableLayout}\n >\n {colGroupSlot}\n <TableBody>\n {layout.map((cols, rowIndex) => (\n <StyledTableRow key={`owp-field-col-${rowIndex}`}>\n {cols.map((col, colIndex) => (\n <Fragment key={`owp-field-cell-${rowIndex}-${colIndex}`}>\n <TableCell\n component=\"th\"\n className=\"whitespace-pre-wrap\"\n width={titleWidth ?? 200}\n sx={\n canUseTreeGridStyle\n ? [\n defaultTreeGridTitleCellSx,\n rowIndex === 0 && treeGridFirstRowCellSx,\n ...getTreeGridCellOverrideSx(treeGridTitleCellSx, titleSx),\n ]\n : [getDefaultTableHeaderCellSx(tableTheme), ...normalizeTableCellSx(titleSx)]\n }\n rowSpan={col?.rowSpan}\n >\n {col.required ? getRequiredTitle(col.title) : col.title}\n </TableCell>\n <TableCell\n className=\"whitespace-pre-wrap\"\n sx={\n canUseTreeGridStyle\n ? [rowIndex === 0 && treeGridFirstRowCellSx, ...getTreeGridCellOverrideSx(cellSx)]\n : cellSx\n }\n style={col?.style ?? {}}\n colSpan={col?.colSpan}\n rowSpan={col?.rowSpan}\n >\n {renderFieldTableCellValue(col, data, cellSx)}\n </TableCell>\n </Fragment>\n ))}\n </StyledTableRow>\n ))}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["DEFAULT_CHECKBOX_FONT_SIZE","defaultTreeGridTitleCellSx","TREEGRID_TABLE_FONT_FAMILY_STACK","treeGridContainerSx","treeGridFirstRowCellSx","normalizeTableCellSx","__name","style","getTreeGridCellOverrideSx","styles","theme","getTableCellFontSize","styleItems","index","styleItem","defaultFieldTableTheme","getRequiredTitle","title","jsxs","Fragment","jsx","getFieldTableValue","data","key","getCheckboxChecked","value","validate","isNaN","toNumber","getDateFormat","cell","renderFieldTableCellValue","cellSx","renderedContent","Box","Checkbox","dayjs","OwpFieldTable","layout","titleWidth","titleSx","treeGridTitleCellSx","colGroupSlot","className","tableLayout","canUseTreeGridStyle","currentSettings","useGetCurrentSettings","tableBackgroundColor","_e","_d","_c","_b","_a","tableTheme","useMemo","resolveOwpTableTheme","StyledTable","clsx","TableBody","cols","rowIndex","StyledTableRow","col","colIndex","TableCell","getDefaultTableHeaderCellSx"],"mappings":"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"}