@carto/ps-react-ui 5.0.0-widgets.12 → 5.0.0-widgets.13

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 (46) hide show
  1. package/dist/{cjs-D9ro6BXv.js → cjs-D4KH3azB.js} +2 -2
  2. package/dist/{cjs-D9ro6BXv.js.map → cjs-D4KH3azB.js.map} +1 -1
  3. package/dist/components.js +26 -26
  4. package/dist/components.js.map +1 -1
  5. package/dist/{lasso-tool-CYn3ivf-.js → lasso-tool-BwRzEW7k.js} +10 -10
  6. package/dist/{lasso-tool-CYn3ivf-.js.map → lasso-tool-BwRzEW7k.js.map} +1 -1
  7. package/dist/{note-Clng2ej6.js → note-t51drNe0.js} +3 -3
  8. package/dist/{note-Clng2ej6.js.map → note-t51drNe0.js.map} +1 -1
  9. package/dist/{series-Do02NQUF.js → series-D3Pc-kYX.js} +2 -2
  10. package/dist/{series-Do02NQUF.js.map → series-D3Pc-kYX.js.map} +1 -1
  11. package/dist/{utils-Dv5Z47UQ.js → utils-D3-eQyDR.js} +2 -2
  12. package/dist/{utils-Dv5Z47UQ.js.map → utils-D3-eQyDR.js.map} +1 -1
  13. package/dist/widgets/actions.js +19 -17
  14. package/dist/widgets/actions.js.map +1 -1
  15. package/dist/widgets/bar.js +5 -5
  16. package/dist/widgets/bar.js.map +1 -1
  17. package/dist/widgets/category.js +6 -6
  18. package/dist/widgets/category.js.map +1 -1
  19. package/dist/widgets/echart.js +3 -3
  20. package/dist/widgets/echart.js.map +1 -1
  21. package/dist/widgets/formula.js +4 -4
  22. package/dist/widgets/formula.js.map +1 -1
  23. package/dist/widgets/histogram.js +5 -5
  24. package/dist/widgets/histogram.js.map +1 -1
  25. package/dist/widgets/loader.js +1 -1
  26. package/dist/widgets/markdown.js +5 -5
  27. package/dist/widgets/markdown.js.map +1 -1
  28. package/dist/widgets/note.js +1 -1
  29. package/dist/widgets/pie.js +7 -7
  30. package/dist/widgets/pie.js.map +1 -1
  31. package/dist/widgets/range.js +6 -6
  32. package/dist/widgets/range.js.map +1 -1
  33. package/dist/widgets/scatterplot.js +5 -5
  34. package/dist/widgets/scatterplot.js.map +1 -1
  35. package/dist/widgets/spread.js +4 -4
  36. package/dist/widgets/spread.js.map +1 -1
  37. package/dist/widgets/table.js +8 -8
  38. package/dist/widgets/table.js.map +1 -1
  39. package/dist/widgets/timeseries.js +5 -5
  40. package/dist/widgets/timeseries.js.map +1 -1
  41. package/dist/widgets/toolbar-actions.js +1866 -1465
  42. package/dist/widgets/toolbar-actions.js.map +1 -1
  43. package/dist/widgets/wrapper.js +7 -7
  44. package/dist/widgets/wrapper.js.map +1 -1
  45. package/dist/widgets.js +1 -1
  46. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../src/widgets/table/components/cell-header.tsx","../../src/widgets/table/helpers.ts","../../src/widgets/table/components/cell.tsx","../../src/widgets/table/components/row.tsx","../../src/widgets/table/components/pagination-actions.tsx","../../src/widgets/table/components/pagination.tsx","../../src/hooks/use-widget-ref.ts","../../src/widgets/table/table-ui.tsx","../../src/widgets/table/config.ts","../../src/widgets/table/hooks/use-pagination.ts","../../src/widgets/table/hooks/use-sort.ts","../../src/widgets/table/hooks/use-selection.ts","../../src/widgets/table/skeleton.tsx","../../src/widgets/table/serializer.ts","../../src/widgets/table/style.ts"],"sourcesContent":["import { TableCell, TableSortLabel, Checkbox } from '@mui/material'\nimport type { CellHeaderProps } from '../types'\n\n/**\n * Table cell header component with optional sorting and select-all checkbox\n */\nexport function CellHeader({\n column,\n sortState,\n onSort,\n isSelectAll,\n isAllSelected,\n isIndeterminate,\n onSelectAll,\n}: CellHeaderProps) {\n // Render select-all checkbox\n if (isSelectAll) {\n return (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={onSelectAll}\n inputProps={{ 'aria-label': 'select all rows' }}\n />\n </TableCell>\n )\n }\n\n const isSorted = sortState?.columnId === column.id\n const sortDirection = isSorted ? sortState.direction : undefined\n\n // Render sortable column header\n if (column.sortable && onSort) {\n return (\n <TableCell\n align={column.align}\n style={{ width: column.width }}\n sortDirection={sortDirection}\n >\n <TableSortLabel\n active={isSorted}\n direction={sortDirection ?? 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n </TableCell>\n )\n }\n\n // Render non-sortable column header\n return (\n <TableCell align={column.align} style={{ width: column.width }}>\n {column.label}\n </TableCell>\n )\n}\n","import type { ReactNode } from 'react'\n\n/**\n * Get formatted cell value for display\n * Handles primitives, arrays, objects, and custom formatters\n *\n * @param cellValue - Raw cell value\n * @param formatter - Optional formatter function\n * @returns Formatted value for display\n */\nexport function getCellValue<T>(cellValue: T): ReactNode {\n // Handle null/undefined\n if (cellValue === null || cellValue === undefined) {\n return ''\n }\n\n // Handle arrays - format as [item1, item2, ...]\n if (Array.isArray(cellValue)) {\n const formatted = cellValue\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : String(item)))\n .join(', ')\n return `[${formatted}]`\n }\n\n // Handle objects - stringify to JSON\n if (typeof cellValue === 'object') {\n return JSON.stringify(cellValue)\n }\n\n // Return primitives as-is (string, number, boolean)\n return cellValue as ReactNode\n}\n\n/**\n * Compare two values for sorting\n * Handles strings, numbers, and other types\n *\n * @param a - First value\n * @param b - Second value\n * @param direction - Sort direction\n * @returns Comparison result (-1, 0, 1)\n */\nexport function compareValues(\n a: unknown,\n b: unknown,\n direction: 'asc' | 'desc',\n): number {\n // Handle null/undefined - always sort to end\n if (a === null || a === undefined) return 1\n if (b === null || b === undefined) return -1\n\n let comparison = 0\n\n if (typeof a === 'string' && typeof b === 'string') {\n comparison = a.localeCompare(b)\n } else if (typeof a === 'number' && typeof b === 'number') {\n comparison = a - b\n } else if (typeof a === 'boolean' && typeof b === 'boolean') {\n comparison = a === b ? 0 : a ? 1 : -1\n } else if (typeof a === 'object' || typeof b === 'object') {\n // Compare objects/arrays as JSON strings\n const strA = JSON.stringify(a)\n const strB = JSON.stringify(b)\n comparison = strA.localeCompare(strB)\n } else {\n // Fallback for other primitives (bigint, symbol, etc.)\n comparison = 0\n }\n\n return direction === 'asc' ? comparison : -comparison\n}\n\n/**\n * Sort data array by column\n *\n * @param data - Data array to sort\n * @param columnId - Column ID to sort by\n * @param direction - Sort direction\n * @returns Sorted data array (new array, does not mutate original)\n */\nexport function sortData<T extends Record<string, unknown>>(\n data: T[],\n columnId: string,\n direction: 'asc' | 'desc',\n): T[] {\n return [...data].sort((a, b) =>\n compareValues(a[columnId], b[columnId], direction),\n )\n}\n\n/**\n * Paginate data array\n *\n * @param data - Data array to paginate\n * @param page - Current page (0-indexed)\n * @param rowsPerPage - Number of rows per page\n * @returns Paginated data slice\n */\nexport function paginateData<T>(\n data: T[],\n page: number,\n rowsPerPage: number,\n): T[] {\n const start = page * rowsPerPage\n const end = start + rowsPerPage\n return data.slice(start, end)\n}\n","import { TableCell as MuiTableCell, Link, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport type { TableColumn } from '../types'\nimport { getCellValue } from '../helpers'\nimport type { ReactNode } from 'react'\n\n/**\n * Props for Cell component\n */\nexport interface CellProps {\n /** Column definition */\n column: TableColumn\n /** Cell value */\n value: unknown\n}\n\nconst DEFAULT_P = ({ children }: { children?: ReactNode }) => (\n <Typography component='span' variant='body2' color='inherit'>\n {children}\n </Typography>\n)\n\n/**\n * Markdown components for cell content\n * Uses compact styling suitable for table cells (reusing Note widget pattern)\n */\nconst CELL_MARKDOWN_COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href }) => {\n const isExternal = href?.startsWith('http')\n return (\n <Link\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n )\n },\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Table cell component with automatic markdown support for string values\n * Markdown is rendered when the raw value is a string and no formatter is defined.\n * If a formatter is used, its output is rendered directly without markdown parsing.\n */\nexport function Cell({ column, value }: CellProps) {\n // If formatter is defined, use it directly without markdown\n if (column.formatter) {\n return (\n <MuiTableCell align={column.align}>\n {column.formatter(value)}\n </MuiTableCell>\n )\n }\n\n // For string values without formatter, render as markdown\n if (typeof value === 'string') {\n return (\n <MuiTableCell align={column.align}>\n <ReactMarkdown components={CELL_MARKDOWN_COMPONENTS}>\n {value}\n </ReactMarkdown>\n </MuiTableCell>\n )\n }\n\n // For non-string values, render directly\n return <MuiTableCell align={column.align}>{getCellValue(value)}</MuiTableCell>\n}\n","import { TableRow as MuiTableRow, TableCell, Checkbox } from '@mui/material'\nimport type { RowProps } from '../types'\nimport { Cell } from './cell'\n\n/**\n * Table row component with selection and hover support\n */\nexport function Row({\n row,\n columns,\n isSelected = false,\n selectable = false,\n onClick,\n onSelect,\n onMouseEnter,\n onMouseLeave,\n}: RowProps) {\n const handleClick = () => {\n onClick?.(row)\n }\n\n const handleCheckboxClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n onSelect?.(row)\n }\n\n const handleMouseEnter = () => {\n onMouseEnter?.(row)\n }\n\n const handleMouseLeave = () => {\n onMouseLeave?.()\n }\n\n return (\n <MuiTableRow\n hover={!!onMouseEnter || !!onMouseLeave || !!onClick}\n selected={isSelected}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n cursor: onClick ? 'pointer' : 'default',\n }}\n >\n {selectable && (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isSelected}\n onClick={handleCheckboxClick}\n inputProps={{ 'aria-label': `select row ${row.id}` }}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <Cell key={column.id} column={column} value={row[column.id]} />\n ))}\n </MuiTableRow>\n )\n}\n","import { Box, IconButton } from '@mui/material'\nimport FirstPageIcon from '@mui/icons-material/FirstPage'\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport LastPageIcon from '@mui/icons-material/LastPage'\nimport type { PaginationActionsProps } from '../types'\n\n/**\n * Custom pagination actions with first/prev/next/last buttons\n */\nexport function PaginationActions({\n count,\n page,\n rowsPerPage,\n onPageChange,\n}: PaginationActionsProps) {\n const lastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1)\n\n const handleFirstPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, 0)\n }\n\n const handlePreviousPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page - 1)\n }\n\n const handleNextPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page + 1)\n }\n\n const handleLastPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, lastPage)\n }\n\n return (\n <Box sx={{ flexShrink: 0, ml: 2.5 }}>\n <IconButton\n onClick={handleFirstPage}\n disabled={page === 0}\n aria-label='first page'\n >\n <FirstPageIcon />\n </IconButton>\n <IconButton\n onClick={handlePreviousPage}\n disabled={page === 0}\n aria-label='previous page'\n >\n <KeyboardArrowLeft />\n </IconButton>\n <IconButton\n onClick={handleNextPage}\n disabled={page >= lastPage}\n aria-label='next page'\n >\n <KeyboardArrowRight />\n </IconButton>\n <IconButton\n onClick={handleLastPage}\n disabled={page >= lastPage}\n aria-label='last page'\n >\n <LastPageIcon />\n </IconButton>\n </Box>\n )\n}\n","import { TablePagination as MuiTablePagination } from '@mui/material'\nimport type { PaginationProps } from '../types'\nimport { PaginationActions } from './pagination-actions'\n\n/**\n * Table pagination component\n */\nexport function Pagination({\n page,\n rowsPerPage,\n total,\n rowsPerPageOptions = [5, 10, 25, 50],\n onPageChange,\n onRowsPerPageChange,\n}: PaginationProps) {\n const handlePageChange = (\n _event: React.MouseEvent<HTMLButtonElement> | null,\n newPage: number,\n ) => {\n onPageChange(newPage)\n }\n\n const handleRowsPerPageChange = (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n ) => {\n onRowsPerPageChange(parseInt(event.target.value, 10))\n }\n\n return (\n <MuiTablePagination\n component='div'\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n ActionsComponent={PaginationActions}\n />\n )\n}\n","import { useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../widgets/stores/widget-store'\n\n/**\n * Custom hook for registering a DOM element ref with the widget store.\n * This allows other parts of the application to access the widget's DOM element.\n *\n * @param widgetId - The widget ID to register the ref under\n * @returns A ref object to attach to the DOM element\n *\n * @example\n * ```tsx\n * function MyWidget({ id }: { id: string }) {\n * const ref = useWidgetRef<HTMLDivElement>(id)\n *\n * return <div ref={ref}>Widget content</div>\n * }\n * ```\n */\nexport function useWidgetRef<T extends HTMLElement = HTMLElement>(\n widgetId: string,\n) {\n const ref = useRef<T | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(widgetId, { refUI: ref })\n }\n }, [widgetId, setWidget])\n\n return ref\n}\n","import {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableContainer as MuiTableContainer,\n Paper,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport type { Ref } from 'react'\nimport { CellHeader } from './components/cell-header'\nimport { Row } from './components/row'\nimport { Pagination } from './components/pagination'\nimport { PaginationActions } from './components/pagination-actions'\nimport { useWidgetRef } from '../../hooks'\nimport type { TableUIProps } from './types'\n\n/**\n * Props for the base Table component\n */\nexport interface TableComponentProps extends MuiTableProps {\n /** Table element ref */\n ref?: Ref<HTMLTableElement>\n}\n\n/**\n * Base Table component with compound component pattern\n * Provides Table.Head, Table.Body, Table.Row, Table.Cell, Table.CellHeader, Table.Pagination\n */\nfunction Table({\n children,\n ref,\n stickyHeader = true,\n ...props\n}: TableComponentProps) {\n return (\n <MuiTable stickyHeader={stickyHeader} ref={ref} {...props}>\n {children}\n </MuiTable>\n )\n}\n\n// Attach sub-components as static properties\nTable.Head = TableHead\nTable.CellHeader = CellHeader\nTable.Body = TableBody\nTable.Row = Row\nTable.Cell = TableCell\nTable.Container = TableContainer\nTable.Paper = Paper\nTable.Pagination = Pagination\nTable.PaginationActions = PaginationActions\n\nexport { Table }\n\n/**\n * TableContainer widget component\n * Integrates with widget store and provides ref registration using custom hook\n */\nfunction TableContainer(props: TableUIProps) {\n const ref = useWidgetRef<HTMLDivElement>(props.id)\n\n return <MuiTableContainer ref={ref}>{props.children}</MuiTableContainer>\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n TableDownloadConfig,\n TableWidgetConfig,\n TableColumn,\n Mode,\n SortDirection,\n} from './types'\n\nexport const DEFAULT_MODE: Mode = 'local'\nexport const DEFAULT_PAGE = 0\nexport const DEFAULT_ROWS_PER_PAGE = 10\nexport const DEFAULT_ROWS_PER_PAGE_OPTIONS = [5, 10, 25, 50]\n\nexport const DEFAULT_COLUMN_ID = null\nexport const DEFAULT_DIRECTION: SortDirection = 'asc'\n\n/**\n * Default table download configuration\n * Supports PNG export (screenshot) and CSV export (data)\n */\nexport function tableDownloadConfig({\n refUI,\n}: ConfigProps): TableDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length) {\n return downloadToCSV.modifier([])\n }\n\n // Convert table data to CSV format\n // First row contains headers (column keys)\n const firstRow = data[0]\n if (!firstRow) {\n return downloadToCSV.modifier([])\n }\n\n const headers = Object.keys(firstRow).filter((key) => key !== 'id')\n const rows = data.map((row) =>\n headers.map((header) => {\n const value = row[header]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return value\n }),\n )\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Default table widget configuration\n */\nexport function tableConfig(columns: TableColumn[] = []): TableWidgetConfig {\n return {\n columns,\n selectable: false,\n selected: [],\n mode: DEFAULT_MODE,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { paginateData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport {\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n} from '../config'\n\nexport interface UsePaginationResult<T> {\n /** Whether pagination is enabled */\n paginationEnabled: boolean\n /** Current page (0-indexed) */\n page: number\n /** Rows per page */\n rowsPerPage: number\n /** Total row count */\n total: number\n /** Available rows per page options */\n rowsPerPageOptions: number[]\n /** Paginated data (for local mode) */\n paginatedData: T[]\n /** Set current page */\n setPage: (page: number) => void\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void\n /** Go to first page */\n goToFirstPage: () => void\n /** Go to last page */\n goToLastPage: () => void\n /** Go to next page */\n goToNextPage: () => void\n /** Go to previous page */\n goToPreviousPage: () => void\n}\n\n/**\n * Hook for managing table pagination\n * Supports both local (client-side) and remote (server-side) pagination\n * State is persisted in the widget store for the given widgetId\n */\nexport function usePagination<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UsePaginationResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const paginationState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n paginationEnabled: !!widget?.pagination,\n page: widget?.pagination?.page ?? DEFAULT_PAGE,\n rowsPerPage: widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE,\n rowsPerPageOptions:\n widget?.pagination?.rowsPerPageOptions ??\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n total: widget?.pagination?.total ?? data.length,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Calculate max page\n const maxPage = Math.max(\n 0,\n Math.ceil(paginationState.total / (paginationState?.rowsPerPage ?? 1)) - 1,\n )\n\n // Set page with bounds checking\n const setPage = useCallback(\n (newPage: number) => {\n // Read current state directly from store to avoid stale closures\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentTotal = widget?.pagination?.total ?? data.length\n const currentRowsPerPage =\n widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE\n const currentMaxPage = Math.max(\n 0,\n Math.ceil(currentTotal / currentRowsPerPage) - 1,\n )\n const boundedPage = Math.max(0, Math.min(newPage, currentMaxPage))\n\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...widget?.pagination,\n page: boundedPage,\n },\n })\n },\n [data.length, getWidget, setWidget, widgetId],\n )\n\n // Set rows per page and reset to first page\n const setRowsPerPage = useCallback(\n (newRowsPerPage: number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...widget?.pagination,\n rowsPerPage: newRowsPerPage,\n page: 0, // Reset to first page when changing rows per page\n },\n })\n },\n [getWidget, setWidget, widgetId],\n )\n\n // Navigation helpers\n const goToFirstPage = useCallback(() => setPage(0), [setPage])\n const goToLastPage = useCallback(() => setPage(maxPage), [setPage, maxPage])\n const goToNextPage = useCallback(\n () => setPage(paginationState.page + 1),\n [setPage, paginationState.page],\n )\n const goToPreviousPage = useCallback(\n () => setPage(paginationState.page - 1),\n [setPage, paginationState.page],\n )\n\n // Paginated data for local mode\n const paginatedData = useMemo(() => {\n if (mode === 'remote' || !paginationState.paginationEnabled) {\n // For remote mode, data is already paginated from server\n return data\n }\n return paginateData(data, paginationState.page, paginationState.rowsPerPage)\n }, [\n data,\n mode,\n paginationState.page,\n paginationState.paginationEnabled,\n paginationState.rowsPerPage,\n ])\n\n return {\n ...paginationState,\n paginatedData,\n setPage,\n setRowsPerPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type {\n TableRow,\n SortDirection,\n SortState,\n TableWidgetState,\n} from '../types'\nimport { sortData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { DEFAULT_COLUMN_ID, DEFAULT_DIRECTION } from '../config'\n\nexport interface UseSortResult<T> extends SortState {\n /** Whether sorting is enabled */\n sortEnabled: boolean\n /** Current sort state */\n columnId: string | null\n direction: SortDirection\n /** Sorted data (for local mode) */\n sortedData: T[]\n /** Toggle sort on a column */\n toggleSort: (columnId: string) => void\n /** Set sort state directly */\n setSort: (columnId: string | null, direction: SortDirection) => void\n /** Clear sort */\n clearSort: () => void\n}\n\n/**\n * Hook for managing table sorting\n * Supports both local (client-side) and remote (server-side) sorting\n * State is persisted in the widget store for the given widgetId\n */\nexport function useSort<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UseSortResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const sortStoreState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n sortEnabled: !!widget?.sort,\n columnId: widget?.sort?.columnId ?? DEFAULT_COLUMN_ID,\n direction: widget?.sort?.direction ?? DEFAULT_DIRECTION,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Toggle sort on a column\n const toggleSort = useCallback(\n (toggleColumnId: string) => {\n // Read current state directly from store to avoid stale closures\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentColumnId = widget?.sort?.columnId ?? DEFAULT_COLUMN_ID\n const currentDirection = widget?.sort?.direction ?? DEFAULT_DIRECTION\n\n let newDirection: SortDirection = 'asc'\n\n if (currentColumnId === toggleColumnId) {\n // Same column - toggle direction\n newDirection = currentDirection === 'asc' ? 'desc' : 'asc'\n }\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n columnId: toggleColumnId,\n direction: newDirection,\n },\n })\n },\n [getWidget, setWidget, widgetId],\n )\n\n // Set sort state directly\n const setSort = useCallback(\n (newColumnId: string | null, newDirection: SortDirection) => {\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n columnId: newColumnId,\n direction: newDirection,\n },\n })\n },\n [setWidget, widgetId],\n )\n\n // Clear sort\n const clearSort = useCallback(() => {\n const widget = getWidget<TableWidgetState>(widgetId)\n if (!widget?.sort) return\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...widget.sort,\n columnId: null,\n direction: 'asc',\n },\n })\n }, [setWidget, getWidget, widgetId])\n\n // Sorted data for local mode\n const sortedData = useMemo(() => {\n if (\n mode === 'remote' ||\n !sortStoreState.columnId ||\n !sortStoreState.sortEnabled\n ) {\n // For remote mode, data is already sorted from server\n // If no sort column, return original data\n return data\n }\n return sortData(data, sortStoreState.columnId, sortStoreState.direction)\n }, [\n data,\n mode,\n sortStoreState.columnId,\n sortStoreState.direction,\n sortStoreState.sortEnabled,\n ])\n\n return {\n ...sortStoreState,\n sortedData,\n toggleSort,\n setSort,\n clearSort,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nexport interface UseSelectionOptions {\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: (string | number)[]) => void\n}\n\nexport interface UseSelectionResult {\n /** Array of selected row IDs */\n selectedIds: (string | number)[]\n /** Check if a row is selected */\n isSelected: (id: string | number) => boolean\n /** Check if all provided rows are selected */\n isAllSelected: (rows: TableRow[]) => boolean\n /** Check if some but not all rows are selected (for indeterminate state) */\n isIndeterminate: (rows: TableRow[]) => boolean\n /** Toggle selection of a single row */\n toggleRow: (id: string | number) => void\n /** Toggle selection of all provided rows */\n toggleAll: (rows: TableRow[]) => void\n /** Select specific rows */\n selectRows: (ids: (string | number)[]) => void\n /** Deselect specific rows */\n deselectRows: (ids: (string | number)[]) => void\n /** Clear all selections */\n clearSelection: () => void\n}\n\n/**\n * Hook for managing table row selection\n * Selection persists across pagination and is stored in the widget store\n */\nexport function useSelection(\n widgetId: string,\n options?: UseSelectionOptions,\n): UseSelectionResult {\n const { onSelectionChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const selected = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.selected\n }),\n )\n\n // Use store values with fallback to empty array\n const selectedIds = useMemo(() => selected ?? [], [selected])\n\n // Check if a row is selected\n const isSelected = useCallback(\n (id: string | number) => selectedIds.includes(id),\n [selectedIds],\n )\n\n // Check if all provided rows are selected\n const isAllSelected = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n return rows.every((row) => selectedIds.includes(row.id))\n },\n [selectedIds],\n )\n\n // Check if some but not all rows are selected\n const isIndeterminate = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n const selectedCount = rows.filter((row) =>\n selectedIds.includes(row.id),\n ).length\n return selectedCount > 0 && selectedCount < rows.length\n },\n [selectedIds],\n )\n\n // Toggle selection of a single row\n const toggleRow = useCallback(\n (id: string | number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = currentSelected.includes(id)\n ? currentSelected.filter((s) => s !== id)\n : [...currentSelected, id]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Toggle selection of all provided rows\n const toggleAll = useCallback(\n (rows: TableRow[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const rowIds = rows.map((row) => row.id)\n const allSelected = rowIds.every((id) => currentSelected.includes(id))\n\n const newSelected = allSelected\n ? currentSelected.filter((id) => !rowIds.includes(id))\n : [...new Set([...currentSelected, ...rowIds])]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Select specific rows\n const selectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = [...new Set([...currentSelected, ...ids])]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Deselect specific rows\n const deselectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = currentSelected.filter((id) => !ids.includes(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n const newSelected: (string | number)[] = []\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n }, [setWidget, widgetId, onSelectionChange])\n\n return {\n selectedIds,\n isSelected,\n isAllSelected,\n isIndeterminate,\n toggleRow,\n toggleAll,\n selectRows,\n deselectRows,\n clearSelection,\n }\n}\n","import {\n Box,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material'\n\nexport interface TableSkeletonProps {\n /** Number of columns to display */\n columns?: number\n /** Number of rows to display */\n rows?: number\n}\n\n/**\n * Table skeleton loader component\n */\nexport function TableSkeleton({ columns = 4, rows = 5 }: TableSkeletonProps) {\n return (\n <Box aria-label='Table skeleton'>\n <Table>\n <TableHead>\n <TableRow>\n {Array.from({ length: columns }).map((_, index) => (\n <TableCell key={index}>\n <Skeleton width='80%' height={24} />\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <TableRow key={rowIndex}>\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TableCell key={colIndex}>\n <Skeleton width='70%' height={20} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n )\n}\n","import type { TableRow, TableWidgetData } from './types'\n\n/**\n * Sanitizes a table row by ensuring all values are serializable.\n * Converts ReactNode and function values to undefined.\n *\n * @param row - The table row to sanitize\n * @returns A sanitized table row\n */\nexport function sanitizeTableRow(row: TableRow): TableRow {\n const sanitized: TableRow = { id: row.id }\n\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id') continue\n\n // Keep primitive values\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null\n ) {\n sanitized[key] = value\n }\n // Serialize arrays and plain objects\n else if (Array.isArray(value) || typeof value === 'object') {\n try {\n // Attempt to serialize - if it fails, the value contains non-serializable content\n JSON.stringify(value)\n sanitized[key] = value\n } catch {\n sanitized[key] = undefined\n }\n }\n // Skip functions and other non-serializable values\n else {\n sanitized[key] = undefined\n }\n }\n\n return sanitized\n}\n\n/**\n * Sanitizes table widget data by ensuring all rows are serializable.\n *\n * @param data - The table data to sanitize\n * @returns Sanitized table data\n */\nexport function sanitizeTableData(\n data: TableWidgetData | undefined,\n): TableWidgetData | undefined {\n return data?.map(sanitizeTableRow)\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n width: '100%',\n overflow: 'auto',\n },\n table: {\n minWidth: 650,\n },\n headerCell: {\n fontWeight: 600,\n backgroundColor: (theme: Theme) => theme.palette.background.paper,\n },\n row: {\n '&:last-child td, &:last-child th': {\n border: 0,\n },\n },\n rowHover: {\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n },\n },\n rowSelected: {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n },\n },\n pagination: {\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n },\n} satisfies Record<string, SxProps<Theme>>\n"],"names":["CellHeader","t0","$","_c","column","sortState","onSort","isSelectAll","isAllSelected","isIndeterminate","onSelectAll","t1","Symbol","for","t2","jsx","TableCell","Checkbox","isSorted","columnId","id","sortDirection","direction","undefined","sortable","width","t3","t4","label","TableSortLabel","t5","align","getCellValue","cellValue","Array","isArray","map","item","String","join","JSON","stringify","compareValues","a","b","comparison","localeCompare","strA","strB","sortData","data","sort","paginateData","page","rowsPerPage","start","end","slice","DEFAULT_P","children","Typography","CELL_MARKDOWN_COMPONENTS","h1","h2","h3","p","href","isExternal","startsWith","Link","img","ul","ol","li","Cell","value","formatter","MuiTableCell","ReactMarkdown","Row","row","columns","isSelected","selectable","onClick","onSelect","onMouseEnter","onMouseLeave","handleClick","event","stopPropagation","handleCheckboxClick","handleMouseEnter","t6","handleMouseLeave","t7","t8","t9","cursor","t10","t11","t12","MuiTableRow","PaginationActions","count","onPageChange","lastPage","Math","max","ceil","handleFirstPage","event_0","handlePreviousPage","event_1","handleNextPage","event_2","handleLastPage","flexShrink","ml","FirstPageIcon","IconButton","KeyboardArrowLeft","t13","KeyboardArrowRight","t14","t15","t16","LastPageIcon","t17","t18","jsxs","Box","Pagination","total","rowsPerPageOptions","onRowsPerPageChange","_event","newPage","handlePageChange","parseInt","target","handleRowsPerPageChange","MuiTablePagination","useWidgetRef","widgetId","ref","useRef","setWidget","useWidgetStore","_temp","current","refUI","useEffect","store","Table","props","stickyHeader","MuiTable","Head","TableHead","Body","TableBody","Container","TableContainer","Paper","MuiTableContainer","DEFAULT_MODE","DEFAULT_PAGE","DEFAULT_ROWS_PER_PAGE","DEFAULT_ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMN_ID","DEFAULT_DIRECTION","tableDownloadConfig","downloadToPNG","modifier","downloadToCSV","length","firstRow","headers","Object","keys","filter","key","rows","header","tableConfig","selected","mode","usePagination","getWidget","_temp2","state_1","widget","state","widgets","paginationEnabled","pagination","paginationState","useShallow","state_2","maxPage","widget_1","currentTotal","currentRowsPerPage","currentMaxPage","boundedPage","min","setPage","newRowsPerPage","widget_2","setRowsPerPage","goToFirstPage","goToLastPage","goToNextPage","goToPreviousPage","bb0","paginatedData","state_0","useSort","sortEnabled","sortStoreState","toggleColumnId","currentColumnId","currentDirection","newDirection","toggleSort","newColumnId","newDirection_0","setSort","clearSort","sortedData","useSelection","options","onSelectionChange","selectedIds","includes","every","rows_0","selectedCount","row_0","id_0","currentSelected","newSelected","s","toggleRow","rows_1","currentSelected_0","rowIds","_temp3","newSelected_0","id_1","id_2","Set","toggleAll","ids","currentSelected_1","newSelected_1","selectRows","ids_0","newSelected_2","id_3","deselectRows","newSelected_3","clearSelection","row_1","TableSkeleton","TableRow","from","__0","rowIndex","__1","colIndex","Skeleton","_","index","sanitizeTableRow","sanitized","entries","sanitizeTableData","styles","container","overflow","table","minWidth","headerCell","fontWeight","backgroundColor","theme","palette","background","paper","border","rowHover","action","hover","rowSelected","borderTop","divider"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../src/widgets/table/components/cell-header.tsx","../../src/widgets/table/helpers.ts","../../src/widgets/table/components/cell.tsx","../../src/widgets/table/components/row.tsx","../../src/widgets/table/components/pagination-actions.tsx","../../src/widgets/table/components/pagination.tsx","../../src/hooks/use-widget-ref.ts","../../src/widgets/table/table-ui.tsx","../../src/widgets/table/config.ts","../../src/widgets/table/hooks/use-pagination.ts","../../src/widgets/table/hooks/use-sort.ts","../../src/widgets/table/hooks/use-selection.ts","../../src/widgets/table/skeleton.tsx","../../src/widgets/table/serializer.ts","../../src/widgets/table/style.ts"],"sourcesContent":["import { TableCell, TableSortLabel, Checkbox } from '@mui/material'\nimport type { CellHeaderProps } from '../types'\n\n/**\n * Table cell header component with optional sorting and select-all checkbox\n */\nexport function CellHeader({\n column,\n sortState,\n onSort,\n isSelectAll,\n isAllSelected,\n isIndeterminate,\n onSelectAll,\n}: CellHeaderProps) {\n // Render select-all checkbox\n if (isSelectAll) {\n return (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={onSelectAll}\n inputProps={{ 'aria-label': 'select all rows' }}\n />\n </TableCell>\n )\n }\n\n const isSorted = sortState?.columnId === column.id\n const sortDirection = isSorted ? sortState.direction : undefined\n\n // Render sortable column header\n if (column.sortable && onSort) {\n return (\n <TableCell\n align={column.align}\n style={{ width: column.width }}\n sortDirection={sortDirection}\n >\n <TableSortLabel\n active={isSorted}\n direction={sortDirection ?? 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n </TableCell>\n )\n }\n\n // Render non-sortable column header\n return (\n <TableCell align={column.align} style={{ width: column.width }}>\n {column.label}\n </TableCell>\n )\n}\n","import type { ReactNode } from 'react'\n\n/**\n * Get formatted cell value for display\n * Handles primitives, arrays, objects, and custom formatters\n *\n * @param cellValue - Raw cell value\n * @param formatter - Optional formatter function\n * @returns Formatted value for display\n */\nexport function getCellValue<T>(cellValue: T): ReactNode {\n // Handle null/undefined\n if (cellValue === null || cellValue === undefined) {\n return ''\n }\n\n // Handle arrays - format as [item1, item2, ...]\n if (Array.isArray(cellValue)) {\n const formatted = cellValue\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : String(item)))\n .join(', ')\n return `[${formatted}]`\n }\n\n // Handle objects - stringify to JSON\n if (typeof cellValue === 'object') {\n return JSON.stringify(cellValue)\n }\n\n // Return primitives as-is (string, number, boolean)\n return cellValue as ReactNode\n}\n\n/**\n * Compare two values for sorting\n * Handles strings, numbers, and other types\n *\n * @param a - First value\n * @param b - Second value\n * @param direction - Sort direction\n * @returns Comparison result (-1, 0, 1)\n */\nexport function compareValues(\n a: unknown,\n b: unknown,\n direction: 'asc' | 'desc',\n): number {\n // Handle null/undefined - always sort to end\n if (a === null || a === undefined) return 1\n if (b === null || b === undefined) return -1\n\n let comparison = 0\n\n if (typeof a === 'string' && typeof b === 'string') {\n comparison = a.localeCompare(b)\n } else if (typeof a === 'number' && typeof b === 'number') {\n comparison = a - b\n } else if (typeof a === 'boolean' && typeof b === 'boolean') {\n comparison = a === b ? 0 : a ? 1 : -1\n } else if (typeof a === 'object' || typeof b === 'object') {\n // Compare objects/arrays as JSON strings\n const strA = JSON.stringify(a)\n const strB = JSON.stringify(b)\n comparison = strA.localeCompare(strB)\n } else {\n // Fallback for other primitives (bigint, symbol, etc.)\n comparison = 0\n }\n\n return direction === 'asc' ? comparison : -comparison\n}\n\n/**\n * Sort data array by column\n *\n * @param data - Data array to sort\n * @param columnId - Column ID to sort by\n * @param direction - Sort direction\n * @returns Sorted data array (new array, does not mutate original)\n */\nexport function sortData<T extends Record<string, unknown>>(\n data: T[],\n columnId: string,\n direction: 'asc' | 'desc',\n): T[] {\n return [...data].sort((a, b) =>\n compareValues(a[columnId], b[columnId], direction),\n )\n}\n\n/**\n * Paginate data array\n *\n * @param data - Data array to paginate\n * @param page - Current page (0-indexed)\n * @param rowsPerPage - Number of rows per page\n * @returns Paginated data slice\n */\nexport function paginateData<T>(\n data: T[],\n page: number,\n rowsPerPage: number,\n): T[] {\n const start = page * rowsPerPage\n const end = start + rowsPerPage\n return data.slice(start, end)\n}\n","import { TableCell as MuiTableCell, Link, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport type { TableColumn } from '../types'\nimport { getCellValue } from '../helpers'\nimport type { ReactNode } from 'react'\n\n/**\n * Props for Cell component\n */\nexport interface CellProps {\n /** Column definition */\n column: TableColumn\n /** Cell value */\n value: unknown\n}\n\nconst DEFAULT_P = ({ children }: { children?: ReactNode }) => (\n <Typography component='span' variant='body2' color='inherit'>\n {children}\n </Typography>\n)\n\n/**\n * Markdown components for cell content\n * Uses compact styling suitable for table cells (reusing Note widget pattern)\n */\nconst CELL_MARKDOWN_COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href }) => {\n const isExternal = href?.startsWith('http')\n return (\n <Link\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n )\n },\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Table cell component with automatic markdown support for string values\n * Markdown is rendered when the raw value is a string and no formatter is defined.\n * If a formatter is used, its output is rendered directly without markdown parsing.\n */\nexport function Cell({ column, value }: CellProps) {\n // If formatter is defined, use it directly without markdown\n if (column.formatter) {\n return (\n <MuiTableCell align={column.align}>\n {column.formatter(value)}\n </MuiTableCell>\n )\n }\n\n // For string values without formatter, render as markdown\n if (typeof value === 'string') {\n return (\n <MuiTableCell align={column.align}>\n <ReactMarkdown components={CELL_MARKDOWN_COMPONENTS}>\n {value}\n </ReactMarkdown>\n </MuiTableCell>\n )\n }\n\n // For non-string values, render directly\n return <MuiTableCell align={column.align}>{getCellValue(value)}</MuiTableCell>\n}\n","import { TableRow as MuiTableRow, TableCell, Checkbox } from '@mui/material'\nimport type { RowProps } from '../types'\nimport { Cell } from './cell'\n\n/**\n * Table row component with selection and hover support\n */\nexport function Row({\n row,\n columns,\n isSelected = false,\n selectable = false,\n onClick,\n onSelect,\n onMouseEnter,\n onMouseLeave,\n}: RowProps) {\n const handleClick = () => {\n onClick?.(row)\n }\n\n const handleCheckboxClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n onSelect?.(row)\n }\n\n const handleMouseEnter = () => {\n onMouseEnter?.(row)\n }\n\n const handleMouseLeave = () => {\n onMouseLeave?.()\n }\n\n return (\n <MuiTableRow\n hover={!!onMouseEnter || !!onMouseLeave || !!onClick}\n selected={isSelected}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n cursor: onClick ? 'pointer' : 'default',\n }}\n >\n {selectable && (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isSelected}\n onClick={handleCheckboxClick}\n inputProps={{ 'aria-label': `select row ${row.id}` }}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <Cell key={column.id} column={column} value={row[column.id]} />\n ))}\n </MuiTableRow>\n )\n}\n","import { Box, IconButton } from '@mui/material'\nimport FirstPageIcon from '@mui/icons-material/FirstPage'\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport LastPageIcon from '@mui/icons-material/LastPage'\nimport type { PaginationActionsProps } from '../types'\n\n/**\n * Custom pagination actions with first/prev/next/last buttons\n */\nexport function PaginationActions({\n count,\n page,\n rowsPerPage,\n onPageChange,\n}: PaginationActionsProps) {\n const lastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1)\n\n const handleFirstPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, 0)\n }\n\n const handlePreviousPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page - 1)\n }\n\n const handleNextPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page + 1)\n }\n\n const handleLastPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, lastPage)\n }\n\n return (\n <Box sx={{ flexShrink: 0, ml: 2.5 }}>\n <IconButton\n onClick={handleFirstPage}\n disabled={page === 0}\n aria-label='first page'\n >\n <FirstPageIcon />\n </IconButton>\n <IconButton\n onClick={handlePreviousPage}\n disabled={page === 0}\n aria-label='previous page'\n >\n <KeyboardArrowLeft />\n </IconButton>\n <IconButton\n onClick={handleNextPage}\n disabled={page >= lastPage}\n aria-label='next page'\n >\n <KeyboardArrowRight />\n </IconButton>\n <IconButton\n onClick={handleLastPage}\n disabled={page >= lastPage}\n aria-label='last page'\n >\n <LastPageIcon />\n </IconButton>\n </Box>\n )\n}\n","import { TablePagination as MuiTablePagination } from '@mui/material'\nimport type { PaginationProps } from '../types'\nimport { PaginationActions } from './pagination-actions'\n\n/**\n * Table pagination component\n */\nexport function Pagination({\n page,\n rowsPerPage,\n total,\n rowsPerPageOptions = [5, 10, 25, 50],\n onPageChange,\n onRowsPerPageChange,\n}: PaginationProps) {\n const handlePageChange = (\n _event: React.MouseEvent<HTMLButtonElement> | null,\n newPage: number,\n ) => {\n onPageChange(newPage)\n }\n\n const handleRowsPerPageChange = (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n ) => {\n onRowsPerPageChange(parseInt(event.target.value, 10))\n }\n\n return (\n <MuiTablePagination\n component='div'\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n ActionsComponent={PaginationActions}\n />\n )\n}\n","import { useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../widgets/stores/widget-store'\n\n/**\n * Custom hook for registering a DOM element ref with the widget store.\n * This allows other parts of the application to access the widget's DOM element.\n *\n * @param widgetId - The widget ID to register the ref under\n * @returns A ref object to attach to the DOM element\n *\n * @example\n * ```tsx\n * function MyWidget({ id }: { id: string }) {\n * const ref = useWidgetRef<HTMLDivElement>(id)\n *\n * return <div ref={ref}>Widget content</div>\n * }\n * ```\n */\nexport function useWidgetRef<T extends HTMLElement = HTMLElement>(\n widgetId: string,\n) {\n const ref = useRef<T | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(widgetId, { refUI: ref })\n }\n }, [widgetId, setWidget])\n\n return ref\n}\n","import {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableContainer as MuiTableContainer,\n Paper,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport type { Ref } from 'react'\nimport { CellHeader } from './components/cell-header'\nimport { Row } from './components/row'\nimport { Pagination } from './components/pagination'\nimport { PaginationActions } from './components/pagination-actions'\nimport { useWidgetRef } from '../../hooks'\nimport type { TableUIProps } from './types'\n\n/**\n * Props for the base Table component\n */\nexport interface TableComponentProps extends MuiTableProps {\n /** Table element ref */\n ref?: Ref<HTMLTableElement>\n}\n\n/**\n * Base Table component with compound component pattern\n * Provides Table.Head, Table.Body, Table.Row, Table.Cell, Table.CellHeader, Table.Pagination\n */\nfunction Table({\n children,\n ref,\n stickyHeader = true,\n ...props\n}: TableComponentProps) {\n return (\n <MuiTable stickyHeader={stickyHeader} ref={ref} {...props}>\n {children}\n </MuiTable>\n )\n}\n\n// Attach sub-components as static properties\nTable.Head = TableHead\nTable.CellHeader = CellHeader\nTable.Body = TableBody\nTable.Row = Row\nTable.Cell = TableCell\nTable.Container = TableContainer\nTable.Paper = Paper\nTable.Pagination = Pagination\nTable.PaginationActions = PaginationActions\n\nexport { Table }\n\n/**\n * TableContainer widget component\n * Integrates with widget store and provides ref registration using custom hook\n */\nfunction TableContainer(props: TableUIProps) {\n const ref = useWidgetRef<HTMLDivElement>(props.id)\n\n return <MuiTableContainer ref={ref}>{props.children}</MuiTableContainer>\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n TableDownloadConfig,\n TableWidgetConfig,\n TableColumn,\n Mode,\n SortDirection,\n} from './types'\n\nexport const DEFAULT_MODE: Mode = 'local'\nexport const DEFAULT_PAGE = 0\nexport const DEFAULT_ROWS_PER_PAGE = 10\nexport const DEFAULT_ROWS_PER_PAGE_OPTIONS = [5, 10, 25, 50]\n\nexport const DEFAULT_COLUMN_ID = null\nexport const DEFAULT_DIRECTION: SortDirection = 'asc'\n\n/**\n * Default table download configuration\n * Supports PNG export (screenshot) and CSV export (data)\n */\nexport function tableDownloadConfig({\n refUI,\n}: ConfigProps): TableDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length) {\n return downloadToCSV.modifier([])\n }\n\n // Convert table data to CSV format\n // First row contains headers (column keys)\n const firstRow = data[0]\n if (!firstRow) {\n return downloadToCSV.modifier([])\n }\n\n const headers = Object.keys(firstRow).filter((key) => key !== 'id')\n const rows = data.map((row) =>\n headers.map((header) => {\n const value = row[header]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return value\n }),\n )\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Default table widget configuration\n */\nexport function tableConfig(columns: TableColumn[] = []): TableWidgetConfig {\n return {\n columns,\n selectable: false,\n selected: [],\n mode: DEFAULT_MODE,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { paginateData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport {\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n} from '../config'\n\nexport interface UsePaginationResult<T> {\n /** Whether pagination is enabled */\n paginationEnabled: boolean\n /** Current page (0-indexed) */\n page: number\n /** Rows per page */\n rowsPerPage: number\n /** Total row count */\n total: number\n /** Available rows per page options */\n rowsPerPageOptions: number[]\n /** Paginated data (for local mode) */\n paginatedData: T[]\n /** Set current page */\n setPage: (page: number) => void\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void\n /** Go to first page */\n goToFirstPage: () => void\n /** Go to last page */\n goToLastPage: () => void\n /** Go to next page */\n goToNextPage: () => void\n /** Go to previous page */\n goToPreviousPage: () => void\n}\n\n/**\n * Hook for managing table pagination\n * Supports both local (client-side) and remote (server-side) pagination\n * State is persisted in the widget store for the given widgetId\n */\nexport function usePagination<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UsePaginationResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const paginationState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n paginationEnabled: !!widget?.pagination,\n page: widget?.pagination?.page ?? DEFAULT_PAGE,\n rowsPerPage: widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE,\n rowsPerPageOptions:\n widget?.pagination?.rowsPerPageOptions ??\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n total: widget?.pagination?.total ?? data.length,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Calculate max page\n const maxPage = Math.max(\n 0,\n Math.ceil(paginationState.total / (paginationState?.rowsPerPage ?? 1)) - 1,\n )\n\n // Set page with bounds checking\n const setPage = useCallback(\n (newPage: number) => {\n // Read current state directly from store to avoid stale closures\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentTotal = widget?.pagination?.total ?? data.length\n const currentRowsPerPage =\n widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE\n const currentMaxPage = Math.max(\n 0,\n Math.ceil(currentTotal / currentRowsPerPage) - 1,\n )\n const boundedPage = Math.max(0, Math.min(newPage, currentMaxPage))\n\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...widget?.pagination,\n page: boundedPage,\n },\n })\n },\n [data.length, getWidget, setWidget, widgetId],\n )\n\n // Set rows per page and reset to first page\n const setRowsPerPage = useCallback(\n (newRowsPerPage: number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...widget?.pagination,\n rowsPerPage: newRowsPerPage,\n page: 0, // Reset to first page when changing rows per page\n },\n })\n },\n [getWidget, setWidget, widgetId],\n )\n\n // Navigation helpers\n const goToFirstPage = useCallback(() => setPage(0), [setPage])\n const goToLastPage = useCallback(() => setPage(maxPage), [setPage, maxPage])\n const goToNextPage = useCallback(\n () => setPage(paginationState.page + 1),\n [setPage, paginationState.page],\n )\n const goToPreviousPage = useCallback(\n () => setPage(paginationState.page - 1),\n [setPage, paginationState.page],\n )\n\n // Paginated data for local mode\n const paginatedData = useMemo(() => {\n if (mode === 'remote' || !paginationState.paginationEnabled) {\n // For remote mode, data is already paginated from server\n return data\n }\n return paginateData(data, paginationState.page, paginationState.rowsPerPage)\n }, [\n data,\n mode,\n paginationState.page,\n paginationState.paginationEnabled,\n paginationState.rowsPerPage,\n ])\n\n return {\n ...paginationState,\n paginatedData,\n setPage,\n setRowsPerPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type {\n TableRow,\n SortDirection,\n SortState,\n TableWidgetState,\n} from '../types'\nimport { sortData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { DEFAULT_COLUMN_ID, DEFAULT_DIRECTION } from '../config'\n\nexport interface UseSortResult<T> extends SortState {\n /** Whether sorting is enabled */\n sortEnabled: boolean\n /** Current sort state */\n columnId: string | null\n direction: SortDirection\n /** Sorted data (for local mode) */\n sortedData: T[]\n /** Toggle sort on a column */\n toggleSort: (columnId: string) => void\n /** Set sort state directly */\n setSort: (columnId: string | null, direction: SortDirection) => void\n /** Clear sort */\n clearSort: () => void\n}\n\n/**\n * Hook for managing table sorting\n * Supports both local (client-side) and remote (server-side) sorting\n * State is persisted in the widget store for the given widgetId\n */\nexport function useSort<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UseSortResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const sortStoreState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n sortEnabled: !!widget?.sort,\n columnId: widget?.sort?.columnId ?? DEFAULT_COLUMN_ID,\n direction: widget?.sort?.direction ?? DEFAULT_DIRECTION,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Toggle sort on a column\n const toggleSort = useCallback(\n (toggleColumnId: string) => {\n // Read current state directly from store to avoid stale closures\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentColumnId = widget?.sort?.columnId ?? DEFAULT_COLUMN_ID\n const currentDirection = widget?.sort?.direction ?? DEFAULT_DIRECTION\n\n let newDirection: SortDirection = 'asc'\n\n if (currentColumnId === toggleColumnId) {\n // Same column - toggle direction\n newDirection = currentDirection === 'asc' ? 'desc' : 'asc'\n }\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n columnId: toggleColumnId,\n direction: newDirection,\n },\n })\n },\n [getWidget, setWidget, widgetId],\n )\n\n // Set sort state directly\n const setSort = useCallback(\n (newColumnId: string | null, newDirection: SortDirection) => {\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n columnId: newColumnId,\n direction: newDirection,\n },\n })\n },\n [setWidget, widgetId],\n )\n\n // Clear sort\n const clearSort = useCallback(() => {\n const widget = getWidget<TableWidgetState>(widgetId)\n if (!widget?.sort) return\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...widget.sort,\n columnId: null,\n direction: 'asc',\n },\n })\n }, [setWidget, getWidget, widgetId])\n\n // Sorted data for local mode\n const sortedData = useMemo(() => {\n if (\n mode === 'remote' ||\n !sortStoreState.columnId ||\n !sortStoreState.sortEnabled\n ) {\n // For remote mode, data is already sorted from server\n // If no sort column, return original data\n return data\n }\n return sortData(data, sortStoreState.columnId, sortStoreState.direction)\n }, [\n data,\n mode,\n sortStoreState.columnId,\n sortStoreState.direction,\n sortStoreState.sortEnabled,\n ])\n\n return {\n ...sortStoreState,\n sortedData,\n toggleSort,\n setSort,\n clearSort,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nexport interface UseSelectionOptions {\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: (string | number)[]) => void\n}\n\nexport interface UseSelectionResult {\n /** Array of selected row IDs */\n selectedIds: (string | number)[]\n /** Check if a row is selected */\n isSelected: (id: string | number) => boolean\n /** Check if all provided rows are selected */\n isAllSelected: (rows: TableRow[]) => boolean\n /** Check if some but not all rows are selected (for indeterminate state) */\n isIndeterminate: (rows: TableRow[]) => boolean\n /** Toggle selection of a single row */\n toggleRow: (id: string | number) => void\n /** Toggle selection of all provided rows */\n toggleAll: (rows: TableRow[]) => void\n /** Select specific rows */\n selectRows: (ids: (string | number)[]) => void\n /** Deselect specific rows */\n deselectRows: (ids: (string | number)[]) => void\n /** Clear all selections */\n clearSelection: () => void\n}\n\n/**\n * Hook for managing table row selection\n * Selection persists across pagination and is stored in the widget store\n */\nexport function useSelection(\n widgetId: string,\n options?: UseSelectionOptions,\n): UseSelectionResult {\n const { onSelectionChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const selected = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.selected\n }),\n )\n\n // Use store values with fallback to empty array\n const selectedIds = useMemo(() => selected ?? [], [selected])\n\n // Check if a row is selected\n const isSelected = useCallback(\n (id: string | number) => selectedIds.includes(id),\n [selectedIds],\n )\n\n // Check if all provided rows are selected\n const isAllSelected = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n return rows.every((row) => selectedIds.includes(row.id))\n },\n [selectedIds],\n )\n\n // Check if some but not all rows are selected\n const isIndeterminate = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n const selectedCount = rows.filter((row) =>\n selectedIds.includes(row.id),\n ).length\n return selectedCount > 0 && selectedCount < rows.length\n },\n [selectedIds],\n )\n\n // Toggle selection of a single row\n const toggleRow = useCallback(\n (id: string | number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = currentSelected.includes(id)\n ? currentSelected.filter((s) => s !== id)\n : [...currentSelected, id]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Toggle selection of all provided rows\n const toggleAll = useCallback(\n (rows: TableRow[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const rowIds = rows.map((row) => row.id)\n const allSelected = rowIds.every((id) => currentSelected.includes(id))\n\n const newSelected = allSelected\n ? currentSelected.filter((id) => !rowIds.includes(id))\n : [...new Set([...currentSelected, ...rowIds])]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Select specific rows\n const selectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = [...new Set([...currentSelected, ...ids])]\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Deselect specific rows\n const deselectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? []\n\n const newSelected = currentSelected.filter((id) => !ids.includes(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n const newSelected: (string | number)[] = []\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSelected,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSelected)\n }\n }, [setWidget, widgetId, onSelectionChange])\n\n return {\n selectedIds,\n isSelected,\n isAllSelected,\n isIndeterminate,\n toggleRow,\n toggleAll,\n selectRows,\n deselectRows,\n clearSelection,\n }\n}\n","import {\n Box,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material'\n\nexport interface TableSkeletonProps {\n /** Number of columns to display */\n columns?: number\n /** Number of rows to display */\n rows?: number\n}\n\n/**\n * Table skeleton loader component\n */\nexport function TableSkeleton({ columns = 4, rows = 5 }: TableSkeletonProps) {\n return (\n <Box aria-label='Table skeleton'>\n <Table>\n <TableHead>\n <TableRow>\n {Array.from({ length: columns }).map((_, index) => (\n <TableCell key={index}>\n <Skeleton width='80%' height={24} />\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <TableRow key={rowIndex}>\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TableCell key={colIndex}>\n <Skeleton width='70%' height={20} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n )\n}\n","import type { TableRow, TableWidgetData } from './types'\n\n/**\n * Sanitizes a table row by ensuring all values are serializable.\n * Converts ReactNode and function values to undefined.\n *\n * @param row - The table row to sanitize\n * @returns A sanitized table row\n */\nexport function sanitizeTableRow(row: TableRow): TableRow {\n const sanitized: TableRow = { id: row.id }\n\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id') continue\n\n // Keep primitive values\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null\n ) {\n sanitized[key] = value\n }\n // Serialize arrays and plain objects\n else if (Array.isArray(value) || typeof value === 'object') {\n try {\n // Attempt to serialize - if it fails, the value contains non-serializable content\n JSON.stringify(value)\n sanitized[key] = value\n } catch {\n sanitized[key] = undefined\n }\n }\n // Skip functions and other non-serializable values\n else {\n sanitized[key] = undefined\n }\n }\n\n return sanitized\n}\n\n/**\n * Sanitizes table widget data by ensuring all rows are serializable.\n *\n * @param data - The table data to sanitize\n * @returns Sanitized table data\n */\nexport function sanitizeTableData(\n data: TableWidgetData | undefined,\n): TableWidgetData | undefined {\n return data?.map(sanitizeTableRow)\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n width: '100%',\n overflow: 'auto',\n },\n table: {\n minWidth: 650,\n },\n headerCell: {\n fontWeight: 600,\n backgroundColor: (theme: Theme) => theme.palette.background.paper,\n },\n row: {\n '&:last-child td, &:last-child th': {\n border: 0,\n },\n },\n rowHover: {\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n },\n },\n rowSelected: {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n },\n },\n pagination: {\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n },\n} satisfies Record<string, SxProps<Theme>>\n"],"names":["CellHeader","t0","$","_c","column","sortState","onSort","isSelectAll","isAllSelected","isIndeterminate","onSelectAll","t1","Symbol","for","t2","jsx","TableCell","Checkbox","isSorted","columnId","id","sortDirection","direction","undefined","sortable","width","t3","t4","label","TableSortLabel","t5","align","getCellValue","cellValue","Array","isArray","map","item","String","join","JSON","stringify","compareValues","a","b","comparison","localeCompare","strA","strB","sortData","data","sort","paginateData","page","rowsPerPage","start","end","slice","DEFAULT_P","children","Typography","CELL_MARKDOWN_COMPONENTS","h1","h2","h3","p","href","isExternal","startsWith","Link","img","ul","ol","li","Cell","value","formatter","MuiTableCell","ReactMarkdown","Row","row","columns","isSelected","selectable","onClick","onSelect","onMouseEnter","onMouseLeave","handleClick","event","stopPropagation","handleCheckboxClick","handleMouseEnter","t6","handleMouseLeave","t7","t8","t9","cursor","t10","t11","t12","MuiTableRow","PaginationActions","count","onPageChange","lastPage","Math","max","ceil","handleFirstPage","event_0","handlePreviousPage","event_1","handleNextPage","event_2","handleLastPage","flexShrink","ml","FirstPageIcon","IconButton","KeyboardArrowLeft","t13","KeyboardArrowRight","t14","t15","t16","LastPageIcon","t17","t18","jsxs","Box","Pagination","total","rowsPerPageOptions","onRowsPerPageChange","_event","newPage","handlePageChange","parseInt","target","handleRowsPerPageChange","MuiTablePagination","useWidgetRef","widgetId","ref","useRef","setWidget","useWidgetStore","_temp","current","refUI","useEffect","store","Table","props","stickyHeader","MuiTable","Head","TableHead","Body","TableBody","Container","TableContainer","Paper","MuiTableContainer","DEFAULT_MODE","DEFAULT_PAGE","DEFAULT_ROWS_PER_PAGE","DEFAULT_ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMN_ID","DEFAULT_DIRECTION","tableDownloadConfig","downloadToPNG","modifier","downloadToCSV","length","firstRow","headers","Object","keys","filter","key","rows","header","tableConfig","selected","mode","usePagination","getWidget","_temp2","state_1","widget","state","widgets","paginationEnabled","pagination","paginationState","useShallow","state_2","maxPage","widget_1","currentTotal","currentRowsPerPage","currentMaxPage","boundedPage","min","setPage","newRowsPerPage","widget_2","setRowsPerPage","goToFirstPage","goToLastPage","goToNextPage","goToPreviousPage","bb0","paginatedData","state_0","useSort","sortEnabled","sortStoreState","toggleColumnId","currentColumnId","currentDirection","newDirection","toggleSort","newColumnId","newDirection_0","setSort","clearSort","sortedData","useSelection","options","onSelectionChange","selectedIds","includes","every","rows_0","selectedCount","row_0","id_0","currentSelected","newSelected","s","toggleRow","rows_1","currentSelected_0","rowIds","_temp3","newSelected_0","id_1","id_2","Set","toggleAll","ids","currentSelected_1","newSelected_1","selectRows","ids_0","newSelected_2","id_3","deselectRows","newSelected_3","clearSelection","row_1","TableSkeleton","TableRow","from","__0","rowIndex","__1","colIndex","Skeleton","_","index","sanitizeTableRow","sanitized","entries","sanitizeTableData","styles","container","overflow","table","minWidth","headerCell","fontWeight","backgroundColor","theme","palette","background","paper","border","rowHover","action","hover","rowSelected","borderTop","divider"],"mappings":"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"}
@@ -5,14 +5,14 @@ import "echarts";
5
5
  import "../widget-store-CB6Trp_0.js";
6
6
  import "zustand/shallow";
7
7
  import { g as c } from "../options-D9wflre6.js";
8
- import { m as h } from "../utils-Dv5Z47UQ.js";
8
+ import { m as h } from "../utils-D3-eQyDR.js";
9
9
  import { f, b as d, a as u, d as x } from "../styles-dOu_pRNb.js";
10
10
  import { Box as o, Skeleton as n } from "@mui/material";
11
11
  import "@mui/icons-material";
12
12
  import "react-markdown";
13
13
  import { d as l, a as g } from "../exports-Cr43OCul.js";
14
- import "../lasso-tool-CYn3ivf-.js";
15
- import "../cjs-D9ro6BXv.js";
14
+ import "../lasso-tool-BwRzEW7k.js";
15
+ import "../cjs-D4KH3azB.js";
16
16
  import "@dnd-kit/core";
17
17
  import "@dnd-kit/sortable";
18
18
  import "@dnd-kit/utilities";
@@ -138,7 +138,7 @@ const r = {
138
138
  function $() {
139
139
  const e = p(2);
140
140
  let t;
141
- e[0] === Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ s(o, { sx: r.skeleton.graph.grid, children: [
141
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ s(o, { sx: r.skeleton.graph.grid, children: [
142
142
  /* @__PURE__ */ a(n, { sx: r.skeleton.histogram.item, variant: "rectangular", height: "20%" }),
143
143
  /* @__PURE__ */ a(n, { sx: r.skeleton.histogram.item, variant: "rectangular", height: "40%" }),
144
144
  /* @__PURE__ */ a(n, { sx: r.skeleton.histogram.item, variant: "rectangular", height: "60%" }),
@@ -146,7 +146,7 @@ function $() {
146
146
  /* @__PURE__ */ a(n, { sx: r.skeleton.histogram.item, variant: "rectangular", height: "80%" })
147
147
  ] }), e[0] = t) : t = e[0];
148
148
  let i;
149
- return e[1] === Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ s(o, { sx: r.skeleton.graph.container, children: [
149
+ return e[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ s(o, { sx: r.skeleton.graph.container, children: [
150
150
  t,
151
151
  /* @__PURE__ */ a(o, { sx: r.skeleton.legend, children: Array(2).fill(0).map(y) })
152
152
  ] }), e[1] = i) : i = e[1], i;
@@ -1 +1 @@
1
- {"version":3,"file":"timeseries.js","sources":["../../src/widgets/timeseries/config.ts","../../src/widgets/timeseries/style.ts","../../src/widgets/timeseries/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n TimeseriesConfig,\n TimeseriesWidgetConfig,\n TimeseriesWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport function timeseriesDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<TimeseriesWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\n\nexport function timeseriesConfig(\n props: TimeseriesConfig,\n): TimeseriesWidgetConfig {\n return {\n type: 'timeseries',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\n\nfunction getOption({ data = [], theme }: TimeseriesConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: {\n ...buildGridConfig(hasLegend, theme),\n outerBounds: {\n left: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(2)),\n },\n },\n xAxis: {\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n axisLabel: {\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n rotate: 45,\n },\n },\n yAxis: {\n type: 'value',\n axisLabel: {\n margin: 0,\n padding: [\n 0,\n parseInt(theme.spacing(0.75)),\n parseInt(theme.spacing(1.25)),\n -parseInt(theme.spacing(1)),\n ],\n show: true,\n showMaxLabel: true,\n showMinLabel: false,\n verticalAlign: 'bottom',\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'line',\n smooth: true,\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: {\n container: {\n ...baseSkeletonStyles.graph.container,\n position: 'relative',\n },\n grid: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 1 auto',\n alignItems: 'flex-end',\n width: '100%',\n },\n },\n histogram: {\n item: {\n flex: 1,\n maxWidth: ({ spacing }) => spacing(8),\n\n '& + &': {\n marginLeft: '1px',\n },\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function TimeseriesSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n {/* Timeseries bar */}\n <Box sx={styles.skeleton.graph.grid}>\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='20%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='40%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='60%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='20%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='80%'\n />\n </Box>\n {/* Legend */}\n <Box sx={styles.skeleton.legend}>\n {Array(2)\n .fill(0)\n .map((_, i) => (\n <Box\n key={i}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n }}\n >\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["timeseriesDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","timeseriesConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","hasLegend","length","legend","buildLegendConfig","grid","buildGridConfig","outerBounds","left","parseInt","spacing","right","top","xAxis","axisTick","alignWithLabel","axisLabel","show","showMaxLabel","showMinLabel","rotate","yAxis","margin","padding","verticalAlign","axisLine","splitLine","lineStyle","color","palette","black","Object","values","qualitative","bold","series","map","_","index","datasetIndex","smooth","emphasis","focus","styles","skeleton","graph","container","baseSkeletonStyles","position","display","justifyContent","flex","alignItems","width","histogram","item","maxWidth","marginLeft","gap","height","TimeseriesSkeleton","$","_c","t0","Symbol","for","Box","jsx","Skeleton","t1","Array","fill","_temp2","i","jsxs","_temp"],"mappings":";;;;;;;;;;;;;;;;;;AAkBO,SAASA,EAAyB;AAAA,EACvCC,OAAAA;AACW,GAAyC;AACpD,SAAO,CACL;AAAA,IACE,GAAGC;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASF,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGG;AAAAA,IACHD,UAAU,OAAOE,MAAS;AACxB,YAAMC,IAAOC,EAAwBF,CAAI;AACzC,aAAOD,EAAcD,SAASG,CAAI;AAAA,IACpC;AAAA,EAAA,CACD;AAEL;AAEO,SAASE,EACdC,GACwB;AACxB,SAAO;AAAA,IACLC,MAAM;AAAA,IACNC,QAAQC,EAAwBC,EAAiBJ,CAAK,GAAGK,EAAUL,CAAK,CAAC;AAAA,EAAA;AAE7E;AAEA,SAASK,EAAU;AAAA,EAAET,MAAAA,IAAO,CAAA;AAAA,EAAIU,OAAAA;AAAwB,GAAuB;AAC7E,QAAMC,KAAaX,GAAMY,UAAU,KAAK;AAExC,SAAO;AAAA,IACLC,QAAQC,EAAkBH,CAAS;AAAA,IACnCI,MAAM;AAAA,MACJ,GAAGC,EAAgBL,GAAWD,CAAK;AAAA,MACnCO,aAAa;AAAA,QACXC,MAAMC,SAAST,EAAMU,QAAQ,CAAC,CAAC;AAAA,QAC/BC,OAAOF,SAAST,EAAMU,QAAQ,CAAC,CAAC;AAAA,QAChCE,KAAKH,SAAST,EAAMU,QAAQ,CAAC,CAAC;AAAA,MAAA;AAAA,IAChC;AAAA,IAEFG,OAAO;AAAA,MACLlB,MAAM;AAAA,MACNmB,UAAU;AAAA,QACRC,gBAAgB;AAAA,MAAA;AAAA,MAElBC,WAAW;AAAA,QACTC,MAAM;AAAA,QACNC,cAAc;AAAA,QACdC,cAAc;AAAA,QACdC,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,IAEFC,OAAO;AAAA,MACL1B,MAAM;AAAA,MACNqB,WAAW;AAAA,QACTM,QAAQ;AAAA,QACRC,SAAS,CACP,GACAd,SAAST,EAAMU,QAAQ,IAAI,CAAC,GAC5BD,SAAST,EAAMU,QAAQ,IAAI,CAAC,GAC5B,CAACD,SAAST,EAAMU,QAAQ,CAAC,CAAC,CAAC;AAAA,QAE7BO,MAAM;AAAA,QACNC,cAAc;AAAA,QACdC,cAAc;AAAA,QACdK,eAAe;AAAA,MAAA;AAAA,MAEjBC,UAAU;AAAA,QACRR,MAAM;AAAA,MAAA;AAAA,MAERH,UAAU;AAAA,QACRG,MAAM;AAAA,MAAA;AAAA,MAERS,WAAW;AAAA,QACTT,MAAM;AAAA,QACNU,WAAW;AAAA,UACTC,OAAO5B,EAAM6B,QAAQC,MAAM,CAAC;AAAA,QAAA;AAAA,MAC9B;AAAA,IACF;AAAA,IAEFF,OAAOG,OAAOC,OAAOhC,EAAM6B,QAAQI,YAAYC,IAAI;AAAA,IACnDC,QAAQ7C,EAAK8C,IAAI,CAACC,GAAYC,OAAmB;AAAA,MAC/CC,cAAcD;AAAAA,MACd3C,MAAM;AAAA,MACN6C,QAAQ;AAAA,MACRC,UAAU;AAAA,QACRC,OAAO;AAAA,MAAA;AAAA,IACT,EACA;AAAA,EAAA;AAEN;ACzGO,MAAMC,IAAS;AAAA,EACpBC,UAAU;AAAA,IACRC,OAAO;AAAA,MACLC,WAAW;AAAA,QACT,GAAGC,EAAmBF,MAAMC;AAAAA,QAC5BE,UAAU;AAAA,MAAA;AAAA,MAEZ3C,MAAM;AAAA,QACJ4C,SAAS;AAAA,QACTC,gBAAgB;AAAA,QAChBC,MAAM;AAAA,QACNC,YAAY;AAAA,QACZC,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEFC,WAAW;AAAA,MACTC,MAAM;AAAA,QACJJ,MAAM;AAAA,QACNK,UAAUA,CAAC;AAAA,UAAE9C,SAAAA;AAAAA,QAAAA,MAAcA,EAAQ,CAAC;AAAA,QAEpC,SAAS;AAAA,UACP+C,YAAY;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,IAEFtD,QAAQ;AAAA,MACN8C,SAAS;AAAA,MACTG,YAAY;AAAA,MACZM,KAAKA,CAAC;AAAA,QAAEhD,SAAAA;AAAAA,MAAAA,MAAcA,EAAQ,CAAC;AAAA,MAC/BiD,QAAQA,CAAC;AAAA,QAAEjD,SAAAA;AAAAA,MAAAA,MAAcA,EAAQ,CAAC;AAAA,IAAA;AAAA,EACpC;AAEJ;AChCO,SAAAkD,IAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KAIDF,sBAACG,GAAA,EAAQ,IAAAvB,EAAMC,SAASC,MAAMxC,MAC5B,UAAA;AAAA,IAAA,gBAAA8D,EAACC,GAAA,EACK,IAAAzB,EAAMC,SAASU,UAAUC,MACrB,SAAA,eACD,QAAA,MAAA,CAAK;AAAA,IAEd,gBAAAY,EAACC,GAAA,EACK,IAAAzB,EAAMC,SAASU,UAAUC,MACrB,SAAA,eACD,QAAA,MAAA,CAAK;AAAA,IAEd,gBAAAY,EAACC,GAAA,EACK,IAAAzB,EAAMC,SAASU,UAAUC,MACrB,SAAA,eACD,QAAA,MAAA,CAAK;AAAA,IAEd,gBAAAY,EAACC,GAAA,EACK,IAAAzB,EAAMC,SAASU,UAAUC,MACrB,SAAA,eACD,QAAA,MAAA,CAAK;AAAA,IAEd,gBAAAY,EAACC,GAAA,EACK,IAAAzB,EAAMC,SAASU,UAAUC,MACrB,SAAA,eACD,QAAA,MAAA,CAAK;AAAA,EAAA,GAEhB,GAAMM,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAQ;AAAA,SAAAR,EAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KA5BRI,sBAACH,GAAA,EAAQ,IAAAvB,EAAMC,SAASC,MAAMC,WAE5BiB,UAAAA;AAAAA,IAAAA;AAAAA,IA4BA,gBAAAI,EAACD,GAAA,EAAQ,IAAAvB,EAAMC,SAASzC,QACrBmE,UAAAA,MAAM,CAAC,EAACC,KACD,CAAC,EAACnC,IACHoC,CAYJ,EAAA,CACL;AAAA,EAAA,GACF,GAAMX,OAAAQ,KAAAA,IAAAR,EAAA,CAAA,GA/CNQ;AA+CM;AAjDH,SAAAG,EAAAnC,GAAAoC,GAAA;AAAA,SAoCK,gBAAAC,EAACR,KAEK,IAAA;AAAA,IAAAjB,SACO;AAAA,IAAMG,YACH;AAAA,IAAQM,KACfiB;AAAAA,EAAAA,GAGP,UAAA;AAAA,IAAA,gBAAAR,EAACC,KAAiB,SAAA,YAAkB,OAAA,GAAW,QAAA,GAAC;AAAA,IAChD,gBAAAD,EAACC,GAAA,EAAgB,OAAA,IAAY,QAAA,EAAA,CAAC;AAAA,EAAA,EAAA,GARzBK,CASP;AAAM;AA9CX,SAAAE,EAAAZ,GAAA;AAyCe,QAAA;AAAA,IAAArD,SAAAA;AAAAA,EAAAA,IAAAqD;AAAW,SAAKrD,EAAQ,GAAG;AAAC;"}
1
+ {"version":3,"file":"timeseries.js","sources":["../../src/widgets/timeseries/config.ts","../../src/widgets/timeseries/style.ts","../../src/widgets/timeseries/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n TimeseriesConfig,\n TimeseriesWidgetConfig,\n TimeseriesWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport function timeseriesDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<TimeseriesWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\n\nexport function timeseriesConfig(\n props: TimeseriesConfig,\n): TimeseriesWidgetConfig {\n return {\n type: 'timeseries',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\n\nfunction getOption({ data = [], theme }: TimeseriesConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: {\n ...buildGridConfig(hasLegend, theme),\n outerBounds: {\n left: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(2)),\n },\n },\n xAxis: {\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n axisLabel: {\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n rotate: 45,\n },\n },\n yAxis: {\n type: 'value',\n axisLabel: {\n margin: 0,\n padding: [\n 0,\n parseInt(theme.spacing(0.75)),\n parseInt(theme.spacing(1.25)),\n -parseInt(theme.spacing(1)),\n ],\n show: true,\n showMaxLabel: true,\n showMinLabel: false,\n verticalAlign: 'bottom',\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'line',\n smooth: true,\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: {\n container: {\n ...baseSkeletonStyles.graph.container,\n position: 'relative',\n },\n grid: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 1 auto',\n alignItems: 'flex-end',\n width: '100%',\n },\n },\n histogram: {\n item: {\n flex: 1,\n maxWidth: ({ spacing }) => spacing(8),\n\n '& + &': {\n marginLeft: '1px',\n },\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function TimeseriesSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n {/* Timeseries bar */}\n <Box sx={styles.skeleton.graph.grid}>\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='20%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='40%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='60%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='20%'\n />\n <Skeleton\n sx={styles.skeleton.histogram.item}\n variant='rectangular'\n height='80%'\n />\n </Box>\n {/* Legend */}\n <Box sx={styles.skeleton.legend}>\n {Array(2)\n .fill(0)\n .map((_, i) => (\n <Box\n key={i}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n }}\n >\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["timeseriesDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","timeseriesConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","hasLegend","length","legend","buildLegendConfig","grid","buildGridConfig","outerBounds","left","parseInt","spacing","right","top","xAxis","axisTick","alignWithLabel","axisLabel","show","showMaxLabel","showMinLabel","rotate","yAxis","margin","padding","verticalAlign","axisLine","splitLine","lineStyle","color","palette","black","Object","values","qualitative","bold","series","map","_","index","datasetIndex","smooth","emphasis","focus","styles","skeleton","graph","container","baseSkeletonStyles","position","display","justifyContent","flex","alignItems","width","histogram","item","maxWidth","marginLeft","gap","height","TimeseriesSkeleton","$","_c","t0","Symbol","for","Box","jsx","Skeleton","t1","Array","fill","_temp2","i","jsxs","_temp"],"mappings":"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"}