@bwp-web/components 0.11.2 → 0.11.3
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.
- package/dist/BiampTable/BiampTableColumnVisibility.d.ts +8 -5
- package/dist/BiampTable/BiampTableColumnVisibility.d.ts.map +1 -1
- package/dist/BiampTable/BiampTablePagination.d.ts +4 -4
- package/dist/BiampTable/BiampTablePagination.d.ts.map +1 -1
- package/dist/BiampTable/BiampTableToolbarColumnVisibility.d.ts +1 -3
- package/dist/BiampTable/BiampTableToolbarColumnVisibility.d.ts.map +1 -1
- package/dist/BiampTable/index.d.ts +1 -1
- package/dist/BiampTable/index.d.ts.map +1 -1
- package/dist/index.cjs +37 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -24
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["export { BiampWrapper, type BiampWrapperProps } from './BiampWrapper';\nexport * from './BiampSidebar';\nexport * from './BiampHeader';\nexport * from './BiampLayout';\nexport * from './BiampTable';\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n // Only show the checkbox column when the caller explicitly opted in.\n // TanStack applies enableRowSelection=true as a runtime default for per-row\n // checks, but we require an explicit boolean true or function here so that\n // tables without selection don't accidentally render a checkbox column.\n const enableRowSelection =\n table.options.enableRowSelection === true ||\n typeof table.options.enableRowSelection === 'function';\n\n // Sum visible column min-widths so the <table> element itself gets a concrete\n // minWidth. Without this, `width: 100%` on the table always fills the container\n // and columns just share available space instead of overflowing horizontally.\n const tableMinWidth = table.getVisibleLeafColumns().reduce(\n (sum, col) => {\n const mw = col.columnDef.meta?.minWidth;\n return sum + (typeof mw === 'number' ? mw : 40);\n },\n enableRowSelection ? 48 : 0,\n );\n\n const totalColumns =\n table.getVisibleLeafColumns().length + (enableRowSelection ? 1 : 0);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const showError = !!error;\n const showEmpty = !showError && rows.length === 0;\n\n return (\n <TableContainer\n component={Box}\n {...boxProps}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'auto',\n overscrollBehavior: 'none',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{\n minWidth: tableMinWidth,\n height: showError || showEmpty ? '100%' : undefined,\n }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n slotProps={{ input: { 'aria-label': 'Select all rows' } }}\n />\n )}\n </TableCell>\n )}\n {headerGroup.headers.map((header) => {\n const sticky = header.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={header.id}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: header.column.columnDef.meta?.minWidth ?? 40,\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {showError ? (\n <TableRow>\n <TableCell\n colSpan={totalColumns}\n sx={{\n textAlign: 'center',\n verticalAlign: 'middle',\n height: '100%',\n }}\n >\n {error === true ? (\n <BiampTableErrorState />\n ) : error instanceof Error ? (\n <BiampTableErrorState description={error.message} />\n ) : (\n error\n )}\n </TableCell>\n </TableRow>\n ) : showEmpty ? (\n <TableRow>\n <TableCell\n colSpan={totalColumns}\n sx={{\n textAlign: 'center',\n verticalAlign: 'middle',\n height: '100%',\n }}\n >\n {empty && empty !== true ? empty : <BiampTableEmptyState />}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n sx={{\n minWidth: cell.column.columnDef.meta?.minWidth ?? 40,\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </MuiTable>\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\nimport { useEffect, useRef } from 'react';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open' | 'onChange'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called after column visibility changes. */\n onChange?: (visibility: ColumnVisibility) => void;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n onChange,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const visibility = table.getState().columnVisibility;\n const prevVisibilityRef = useRef(visibility);\n\n useEffect(() => {\n if (prevVisibilityRef.current === visibility) return;\n prevVisibilityRef.current = visibility;\n onChange?.(visibility);\n }, [visibility, onChange]);\n\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Called after column visibility changes. */\n onChange?: (visibility: ColumnVisibility) => void;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n onChange,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n onChange={onChange}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import React, { useRef } from 'react';\nimport { Box, BoxProps, TablePagination } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n ...boxProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const pageSize = table.getState().pagination.pageSize;\n\n if (autoHide && !loading && stableCount <= pageSize) return null;\n\n return (\n <Box {...boxProps}>\n <TablePagination\n component=\"div\"\n count={stableCount}\n page={table.getState().pagination.pageIndex}\n rowsPerPage={table.getState().pagination.pageSize}\n onPageChange={(_, page) => table.setPageIndex(page)}\n onRowsPerPageChange={(e) => {\n table.setPageSize(Number(e.target.value));\n table.setPageIndex(0);\n }}\n rowsPerPageOptions={rowsPerPageOptions ?? []}\n showFirstButton\n showLastButton\n />\n </Box>\n );\n}\n","import { Box, type BoxProps } from '@mui/material';\n\nexport type BiampTableToolbarProps = BoxProps;\n\nexport function BiampTableToolbar({\n children,\n sx,\n ...props\n}: BiampTableToolbarProps) {\n return (\n <Box\n role=\"toolbar\"\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n gap={{ xs: 0, md: 1 }}\n minHeight={44}\n pl={{ xs: 2, sm: 3, xl: 12.5 }}\n pr={{ xs: 0, md: 3, xl: 12.5 }}\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import { Box, type BoxProps } from '@mui/material';\n\nexport type BiampTableToolbarActionsProps = BoxProps;\n\nexport function BiampTableToolbarActions({\n children,\n ...props\n}: BiampTableToolbarActionsProps) {\n return (\n <Box display=\"flex\" alignItems=\"center\" gap={1} ml=\"auto\" {...props}>\n {children}\n </Box>\n );\n}\n","import { CircularProgress } from '@mui/material';\nimport { DownloadIcon } from '@bwp-web/assets';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarExportProps = {\n /** Called when the export button is clicked. */\n onExport: () => void;\n /** When true, shows a spinner instead of the icon and disables the button. */\n loading?: boolean;\n /** Icon element for the button. @default DownloadIcon */\n icon?: React.ReactNode;\n /** Accessible label for the button. @default \"Export\" */\n label?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent'\n>;\n\nexport function BiampTableToolbarExport({\n onExport,\n loading,\n icon = <DownloadIcon variant=\"xs\" />,\n label = 'Export',\n ...props\n}: BiampTableToolbarExportProps) {\n return (\n <BiampTableToolbarActionButton\n label={loading ? `${label}, loading` : label}\n icon={loading ? <CircularProgress size={20} color=\"inherit\" /> : icon}\n disabled={loading}\n onClick={onExport}\n {...props}\n />\n );\n}\n","import {\n Badge,\n Box,\n Button,\n Divider,\n Drawer,\n type DrawerProps,\n IconButton,\n Typography,\n} from '@mui/material';\nimport { CloseIcon, FilterIcon } from '@bwp-web/assets';\nimport { type ReactNode, useId, useState } from 'react';\nimport { BiampTableToolbarActionButton } from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarFiltersProps = {\n /** Number of currently active filters. Shown as a badge on the trigger button. */\n activeFilterCount: number;\n /** Filter form content rendered inside the drawer body. */\n children: ReactNode;\n /** Called when the user clicks the reset / clear-all button. */\n onReset: () => void;\n /** Called when the drawer is closed (via close button, apply, or backdrop click). */\n onApply?: () => void;\n /** Icon for the toolbar trigger button. @default FilterIcon */\n icon?: ReactNode;\n /** Drawer heading. @default \"Filters\" */\n title?: string;\n /** Reset button label. @default \"Clear filters\" */\n resetLabel?: string;\n /** Apply button label. @default \"Apply\" */\n applyLabel?: string;\n /** Accessible label for the drawer close button. @default \"Close\" */\n closeLabel?: string;\n /** Accessible label for the toolbar trigger button. @default \"Filters\" */\n buttonLabel?: string;\n /** Additional props forwarded to the MUI Drawer. */\n DrawerProps?: Partial<DrawerProps>;\n};\n\nexport function BiampTableToolbarFilters({\n activeFilterCount,\n children,\n onReset,\n onApply,\n icon = <FilterIcon variant=\"xs\" />,\n title = 'Filters',\n resetLabel = 'Clear filters',\n applyLabel = 'Apply',\n closeLabel = 'Close',\n buttonLabel = 'Filters',\n DrawerProps: drawerProps,\n}: BiampTableToolbarFiltersProps) {\n const [open, setOpen] = useState(false);\n const titleId = useId();\n\n function handleClose() {\n onApply?.();\n setOpen(false);\n }\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={buttonLabel}\n icon={icon}\n badgeContent={activeFilterCount}\n onClick={() => setOpen(true)}\n />\n\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n aria-labelledby={titleId}\n {...drawerProps}\n PaperProps={{\n sx: { width: { xs: '100%', sm: 480 } },\n ...drawerProps?.PaperProps,\n }}\n >\n <Box\n height=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n >\n {/* Header */}\n <Box>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n px={3.5}\n py={2.5}\n >\n <Typography id={titleId} variant=\"h2\">\n {title}\n <Badge\n badgeContent={activeFilterCount}\n color=\"secondary\"\n sx={{ ml: 1.5, mb: 0.5 }}\n />\n </Typography>\n <IconButton\n size=\"medium\"\n onClick={handleClose}\n aria-label={closeLabel}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n <Divider />\n\n {/* Body */}\n <Box\n role=\"group\"\n aria-label=\"Filter options\"\n display=\"flex\"\n flexDirection=\"column\"\n gap={2}\n p={3.5}\n overflow=\"auto\"\n >\n {children}\n </Box>\n </Box>\n\n {/* Footer */}\n <Box display=\"flex\">\n <Button\n variant=\"overlay\"\n color=\"secondary\"\n fullWidth\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n {resetLabel}\n </Button>\n <Button\n variant=\"overlay\"\n color=\"primary\"\n fullWidth\n onClick={handleClose}\n >\n {applyLabel}\n </Button>\n </Box>\n </Box>\n </Drawer>\n </>\n );\n}\n","import {\n Box,\n Collapse,\n IconButton,\n InputAdornment,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { CloseIcon, SearchIcon } from '@bwp-web/assets';\nimport { useEffect, useState } from 'react';\nimport {\n BIAMP_TABLE_DEBOUNCE_DELAY,\n useDebouncedCallback,\n} from './useDebouncedCallback';\n\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n} & Omit<TextFieldProps, 'onChange' | 'value' | 'defaultValue'>;\n\nconst searchFieldSx = {\n '& .MuiInputBase-root': {\n height: 36,\n minHeight: 36,\n },\n} as const;\n\nexport function BiampTableToolbarSearch({\n onChange,\n defaultValue = '',\n debounceDelay = BIAMP_TABLE_DEBOUNCE_DELAY,\n maxLength = 120,\n maxWidth = 280,\n placeholder = 'Search',\n clearLabel = 'Clear search',\n expandable = false,\n expandLabel,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const [inputValue, setInputValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);\n\n useEffect(() => {\n setInputValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedOnChange(e.target.value);\n };\n\n const handleClear = () => {\n setInputValue('');\n debouncedOnChange('');\n };\n\n const handleBlur = () => {\n if (expandable && !inputValue) {\n setIsExpanded(false);\n }\n };\n\n const clearButton = inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={handleClear}\n aria-label={clearLabel}\n sx={{ mr: 0.5 }}\n >\n <CloseIcon variant=\"xs\" sx={{ width: 20, height: 20 }} />\n </IconButton>\n </InputAdornment>\n ) : null;\n\n const textField = (\n <TextField\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n slotProps={{\n htmlInput: { maxLength, 'aria-label': placeholder },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 1 }}>\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </InputAdornment>\n ),\n endAdornment: clearButton,\n },\n }}\n fullWidth\n sx={[\n searchFieldSx,\n expandable ? { width: 170 } : { maxWidth },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n variant=\"outlined\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n {...(expandable && isExpanded && !defaultValue && { autoFocus: true })}\n {...textFieldProps}\n />\n );\n\n if (expandable) {\n return (\n <Box display=\"flex\" alignItems=\"center\" minWidth={28}>\n <IconButton\n aria-label={expandLabel ?? placeholder}\n onClick={() => setIsExpanded(true)}\n sx={{ display: isExpanded || inputValue ? 'none' : 'flex' }}\n >\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </IconButton>\n <Collapse\n in={isExpanded || !!inputValue}\n orientation=\"horizontal\"\n unmountOnExit\n >\n {textField}\n </Collapse>\n </Box>\n );\n }\n\n return textField;\n}\n","import { useCallback, useEffect, useRef } from 'react';\n\n/** Default debounce delay (ms) shared across all BiampTable components. */\nexport const BIAMP_TABLE_DEBOUNCE_DELAY = 300;\n\n/**\n * Returns a debounced version of the given callback.\n * The debounced function delays invocation until `delay` ms after\n * the last call. The pending timer is cleared on unmount.\n */\nexport function useDebouncedCallback<Args extends unknown[]>(\n callback: (...args: Args) => void,\n delay: number = BIAMP_TABLE_DEBOUNCE_DELAY,\n): (...args: Args) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Keep callback ref fresh without restarting timers.\n callbackRef.current = callback;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return useCallback(\n (...args: Args) => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => callbackRef.current(...args),\n delay,\n );\n },\n [delay],\n );\n}\n","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_assets","import_material","import_jsx_runtime","import_jsx_runtime","import_assets","import_jsx_runtime","import_react","import_jsx_runtime","MuiTable","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_react","import_jsx_runtime","import_assets","import_react","import_material","import_jsx_runtime","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_assets","import_react","import_jsx_runtime","import_material","import_assets","import_react","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["export { BiampWrapper, type BiampWrapperProps } from './BiampWrapper';\nexport * from './BiampSidebar';\nexport * from './BiampHeader';\nexport * from './BiampLayout';\nexport * from './BiampTable';\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n // Only show the checkbox column when the caller explicitly opted in.\n // TanStack applies enableRowSelection=true as a runtime default for per-row\n // checks, but we require an explicit boolean true or function here so that\n // tables without selection don't accidentally render a checkbox column.\n const enableRowSelection =\n table.options.enableRowSelection === true ||\n typeof table.options.enableRowSelection === 'function';\n\n // Sum visible column min-widths so the <table> element itself gets a concrete\n // minWidth. Without this, `width: 100%` on the table always fills the container\n // and columns just share available space instead of overflowing horizontally.\n const tableMinWidth = table.getVisibleLeafColumns().reduce(\n (sum, col) => {\n const mw = col.columnDef.meta?.minWidth;\n return sum + (typeof mw === 'number' ? mw : 40);\n },\n enableRowSelection ? 48 : 0,\n );\n\n const totalColumns =\n table.getVisibleLeafColumns().length + (enableRowSelection ? 1 : 0);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const showError = !!error;\n const showEmpty = !showError && rows.length === 0;\n\n return (\n <TableContainer\n component={Box}\n {...boxProps}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'auto',\n overscrollBehavior: 'none',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{\n minWidth: tableMinWidth,\n height: showError || showEmpty ? '100%' : undefined,\n }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n slotProps={{ input: { 'aria-label': 'Select all rows' } }}\n />\n )}\n </TableCell>\n )}\n {headerGroup.headers.map((header) => {\n const sticky = header.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={header.id}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: header.column.columnDef.meta?.minWidth ?? 40,\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {showError ? (\n <TableRow>\n <TableCell\n colSpan={totalColumns}\n sx={{\n textAlign: 'center',\n verticalAlign: 'middle',\n height: '100%',\n }}\n >\n {error === true ? (\n <BiampTableErrorState />\n ) : error instanceof Error ? (\n <BiampTableErrorState description={error.message} />\n ) : (\n error\n )}\n </TableCell>\n </TableRow>\n ) : showEmpty ? (\n <TableRow>\n <TableCell\n colSpan={totalColumns}\n sx={{\n textAlign: 'center',\n verticalAlign: 'middle',\n height: '100%',\n }}\n >\n {empty && empty !== true ? empty : <BiampTableEmptyState />}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n sx={{\n minWidth: cell.column.columnDef.meta?.minWidth ?? 40,\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </MuiTable>\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table, VisibilityState } from '@tanstack/react-table';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Converts a `ColumnVisibility` to TanStack's `VisibilityState`.\n * Use this when passing to `useReactTable({ state: { columnVisibility } })`.\n */\nexport function toVisibilityState(\n visibility: ColumnVisibility,\n): VisibilityState {\n return visibility as VisibilityState;\n}\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import React, { useRef } from 'react';\nimport { Box, TablePagination, type TablePaginationProps } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n} & Omit<\n TablePaginationProps<typeof Box>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n>;\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n sx,\n ...paginationProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const pageSize = table.getState().pagination.pageSize;\n\n if (autoHide && !loading && stableCount <= pageSize) return null;\n\n return (\n <TablePagination\n component={Box}\n count={stableCount}\n page={table.getState().pagination.pageIndex}\n rowsPerPage={table.getState().pagination.pageSize}\n onPageChange={(_, page) => table.setPageIndex(page)}\n onRowsPerPageChange={(e) => {\n table.setPageSize(Number(e.target.value));\n table.setPageIndex(0);\n }}\n rowsPerPageOptions={rowsPerPageOptions ?? []}\n showFirstButton\n showLastButton\n sx={{\n height: 40,\n minHeight: 40,\n '& .MuiToolbar-root': {\n minHeight: 40,\n px: 0,\n },\n ...sx,\n }}\n {...paginationProps}\n />\n );\n}\n","import { Box, type BoxProps } from '@mui/material';\n\nexport type BiampTableToolbarProps = BoxProps;\n\nexport function BiampTableToolbar({\n children,\n sx,\n ...props\n}: BiampTableToolbarProps) {\n return (\n <Box\n role=\"toolbar\"\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n gap={{ xs: 0, md: 1 }}\n minHeight={44}\n pl={{ xs: 2, sm: 3, xl: 12.5 }}\n pr={{ xs: 0, md: 3, xl: 12.5 }}\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import { Box, type BoxProps } from '@mui/material';\n\nexport type BiampTableToolbarActionsProps = BoxProps;\n\nexport function BiampTableToolbarActions({\n children,\n ...props\n}: BiampTableToolbarActionsProps) {\n return (\n <Box display=\"flex\" alignItems=\"center\" gap={1} ml=\"auto\" {...props}>\n {children}\n </Box>\n );\n}\n","import { CircularProgress } from '@mui/material';\nimport { DownloadIcon } from '@bwp-web/assets';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarExportProps = {\n /** Called when the export button is clicked. */\n onExport: () => void;\n /** When true, shows a spinner instead of the icon and disables the button. */\n loading?: boolean;\n /** Icon element for the button. @default DownloadIcon */\n icon?: React.ReactNode;\n /** Accessible label for the button. @default \"Export\" */\n label?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent'\n>;\n\nexport function BiampTableToolbarExport({\n onExport,\n loading,\n icon = <DownloadIcon variant=\"xs\" />,\n label = 'Export',\n ...props\n}: BiampTableToolbarExportProps) {\n return (\n <BiampTableToolbarActionButton\n label={loading ? `${label}, loading` : label}\n icon={loading ? <CircularProgress size={20} color=\"inherit\" /> : icon}\n disabled={loading}\n onClick={onExport}\n {...props}\n />\n );\n}\n","import {\n Badge,\n Box,\n Button,\n Divider,\n Drawer,\n type DrawerProps,\n IconButton,\n Typography,\n} from '@mui/material';\nimport { CloseIcon, FilterIcon } from '@bwp-web/assets';\nimport { type ReactNode, useId, useState } from 'react';\nimport { BiampTableToolbarActionButton } from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarFiltersProps = {\n /** Number of currently active filters. Shown as a badge on the trigger button. */\n activeFilterCount: number;\n /** Filter form content rendered inside the drawer body. */\n children: ReactNode;\n /** Called when the user clicks the reset / clear-all button. */\n onReset: () => void;\n /** Called when the drawer is closed (via close button, apply, or backdrop click). */\n onApply?: () => void;\n /** Icon for the toolbar trigger button. @default FilterIcon */\n icon?: ReactNode;\n /** Drawer heading. @default \"Filters\" */\n title?: string;\n /** Reset button label. @default \"Clear filters\" */\n resetLabel?: string;\n /** Apply button label. @default \"Apply\" */\n applyLabel?: string;\n /** Accessible label for the drawer close button. @default \"Close\" */\n closeLabel?: string;\n /** Accessible label for the toolbar trigger button. @default \"Filters\" */\n buttonLabel?: string;\n /** Additional props forwarded to the MUI Drawer. */\n DrawerProps?: Partial<DrawerProps>;\n};\n\nexport function BiampTableToolbarFilters({\n activeFilterCount,\n children,\n onReset,\n onApply,\n icon = <FilterIcon variant=\"xs\" />,\n title = 'Filters',\n resetLabel = 'Clear filters',\n applyLabel = 'Apply',\n closeLabel = 'Close',\n buttonLabel = 'Filters',\n DrawerProps: drawerProps,\n}: BiampTableToolbarFiltersProps) {\n const [open, setOpen] = useState(false);\n const titleId = useId();\n\n function handleClose() {\n onApply?.();\n setOpen(false);\n }\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={buttonLabel}\n icon={icon}\n badgeContent={activeFilterCount}\n onClick={() => setOpen(true)}\n />\n\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n aria-labelledby={titleId}\n {...drawerProps}\n PaperProps={{\n sx: { width: { xs: '100%', sm: 480 } },\n ...drawerProps?.PaperProps,\n }}\n >\n <Box\n height=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n >\n {/* Header */}\n <Box>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n px={3.5}\n py={2.5}\n >\n <Typography id={titleId} variant=\"h2\">\n {title}\n <Badge\n badgeContent={activeFilterCount}\n color=\"secondary\"\n sx={{ ml: 1.5, mb: 0.5 }}\n />\n </Typography>\n <IconButton\n size=\"medium\"\n onClick={handleClose}\n aria-label={closeLabel}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n <Divider />\n\n {/* Body */}\n <Box\n role=\"group\"\n aria-label=\"Filter options\"\n display=\"flex\"\n flexDirection=\"column\"\n gap={2}\n p={3.5}\n overflow=\"auto\"\n >\n {children}\n </Box>\n </Box>\n\n {/* Footer */}\n <Box display=\"flex\">\n <Button\n variant=\"overlay\"\n color=\"secondary\"\n fullWidth\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n {resetLabel}\n </Button>\n <Button\n variant=\"overlay\"\n color=\"primary\"\n fullWidth\n onClick={handleClose}\n >\n {applyLabel}\n </Button>\n </Box>\n </Box>\n </Drawer>\n </>\n );\n}\n","import {\n Box,\n Collapse,\n IconButton,\n InputAdornment,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { CloseIcon, SearchIcon } from '@bwp-web/assets';\nimport { useEffect, useState } from 'react';\nimport {\n BIAMP_TABLE_DEBOUNCE_DELAY,\n useDebouncedCallback,\n} from './useDebouncedCallback';\n\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n} & Omit<TextFieldProps, 'onChange' | 'value' | 'defaultValue'>;\n\nconst searchFieldSx = {\n '& .MuiInputBase-root': {\n height: 36,\n minHeight: 36,\n },\n} as const;\n\nexport function BiampTableToolbarSearch({\n onChange,\n defaultValue = '',\n debounceDelay = BIAMP_TABLE_DEBOUNCE_DELAY,\n maxLength = 120,\n maxWidth = 280,\n placeholder = 'Search',\n clearLabel = 'Clear search',\n expandable = false,\n expandLabel,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const [inputValue, setInputValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);\n\n useEffect(() => {\n setInputValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedOnChange(e.target.value);\n };\n\n const handleClear = () => {\n setInputValue('');\n debouncedOnChange('');\n };\n\n const handleBlur = () => {\n if (expandable && !inputValue) {\n setIsExpanded(false);\n }\n };\n\n const clearButton = inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={handleClear}\n aria-label={clearLabel}\n sx={{ mr: 0.5 }}\n >\n <CloseIcon variant=\"xs\" sx={{ width: 20, height: 20 }} />\n </IconButton>\n </InputAdornment>\n ) : null;\n\n const textField = (\n <TextField\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n slotProps={{\n htmlInput: { maxLength, 'aria-label': placeholder },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 1 }}>\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </InputAdornment>\n ),\n endAdornment: clearButton,\n },\n }}\n fullWidth\n sx={[\n searchFieldSx,\n expandable ? { width: 170 } : { maxWidth },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n variant=\"outlined\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n {...(expandable && isExpanded && !defaultValue && { autoFocus: true })}\n {...textFieldProps}\n />\n );\n\n if (expandable) {\n return (\n <Box display=\"flex\" alignItems=\"center\" minWidth={28}>\n <IconButton\n aria-label={expandLabel ?? placeholder}\n onClick={() => setIsExpanded(true)}\n sx={{ display: isExpanded || inputValue ? 'none' : 'flex' }}\n >\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </IconButton>\n <Collapse\n in={isExpanded || !!inputValue}\n orientation=\"horizontal\"\n unmountOnExit\n >\n {textField}\n </Collapse>\n </Box>\n );\n }\n\n return textField;\n}\n","import { useCallback, useEffect, useRef } from 'react';\n\n/** Default debounce delay (ms) shared across all BiampTable components. */\nexport const BIAMP_TABLE_DEBOUNCE_DELAY = 300;\n\n/**\n * Returns a debounced version of the given callback.\n * The debounced function delays invocation until `delay` ms after\n * the last call. The pending timer is cleared on unmount.\n */\nexport function useDebouncedCallback<Args extends unknown[]>(\n callback: (...args: Args) => void,\n delay: number = BIAMP_TABLE_DEBOUNCE_DELAY,\n): (...args: Args) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Keep callback ref fresh without restarting timers.\n callbackRef.current = callback;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return useCallback(\n (...args: Args) => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => callbackRef.current(...args),\n delay,\n );\n },\n [delay],\n );\n}\n","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_assets","import_material","import_jsx_runtime","import_jsx_runtime","import_assets","import_jsx_runtime","import_react","import_jsx_runtime","MuiTable","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_assets","import_react","import_material","import_jsx_runtime","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_assets","import_react","import_jsx_runtime","import_material","import_assets","import_react","import_react","import_jsx_runtime"]}
|
package/dist/index.js
CHANGED
|
@@ -840,8 +840,10 @@ import {
|
|
|
840
840
|
Popover as Popover2,
|
|
841
841
|
Typography as Typography3
|
|
842
842
|
} from "@mui/material";
|
|
843
|
-
import { useEffect as useEffect2, useRef as useRef2 } from "react";
|
|
844
843
|
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
844
|
+
function toVisibilityState(visibility) {
|
|
845
|
+
return visibility;
|
|
846
|
+
}
|
|
845
847
|
function getDefaultColumnVisibility(table) {
|
|
846
848
|
const result = {};
|
|
847
849
|
for (const col of table.getAllLeafColumns()) {
|
|
@@ -873,7 +875,6 @@ var columnListItemSx = {
|
|
|
873
875
|
};
|
|
874
876
|
function BiampTableColumnVisibility({
|
|
875
877
|
table,
|
|
876
|
-
onChange,
|
|
877
878
|
showAllLabel = "Show all",
|
|
878
879
|
anchorEl,
|
|
879
880
|
anchorOrigin = { vertical: "bottom", horizontal: "right" },
|
|
@@ -881,13 +882,6 @@ function BiampTableColumnVisibility({
|
|
|
881
882
|
slotProps,
|
|
882
883
|
...popoverProps
|
|
883
884
|
}) {
|
|
884
|
-
const visibility = table.getState().columnVisibility;
|
|
885
|
-
const prevVisibilityRef = useRef2(visibility);
|
|
886
|
-
useEffect2(() => {
|
|
887
|
-
if (prevVisibilityRef.current === visibility) return;
|
|
888
|
-
prevVisibilityRef.current = visibility;
|
|
889
|
-
onChange?.(visibility);
|
|
890
|
-
}, [visibility, onChange]);
|
|
891
885
|
const allVisible = table.getAllLeafColumns().every((col) => col.getIsVisible());
|
|
892
886
|
const someVisible = table.getAllLeafColumns().some((col) => col.getIsVisible());
|
|
893
887
|
return /* @__PURE__ */ jsx10(
|
|
@@ -1013,7 +1007,6 @@ function BiampTableToolbarColumnVisibility({
|
|
|
1013
1007
|
icon = /* @__PURE__ */ jsx12(ColumnsIcon, { variant: "xs" }),
|
|
1014
1008
|
label = "Columns",
|
|
1015
1009
|
defaultColumnVisibility,
|
|
1016
|
-
onChange,
|
|
1017
1010
|
showAllLabel,
|
|
1018
1011
|
...actionButtonProps
|
|
1019
1012
|
}) {
|
|
@@ -1037,7 +1030,6 @@ function BiampTableToolbarColumnVisibility({
|
|
|
1037
1030
|
table,
|
|
1038
1031
|
anchorEl,
|
|
1039
1032
|
onClose: () => setAnchorEl(null),
|
|
1040
|
-
onChange,
|
|
1041
1033
|
showAllLabel
|
|
1042
1034
|
}
|
|
1043
1035
|
)
|
|
@@ -1045,7 +1037,7 @@ function BiampTableToolbarColumnVisibility({
|
|
|
1045
1037
|
}
|
|
1046
1038
|
|
|
1047
1039
|
// src/BiampTable/BiampTablePagination.tsx
|
|
1048
|
-
import { useRef as
|
|
1040
|
+
import { useRef as useRef2 } from "react";
|
|
1049
1041
|
import { Box as Box5, TablePagination } from "@mui/material";
|
|
1050
1042
|
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
1051
1043
|
function BiampTablePagination({
|
|
@@ -1053,20 +1045,21 @@ function BiampTablePagination({
|
|
|
1053
1045
|
rowsPerPageOptions,
|
|
1054
1046
|
loading,
|
|
1055
1047
|
autoHide = true,
|
|
1056
|
-
|
|
1048
|
+
sx,
|
|
1049
|
+
...paginationProps
|
|
1057
1050
|
}) {
|
|
1058
1051
|
const rowCount = table.getRowCount();
|
|
1059
|
-
const lastRowCountRef =
|
|
1052
|
+
const lastRowCountRef = useRef2(rowCount);
|
|
1060
1053
|
if (!loading && rowCount >= 0) {
|
|
1061
1054
|
lastRowCountRef.current = rowCount;
|
|
1062
1055
|
}
|
|
1063
1056
|
const stableCount = loading ? lastRowCountRef.current : rowCount;
|
|
1064
1057
|
const pageSize = table.getState().pagination.pageSize;
|
|
1065
1058
|
if (autoHide && !loading && stableCount <= pageSize) return null;
|
|
1066
|
-
return /* @__PURE__ */ jsx13(
|
|
1059
|
+
return /* @__PURE__ */ jsx13(
|
|
1067
1060
|
TablePagination,
|
|
1068
1061
|
{
|
|
1069
|
-
component:
|
|
1062
|
+
component: Box5,
|
|
1070
1063
|
count: stableCount,
|
|
1071
1064
|
page: table.getState().pagination.pageIndex,
|
|
1072
1065
|
rowsPerPage: table.getState().pagination.pageSize,
|
|
@@ -1077,9 +1070,19 @@ function BiampTablePagination({
|
|
|
1077
1070
|
},
|
|
1078
1071
|
rowsPerPageOptions: rowsPerPageOptions ?? [],
|
|
1079
1072
|
showFirstButton: true,
|
|
1080
|
-
showLastButton: true
|
|
1073
|
+
showLastButton: true,
|
|
1074
|
+
sx: {
|
|
1075
|
+
height: 40,
|
|
1076
|
+
minHeight: 40,
|
|
1077
|
+
"& .MuiToolbar-root": {
|
|
1078
|
+
minHeight: 40,
|
|
1079
|
+
px: 0
|
|
1080
|
+
},
|
|
1081
|
+
...sx
|
|
1082
|
+
},
|
|
1083
|
+
...paginationProps
|
|
1081
1084
|
}
|
|
1082
|
-
)
|
|
1085
|
+
);
|
|
1083
1086
|
}
|
|
1084
1087
|
|
|
1085
1088
|
// src/BiampTable/BiampTableToolbar.tsx
|
|
@@ -1291,16 +1294,16 @@ import {
|
|
|
1291
1294
|
TextField as TextField2
|
|
1292
1295
|
} from "@mui/material";
|
|
1293
1296
|
import { CloseIcon as CloseIcon2, SearchIcon as SearchIcon2 } from "@bwp-web/assets";
|
|
1294
|
-
import { useEffect as
|
|
1297
|
+
import { useEffect as useEffect3, useState as useState4 } from "react";
|
|
1295
1298
|
|
|
1296
1299
|
// src/BiampTable/useDebouncedCallback.ts
|
|
1297
|
-
import { useCallback, useEffect as
|
|
1300
|
+
import { useCallback, useEffect as useEffect2, useRef as useRef3 } from "react";
|
|
1298
1301
|
var BIAMP_TABLE_DEBOUNCE_DELAY = 300;
|
|
1299
1302
|
function useDebouncedCallback(callback, delay = BIAMP_TABLE_DEBOUNCE_DELAY) {
|
|
1300
|
-
const timeoutRef =
|
|
1301
|
-
const callbackRef =
|
|
1303
|
+
const timeoutRef = useRef3(null);
|
|
1304
|
+
const callbackRef = useRef3(callback);
|
|
1302
1305
|
callbackRef.current = callback;
|
|
1303
|
-
|
|
1306
|
+
useEffect2(() => {
|
|
1304
1307
|
return () => {
|
|
1305
1308
|
if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);
|
|
1306
1309
|
};
|
|
@@ -1341,7 +1344,7 @@ function BiampTableToolbarSearch({
|
|
|
1341
1344
|
const [inputValue, setInputValue] = useState4(defaultValue);
|
|
1342
1345
|
const [isExpanded, setIsExpanded] = useState4(false);
|
|
1343
1346
|
const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);
|
|
1344
|
-
|
|
1347
|
+
useEffect3(() => {
|
|
1345
1348
|
setInputValue(defaultValue);
|
|
1346
1349
|
}, [defaultValue]);
|
|
1347
1350
|
const handleChange = (e) => {
|
|
@@ -1505,6 +1508,7 @@ export {
|
|
|
1505
1508
|
exportToCsv,
|
|
1506
1509
|
getColumnVisibilityDirtyCount,
|
|
1507
1510
|
getDefaultColumnVisibility,
|
|
1511
|
+
toVisibilityState,
|
|
1508
1512
|
useDebouncedCallback
|
|
1509
1513
|
};
|
|
1510
1514
|
//# sourceMappingURL=index.js.map
|