{"version":3,"sources":["../../src/components/ResizableTableContainer.tsx"],"sourcesContent":["'use client';\n\nimport {\n    createContext,\n    forwardRef,\n    useCallback,\n    useContext,\n    useMemo,\n    useState,\n    type ReactNode,\n} from 'react';\nimport { styled, useThemeProps } from '@mui/material/styles';\n\n// ---------------------------------------------------------------------------\n// Context – exported for use by ColumnResizer\n// ---------------------------------------------------------------------------\n\ninterface ResizableTableContextValue {\n    getColumnWidth: (columnId: string) => number | undefined;\n    onResize: (columnId: string, delta: number) => void;\n}\n\nconst ResizableTableContext = createContext<ResizableTableContextValue | null>(null);\n\n/**\n * Hook for ColumnResizer (or other children) to access the resize context.\n * Returns `null` when used outside a ResizableTableContainer so the resizer\n * can still work in a standalone / uncontrolled fashion.\n */\nconst useResizableTable = () => useContext(ResizableTableContext);\n\n// ---------------------------------------------------------------------------\n// Styled wrapper\n// ---------------------------------------------------------------------------\n\nconst ResizableTableContainerRoot = styled('div', {\n    name: 'MuiResizableTableContainer',\n    slot: 'root',\n})({\n    overflowX: 'auto',\n    position: 'relative',\n    '& table': {\n        tableLayout: 'fixed',\n    },\n    '& th': {\n        position: 'relative',\n    },\n});\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst MIN_COLUMN_WIDTH = 50;\n\ninterface ResizableTableContainerProps {\n    children: ReactNode;\n    className?: string;\n    /** Initial column widths keyed by column id. */\n    defaultColumnWidths?: Record<string, number>;\n    /** Callback fired after a column is resized. */\n    onColumnResize?: (columnId: string, width: number) => void;\n}\n\nconst ResizableTableContainer = forwardRef<HTMLDivElement, ResizableTableContainerProps>(\n    function ResizableTableContainer(inProps, ref) {\n        const props = useThemeProps({ props: inProps, name: 'MuiResizableTableContainer' });\n        const { children, className, defaultColumnWidths, onColumnResize, ...other } = props;\n\n        const [columnWidths, setColumnWidths] = useState(defaultColumnWidths ?? {});\n\n        const getColumnWidth = useCallback(\n            (columnId: string) => columnWidths[columnId],\n            [columnWidths]\n        );\n\n        const onResize = useCallback(\n            (columnId: string, delta: number) => {\n                setColumnWidths((prev) => {\n                    const current = prev[columnId] ?? MIN_COLUMN_WIDTH;\n                    const next = Math.max(MIN_COLUMN_WIDTH, current + delta);\n                    if (next === current) return prev;\n                    onColumnResize?.(columnId, next);\n                    return { ...prev, [columnId]: next };\n                });\n            },\n            [onColumnResize]\n        );\n\n        const ctx = useMemo<ResizableTableContextValue>(\n            () => ({ getColumnWidth, onResize }),\n            [getColumnWidth, onResize]\n        );\n\n        return (\n            <ResizableTableContext.Provider value={ctx}>\n                <ResizableTableContainerRoot ref={ref} className={className} {...other}>\n                    {children}\n                </ResizableTableContainerRoot>\n            </ResizableTableContext.Provider>\n        );\n    }\n);\n\nexport { ResizableTableContainer, useResizableTable };\nexport type { ResizableTableContainerProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAQO;AACP,oBAAsC;AAqFtB;AA1EhB,IAAM,4BAAwB,4BAAiD,IAAI;AAOnF,IAAM,oBAAoB,UAAM,yBAAW,qBAAqB;AAMhE,IAAM,kCAA8B,sBAAO,OAAO;AAAA,EAC9C,MAAM;AAAA,EACN,MAAM;AACV,CAAC,EAAE;AAAA,EACC,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACJ,UAAU;AAAA,EACd;AACJ,CAAC;AAMD,IAAM,mBAAmB;AAWzB,IAAM,8BAA0B;AAAA,EAC5B,SAASA,yBAAwB,SAAS,KAAK;AAC3C,UAAM,YAAQ,6BAAc,EAAE,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAClF,UAAM,EAAE,UAAU,WAAW,qBAAqB,gBAAgB,GAAG,MAAM,IAAI;AAE/E,UAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,uBAAuB,CAAC,CAAC;AAE1E,UAAM,qBAAiB;AAAA,MACnB,CAAC,aAAqB,aAAa,QAAQ;AAAA,MAC3C,CAAC,YAAY;AAAA,IACjB;AAEA,UAAM,eAAW;AAAA,MACb,CAAC,UAAkB,UAAkB;AACjC,wBAAgB,CAAC,SAAS;AACtB,gBAAM,UAAU,KAAK,QAAQ,KAAK;AAClC,gBAAM,OAAO,KAAK,IAAI,kBAAkB,UAAU,KAAK;AACvD,cAAI,SAAS,QAAS,QAAO;AAC7B,2BAAiB,UAAU,IAAI;AAC/B,iBAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,CAAC,cAAc;AAAA,IACnB;AAEA,UAAM,UAAM;AAAA,MACR,OAAO,EAAE,gBAAgB,SAAS;AAAA,MAClC,CAAC,gBAAgB,QAAQ;AAAA,IAC7B;AAEA,WACI,4CAAC,sBAAsB,UAAtB,EAA+B,OAAO,KACnC,sDAAC,+BAA4B,KAAU,WAAuB,GAAG,OAC5D,UACL,GACJ;AAAA,EAER;AACJ;","names":["ResizableTableContainer"]}