@bwp-web/components 0.11.3 → 0.11.4
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/BiampTable.d.ts.map +1 -1
- package/dist/BiampTable/BiampTablePagination.d.ts +5 -3
- package/dist/BiampTable/BiampTablePagination.d.ts.map +1 -1
- package/dist/BiampTable/BiampTableToolbarSearch.d.ts.map +1 -1
- package/dist/index.cjs +238 -182
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +244 -188
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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":["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":["Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","Stack","Typography","jsx","jsxs","jsx","jsx","jsx","jsxs","Box","Stack","jsx","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","jsx","jsxs","useState","useRef","Box","jsx","Box","jsx","Box","jsx","jsx","Badge","Box","Divider","IconButton","Typography","useState","Fragment","jsx","jsxs","useState","Box","Typography","Badge","IconButton","Divider","Box","IconButton","InputAdornment","TextField","CloseIcon","SearchIcon","useEffect","useState","useEffect","useRef","jsx","jsxs","useState","useEffect","InputAdornment","IconButton","CloseIcon","TextField","SearchIcon","Box"]}
|
|
1
|
+
{"version":3,"sources":["../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":["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, useCallback, useEffect, useRef } 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 containerRef = useRef<HTMLDivElement>(null);\n const lastScrollLeftRef = useRef<number | null>(null);\n\n const onContainerScroll = useCallback((target: Element) => {\n const { scrollLeft, scrollWidth, clientWidth } = target;\n if (!containerRef.current || lastScrollLeftRef.current === scrollLeft)\n return;\n containerRef.current.dataset['rightShadow'] =\n scrollWidth - clientWidth > scrollLeft ? 'true' : 'false';\n lastScrollLeftRef.current = scrollLeft;\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const observer = new ResizeObserver(([{ target }]) =>\n onContainerScroll(target),\n );\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [onContainerScroll]);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const showError = !!error && !loading;\n const showEmpty = !showError && !loading && rows.length === 0;\n\n return (\n <TableContainer\n component={Box}\n {...boxProps}\n ref={containerRef}\n onScroll={(e: React.UIEvent<HTMLDivElement>) =>\n onContainerScroll(e.currentTarget)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'auto',\n overscrollBehavior: 'none',\n position: 'relative',\n '& [data-sticky=\"right\"]': {\n transition: 'box-shadow .2s',\n },\n '&[data-right-shadow=\"true\"] [data-sticky=\"right\"]': {\n boxShadow: ({ palette }: Theme) =>\n `-16px 0px 12px -2px ${palette.background.default}`,\n },\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{ minWidth: tableMinWidth }}\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 data-sticky={sticky || undefined}\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 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 data-sticky={sticky || undefined}\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 </TableBody>\n </MuiTable>\n\n {showError && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {error === true ? (\n <BiampTableErrorState sx={{ pointerEvents: 'auto' }} />\n ) : error instanceof Error ? (\n <BiampTableErrorState\n description={error.message}\n sx={{ pointerEvents: 'auto' }}\n />\n ) : (\n error\n )}\n </Box>\n )}\n\n {showEmpty && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {empty && empty !== true ? (\n empty\n ) : (\n <BiampTableEmptyState sx={{ pointerEvents: 'auto' }} />\n )}\n </Box>\n )}\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 { useRef } from 'react';\nimport { 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 /** Horizontal alignment of the pagination controls. @default 'center' */\n position?: 'left' | 'center' | 'right';\n} & Omit<\n TablePaginationProps<'div'>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n | 'position'\n>;\n\nconst positionMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n position = 'center',\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=\"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 sx={{\n display: 'flex',\n justifyContent: positionMap[position],\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: '36px !important',\n minHeight: '36px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '36px !important',\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":["Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","useEffect","useRef","Stack","Typography","jsx","jsxs","jsx","jsx","jsx","jsxs","useRef","useEffect","Box","Stack","jsx","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","jsx","jsxs","useState","useRef","jsx","Box","jsx","Box","jsx","jsx","Badge","Box","Divider","IconButton","Typography","useState","Fragment","jsx","jsxs","useState","Box","Typography","Badge","IconButton","Divider","Box","IconButton","InputAdornment","TextField","CloseIcon","SearchIcon","useEffect","useState","useCallback","useEffect","useRef","jsx","jsxs","useState","useEffect","InputAdornment","IconButton","CloseIcon","TextField","SearchIcon","Box"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bwp-web/components",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"description": "Shared Biamp Workplace React components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"prepublishOnly": "npm run build"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"@bwp-web/styles": ">=0.11.
|
|
36
|
-
"@bwp-web/assets": ">=0.11.
|
|
35
|
+
"@bwp-web/styles": ">=0.11.4",
|
|
36
|
+
"@bwp-web/assets": ">=0.11.4",
|
|
37
37
|
"@mui/material": ">=7.0.0",
|
|
38
38
|
"@tanstack/react-table": ">=8.0.0",
|
|
39
39
|
"react": ">=18.0.0",
|