@bwp-web/components 1.3.1 → 1.3.2

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/randomcolor/randomColor.js","../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/BiampTableTruncatedCell.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/slotProps.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/useBiampServerSideTable.ts","../src/BiampTable/serverSideTableUtils.ts","../src/BiampTable/exportCsv.ts","../src/BiampBanner/BiampBanner.tsx","../src/BiampSegmentedButton/SegmentedButton.tsx","../src/BiampSegmentedButton/SegmentedButtonGroup.tsx","../src/BiampGlobalSearch/BiampGlobalSearch.tsx","../src/UserInitialsIcon/UserInitialsIcon.tsx","../src/DynamicSvgIcon/DynamicSvgIcon.tsx"],"sourcesContent":["// randomColor by David Merfield under the CC0 license\n// https://github.com/davidmerfield/randomColor/\n\n;(function(root, factory) {\n\n // Support CommonJS\n if (typeof exports === 'object') {\n var randomColor = factory();\n\n // Support NodeJS & Component, which allow module.exports to be a function\n if (typeof module === 'object' && module && module.exports) {\n exports = module.exports = randomColor;\n }\n\n // Support CommonJS 1.1.1 spec\n exports.randomColor = randomColor;\n\n // Support AMD\n } else if (typeof define === 'function' && define.amd) {\n define([], factory);\n\n // Support vanilla script loading\n } else {\n root.randomColor = factory();\n }\n\n}(this, function() {\n\n // Seed to get repeatable colors\n var seed = null;\n\n // Shared color dictionary\n var colorDictionary = {};\n\n // Populate the color dictionary\n loadColorBounds();\n\n // check if a range is taken\n var colorRanges = [];\n\n var randomColor = function (options) {\n\n options = options || {};\n\n // Check if there is a seed and ensure it's an\n // integer. Otherwise, reset the seed value.\n if (options.seed !== undefined && options.seed !== null && options.seed === parseInt(options.seed, 10)) {\n seed = options.seed;\n\n // A string was passed as a seed\n } else if (typeof options.seed === 'string') {\n seed = stringToInteger(options.seed);\n\n // Something was passed as a seed but it wasn't an integer or string\n } else if (options.seed !== undefined && options.seed !== null) {\n throw new TypeError('The seed value must be an integer or string');\n\n // No seed, reset the value outside.\n } else {\n seed = null;\n }\n\n var H,S,B;\n\n // Check if we need to generate multiple colors\n if (options.count !== null && options.count !== undefined) {\n\n var totalColors = options.count,\n colors = [];\n // Value false at index i means the range i is not taken yet.\n for (var i = 0; i < options.count; i++) {\n colorRanges.push(false)\n }\n options.count = null;\n\n while (totalColors > colors.length) {\n\n var color = randomColor(options);\n\n if (seed !== null) {\n options.seed = seed;\n }\n\n colors.push(color);\n }\n\n options.count = totalColors;\n\n return colors;\n }\n\n // First we pick a hue (H)\n H = pickHue(options);\n\n // Then use H to determine saturation (S)\n S = pickSaturation(H, options);\n\n // Then use S and H to determine brightness (B).\n B = pickBrightness(H, S, options);\n\n // Then we return the HSB color in the desired format\n return setFormat([H,S,B], options);\n };\n\n function pickHue(options) {\n if (colorRanges.length > 0) {\n var hueRange = getRealHueRange(options.hue)\n\n var hue = randomWithin(hueRange)\n\n //Each of colorRanges.length ranges has a length equal approximatelly one step\n var step = (hueRange[1] - hueRange[0]) / colorRanges.length\n\n var j = parseInt((hue - hueRange[0]) / step)\n\n //Check if the range j is taken\n if (colorRanges[j] === true) {\n j = (j + 2) % colorRanges.length\n }\n else {\n colorRanges[j] = true\n }\n\n var min = (hueRange[0] + j * step) % 359,\n max = (hueRange[0] + (j + 1) * step) % 359;\n\n hueRange = [min, max]\n\n hue = randomWithin(hueRange)\n\n if (hue < 0) {hue = 360 + hue;}\n return hue\n }\n else {\n var hueRange = getHueRange(options.hue)\n\n hue = randomWithin(hueRange);\n // Instead of storing red as two seperate ranges,\n // we group them, using negative numbers\n if (hue < 0) {\n hue = 360 + hue;\n }\n\n return hue;\n }\n }\n\n function pickSaturation (hue, options) {\n\n if (options.hue === 'monochrome') {\n return 0;\n }\n\n if (options.luminosity === 'random') {\n return randomWithin([0,100]);\n }\n\n var saturationRange = getSaturationRange(hue);\n\n var sMin = saturationRange[0],\n sMax = saturationRange[1];\n\n switch (options.luminosity) {\n\n case 'bright':\n sMin = 55;\n break;\n\n case 'dark':\n sMin = sMax - 10;\n break;\n\n case 'light':\n sMax = 55;\n break;\n }\n\n return randomWithin([sMin, sMax]);\n\n }\n\n function pickBrightness (H, S, options) {\n\n var bMin = getMinimumBrightness(H, S),\n bMax = 100;\n\n switch (options.luminosity) {\n\n case 'dark':\n bMax = bMin + 20;\n break;\n\n case 'light':\n bMin = (bMax + bMin)/2;\n break;\n\n case 'random':\n bMin = 0;\n bMax = 100;\n break;\n }\n\n return randomWithin([bMin, bMax]);\n }\n\n function setFormat (hsv, options) {\n\n switch (options.format) {\n\n case 'hsvArray':\n return hsv;\n\n case 'hslArray':\n return HSVtoHSL(hsv);\n\n case 'hsl':\n var hsl = HSVtoHSL(hsv);\n return 'hsl('+hsl[0]+', '+hsl[1]+'%, '+hsl[2]+'%)';\n\n case 'hsla':\n var hslColor = HSVtoHSL(hsv);\n var alpha = options.alpha || Math.random();\n return 'hsla('+hslColor[0]+', '+hslColor[1]+'%, '+hslColor[2]+'%, ' + alpha + ')';\n\n case 'rgbArray':\n return HSVtoRGB(hsv);\n\n case 'rgb':\n var rgb = HSVtoRGB(hsv);\n return 'rgb(' + rgb.join(', ') + ')';\n\n case 'rgba':\n var rgbColor = HSVtoRGB(hsv);\n var alpha = options.alpha || Math.random();\n return 'rgba(' + rgbColor.join(', ') + ', ' + alpha + ')';\n\n default:\n return HSVtoHex(hsv);\n }\n\n }\n\n function getMinimumBrightness(H, S) {\n\n var lowerBounds = getColorInfo(H).lowerBounds;\n\n for (var i = 0; i < lowerBounds.length - 1; i++) {\n\n var s1 = lowerBounds[i][0],\n v1 = lowerBounds[i][1];\n\n var s2 = lowerBounds[i+1][0],\n v2 = lowerBounds[i+1][1];\n\n if (S >= s1 && S <= s2) {\n\n var m = (v2 - v1)/(s2 - s1),\n b = v1 - m*s1;\n\n return m*S + b;\n }\n\n }\n\n return 0;\n }\n\n function getHueRange (colorInput) {\n\n if (typeof parseInt(colorInput) === 'number') {\n\n var number = parseInt(colorInput);\n\n if (number < 360 && number > 0) {\n return [number, number];\n }\n\n }\n\n if (typeof colorInput === 'string') {\n\n if (colorDictionary[colorInput]) {\n var color = colorDictionary[colorInput];\n if (color.hueRange) {return color.hueRange;}\n } else if (colorInput.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)) {\n var hue = HexToHSB(colorInput)[0];\n return [ hue, hue ];\n }\n }\n\n return [0,360];\n\n }\n\n function getSaturationRange (hue) {\n return getColorInfo(hue).saturationRange;\n }\n\n function getColorInfo (hue) {\n\n // Maps red colors to make picking hue easier\n if (hue >= 334 && hue <= 360) {\n hue-= 360;\n }\n\n for (var colorName in colorDictionary) {\n var color = colorDictionary[colorName];\n if (color.hueRange &&\n hue >= color.hueRange[0] &&\n hue <= color.hueRange[1]) {\n return colorDictionary[colorName];\n }\n } return 'Color not found';\n }\n\n function randomWithin (range) {\n if (seed === null) {\n //generate random evenly destinct number from : https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n var golden_ratio = 0.618033988749895\n var r=Math.random()\n r += golden_ratio\n r %= 1\n return Math.floor(range[0] + r*(range[1] + 1 - range[0]));\n } else {\n //Seeded random algorithm from http://indiegamr.com/generate-repeatable-random-numbers-in-js/\n var max = range[1] || 1;\n var min = range[0] || 0;\n seed = (seed * 9301 + 49297) % 233280;\n var rnd = seed / 233280.0;\n return Math.floor(min + rnd * (max - min));\n}\n }\n\n function HSVtoHex (hsv){\n\n var rgb = HSVtoRGB(hsv);\n\n function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n }\n\n var hex = '#' + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]);\n\n return hex;\n\n }\n\n function defineColor (name, hueRange, lowerBounds) {\n\n var sMin = lowerBounds[0][0],\n sMax = lowerBounds[lowerBounds.length - 1][0],\n\n bMin = lowerBounds[lowerBounds.length - 1][1],\n bMax = lowerBounds[0][1];\n\n colorDictionary[name] = {\n hueRange: hueRange,\n lowerBounds: lowerBounds,\n saturationRange: [sMin, sMax],\n brightnessRange: [bMin, bMax]\n };\n\n }\n\n function loadColorBounds () {\n\n defineColor(\n 'monochrome',\n null,\n [[0,0],[100,0]]\n );\n\n defineColor(\n 'red',\n [-26,18],\n [[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]\n );\n\n defineColor(\n 'orange',\n [18,46],\n [[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]\n );\n\n defineColor(\n 'yellow',\n [46,62],\n [[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]\n );\n\n defineColor(\n 'green',\n [62,178],\n [[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]\n );\n\n defineColor(\n 'blue',\n [178, 257],\n [[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]\n );\n\n defineColor(\n 'purple',\n [257, 282],\n [[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]\n );\n\n defineColor(\n 'pink',\n [282, 334],\n [[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]\n );\n\n }\n\n function HSVtoRGB (hsv) {\n\n // this doesn't work for the values of 0 and 360\n // here's the hacky fix\n var h = hsv[0];\n if (h === 0) {h = 1;}\n if (h === 360) {h = 359;}\n\n // Rebase the h,s,v values\n h = h/360;\n var s = hsv[1]/100,\n v = hsv[2]/100;\n\n var h_i = Math.floor(h*6),\n f = h * 6 - h_i,\n p = v * (1 - s),\n q = v * (1 - f*s),\n t = v * (1 - (1 - f)*s),\n r = 256,\n g = 256,\n b = 256;\n\n switch(h_i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n }\n\n var result = [Math.floor(r*255), Math.floor(g*255), Math.floor(b*255)];\n return result;\n }\n\n function HexToHSB (hex) {\n hex = hex.replace(/^#/, '');\n hex = hex.length === 3 ? hex.replace(/(.)/g, '$1$1') : hex;\n\n var red = parseInt(hex.substr(0, 2), 16) / 255,\n green = parseInt(hex.substr(2, 2), 16) / 255,\n blue = parseInt(hex.substr(4, 2), 16) / 255;\n\n var cMax = Math.max(red, green, blue),\n delta = cMax - Math.min(red, green, blue),\n saturation = cMax ? (delta / cMax) : 0;\n\n switch (cMax) {\n case red: return [ 60 * (((green - blue) / delta) % 6) || 0, saturation, cMax ];\n case green: return [ 60 * (((blue - red) / delta) + 2) || 0, saturation, cMax ];\n case blue: return [ 60 * (((red - green) / delta) + 4) || 0, saturation, cMax ];\n }\n }\n\n function HSVtoHSL (hsv) {\n var h = hsv[0],\n s = hsv[1]/100,\n v = hsv[2]/100,\n k = (2-s)*v;\n\n return [\n h,\n Math.round(s*v / (k<1 ? k : 2-k) * 10000) / 100,\n k/2 * 100\n ];\n }\n\n function stringToInteger (string) {\n var total = 0\n for (var i = 0; i !== string.length; i++) {\n if (total >= Number.MAX_SAFE_INTEGER) break;\n total += string.charCodeAt(i)\n }\n return total\n }\n\n // get The range of given hue when options.count!=0\n function getRealHueRange(colorHue)\n { if (!isNaN(colorHue)) {\n var number = parseInt(colorHue);\n\n if (number < 360 && number > 0) {\n return getColorInfo(colorHue).hueRange\n }\n }\n else if (typeof colorHue === 'string') {\n\n if (colorDictionary[colorHue]) {\n var color = colorDictionary[colorHue];\n\n if (color.hueRange) {\n return color.hueRange\n }\n } else if (colorHue.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)) {\n var hue = HexToHSB(colorHue)[0]\n return getColorInfo(hue).hueRange\n }\n }\n\n return [0,360]\n}\n return randomColor;\n}));\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX, ReactNode } from 'react';\nimport { BiampRedLogo, ExternalLinkIcon, 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\nconst POPOVER_MAX_WIDTH = 530;\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: 'right' }}\n transformOrigin={{ vertical: -8, horizontal: POPOVER_MAX_WIDTH - 4 }}\n sx={{ ...sx }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n outlineWidth: '0.6px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n maxWidth: POPOVER_MAX_WIDTH,\n width: '100%',\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampBuildAppContentProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampBuildAppContent({\n children,\n sx,\n ...props\n}: BiampBuildAppContentProps) {\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 1.5,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampBuildAppContentItemProps = StackProps & {\n image: ReactNode;\n name: string;\n description: string;\n button?: ReactNode;\n};\n\nexport function BiampBuildAppContentItem({\n image,\n name,\n description,\n button,\n sx,\n ...props\n}: BiampBuildAppContentItemProps) {\n return (\n <Stack\n direction=\"column\"\n position=\"relative\"\n sx={{\n p: 1.5,\n borderRadius: 1.5,\n outlineWidth: '1px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n ...sx,\n }}\n {...props}\n >\n <Box sx={{ width: 54, height: 54 }} mb={0.5}>\n {image}\n </Box>\n <Typography variant=\"caption\" fontWeight={600} mb={0.5}>\n {name}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {description}\n </Typography>\n {button && (\n <Box position=\"absolute\" top=\"12px\" right=\"12px\">\n {button}\n </Box>\n )}\n </Stack>\n );\n}\n\ntype BiampEndUserAppContentProps = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampEndUserAppContent({\n children,\n sx,\n ...props\n}: BiampEndUserAppContentProps) {\n return (\n <Stack\n direction=\"column\"\n sx={{\n gap: 1.5,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampEndUserAppContentItemProps = StackProps & {\n image: ReactNode;\n name: string;\n description: string;\n href?: string;\n target?: string;\n};\n\nexport function BiampEndUserAppContentItem({\n image,\n name,\n description,\n href,\n target,\n sx,\n ...props\n}: BiampEndUserAppContentItemProps) {\n return (\n <Stack\n component={href ? 'a' : 'div'}\n href={href}\n target={target}\n direction=\"row\"\n alignItems=\"center\"\n sx={{\n gap: 1.5,\n p: 1.5,\n borderRadius: 1.5,\n outlineWidth: '1px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n textDecoration: 'none',\n color: 'inherit',\n cursor: href ? 'pointer' : undefined,\n ...sx,\n }}\n {...props}\n >\n <Box sx={{ width: 32, height: 32 }}>{image}</Box>\n <Stack direction=\"column\">\n <Typography variant=\"caption\" fontWeight={600}>\n {name}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {description}\n </Typography>\n </Stack>\n <ExternalLinkIcon sx={{ width: 16, height: 16, ml: 'auto' }} />\n </Stack>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image?: string;\n children?: ReactNode;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n children,\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 {image ? (\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 ) : (\n children\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 IconButton,\n Table as MuiTable,\n TableBody,\n type TableBodyProps as MuiTableBodyProps,\n TableCell,\n type TableCellProps as MuiTableCellProps,\n TableContainer,\n TableHead,\n type TableHeadProps as MuiTableHeadProps,\n type TableProps as MuiTableProps,\n TableRow,\n type TableRowProps as MuiTableRowProps,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport {\n flexRender,\n type Cell,\n type Header,\n type Row,\n type Table,\n} from '@tanstack/react-table';\nimport React, { type ReactNode, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport { BiampTableTruncatedCell } from './BiampTableTruncatedCell';\nimport { useLoadingDelay } from './useLoadingDelay';\nimport { mergeSx, resolveSlot, type SlotPropsOrFn } from './slotProps';\n\n// ── Slot props ─────────────────────────────────────────────────────\n\nexport type BiampTableSlotProps<TData> = {\n /** Props merged onto the MUI `<Table>`. `sx` composes with defaults. */\n table?: MuiTableProps;\n /** Props merged onto the `<TableHead>`. `sx` composes with defaults. */\n head?: MuiTableHeadProps;\n /** Props merged onto the `<TableBody>`. `sx` composes with defaults. */\n body?: MuiTableBodyProps;\n /** Props merged onto the header `<TableRow>`. `sx` composes with defaults. */\n headerRow?: MuiTableRowProps;\n /** Props merged onto each header `<TableCell>`. Pass a function for per-column overrides. `sx` composes with defaults. */\n headerCell?: SlotPropsOrFn<\n MuiTableCellProps,\n { header: Header<TData, unknown> }\n >;\n /** Props merged onto each body `<TableRow>`. Pass a function for per-row overrides. `sx` composes with defaults. */\n row?: SlotPropsOrFn<MuiTableRowProps, { row: Row<TData> }>;\n /** Props merged onto each body `<TableCell>`. Pass a function for per-cell overrides. `sx` composes with defaults. */\n cell?: SlotPropsOrFn<MuiTableCellProps, { cell: Cell<TData, unknown> }>;\n};\n\n// ── Row-click props ────────────────────────────────────────────────\ntype RowClickProps<TData> =\n | {\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.\n */\n isRowClickable?: (row: TData) => boolean;\n }\n | {\n onRowClick?: undefined;\n isRowClickable?: never;\n };\n\n// ── Selection + expanding props ────────────────────────────────────\ntype SelectionExpandingProps = {\n /** When true, renders a checkbox column for row selection. */\n enableRowSelection?: boolean;\n /** When true, renders an expand/collapse toggle column for rows that have sub-rows. */\n enableExpanding?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. Only applies when `enableRowSelection` is true. */\n hideSelectAll?: boolean;\n /** When true, selecting a parent row also selects/deselects its children. Only applies when both `enableRowSelection` and `enableExpanding` are true. @default false */\n selectChildrenWithParent?: boolean;\n};\n\nexport type BiampTableProps<TData> = BoxProps &\n RowClickProps<TData> &\n SelectionExpandingProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\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 /** 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 * Returns a background color for a row (any valid CSS color). Applied to\n * the row and to all sticky cells (selection column, sticky action columns)\n * so the row reads as a single tinted band. Hover and selected backgrounds\n * override the custom color — whatever the theme defines for those states\n * wins. Use opaque colors so sticky cells fully cover scrolled content.\n * Return `undefined` to leave a row at its default color.\n */\n setRowColor?: (row: TData) => string | undefined;\n /**\n * Per-slot props merged onto the internal MUI elements (`table`, `head`, `body`,\n * `headerRow`, `headerCell`, `row`, `cell`). `sx` composes with the defaults\n * instead of replacing them. `row`, `cell`, and `headerCell` accept a function\n * of the row/cell/header for data-aware overrides — memoize these callbacks to\n * avoid breaking row memoization.\n */\n slotProps?: BiampTableSlotProps<TData>;\n };\n\n// ── Shared sx helpers ────────────────────────────────────────────\n\nconst overlaySx = {\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} as const;\n\nconst stickyHoverBg = {\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n} as const;\n\nfunction cellSx(\n sticky: 'left' | 'right' | undefined,\n minWidth: number | string | undefined,\n zIndex: number,\n) {\n if (sticky) {\n return {\n position: 'sticky',\n [sticky]: 0,\n zIndex,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n ...(zIndex < 3 && stickyHoverBg),\n } as const;\n }\n const mw = minWidth ?? 40;\n return {\n minWidth: mw,\n whiteSpace: 'nowrap',\n '&:has([data-truncate])': { maxWidth: mw, whiteSpace: 'normal' },\n };\n}\n\n// ── Hoisted sx objects (avoid re-creation per row per render) ────\n\nconst rowCursorPointerSx = { cursor: 'pointer' } as const;\n\nconst selectionCellSx = {\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n ...stickyHoverBg,\n} as const;\n\nconst checkboxHiddenSx = { visibility: 'hidden' } as const;\n\nconst expandCellBaseSx = {\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n} as const;\n\nconst expandPlaceholderSx = { width: 28 } as const;\n\nconst headerSelectionCellSx = {\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n} as const;\n\nconst checkboxHiddenHeaderSx = { visibility: 'hidden' } as const;\n\n// ── Memoized row ─────────────────────────────────────────────────\n\ntype BiampTableRowProps<TData> = {\n row: Row<TData>;\n isExpanded: boolean;\n isSelected: boolean;\n onRowClick?: (row: TData) => void;\n isRowClickable?: (row: TData) => boolean;\n enableRowSelection: boolean;\n enableExpanding: boolean;\n selectChildrenWithParent: boolean;\n getRowLabel?: (row: TData) => string;\n hasExpandableRows: boolean;\n customColor?: string;\n rowSlotProps?: SlotPropsOrFn<MuiTableRowProps, { row: Row<TData> }>;\n cellSlotProps?: SlotPropsOrFn<\n MuiTableCellProps,\n { cell: Cell<TData, unknown> }\n >;\n};\n\nfunction BiampTableRowInner<TData>({\n row,\n isExpanded,\n isSelected,\n onRowClick,\n isRowClickable,\n enableRowSelection,\n enableExpanding,\n selectChildrenWithParent,\n getRowLabel,\n hasExpandableRows,\n customColor,\n rowSlotProps,\n cellSlotProps,\n}: BiampTableRowProps<TData>) {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n const resolvedRow = resolveSlot(rowSlotProps, { row });\n const {\n sx: userRowSx,\n onClick: userRowOnClick,\n onKeyDown: userRowOnKeyDown,\n ...restRowProps\n } = resolvedRow ?? {};\n\n return (\n <TableRow\n key={row.id}\n {...restRowProps}\n hover={clickable}\n selected={enableRowSelection ? isSelected : undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={mergeSx(\n clickable && rowCursorPointerSx,\n customColor ? { backgroundColor: customColor } : undefined,\n userRowSx,\n )}\n onClick={\n clickable && onRowClick\n ? (e) => {\n onRowClick(row.original);\n userRowOnClick?.(e);\n }\n : userRowOnClick\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n userRowOnKeyDown?.(e);\n }\n : userRowOnKeyDown\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={mergeSx(\n selectionCellSx,\n customColor ? { backgroundColor: customColor } : undefined,\n )}\n >\n <Checkbox\n checked={isSelected}\n disabled={!row.getCanSelect()}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n row.toggleSelected(e.target.checked, {\n selectChildren: selectChildrenWithParent,\n })\n }\n onClick={(e) => e.stopPropagation()}\n sx={!row.getCanSelect() ? checkboxHiddenSx : undefined}\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, cellIndex, cells) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n const isExpandCell =\n enableExpanding &&\n !sticky &&\n cellIndex ===\n cells.findIndex((c) => !c.column.columnDef.meta?.sticky);\n\n const content = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n\n const resolvedCell = resolveSlot(cellSlotProps, { cell });\n const { sx: userCellSx, ...restCellProps } = resolvedCell ?? {};\n\n return (\n <TableCell\n key={cell.id}\n {...restCellProps}\n data-sticky={sticky || undefined}\n sx={mergeSx(\n cellSx(sticky, cell.column.columnDef.meta?.minWidth, 2),\n { pl: isExpandCell ? '6px' : '12px' },\n sticky && customColor\n ? { backgroundColor: customColor }\n : undefined,\n userCellSx,\n )}\n >\n {(() => {\n if (sticky) return content;\n\n const truncate = cell.column.columnDef.meta?.truncate ?? true;\n const truncated = truncate ? (\n <BiampTableTruncatedCell>{content}</BiampTableTruncatedCell>\n ) : (\n content\n );\n\n if (!isExpandCell) return truncated;\n\n const rowLabel = getRowLabel\n ? getRowLabel(row.original)\n : `row ${row.index + 1}`;\n\n return (\n <Box\n sx={\n row.depth > 0\n ? { ...expandCellBaseSx, pl: `${row.depth * 12}px` }\n : expandCellBaseSx\n }\n >\n {row.getCanExpand() ? (\n <IconButton\n variant=\"none\"\n onClick={(e) => {\n e.stopPropagation();\n row.toggleExpanded();\n }}\n aria-label={\n isExpanded\n ? `Collapse ${rowLabel}`\n : `Expand ${rowLabel}`\n }\n aria-expanded={isExpanded}\n >\n {isExpanded ? (\n <ChevronDownIcon\n variant=\"xs\"\n sx={{\n color: ({ palette }) => palette.text.secondary,\n }}\n />\n ) : (\n <ChevronRightIcon\n variant=\"xs\"\n sx={{\n color: ({ palette }) => palette.text.secondary,\n }}\n />\n )}\n </IconButton>\n ) : hasExpandableRows ? (\n <Box sx={expandPlaceholderSx} />\n ) : null}\n {truncated}\n </Box>\n );\n })()}\n </TableCell>\n );\n })}\n </TableRow>\n );\n}\n\nfunction biampTableRowPropsAreEqual<TData>(\n prev: BiampTableRowProps<TData>,\n next: BiampTableRowProps<TData>,\n) {\n return (\n prev.row.id === next.row.id &&\n prev.row.original === next.row.original &&\n prev.isSelected === next.isSelected &&\n prev.isExpanded === next.isExpanded &&\n prev.row.getVisibleCells().length === next.row.getVisibleCells().length &&\n prev.enableRowSelection === next.enableRowSelection &&\n prev.enableExpanding === next.enableExpanding &&\n prev.hasExpandableRows === next.hasExpandableRows &&\n prev.selectChildrenWithParent === next.selectChildrenWithParent &&\n prev.onRowClick === next.onRowClick &&\n prev.isRowClickable === next.isRowClickable &&\n prev.getRowLabel === next.getRowLabel &&\n prev.customColor === next.customColor &&\n prev.rowSlotProps === next.rowSlotProps &&\n prev.cellSlotProps === next.cellSlotProps\n );\n}\n\nconst BiampTableRow = React.memo(\n BiampTableRowInner,\n biampTableRowPropsAreEqual,\n) as typeof BiampTableRowInner;\n\n// ── Component ────────────────────────────────────────────────────\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n enableExpanding = false,\n hideSelectAll,\n selectChildrenWithParent = false,\n getRowLabel,\n setRowColor,\n slotProps,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n const { sx: userTableSx, ...restTableSlotProps } = slotProps?.table ?? {};\n const { sx: userHeadSx, ...restHeadSlotProps } = slotProps?.head ?? {};\n const { sx: userBodySx, ...restBodySlotProps } = slotProps?.body ?? {};\n const { sx: userHeaderRowSx, ...restHeaderRowSlotProps } =\n slotProps?.headerRow ?? {};\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\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const hasExpandableRows =\n enableExpanding && rows.some((r) => r.getCanExpand());\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 sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n position: 'relative',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n {...restTableSlotProps}\n sx={mergeSx(\n { minWidth: tableMinWidth, tableLayout: 'auto' },\n userTableSx,\n )}\n >\n <TableHead {...restHeadSlotProps} sx={mergeSx(userHeadSx)}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow\n key={headerGroup.id}\n {...restHeaderRowSlotProps}\n sx={mergeSx(userHeaderRowSx)}\n >\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={headerSelectionCellSx}>\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n sx={\n rows.length === 0 ? checkboxHiddenHeaderSx : undefined\n }\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 const resolvedHeaderCell = resolveSlot(slotProps?.headerCell, {\n header,\n });\n const { sx: userHeaderCellSx, ...restHeaderCellProps } =\n resolvedHeaderCell ?? {};\n return (\n <TableCell\n key={header.id}\n {...restHeaderCellProps}\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={mergeSx(\n cellSx(sticky, header.column.columnDef.meta?.minWidth, 3),\n userHeaderCellSx,\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\n {...restBodySlotProps}\n sx={mergeSx({ opacity: showLoading ? 0.3 : 1 }, userBodySx)}\n >\n {!showError &&\n rows.map((row) => (\n <BiampTableRow\n key={row.id}\n row={row}\n isExpanded={row.getIsExpanded()}\n isSelected={row.getIsSelected()}\n onRowClick={onRowClick}\n isRowClickable={isRowClickable}\n enableRowSelection={enableRowSelection}\n enableExpanding={enableExpanding}\n selectChildrenWithParent={selectChildrenWithParent}\n getRowLabel={getRowLabel}\n hasExpandableRows={hasExpandableRows}\n customColor={setRowColor?.(row.original)}\n rowSlotProps={slotProps?.row}\n cellSlotProps={slotProps?.cell}\n />\n ))}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box sx={overlaySx}>\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 sx={overlaySx}>\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={1.5} {...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 { Box, Tooltip } from '@mui/material';\nimport React, { useCallback, useRef, useState } from 'react';\n\n/**\n * Renders cell content with single-line truncation (ellipsis).\n * A tooltip showing the full text appears only when the content is actually truncated.\n * The Tooltip popup is only mounted when `open` is true, so there is zero DOM\n * overhead for non-truncated cells.\n */\nexport function BiampTableTruncatedCell({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const textRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n const el = textRef.current;\n if (el && el.scrollWidth > el.clientWidth) {\n setOpen(true);\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Tooltip\n title={children}\n open={open}\n arrow\n placement=\"top\"\n disableInteractive\n >\n <Box\n data-truncate\n ref={textRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n }}\n >\n {children}\n </Box>\n </Tooltip>\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 type { SxProps, Theme } from '@mui/material';\n\nexport type SlotPropsOrFn<TProps, TCtx> = TProps | ((ctx: TCtx) => TProps);\n\nexport function resolveSlot<TProps, TCtx>(\n slot: SlotPropsOrFn<TProps, TCtx> | undefined,\n ctx: TCtx,\n): TProps | undefined {\n if (!slot) return undefined;\n return typeof slot === 'function' ? (slot as (c: TCtx) => TProps)(ctx) : slot;\n}\n\nexport function mergeSx(\n ...inputs: Array<SxProps<Theme> | false | null | undefined>\n): SxProps<Theme> {\n return inputs\n .filter((v): v is SxProps<Theme> => Boolean(v))\n .flatMap((v) => (Array.isArray(v) ? v : [v])) as SxProps<Theme>;\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 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 dense\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\" fontWeight={600}>\n {showAllLabel}\n </Typography>\n </ListItem>\n <Divider />\n <Box\n sx={{ maxHeight: 340, overflow: 'auto', overscrollBehavior: 'none' }}\n >\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n column.columnDef.meta?.columnLabel ??\n (typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id);\n return (\n <ListItem\n key={column.id}\n dense\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n sx={{ py: 1 }}\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 { useEffect, 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, pageIndex } = table.getState().pagination;\n\n // Auto-correct page when row count drops (e.g. after filtering)\n const maxPage = Math.max(0, Math.ceil(stableCount / pageSize) - 1);\n useEffect(() => {\n if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\n }, [loading, pageIndex, maxPage, table]);\n\n // Hide when there's no data or everything fits on one page\n if (autoHide && (!stableCount || 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\n display=\"flex\"\n alignItems=\"center\"\n ml=\"auto\"\n gap={{ xs: 0, md: 1 }}\n mr={{ xs: 1, md: 0 }}\n {...props}\n >\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 InputBase,\n TextField,\n Theme,\n useMediaQuery,\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\ntype ExpandableSearchProps =\n | {\n /** When true, the search field collapses to an icon button when empty and unfocused. */\n expandable: true;\n /** Accessible label for the collapsed icon button. @default placeholder */\n expandLabel?: string;\n }\n | {\n expandable?: false;\n expandLabel?: never;\n };\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, renders a simplified full-width InputBase on screens below the `md` breakpoint. @default true */\n enableMobileView?: boolean;\n} & ExpandableSearchProps &\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 enableMobileView = true,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const isMobile = useMediaQuery<Theme>((t) => t.breakpoints.down('md'));\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 (isMobile && enableMobileView) {\n return (\n <Box display=\"flex\" alignItems=\"center\" width=\"100%\" pr={1} gap={1}>\n <SearchIcon sx={{ width: 16, height: 16 }} />\n <InputBase\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n inputProps={{ maxLength, 'aria-label': 'Search' }}\n fullWidth\n value={inputValue}\n sx={{\n paddingLeft: 1,\n height: '36px !important',\n minHeight: '36px !important',\n fontSize: (t) => t.typography.body2.fontSize,\n }}\n onChange={handleChange}\n endAdornment={clearButton}\n />\n </Box>\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","import {\n type ColumnDef,\n type ExpandedState,\n getCoreRowModel,\n getExpandedRowModel,\n type Row,\n type Table,\n useReactTable,\n} from '@tanstack/react-table';\nimport { useMemo } from 'react';\nimport {\n toVisibilityState,\n type ColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n type ServerSideOrder,\n orderToSorting,\n sortingToOrder,\n getOrderFieldMappings,\n getDefaultColumnVisibilityFromDefs,\n getDirtyColumnVisibility,\n selectedIdsToRowSelection,\n rowSelectionToSelectedIds,\n} from './serverSideTableUtils';\nimport './tanstack-meta';\n\n// Stable references — avoid re-creating on every render.\nconst coreRowModel = getCoreRowModel();\nconst expandedRowModel = getExpandedRowModel();\nconst defaultGetRowId = (row: Record<string, string>) => row.id;\n\nexport type UseBiampServerSideTableOptions<TData, F extends string = string> = {\n /** Row data array. */\n data: TData[];\n /** TanStack column definitions. Use `meta.orderField` to map columns to server-side order fields. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[];\n /** Extracts a unique ID from each row. @default `(row) => (row as any).id` */\n getRowId?: (row: TData) => string;\n\n // ── Sorting ──────────────────────────────────────────────────────\n /** Current server-side order. `undefined` means no sorting. */\n order?: ServerSideOrder<F>;\n /** Called when the user changes sorting. `undefined` means sorting was cleared. */\n onOrderChange?: (order?: ServerSideOrder<F>) => void;\n\n // ── Pagination ───────────────────────────────────────────────────\n /** Zero-based page index. */\n page?: number;\n /** Number of rows per page. */\n rowsPerPage?: number;\n /** Called when the user changes page. */\n onPageChange?: (page: number) => void;\n /** Total row count from the server (for pagination display). */\n rowCount?: number;\n\n // ── Column visibility ────────────────────────────────────────────\n /** Current column visibility overrides. Merged with defaults from `meta.defaultVisible`. */\n columnVisibility?: ColumnVisibility;\n /** Called with only the entries that differ from defaults (for URL persistence). */\n onColumnVisibilityChange?: (visibility: ColumnVisibility) => void;\n\n // ── Row selection ────────────────────────────────────────────────\n /** Currently selected row IDs. */\n selectedRowIds?: string[];\n /** Called when selection changes. */\n onSelectedRowIdsChange?: (ids: string[]) => void;\n /** Enable row selection. Pass `true` for all rows, or a predicate. */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean);\n\n // ── Expanding ──────────────────────────────────────────────────\n /** Current expanded state. `{}` means nothing expanded; `true` expands all. */\n expanded?: ExpandedState;\n /** Called when the user expands/collapses rows. */\n onExpandedChange?: (expanded: ExpandedState) => void;\n /** Returns child rows for a given row (enables sub-row expanding). */\n getSubRows?: (row: TData) => TData[] | undefined;\n};\n\n/**\n * Wraps `useReactTable` with the standard server-side configuration:\n * manual sorting, manual pagination, column visibility with dirty-tracking,\n * and optional row selection with ID-based state.\n *\n * Eliminates ~40 lines of boilerplate per table implementation.\n */\nexport function useBiampServerSideTable<TData, F extends string = string>({\n data,\n columns,\n getRowId = defaultGetRowId as (row: TData) => string,\n order,\n onOrderChange,\n page,\n rowsPerPage,\n onPageChange,\n rowCount,\n columnVisibility,\n onColumnVisibilityChange,\n selectedRowIds,\n onSelectedRowIdsChange,\n enableRowSelection,\n expanded,\n onExpandedChange,\n getSubRows,\n}: UseBiampServerSideTableOptions<TData, F>): Table<TData> {\n // ── Derived state (memoized) ─────────────────────────────────────\n\n const { defaultColumnVisibility, columnIdToField, fieldToColumnId } = useMemo(\n () => ({\n defaultColumnVisibility: getDefaultColumnVisibilityFromDefs(columns),\n ...getOrderFieldMappings<F>(columns),\n }),\n [columns],\n );\n\n const sorting = useMemo(\n () => orderToSorting(order, fieldToColumnId),\n [order, fieldToColumnId],\n );\n\n const hasPagination = page != null && rowsPerPage != null;\n const pagination = useMemo(\n () =>\n hasPagination ? { pageIndex: page!, pageSize: rowsPerPage! } : undefined,\n [hasPagination, page, rowsPerPage],\n );\n\n const hasSelection = selectedRowIds != null;\n const rowSelection = useMemo(\n () =>\n hasSelection ? selectedIdsToRowSelection(selectedRowIds!) : undefined,\n [hasSelection, selectedRowIds],\n );\n\n const mergedVisibility = useMemo(\n () =>\n toVisibilityState({\n ...defaultColumnVisibility,\n ...columnVisibility,\n }),\n [defaultColumnVisibility, columnVisibility],\n );\n\n // ── Table instance ───────────────────────────────────────────────\n\n return useReactTable({\n data,\n columns,\n getCoreRowModel: coreRowModel,\n getRowId,\n\n // Server-side tables manage their own state — disable TanStack's auto-reset\n // heuristic which watches for data reference changes and resets page index,\n // selection, etc. With unstable data references (e.g. `items ?? []`) this\n // causes infinite re-render loops.\n autoResetAll: false,\n\n // Sorting — always manual for server-side tables\n manualSorting: true,\n sortDescFirst: false,\n state: {\n sorting,\n ...(pagination && { pagination }),\n columnVisibility: mergedVisibility,\n ...(rowSelection && { rowSelection }),\n ...(expanded != null && { expanded }),\n },\n onSortingChange: onOrderChange\n ? (updater) => {\n const next =\n typeof updater === 'function' ? updater(sorting) : updater;\n onOrderChange(sortingToOrder(next, columnIdToField));\n }\n : undefined,\n\n // Pagination — only when page/rowsPerPage are provided\n ...(hasPagination && {\n manualPagination: true,\n rowCount: rowCount ?? 0,\n onPaginationChange: onPageChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onPaginationChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(pagination!) : updater;\n onPageChange(next.pageIndex);\n }\n : undefined,\n }),\n\n // Column visibility\n onColumnVisibilityChange: onColumnVisibilityChange\n ? (updater) => {\n const next =\n typeof updater === 'function' ? updater(mergedVisibility) : updater;\n onColumnVisibilityChange(\n getDirtyColumnVisibility(next, defaultColumnVisibility),\n );\n }\n : undefined,\n\n // Row selection — only when selectedRowIds is provided\n ...(hasSelection && {\n enableRowSelection: enableRowSelection ?? true,\n onRowSelectionChange: onSelectedRowIdsChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onRowSelectionChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(rowSelection!) : updater;\n onSelectedRowIdsChange(rowSelectionToSelectedIds(next));\n }\n : undefined,\n }),\n\n // Expanding — only when expanded state is provided\n ...(expanded != null && {\n // Only attach getExpandedRowModel when getSubRows is provided.\n // Without it, the expanded model recomputes on every state change\n // (including selection), adding unnecessary overhead.\n ...(getSubRows && { getExpandedRowModel: expandedRowModel, getSubRows }),\n onExpandedChange: onExpandedChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onExpandedChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(expanded) : updater;\n onExpandedChange(next);\n }\n : undefined,\n }),\n });\n}\n","import type { RowSelectionState, SortingState } from '@tanstack/react-table';\n\n/** A single-field server-side order, matching typical GraphQL order input types. */\nexport type ServerSideOrder<F extends string> = {\n field: F;\n desc?: boolean;\n};\n\n/**\n * Convert a server-side order object to TanStack SortingState.\n *\n * @param order - `{ field, desc? }` from URL params / GraphQL\n * @param fieldToColumnId - optional map when column IDs differ from order field names\n */\nexport function orderToSorting<F extends string>(\n order: ServerSideOrder<F> | undefined,\n fieldToColumnId?: Partial<Record<F, string>>,\n): SortingState {\n if (!order) return [];\n const id = fieldToColumnId?.[order.field] ?? order.field;\n return [{ id, desc: order.desc ?? false }];\n}\n\n/**\n * Convert TanStack SortingState back to a server-side order object.\n *\n * @param sorting - TanStack sorting state\n * @param columnIdToField - optional map when column IDs differ from order field names\n */\nexport function sortingToOrder<F extends string>(\n sorting: SortingState,\n columnIdToField?: Record<string, F>,\n): ServerSideOrder<F> | undefined {\n if (sorting.length === 0) return undefined;\n const { id, desc } = sorting[0];\n const field = (columnIdToField?.[id] ?? id) as F;\n return { field, desc };\n}\n\n/**\n * Convert an array of selected row IDs to TanStack RowSelectionState.\n */\nexport function selectedIdsToRowSelection(ids: string[]): RowSelectionState {\n const state: RowSelectionState = {};\n for (const id of ids) {\n state[id] = true;\n }\n return state;\n}\n\n/**\n * Convert TanStack RowSelectionState to an array of selected row IDs.\n */\nexport function rowSelectionToSelectedIds(\n selection: RowSelectionState,\n): string[] {\n return Object.keys(selection).filter((key) => selection[key]);\n}\n\n/**\n * Build bidirectional mappings between TanStack column IDs and server-side order\n * field enum values from column definitions that carry `meta.orderField`.\n */\nexport function getOrderFieldMappings<F extends string = string>(\n columns: { id?: string; meta?: { orderField?: string } }[],\n): {\n columnIdToField: Record<string, F>;\n fieldToColumnId: Partial<Record<F, string>>;\n} {\n const columnIdToField: Record<string, F> = {};\n const fieldToColumnId: Partial<Record<F, string>> = {};\n for (const col of columns) {\n const orderField = col.meta?.orderField as F | undefined;\n if (col.id && orderField) {\n columnIdToField[col.id] = orderField;\n fieldToColumnId[orderField] = col.id;\n }\n }\n return { columnIdToField, fieldToColumnId };\n}\n\n/**\n * Derives default column visibility from column definitions' `meta.defaultVisible`.\n * Columns without `defaultVisible` are omitted (treated as visible by TanStack).\n */\nexport function getDefaultColumnVisibilityFromDefs(\n columns: { id?: string; meta?: { defaultVisible?: boolean } }[],\n): Record<string, boolean> {\n const defaults: Record<string, boolean> = {};\n for (const col of columns) {\n if (col.id != null && col.meta?.defaultVisible !== undefined) {\n defaults[col.id] = col.meta.defaultVisible;\n }\n }\n return defaults;\n}\n\n/**\n * Returns only the entries in `visibility` that differ from `defaults`.\n * Columns not present in `defaults` are treated as visible (`true`) by default.\n * Use this to strip default-matching entries before persisting to URL params.\n */\nexport function getDirtyColumnVisibility(\n visibility: Record<string, boolean>,\n defaults: Record<string, boolean>,\n): Record<string, boolean> {\n const dirty: Record<string, boolean> = {};\n for (const [id, visible] of Object.entries(visibility)) {\n if (visible !== (defaults[id] ?? true)) {\n dirty[id] = visible;\n }\n }\n return dirty;\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","import React from 'react';\nimport {\n Box,\n BoxProps,\n Collapse,\n Typography,\n TypographyProps,\n type AlertColor,\n} from '@mui/material';\nimport {\n ErrorStatusIcon,\n InfoStatusIcon,\n SuccessStatusIcon,\n WarningStatusIcon,\n} from '@bwp-web/assets';\n\nexport type BiampBannerProps = {\n show: boolean;\n children: React.ReactNode;\n severity: AlertColor;\n};\n\n/**\n * A full-width notification banner that slides in/out with a Collapse animation.\n * Uses MUI's AlertColor severity to set background and text colors from the theme.\n * Compose with `BiampBannerIcon`, `BiampBannerContent`, and `BiampBannerActions`.\n */\nexport function BiampBanner({ show, children, severity }: BiampBannerProps) {\n return (\n <Collapse in={show} unmountOnExit component=\"aside\">\n <Box\n bgcolor={({ palette }) => palette.background[severity]}\n display=\"flex\"\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={1}\n px={{ xs: 2, sm: 2.5 }}\n minHeight={48}\n sx={{\n borderBottom: ({ palette }) =>\n `0.6px solid ${palette[severity].main}`,\n }}\n >\n {children}\n </Box>\n </Collapse>\n );\n}\n\n// NOTE: we're using the same icon mapping as the `Alert` component.\nconst iconMapping: Record<AlertColor, React.ReactNode> = {\n error: <ErrorStatusIcon color=\"error\" sx={{ width: 14, height: 14 }} />,\n warning: <WarningStatusIcon color=\"warning\" sx={{ width: 16, height: 14 }} />,\n success: <SuccessStatusIcon color=\"success\" sx={{ width: 14, height: 14 }} />,\n info: <InfoStatusIcon color=\"info\" sx={{ width: 14, height: 14 }} />,\n};\n\nexport type BiampBannerIconProps = {\n severity?: AlertColor;\n children?: React.ReactNode;\n};\n\n/**\n * Icon slot for `BiampBanner`. Pass a `severity` to render the matching\n * default icon, or pass `children` to render a custom icon.\n */\nexport function BiampBannerIcon({ severity, children }: BiampBannerIconProps) {\n return <>{severity ? iconMapping[severity] : children}</>;\n}\n\n/**\n * Content slot for `BiampBanner`. Text is centered by default.\n */\nexport function BiampBannerContent({ children, ...props }: TypographyProps) {\n return (\n <Typography textAlign=\"center\" variant=\"h3\" {...props}>\n {children}\n </Typography>\n );\n}\n\n/**\n * Actions slot for `BiampBanner`. Renders children in a horizontal flex row\n * with 8px gap, aligned to the trailing edge of the banner.\n */\nexport function BiampBannerActions({ children, ...props }: BoxProps) {\n return (\n <Box display=\"flex\" gap={1} alignItems=\"center\" {...props}>\n {children}\n </Box>\n );\n}\n","import { Button, ButtonProps, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\n\ntype Props = ButtonProps & {\n children: React.ReactNode;\n active?: boolean;\n small?: boolean;\n component?: React.ElementType;\n};\n\nexport function SegmentedButton({\n children,\n active,\n small,\n sx,\n ...props\n}: Props) {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const backgroundColor = active\n ? isDarkMode\n ? theme.palette.grey[900]\n : theme.palette.common.white\n : 'transparent';\n const textColor = active\n ? theme.palette.text.primary\n : theme.palette.text.secondary;\n const border = active ? 'solid' : undefined;\n return (\n <Button\n sx={{\n backgroundColor,\n color: textColor,\n borderRadius: '4px',\n border,\n borderColor: 'divider',\n lineHeight: 1.5,\n px: 1.5,\n py: 0,\n height: small ? '22px' : '26px',\n ...(small && { fontSize: '12px', letterSpacing: '-0.24px' }),\n boxShadow: active\n ? `0 1px 2px 0 ${alpha(theme.palette.common.black, 0.05)} !important`\n : 'none !important',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Button>\n );\n}\n","import { Stack, StackProps, useTheme } from '@mui/material';\n\ntype Props = StackProps & {\n children: React.ReactNode[];\n component?: React.ElementType;\n};\n\nexport function SegmentedButtonGroup({ children, sx, ...props }: Props) {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n return (\n <Stack\n direction=\"row\"\n p={0.5}\n borderRadius=\"6px\"\n gap={1}\n sx={{\n backgroundColor: isDarkMode\n ? theme.palette.grey[800]\n : theme.palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import React, { createContext, forwardRef, useContext } from 'react';\nimport {\n Autocomplete,\n AutocompleteProps,\n Box,\n Chip,\n InputAdornment,\n Paper,\n PaperProps,\n TextField,\n Typography,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { KeyArrowDownIcon, KeyArrowUpIcon, SearchIcon } from '@bwp-web/assets';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface BiampGlobalSearchOption {\n icon?: React.ReactNode;\n title: string;\n subtitle?: string;\n associatedItems?: { label: string }[];\n endIcon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport type BiampGlobalSearchProps = Omit<\n AutocompleteProps<BiampGlobalSearchOption, false, false, true>,\n 'renderInput' | 'renderOption' | 'PaperComponent'\n> & {\n placeholder?: string;\n noResultsText?: string;\n inputSx?: SxProps<Theme>;\n clearOnSelect?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// SearchContext\n// ---------------------------------------------------------------------------\n\nconst SearchContext = createContext<{\n hasOptions: boolean;\n loading: boolean;\n noResultsText: string;\n query: string;\n}>({\n hasOptions: true,\n loading: false,\n noResultsText: 'No results found',\n query: '',\n});\n\n// ---------------------------------------------------------------------------\n// KeyCap — keyboard key visual wrapper\n// ---------------------------------------------------------------------------\n\nfunction KeyCap({\n children,\n variant = 'icon',\n}: {\n children: React.ReactNode;\n variant?: 'icon' | 'text';\n}) {\n return (\n <Box\n component=\"kbd\"\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 20,\n height: 20,\n px: variant === 'text' ? '8px' : 0.5,\n borderRadius: '4px',\n bgcolor: 'grey.100',\n color: 'grey.400',\n fontFamily: 'inherit',\n fontSize: 'caption.fontSize',\n fontStyle: 'normal',\n fontWeight: (theme: Theme) => theme.typography.fontWeightMedium,\n border: 'none',\n '& svg': { width: 12, height: 12 },\n }}\n >\n {children}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearchPaper\n// ---------------------------------------------------------------------------\n\nconst BiampGlobalSearchPaper = forwardRef<HTMLDivElement, PaperProps>(\n function BiampGlobalSearchPaper({ children, ...props }, ref) {\n const { hasOptions, loading, noResultsText } = useContext(SearchContext);\n\n return (\n <Paper ref={ref} {...props}>\n {hasOptions || loading ? (\n children\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ px: 2, py: 1.5 }}\n >\n {noResultsText}\n </Typography>\n )}\n {hasOptions && (\n <Box\n sx={{\n borderTop: ({ palette }) =>\n `0.6px solid ${palette.dividers.secondary}`,\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n p: 1.5,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <KeyCap>\n <KeyArrowDownIcon />\n </KeyCap>\n <KeyCap>\n <KeyArrowUpIcon />\n </KeyCap>\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={(theme) => theme.typography.fontWeightMedium}\n color=\"text.secondary\"\n >\n Select\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <KeyCap variant=\"text\">Enter</KeyCap>\n <Typography\n variant=\"caption\"\n fontWeight={(theme) => theme.typography.fontWeightMedium}\n color=\"text.secondary\"\n >\n Open\n </Typography>\n </Box>\n </Box>\n )}\n </Paper>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// HighlightText\n// ---------------------------------------------------------------------------\n\nfunction HighlightText({ text, query }: { text: string; query: string }) {\n if (!query) return <>{text}</>;\n\n const index = text.toLowerCase().indexOf(query.toLowerCase());\n if (index === -1) return <>{text}</>;\n\n const before = text.slice(0, index);\n const match = text.slice(index, index + query.length);\n const after = text.slice(index + query.length);\n\n return (\n <>\n {before}\n <Box\n component=\"span\"\n sx={{\n bgcolor: 'background.info',\n borderRadius: '4px',\n color: 'info.main',\n paddingTop: '2px',\n paddingBottom: '2px',\n }}\n >\n {match}\n </Box>\n {after}\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearchListItem\n// ---------------------------------------------------------------------------\n\nfunction BiampGlobalSearchListItem({\n option,\n props: liProps,\n}: {\n option: BiampGlobalSearchOption;\n props: React.HTMLAttributes<HTMLLIElement> & { key?: React.Key };\n}) {\n const { query } = useContext(SearchContext);\n const { key, ...rest } = liProps;\n const maxChips = 3;\n const chips = option.associatedItems?.slice(0, maxChips) ?? [];\n const overflow = (option.associatedItems?.length ?? 0) - maxChips;\n\n return (\n <li\n key={key}\n {...rest}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n gap: 8,\n ...rest.style,\n }}\n >\n {option.icon && (\n <Box\n sx={{\n width: 24,\n height: 24,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {option.icon}\n </Box>\n )}\n\n <Typography variant=\"body2\" noWrap sx={{ flexShrink: 0 }}>\n <HighlightText text={option.title} query={query} />\n </Typography>\n\n {option.subtitle && (\n <Typography\n className=\"hoverContent\"\n variant=\"body2\"\n color=\"text.secondary\"\n noWrap\n sx={{ flexShrink: 1, minWidth: 0, display: 'none' }}\n >\n {option.subtitle}\n </Typography>\n )}\n\n {chips.length > 0 && (\n <Box\n className=\"hoverContent\"\n sx={{\n display: 'none',\n alignItems: 'center',\n gap: 1,\n ml: 'auto',\n flexShrink: 0,\n px: 2,\n }}\n >\n {chips.map((item, i) => (\n <Chip\n key={i}\n size=\"small\"\n label={item.label}\n sx={{\n bgcolor: 'background.info',\n borderRadius: '2px',\n borderColor: ({ palette }: Theme) => palette.dividers.primary,\n padding: '0px 6px',\n '& .MuiChip-label': {\n typography: 'caption',\n fontWeight: (theme: Theme) =>\n theme.typography.fontWeightMedium,\n },\n }}\n />\n ))}\n {overflow > 0 && (\n <Chip\n size=\"small\"\n label={`+${overflow}`}\n sx={{\n bgcolor: 'background.info',\n borderRadius: '2px',\n borderColor: ({ palette }: Theme) => palette.dividers.primary,\n padding: '0px 6px',\n '& .MuiChip-label': {\n typography: 'caption',\n fontWeight: (theme: Theme) =>\n theme.typography.fontWeightMedium,\n },\n }}\n />\n )}\n </Box>\n )}\n\n {option.endIcon && (\n <Box\n className=\"endIcon\"\n sx={{\n width: 48,\n height: 48,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ml: chips.length > 0 ? 0 : 'auto',\n visibility: 'hidden',\n '& .MuiSvgIcon-root': { fontSize: 14 },\n }}\n >\n {option.endIcon}\n </Box>\n )}\n </li>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearch\n// ---------------------------------------------------------------------------\n\nexport function BiampGlobalSearch({\n placeholder = 'Search...',\n noResultsText = 'No results found',\n options = [],\n inputValue: inputValueProp,\n loading = false,\n clearOnSelect = true,\n onChange,\n onInputChange,\n ...props\n}: BiampGlobalSearchProps) {\n const hasOptions = options.length > 0;\n\n const handleChange: typeof onChange = (event, value, reason, details) => {\n if (value && typeof value !== 'string' && value.onClick) {\n value.onClick();\n }\n onChange?.(event, value, reason, details);\n };\n\n const handleInputChange: typeof onInputChange = (event, value, reason) => {\n if (clearOnSelect && (reason === 'selectOption' || reason === 'reset')) {\n onInputChange?.(event, '', reason);\n return;\n }\n onInputChange?.(event, value, reason);\n };\n\n return (\n <SearchContext.Provider\n value={{\n hasOptions,\n loading,\n noResultsText,\n query: inputValueProp ?? '',\n }}\n >\n <Autocomplete<BiampGlobalSearchOption, false, false, true>\n options={options}\n inputValue={inputValueProp}\n loading={loading}\n onChange={handleChange}\n onInputChange={handleInputChange}\n loadingText={\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading…\n </Typography>\n }\n freeSolo\n filterOptions={(x) => x}\n getOptionLabel={(option) =>\n typeof option === 'string' ? option : option.title\n }\n noOptionsText={noResultsText}\n slots={{ paper: BiampGlobalSearchPaper }}\n slotProps={{\n listbox: {\n sx: {\n '& .MuiAutocomplete-option': {\n paddingRight: '0px !important',\n },\n '& li:hover .hoverContent, & li.Mui-focused .hoverContent': {\n display: 'flex',\n },\n '& li:hover p.hoverContent, & li.Mui-focused p.hoverContent': {\n display: 'block',\n },\n '& li:hover .endIcon, & li.Mui-focused .endIcon': {\n visibility: 'visible',\n },\n },\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n placeholder={placeholder}\n fullWidth\n sx={{\n '& .MuiOutlinedInput-root': { padding: '0px !important' },\n '& .MuiInputBase-input': { paddingLeft: '8px !important' },\n '& .MuiOutlinedInput-root:not(:hover):not(.Mui-focused) .MuiOutlinedInput-notchedOutline':\n {\n border: 'none',\n },\n }}\n slotProps={{\n input: {\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n },\n }}\n />\n )}\n renderOption={(optionProps, option) => (\n <BiampGlobalSearchListItem\n key={optionProps.key}\n option={option as BiampGlobalSearchOption}\n props={optionProps}\n />\n )}\n {...props}\n />\n </SearchContext.Provider>\n );\n}\n","import { Box, BoxProps, Typography } from '@mui/material';\nimport { darken } from '@mui/material/styles';\nimport randomColor from 'randomcolor';\n\ntype Props = BoxProps & {\n name: string;\n id: string;\n};\n\nconst DEFAULT_SIZE = 40;\nconst DEFAULT_BORDER_RADIUS = 1.5;\nconst TEXT_RATIO = 0.4; // 16px (h3) / 40px default box\n\nexport function UserInitialsIcon({\n name,\n id,\n width = DEFAULT_SIZE,\n height = DEFAULT_SIZE,\n borderRadius = DEFAULT_BORDER_RADIUS,\n sx,\n ...props\n}: Props) {\n const userInitials = getInitials(name);\n const bgColor = randomColor({ luminosity: 'light', seed: id });\n const textColor = darken(randomColor({ luminosity: 'dark', seed: id }), 0.3);\n\n const size = typeof width === 'number' ? width : DEFAULT_SIZE;\n const fontSize = size * TEXT_RATIO;\n\n return (\n <Box\n minWidth={width}\n width={width}\n minHeight={height}\n height={height}\n borderRadius={borderRadius}\n bgcolor={bgColor}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n sx={{ ...sx }}\n {...props}\n >\n <Typography\n variant=\"h3\"\n color={textColor}\n sx={{\n userSelect: 'none',\n fontSize: size !== DEFAULT_SIZE ? `${fontSize}px` : undefined,\n }}\n >\n {userInitials}\n </Typography>\n </Box>\n );\n}\n\nconst getInitials = (name: string) => {\n if (!name) return '--';\n const words = name.trim().split(/\\s+/);\n\n const initials = words\n .filter(Boolean)\n .slice(0, 2)\n .map((word) => word[0].toUpperCase())\n .join('');\n\n return initials;\n};\n","import { SvgIcon, Skeleton, Box } from '@mui/material';\nimport type { SvgIconProps } from '@mui/material';\nimport { useEffect, useState } from 'react';\n\ninterface SvgCacheEntry {\n innerContent: string;\n viewBox: string | null;\n}\n\nconst svgCache = new Map<string, SvgCacheEntry>();\n\n/** Clear the internal SVG fetch cache. Useful for testing or forcing a refetch. */\nexport function clearDynamicSvgIconCache() {\n svgCache.clear();\n}\n\n/**\n * Replace all fill/stroke attribute values (except \"none\" and \"currentColor\")\n * with \"currentColor\" so the SVG inherits its color from CSS.\n */\nfunction applyCurrentColor(svg: string): string {\n return svg\n .replace(/fill=\"(?!none|currentColor)[^\"]*\"/g, 'fill=\"currentColor\"')\n .replace(/stroke=\"(?!none|currentColor)[^\"]*\"/g, 'stroke=\"currentColor\"');\n}\n\nexport interface UseDynamicSvgIconOptions {\n /**\n * When `true`, all `fill` and `stroke` attribute values (except `\"none\"` and\n * `\"currentColor\"`) are replaced with `\"currentColor\"`. This makes the SVG\n * fully themeable via the CSS `color` property or MUI's `sx={{ color }}`.\n *\n * @default false\n */\n replaceColors?: boolean;\n /** Called when the SVG loads successfully */\n onLoad?: () => void;\n /** Called when loading fails */\n onError?: (error: string) => void;\n}\n\nexport interface UseDynamicSvgIconResult {\n /** Whether the SVG is currently being fetched */\n loading: boolean;\n /** Error message if fetching failed, null otherwise */\n error: string | null;\n /** The inner SVG content (paths, groups, etc.) */\n svgContent: string | null;\n /** The viewBox extracted from the source SVG */\n svgViewBox: string | null;\n}\n\n/**\n * Hook that fetches an SVG from a URL and returns the parsed content.\n * The SVG is rendered as-is by default. Pass `replaceColors: true` to replace\n * all fill/stroke colors with `currentColor` for full theming support.\n * Results are cached in-memory so subsequent renders with the same URL are instant.\n *\n * @param url - URL of the SVG to fetch (supports any URL that `fetch` can handle, including data URLs)\n * @param options - Optional callbacks for load/error events\n * @returns Object with `loading`, `error`, `svgContent`, and `svgViewBox` fields\n *\n * @example\n * ```tsx\n * const { loading, error, svgContent, svgViewBox } = useDynamicSvgIcon(\n * 'https://example.com/icon.svg',\n * { onError: (msg) => console.warn(msg) },\n * );\n * ```\n */\nexport function useDynamicSvgIcon(\n url: string,\n options: UseDynamicSvgIconOptions = {},\n): UseDynamicSvgIconResult {\n const { replaceColors = false, onLoad, onError } = options;\n\n const transform = replaceColors ? applyCurrentColor : (s: string) => s;\n\n const [svgContent, setSvgContent] = useState<string | null>(() => {\n const cached = svgCache.get(url);\n return cached ? transform(cached.innerContent) : null;\n });\n const [svgViewBox, setSvgViewBox] = useState<string | null>(() => {\n const cached = svgCache.get(url);\n return cached?.viewBox ?? null;\n });\n const [loading, setLoading] = useState(() => !svgCache.has(url));\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!url) {\n setLoading(false);\n setError('No URL provided');\n setSvgContent(null);\n setSvgViewBox(null);\n return;\n }\n\n let cancelled = false;\n\n const cached = svgCache.get(url);\n if (cached) {\n setSvgContent(transform(cached.innerContent));\n setSvgViewBox(cached.viewBox);\n setLoading(false);\n setError(null);\n onLoad?.();\n return;\n }\n\n setLoading(true);\n setError(null);\n setSvgContent(null);\n setSvgViewBox(null);\n\n (async () => {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch SVG: ${response.status} ${response.statusText}`,\n );\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n const text = await response.text();\n\n if (!text.includes('<svg') && !contentType.includes('svg')) {\n throw new Error('Response is not an SVG');\n }\n\n const viewBoxMatch = text.match(/viewBox=\"([^\"]*)\"/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : null;\n\n const svgMatch = text.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const innerContent = svgMatch ? svgMatch[1] : text;\n\n svgCache.set(url, { innerContent, viewBox });\n\n if (!cancelled) {\n setSvgContent(transform(innerContent));\n setSvgViewBox(viewBox);\n setLoading(false);\n onLoad?.();\n }\n } catch (err) {\n if (!cancelled) {\n const message =\n err instanceof Error ? err.message : 'Failed to load SVG';\n setError(message);\n setLoading(false);\n onError?.(message);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n return { loading, error, svgContent, svgViewBox };\n}\n\nconst DEFAULT_SIZE = 24;\n\nexport interface DynamicSvgIconProps extends Omit<\n SvgIconProps,\n 'children' | 'onLoad' | 'onError' | 'width' | 'height'\n> {\n /** URL of the SVG to load */\n url: string;\n /** Fallback element shown when loading fails */\n fallback: React.ReactNode;\n /** Width in pixels — applied to icon, skeleton, and fallback (default: 24) */\n width?: number;\n /** Height in pixels — applied to icon, skeleton, and fallback (default: 24) */\n height?: number;\n /**\n * Replace all fill/stroke colors (except `\"none\"` and `\"currentColor\"`) with\n * `\"currentColor\"`, making the icon fully themeable via CSS `color`.\n * Set to `false` to preserve the SVG's original colors.\n *\n * @default false\n */\n replaceColors?: boolean;\n /** Skeleton shape shown during loading (default: 'circular') */\n skeletonVariant?: 'circular' | 'rectangular' | 'rounded';\n /** Skeleton animation type (default: 'pulse') */\n skeletonAnimation?: 'pulse' | 'wave' | false;\n /** Called when the SVG loads successfully */\n onLoad?: () => void;\n /** Called when loading fails */\n onError?: (error: string) => void;\n}\n\n/**\n * Renders an SVG icon fetched from a URL with a MUI Skeleton placeholder during\n * loading and a required fallback on error. The `width` and `height` props\n * control the dimensions of all three states (skeleton, icon, fallback).\n *\n * The SVG is rendered as-is — fill, stroke, and viewBox are preserved from the\n * source. Paths without an explicit fill will inherit `currentColor` from MUI\n * SvgIcon's CSS. Set `replaceColors` to force **all** fills and strokes to\n * `\"currentColor\"`, making the icon fully themeable via CSS `color`.\n *\n * Fetched SVGs are cached in-memory; the same URL will only be fetched once\n * per page session. Use {@link clearDynamicSvgIconCache} to force a refetch.\n *\n * @example\n * ```tsx\n * <DynamicSvgIcon\n * url=\"https://example.com/icon.svg\"\n * width={32}\n * height={32}\n * fallback={<BrokenImageIcon />}\n * onError={(msg) => console.warn(msg)}\n * />\n * ```\n */\nexport function DynamicSvgIcon({\n url,\n fallback,\n width = DEFAULT_SIZE,\n height = DEFAULT_SIZE,\n replaceColors,\n skeletonVariant = 'circular',\n skeletonAnimation = 'pulse',\n onLoad,\n onError,\n sx,\n ...svgIconProps\n}: DynamicSvgIconProps) {\n const { loading, error, svgContent, svgViewBox } = useDynamicSvgIcon(url, {\n replaceColors,\n onLoad,\n onError,\n });\n\n if (loading) {\n return (\n <Skeleton\n variant={skeletonVariant}\n animation={skeletonAnimation}\n sx={{ width, height }}\n />\n );\n }\n\n if (error || !svgContent) {\n return (\n <Box\n sx={{\n width,\n height,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n '& > svg, & > .MuiSvgIcon-root': {\n width: '100%',\n height: '100%',\n },\n }}\n >\n {fallback}\n </Box>\n );\n }\n\n return (\n <SvgIcon\n {...svgIconProps}\n {...(svgViewBox && { viewBox: svgViewBox })}\n sx={{\n ...(typeof sx === 'object' && sx !== null && !Array.isArray(sx)\n ? sx\n : undefined),\n width,\n height,\n }}\n >\n <g dangerouslySetInnerHTML={{ __html: svgContent }} />\n </SvgIcon>\n );\n}\n"],"mappings":"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","names":["randomColor","alpha","hex","Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","React","useRef","Stack","Typography","jsx","jsxs","jsx","jsx","Box","jsx","useRef","useState","jsx","jsxs","Box","React","useRef","Stack","jsx","IconButton","Tooltip","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","jsx","jsxs","useState","useEffect","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","Box","Collapse","Typography","Fragment","jsx","Button","alpha","jsx","Stack","useTheme","jsx","Box","InputAdornment","TextField","Typography","SearchIcon","Fragment","jsx","jsxs","BiampGlobalSearchPaper","Box","Typography","jsx","randomColor","Box","useEffect","useState","jsx","DEFAULT_SIZE"]}
1
+ {"version":3,"sources":["../../../node_modules/randomcolor/randomColor.js","../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/BiampTableRow.tsx","../src/BiampTable/BiampTableTruncatedCell.tsx","../src/BiampTable/slotProps.ts","../src/BiampTable/cellSx.ts","../src/BiampTable/BiampTableExpandGuidelines.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/useBiampServerSideTable.ts","../src/BiampTable/serverSideTableUtils.ts","../src/BiampTable/exportCsv.ts","../src/BiampBanner/BiampBanner.tsx","../src/BiampSegmentedButton/SegmentedButton.tsx","../src/BiampSegmentedButton/SegmentedButtonGroup.tsx","../src/BiampGlobalSearch/BiampGlobalSearch.tsx","../src/UserInitialsIcon/UserInitialsIcon.tsx","../src/DynamicSvgIcon/DynamicSvgIcon.tsx"],"sourcesContent":["// randomColor by David Merfield under the CC0 license\n// https://github.com/davidmerfield/randomColor/\n\n;(function(root, factory) {\n\n // Support CommonJS\n if (typeof exports === 'object') {\n var randomColor = factory();\n\n // Support NodeJS & Component, which allow module.exports to be a function\n if (typeof module === 'object' && module && module.exports) {\n exports = module.exports = randomColor;\n }\n\n // Support CommonJS 1.1.1 spec\n exports.randomColor = randomColor;\n\n // Support AMD\n } else if (typeof define === 'function' && define.amd) {\n define([], factory);\n\n // Support vanilla script loading\n } else {\n root.randomColor = factory();\n }\n\n}(this, function() {\n\n // Seed to get repeatable colors\n var seed = null;\n\n // Shared color dictionary\n var colorDictionary = {};\n\n // Populate the color dictionary\n loadColorBounds();\n\n // check if a range is taken\n var colorRanges = [];\n\n var randomColor = function (options) {\n\n options = options || {};\n\n // Check if there is a seed and ensure it's an\n // integer. Otherwise, reset the seed value.\n if (options.seed !== undefined && options.seed !== null && options.seed === parseInt(options.seed, 10)) {\n seed = options.seed;\n\n // A string was passed as a seed\n } else if (typeof options.seed === 'string') {\n seed = stringToInteger(options.seed);\n\n // Something was passed as a seed but it wasn't an integer or string\n } else if (options.seed !== undefined && options.seed !== null) {\n throw new TypeError('The seed value must be an integer or string');\n\n // No seed, reset the value outside.\n } else {\n seed = null;\n }\n\n var H,S,B;\n\n // Check if we need to generate multiple colors\n if (options.count !== null && options.count !== undefined) {\n\n var totalColors = options.count,\n colors = [];\n // Value false at index i means the range i is not taken yet.\n for (var i = 0; i < options.count; i++) {\n colorRanges.push(false)\n }\n options.count = null;\n\n while (totalColors > colors.length) {\n\n var color = randomColor(options);\n\n if (seed !== null) {\n options.seed = seed;\n }\n\n colors.push(color);\n }\n\n options.count = totalColors;\n\n return colors;\n }\n\n // First we pick a hue (H)\n H = pickHue(options);\n\n // Then use H to determine saturation (S)\n S = pickSaturation(H, options);\n\n // Then use S and H to determine brightness (B).\n B = pickBrightness(H, S, options);\n\n // Then we return the HSB color in the desired format\n return setFormat([H,S,B], options);\n };\n\n function pickHue(options) {\n if (colorRanges.length > 0) {\n var hueRange = getRealHueRange(options.hue)\n\n var hue = randomWithin(hueRange)\n\n //Each of colorRanges.length ranges has a length equal approximatelly one step\n var step = (hueRange[1] - hueRange[0]) / colorRanges.length\n\n var j = parseInt((hue - hueRange[0]) / step)\n\n //Check if the range j is taken\n if (colorRanges[j] === true) {\n j = (j + 2) % colorRanges.length\n }\n else {\n colorRanges[j] = true\n }\n\n var min = (hueRange[0] + j * step) % 359,\n max = (hueRange[0] + (j + 1) * step) % 359;\n\n hueRange = [min, max]\n\n hue = randomWithin(hueRange)\n\n if (hue < 0) {hue = 360 + hue;}\n return hue\n }\n else {\n var hueRange = getHueRange(options.hue)\n\n hue = randomWithin(hueRange);\n // Instead of storing red as two seperate ranges,\n // we group them, using negative numbers\n if (hue < 0) {\n hue = 360 + hue;\n }\n\n return hue;\n }\n }\n\n function pickSaturation (hue, options) {\n\n if (options.hue === 'monochrome') {\n return 0;\n }\n\n if (options.luminosity === 'random') {\n return randomWithin([0,100]);\n }\n\n var saturationRange = getSaturationRange(hue);\n\n var sMin = saturationRange[0],\n sMax = saturationRange[1];\n\n switch (options.luminosity) {\n\n case 'bright':\n sMin = 55;\n break;\n\n case 'dark':\n sMin = sMax - 10;\n break;\n\n case 'light':\n sMax = 55;\n break;\n }\n\n return randomWithin([sMin, sMax]);\n\n }\n\n function pickBrightness (H, S, options) {\n\n var bMin = getMinimumBrightness(H, S),\n bMax = 100;\n\n switch (options.luminosity) {\n\n case 'dark':\n bMax = bMin + 20;\n break;\n\n case 'light':\n bMin = (bMax + bMin)/2;\n break;\n\n case 'random':\n bMin = 0;\n bMax = 100;\n break;\n }\n\n return randomWithin([bMin, bMax]);\n }\n\n function setFormat (hsv, options) {\n\n switch (options.format) {\n\n case 'hsvArray':\n return hsv;\n\n case 'hslArray':\n return HSVtoHSL(hsv);\n\n case 'hsl':\n var hsl = HSVtoHSL(hsv);\n return 'hsl('+hsl[0]+', '+hsl[1]+'%, '+hsl[2]+'%)';\n\n case 'hsla':\n var hslColor = HSVtoHSL(hsv);\n var alpha = options.alpha || Math.random();\n return 'hsla('+hslColor[0]+', '+hslColor[1]+'%, '+hslColor[2]+'%, ' + alpha + ')';\n\n case 'rgbArray':\n return HSVtoRGB(hsv);\n\n case 'rgb':\n var rgb = HSVtoRGB(hsv);\n return 'rgb(' + rgb.join(', ') + ')';\n\n case 'rgba':\n var rgbColor = HSVtoRGB(hsv);\n var alpha = options.alpha || Math.random();\n return 'rgba(' + rgbColor.join(', ') + ', ' + alpha + ')';\n\n default:\n return HSVtoHex(hsv);\n }\n\n }\n\n function getMinimumBrightness(H, S) {\n\n var lowerBounds = getColorInfo(H).lowerBounds;\n\n for (var i = 0; i < lowerBounds.length - 1; i++) {\n\n var s1 = lowerBounds[i][0],\n v1 = lowerBounds[i][1];\n\n var s2 = lowerBounds[i+1][0],\n v2 = lowerBounds[i+1][1];\n\n if (S >= s1 && S <= s2) {\n\n var m = (v2 - v1)/(s2 - s1),\n b = v1 - m*s1;\n\n return m*S + b;\n }\n\n }\n\n return 0;\n }\n\n function getHueRange (colorInput) {\n\n if (typeof parseInt(colorInput) === 'number') {\n\n var number = parseInt(colorInput);\n\n if (number < 360 && number > 0) {\n return [number, number];\n }\n\n }\n\n if (typeof colorInput === 'string') {\n\n if (colorDictionary[colorInput]) {\n var color = colorDictionary[colorInput];\n if (color.hueRange) {return color.hueRange;}\n } else if (colorInput.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)) {\n var hue = HexToHSB(colorInput)[0];\n return [ hue, hue ];\n }\n }\n\n return [0,360];\n\n }\n\n function getSaturationRange (hue) {\n return getColorInfo(hue).saturationRange;\n }\n\n function getColorInfo (hue) {\n\n // Maps red colors to make picking hue easier\n if (hue >= 334 && hue <= 360) {\n hue-= 360;\n }\n\n for (var colorName in colorDictionary) {\n var color = colorDictionary[colorName];\n if (color.hueRange &&\n hue >= color.hueRange[0] &&\n hue <= color.hueRange[1]) {\n return colorDictionary[colorName];\n }\n } return 'Color not found';\n }\n\n function randomWithin (range) {\n if (seed === null) {\n //generate random evenly destinct number from : https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n var golden_ratio = 0.618033988749895\n var r=Math.random()\n r += golden_ratio\n r %= 1\n return Math.floor(range[0] + r*(range[1] + 1 - range[0]));\n } else {\n //Seeded random algorithm from http://indiegamr.com/generate-repeatable-random-numbers-in-js/\n var max = range[1] || 1;\n var min = range[0] || 0;\n seed = (seed * 9301 + 49297) % 233280;\n var rnd = seed / 233280.0;\n return Math.floor(min + rnd * (max - min));\n}\n }\n\n function HSVtoHex (hsv){\n\n var rgb = HSVtoRGB(hsv);\n\n function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n }\n\n var hex = '#' + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]);\n\n return hex;\n\n }\n\n function defineColor (name, hueRange, lowerBounds) {\n\n var sMin = lowerBounds[0][0],\n sMax = lowerBounds[lowerBounds.length - 1][0],\n\n bMin = lowerBounds[lowerBounds.length - 1][1],\n bMax = lowerBounds[0][1];\n\n colorDictionary[name] = {\n hueRange: hueRange,\n lowerBounds: lowerBounds,\n saturationRange: [sMin, sMax],\n brightnessRange: [bMin, bMax]\n };\n\n }\n\n function loadColorBounds () {\n\n defineColor(\n 'monochrome',\n null,\n [[0,0],[100,0]]\n );\n\n defineColor(\n 'red',\n [-26,18],\n [[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]\n );\n\n defineColor(\n 'orange',\n [18,46],\n [[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]\n );\n\n defineColor(\n 'yellow',\n [46,62],\n [[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]\n );\n\n defineColor(\n 'green',\n [62,178],\n [[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]\n );\n\n defineColor(\n 'blue',\n [178, 257],\n [[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]\n );\n\n defineColor(\n 'purple',\n [257, 282],\n [[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]\n );\n\n defineColor(\n 'pink',\n [282, 334],\n [[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]\n );\n\n }\n\n function HSVtoRGB (hsv) {\n\n // this doesn't work for the values of 0 and 360\n // here's the hacky fix\n var h = hsv[0];\n if (h === 0) {h = 1;}\n if (h === 360) {h = 359;}\n\n // Rebase the h,s,v values\n h = h/360;\n var s = hsv[1]/100,\n v = hsv[2]/100;\n\n var h_i = Math.floor(h*6),\n f = h * 6 - h_i,\n p = v * (1 - s),\n q = v * (1 - f*s),\n t = v * (1 - (1 - f)*s),\n r = 256,\n g = 256,\n b = 256;\n\n switch(h_i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n }\n\n var result = [Math.floor(r*255), Math.floor(g*255), Math.floor(b*255)];\n return result;\n }\n\n function HexToHSB (hex) {\n hex = hex.replace(/^#/, '');\n hex = hex.length === 3 ? hex.replace(/(.)/g, '$1$1') : hex;\n\n var red = parseInt(hex.substr(0, 2), 16) / 255,\n green = parseInt(hex.substr(2, 2), 16) / 255,\n blue = parseInt(hex.substr(4, 2), 16) / 255;\n\n var cMax = Math.max(red, green, blue),\n delta = cMax - Math.min(red, green, blue),\n saturation = cMax ? (delta / cMax) : 0;\n\n switch (cMax) {\n case red: return [ 60 * (((green - blue) / delta) % 6) || 0, saturation, cMax ];\n case green: return [ 60 * (((blue - red) / delta) + 2) || 0, saturation, cMax ];\n case blue: return [ 60 * (((red - green) / delta) + 4) || 0, saturation, cMax ];\n }\n }\n\n function HSVtoHSL (hsv) {\n var h = hsv[0],\n s = hsv[1]/100,\n v = hsv[2]/100,\n k = (2-s)*v;\n\n return [\n h,\n Math.round(s*v / (k<1 ? k : 2-k) * 10000) / 100,\n k/2 * 100\n ];\n }\n\n function stringToInteger (string) {\n var total = 0\n for (var i = 0; i !== string.length; i++) {\n if (total >= Number.MAX_SAFE_INTEGER) break;\n total += string.charCodeAt(i)\n }\n return total\n }\n\n // get The range of given hue when options.count!=0\n function getRealHueRange(colorHue)\n { if (!isNaN(colorHue)) {\n var number = parseInt(colorHue);\n\n if (number < 360 && number > 0) {\n return getColorInfo(colorHue).hueRange\n }\n }\n else if (typeof colorHue === 'string') {\n\n if (colorDictionary[colorHue]) {\n var color = colorDictionary[colorHue];\n\n if (color.hueRange) {\n return color.hueRange\n }\n } else if (colorHue.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)) {\n var hue = HexToHSB(colorHue)[0]\n return getColorInfo(hue).hueRange\n }\n }\n\n return [0,360]\n}\n return randomColor;\n}));\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX, ReactNode } from 'react';\nimport { BiampRedLogo, ExternalLinkIcon, 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\nconst POPOVER_MAX_WIDTH = 530;\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: 'right' }}\n transformOrigin={{ vertical: -8, horizontal: POPOVER_MAX_WIDTH - 4 }}\n sx={{ ...sx }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n outlineWidth: '0.6px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n maxWidth: POPOVER_MAX_WIDTH,\n width: '100%',\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampBuildAppContentProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampBuildAppContent({\n children,\n sx,\n ...props\n}: BiampBuildAppContentProps) {\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 1.5,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampBuildAppContentItemProps = StackProps & {\n image: ReactNode;\n name: string;\n description: string;\n button?: ReactNode;\n};\n\nexport function BiampBuildAppContentItem({\n image,\n name,\n description,\n button,\n sx,\n ...props\n}: BiampBuildAppContentItemProps) {\n return (\n <Stack\n direction=\"column\"\n position=\"relative\"\n sx={{\n p: 1.5,\n borderRadius: 1.5,\n outlineWidth: '1px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n ...sx,\n }}\n {...props}\n >\n <Box sx={{ width: 54, height: 54 }} mb={0.5}>\n {image}\n </Box>\n <Typography variant=\"caption\" fontWeight={600} mb={0.5}>\n {name}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {description}\n </Typography>\n {button && (\n <Box position=\"absolute\" top=\"12px\" right=\"12px\">\n {button}\n </Box>\n )}\n </Stack>\n );\n}\n\ntype BiampEndUserAppContentProps = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampEndUserAppContent({\n children,\n sx,\n ...props\n}: BiampEndUserAppContentProps) {\n return (\n <Stack\n direction=\"column\"\n sx={{\n gap: 1.5,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampEndUserAppContentItemProps = StackProps & {\n image: ReactNode;\n name: string;\n description: string;\n href?: string;\n target?: string;\n};\n\nexport function BiampEndUserAppContentItem({\n image,\n name,\n description,\n href,\n target,\n sx,\n ...props\n}: BiampEndUserAppContentItemProps) {\n return (\n <Stack\n component={href ? 'a' : 'div'}\n href={href}\n target={target}\n direction=\"row\"\n alignItems=\"center\"\n sx={{\n gap: 1.5,\n p: 1.5,\n borderRadius: 1.5,\n outlineWidth: '1px',\n outlineStyle: 'solid',\n outlineColor: ({ palette }) => palette.divider,\n textDecoration: 'none',\n color: 'inherit',\n cursor: href ? 'pointer' : undefined,\n ...sx,\n }}\n {...props}\n >\n <Box sx={{ width: 32, height: 32 }}>{image}</Box>\n <Stack direction=\"column\">\n <Typography variant=\"caption\" fontWeight={600}>\n {name}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {description}\n </Typography>\n </Stack>\n <ExternalLinkIcon sx={{ width: 16, height: 16, ml: 'auto' }} />\n </Stack>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image?: string;\n children?: ReactNode;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n children,\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 {image ? (\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 ) : (\n children\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 type TableBodyProps as MuiTableBodyProps,\n TableCell,\n type TableCellProps as MuiTableCellProps,\n TableContainer,\n TableHead,\n type TableHeadProps as MuiTableHeadProps,\n type TableProps as MuiTableProps,\n TableRow,\n type TableRowProps as MuiTableRowProps,\n TableSortLabel,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport {\n flexRender,\n type Cell,\n type Header,\n type Row,\n type Table,\n} from '@tanstack/react-table';\nimport { type ReactNode, useEffect, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport { BiampTableRow } from './BiampTableRow';\nimport { useLoadingDelay } from './useLoadingDelay';\nimport { mergeSx, resolveSlot, type SlotPropsOrFn } from './slotProps';\nimport { cellSx } from './cellSx';\n\n// ── Slot props ─────────────────────────────────────────────────────\n\nexport type BiampTableSlotProps<TData> = {\n /** Props merged onto the MUI `<Table>`. `sx` composes with defaults. */\n table?: MuiTableProps;\n /** Props merged onto the `<TableHead>`. `sx` composes with defaults. */\n head?: MuiTableHeadProps;\n /** Props merged onto the `<TableBody>`. `sx` composes with defaults. */\n body?: MuiTableBodyProps;\n /** Props merged onto the header `<TableRow>`. `sx` composes with defaults. */\n headerRow?: MuiTableRowProps;\n /** Props merged onto each header `<TableCell>`. Pass a function for per-column overrides. `sx` composes with defaults. */\n headerCell?: SlotPropsOrFn<\n MuiTableCellProps,\n { header: Header<TData, unknown> }\n >;\n /** Props merged onto each body `<TableRow>`. Pass a function for per-row overrides. `sx` composes with defaults. */\n row?: SlotPropsOrFn<MuiTableRowProps, { row: Row<TData> }>;\n /** Props merged onto each body `<TableCell>`. Pass a function for per-cell overrides. `sx` composes with defaults. */\n cell?: SlotPropsOrFn<MuiTableCellProps, { cell: Cell<TData, unknown> }>;\n};\n\n// ── Row-click props ────────────────────────────────────────────────\ntype RowClickProps<TData> =\n | {\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.\n */\n isRowClickable?: (row: TData) => boolean;\n }\n | {\n onRowClick?: undefined;\n isRowClickable?: never;\n };\n\n// ── Selection + expanding props ────────────────────────────────────\ntype SelectionExpandingProps = {\n /** When true, renders a checkbox column for row selection. */\n enableRowSelection?: boolean;\n /** When true, renders an expand/collapse toggle column for rows that have sub-rows. */\n enableExpanding?: boolean;\n /** When true with `enableExpanding`, all rows stay expanded and the expand/collapse toggles are not rendered. */\n alwaysExpanded?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. Only applies when `enableRowSelection` is true. */\n hideSelectAll?: boolean;\n /** When true, selecting a parent row also selects/deselects its children. Only applies when both `enableRowSelection` and `enableExpanding` are true. @default false */\n selectChildrenWithParent?: boolean;\n /** When true, draws non-interactive tree-style guidelines connecting parent rows to their child rows. Only applies when `alwaysExpanded` is also true. */\n showExpandGuidelines?: boolean;\n};\n\nexport type BiampTableProps<TData> = BoxProps &\n RowClickProps<TData> &\n SelectionExpandingProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\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 /** 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 * Returns a background color for a row (any valid CSS color). Applied to\n * the row and to all sticky cells (selection column, sticky action columns)\n * so the row reads as a single tinted band. Hover and selected backgrounds\n * override the custom color — whatever the theme defines for those states\n * wins. Use opaque colors so sticky cells fully cover scrolled content.\n * Return `undefined` to leave a row at its default color.\n */\n setRowColor?: (row: TData) => string | undefined;\n /**\n * Per-slot props merged onto the internal MUI elements (`table`, `head`, `body`,\n * `headerRow`, `headerCell`, `row`, `cell`). `sx` composes with the defaults\n * instead of replacing them. `row`, `cell`, and `headerCell` accept a function\n * of the row/cell/header for data-aware overrides — memoize these callbacks to\n * avoid breaking row memoization.\n */\n slotProps?: BiampTableSlotProps<TData>;\n };\n\n// ── Local sx helpers ─────────────────────────────────────────────\n\nconst overlaySx = {\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} as const;\n\nconst headerSelectionCellSx = {\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n} as const;\n\nconst checkboxHiddenHeaderSx = { visibility: 'hidden' } as const;\n\n// ── Component ────────────────────────────────────────────────────\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n enableExpanding = false,\n alwaysExpanded = false,\n hideSelectAll,\n selectChildrenWithParent = false,\n showExpandGuidelines = false,\n getRowLabel,\n setRowColor,\n slotProps,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n const { sx: userTableSx, ...restTableSlotProps } = slotProps?.table ?? {};\n const { sx: userHeadSx, ...restHeadSlotProps } = slotProps?.head ?? {};\n const { sx: userBodySx, ...restBodySlotProps } = slotProps?.body ?? {};\n const { sx: userHeaderRowSx, ...restHeaderRowSlotProps } =\n slotProps?.headerRow ?? {};\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\n useEffect(() => {\n if (enableExpanding && alwaysExpanded) {\n table.toggleAllRowsExpanded(true);\n }\n }, [enableExpanding, alwaysExpanded, table]);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const hasExpandableRows =\n enableExpanding && rows.some((r) => r.getCanExpand());\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 sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n position: 'relative',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n {...restTableSlotProps}\n sx={mergeSx(\n { minWidth: tableMinWidth, tableLayout: 'auto' },\n userTableSx,\n )}\n >\n <TableHead {...restHeadSlotProps} sx={mergeSx(userHeadSx)}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow\n key={headerGroup.id}\n {...restHeaderRowSlotProps}\n sx={mergeSx(userHeaderRowSx)}\n >\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={headerSelectionCellSx}>\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n sx={\n rows.length === 0 ? checkboxHiddenHeaderSx : undefined\n }\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 const resolvedHeaderCell = resolveSlot(slotProps?.headerCell, {\n header,\n });\n const { sx: userHeaderCellSx, ...restHeaderCellProps } =\n resolvedHeaderCell ?? {};\n return (\n <TableCell\n key={header.id}\n {...restHeaderCellProps}\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={mergeSx(\n cellSx(sticky, header.column.columnDef.meta?.minWidth, 3),\n userHeaderCellSx,\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\n {...restBodySlotProps}\n sx={mergeSx({ opacity: showLoading ? 0.3 : 1 }, userBodySx)}\n >\n {!showError &&\n rows.map((row) => (\n <BiampTableRow\n key={row.id}\n row={row}\n isExpanded={row.getIsExpanded()}\n isSelected={row.getIsSelected()}\n onRowClick={onRowClick}\n isRowClickable={isRowClickable}\n enableRowSelection={enableRowSelection}\n enableExpanding={enableExpanding}\n alwaysExpanded={alwaysExpanded}\n selectChildrenWithParent={selectChildrenWithParent}\n showExpandGuidelines={showExpandGuidelines}\n getRowLabel={getRowLabel}\n hasExpandableRows={hasExpandableRows}\n customColor={setRowColor?.(row.original)}\n rowSlotProps={slotProps?.row}\n cellSlotProps={slotProps?.cell}\n />\n ))}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box sx={overlaySx}>\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 sx={overlaySx}>\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={1.5} {...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 {\n Box,\n Checkbox,\n IconButton,\n TableCell,\n type TableCellProps as MuiTableCellProps,\n TableRow,\n type TableRowProps as MuiTableRowProps,\n} from '@mui/material';\nimport { ChevronDownIcon, ChevronRightIcon } from '@bwp-web/assets';\nimport { flexRender, type Cell, type Row } from '@tanstack/react-table';\nimport React, { type ReactNode } from 'react';\nimport { BiampTableTruncatedCell } from './BiampTableTruncatedCell';\nimport { mergeSx, resolveSlot, type SlotPropsOrFn } from './slotProps';\nimport { cellSx, stickyHoverBg } from './cellSx';\nimport { ExpandGuidelines } from './BiampTableExpandGuidelines';\n\n// ── Hoisted sx (avoid re-creating per row per render) ───────────\n\nconst rowCursorPointerSx = { cursor: 'pointer' } as const;\n\nconst selectionCellSx = {\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n ...stickyHoverBg,\n} as const;\n\nconst checkboxHiddenSx = { visibility: 'hidden' } as const;\n\nconst expandCellBaseSx = {\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n} as const;\n\nconst expandPlaceholderSx = { width: 28 } as const;\n\n// ── Expand chevron / placeholder ─────────────────────────────────\n\nfunction ExpandToggle<TData>({\n row,\n isExpanded,\n hasExpandableRows,\n rowLabel,\n}: {\n row: Row<TData>;\n isExpanded: boolean;\n hasExpandableRows: boolean;\n rowLabel: string;\n}) {\n if (row.getCanExpand()) {\n return (\n <IconButton\n variant=\"none\"\n onClick={(e) => {\n e.stopPropagation();\n row.toggleExpanded();\n }}\n aria-label={isExpanded ? `Collapse ${rowLabel}` : `Expand ${rowLabel}`}\n aria-expanded={isExpanded}\n >\n {isExpanded ? (\n <ChevronDownIcon\n variant=\"xs\"\n sx={{ color: ({ palette }) => palette.text.secondary }}\n />\n ) : (\n <ChevronRightIcon\n variant=\"xs\"\n sx={{ color: ({ palette }) => palette.text.secondary }}\n />\n )}\n </IconButton>\n );\n }\n if (hasExpandableRows) return <Box sx={expandPlaceholderSx} />;\n return null;\n}\n\n// ── Cell content rendering ───────────────────────────────────────\n// Walks the four cases — sticky / non-expand / always-expanded expand /\n// toggleable expand — top to bottom with early returns instead of nested\n// ternaries. Called once per cell from the row body.\n\nfunction renderCellContent<TData>({\n cell,\n row,\n isExpandCell,\n alwaysExpanded,\n isExpanded,\n hasExpandableRows,\n getRowLabel,\n}: {\n cell: Cell<TData, unknown>;\n row: Row<TData>;\n isExpandCell: boolean;\n alwaysExpanded: boolean;\n isExpanded: boolean;\n hasExpandableRows: boolean;\n getRowLabel?: (row: TData) => string;\n}): ReactNode {\n const sticky = cell.column.columnDef.meta?.sticky;\n const content = flexRender(cell.column.columnDef.cell, cell.getContext());\n\n if (sticky) return content;\n\n const truncate = cell.column.columnDef.meta?.truncate ?? true;\n const truncated = truncate ? (\n <BiampTableTruncatedCell>{content}</BiampTableTruncatedCell>\n ) : (\n content\n );\n\n if (!isExpandCell) return truncated;\n\n if (alwaysExpanded) {\n return row.depth > 0 ? (\n <Box sx={{ pl: `${row.depth * 28}px` }}>{truncated}</Box>\n ) : (\n truncated\n );\n }\n\n const rowLabel = getRowLabel\n ? getRowLabel(row.original)\n : `row ${row.index + 1}`;\n\n return (\n <Box\n sx={\n row.depth > 0\n ? { ...expandCellBaseSx, pl: `${row.depth * 12}px` }\n : expandCellBaseSx\n }\n >\n <ExpandToggle\n row={row}\n isExpanded={isExpanded}\n hasExpandableRows={hasExpandableRows}\n rowLabel={rowLabel}\n />\n {truncated}\n </Box>\n );\n}\n\n// ── Memoized row ─────────────────────────────────────────────────\n\nexport type BiampTableRowProps<TData> = {\n row: Row<TData>;\n isExpanded: boolean;\n isSelected: boolean;\n onRowClick?: (row: TData) => void;\n isRowClickable?: (row: TData) => boolean;\n enableRowSelection: boolean;\n enableExpanding: boolean;\n alwaysExpanded: boolean;\n selectChildrenWithParent: boolean;\n showExpandGuidelines: boolean;\n getRowLabel?: (row: TData) => string;\n hasExpandableRows: boolean;\n customColor?: string;\n rowSlotProps?: SlotPropsOrFn<MuiTableRowProps, { row: Row<TData> }>;\n cellSlotProps?: SlotPropsOrFn<\n MuiTableCellProps,\n { cell: Cell<TData, unknown> }\n >;\n};\n\nfunction BiampTableRowInner<TData>({\n row,\n isExpanded,\n isSelected,\n onRowClick,\n isRowClickable,\n enableRowSelection,\n enableExpanding,\n alwaysExpanded,\n selectChildrenWithParent,\n showExpandGuidelines,\n getRowLabel,\n hasExpandableRows,\n customColor,\n rowSlotProps,\n cellSlotProps,\n}: BiampTableRowProps<TData>) {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n const resolvedRow = resolveSlot(rowSlotProps, { row });\n const {\n sx: userRowSx,\n onClick: userRowOnClick,\n onKeyDown: userRowOnKeyDown,\n ...restRowProps\n } = resolvedRow ?? {};\n\n return (\n <TableRow\n key={row.id}\n {...restRowProps}\n hover={clickable}\n selected={enableRowSelection ? isSelected : undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={mergeSx(\n clickable && rowCursorPointerSx,\n customColor ? { backgroundColor: customColor } : undefined,\n userRowSx,\n )}\n onClick={\n clickable && onRowClick\n ? (e) => {\n onRowClick(row.original);\n userRowOnClick?.(e);\n }\n : userRowOnClick\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n userRowOnKeyDown?.(e);\n }\n : userRowOnKeyDown\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={mergeSx(\n selectionCellSx,\n customColor ? { backgroundColor: customColor } : undefined,\n )}\n >\n <Checkbox\n checked={isSelected}\n disabled={!row.getCanSelect()}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n row.toggleSelected(e.target.checked, {\n selectChildren: selectChildrenWithParent,\n })\n }\n onClick={(e) => e.stopPropagation()}\n sx={!row.getCanSelect() ? checkboxHiddenSx : undefined}\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, cellIndex, cells) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n const isExpandCell =\n enableExpanding &&\n !sticky &&\n cellIndex ===\n cells.findIndex((c) => !c.column.columnDef.meta?.sticky);\n\n const showGuidelinesOnCell =\n isExpandCell &&\n showExpandGuidelines &&\n alwaysExpanded &&\n row.depth > 0;\n\n const resolvedCell = resolveSlot(cellSlotProps, { cell });\n const { sx: userCellSx, ...restCellProps } = resolvedCell ?? {};\n\n return (\n <TableCell\n key={cell.id}\n {...restCellProps}\n data-sticky={sticky || undefined}\n sx={mergeSx(\n cellSx(sticky, cell.column.columnDef.meta?.minWidth, 2),\n { pl: isExpandCell && !alwaysExpanded ? '6px' : '12px' },\n showGuidelinesOnCell ? { position: 'relative' } : undefined,\n sticky && customColor\n ? { backgroundColor: customColor }\n : undefined,\n userCellSx,\n )}\n >\n {showGuidelinesOnCell && <ExpandGuidelines row={row} />}\n {renderCellContent({\n cell,\n row,\n isExpandCell,\n alwaysExpanded,\n isExpanded,\n hasExpandableRows,\n getRowLabel,\n })}\n </TableCell>\n );\n })}\n </TableRow>\n );\n}\n\nfunction biampTableRowPropsAreEqual<TData>(\n prev: BiampTableRowProps<TData>,\n next: BiampTableRowProps<TData>,\n) {\n return (\n prev.row.id === next.row.id &&\n prev.row.original === next.row.original &&\n prev.isSelected === next.isSelected &&\n prev.isExpanded === next.isExpanded &&\n prev.row.getVisibleCells().length === next.row.getVisibleCells().length &&\n prev.enableRowSelection === next.enableRowSelection &&\n prev.enableExpanding === next.enableExpanding &&\n prev.alwaysExpanded === next.alwaysExpanded &&\n prev.hasExpandableRows === next.hasExpandableRows &&\n prev.selectChildrenWithParent === next.selectChildrenWithParent &&\n prev.showExpandGuidelines === next.showExpandGuidelines &&\n prev.onRowClick === next.onRowClick &&\n prev.isRowClickable === next.isRowClickable &&\n prev.getRowLabel === next.getRowLabel &&\n prev.customColor === next.customColor &&\n prev.rowSlotProps === next.rowSlotProps &&\n prev.cellSlotProps === next.cellSlotProps\n );\n}\n\nexport const BiampTableRow = React.memo(\n BiampTableRowInner,\n biampTableRowPropsAreEqual,\n) as typeof BiampTableRowInner;\n","import { Box, Tooltip } from '@mui/material';\nimport React, { useCallback, useRef, useState } from 'react';\n\n/**\n * Renders cell content with single-line truncation (ellipsis).\n * A tooltip showing the full text appears only when the content is actually truncated.\n * The Tooltip popup is only mounted when `open` is true, so there is zero DOM\n * overhead for non-truncated cells.\n */\nexport function BiampTableTruncatedCell({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const textRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n const el = textRef.current;\n if (el && el.scrollWidth > el.clientWidth) {\n setOpen(true);\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Tooltip\n title={children}\n open={open}\n arrow\n placement=\"top\"\n disableInteractive\n >\n <Box\n data-truncate\n ref={textRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n }}\n >\n {children}\n </Box>\n </Tooltip>\n );\n}\n","import type { SxProps, Theme } from '@mui/material';\n\nexport type SlotPropsOrFn<TProps, TCtx> = TProps | ((ctx: TCtx) => TProps);\n\nexport function resolveSlot<TProps, TCtx>(\n slot: SlotPropsOrFn<TProps, TCtx> | undefined,\n ctx: TCtx,\n): TProps | undefined {\n if (!slot) return undefined;\n return typeof slot === 'function' ? (slot as (c: TCtx) => TProps)(ctx) : slot;\n}\n\nexport function mergeSx(\n ...inputs: Array<SxProps<Theme> | false | null | undefined>\n): SxProps<Theme> {\n return inputs\n .filter((v): v is SxProps<Theme> => Boolean(v))\n .flatMap((v) => (Array.isArray(v) ? v : [v])) as SxProps<Theme>;\n}\n","import { type Theme } from '@mui/material';\n\nexport const stickyHoverBg = {\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n} as const;\n\nexport function cellSx(\n sticky: 'left' | 'right' | undefined,\n minWidth: number | string | undefined,\n zIndex: number,\n) {\n if (sticky) {\n return {\n position: 'sticky',\n [sticky]: 0,\n zIndex,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n ...(zIndex < 3 && stickyHoverBg),\n } as const;\n }\n const mw = minWidth ?? 40;\n return {\n minWidth: mw,\n whiteSpace: 'nowrap',\n '&:has([data-truncate])': { maxWidth: mw, whiteSpace: 'normal' },\n };\n}\n","import { Box, type Theme } from '@mui/material';\nimport { type Row } from '@tanstack/react-table';\nimport { type ReactNode } from 'react';\n\n// ── Expand guideline geometry ────────────────────────────────────\n// Only used when `alwaysExpanded` is on. Per-depth indent matches the inner\n// Box's `pl: row.depth * 28`; cell-pl matches the expand cell's `pl: 12px`.\n// The vertical line at level k sits 4px to the right of where the parent\n// (depth k-1) text content begins — close enough to read as anchored to the\n// parent, far enough to not collide with the first character. The horizontal\n// elbow stops 12px short of the child's text so the line reads as pointing at\n// the child without touching it. For the first child of a parent, the elbow's\n// top vertical is extended 12px upward so it visually reaches into the parent\n// row instead of starting at the cell boundary.\nconst guidelineIndent = 28;\nconst guidelineCellPaddingLeft = 12;\nconst guidelineLineOffsetFromParentText = 4;\nconst guidelineElbowGapToChildText = 12;\nconst guidelineFirstChildTopExtension = 12;\nconst guidelineColor = ({ palette }: Theme) => palette.dividers.secondary;\nconst guidelineStroke = '0.6px';\n\nfunction isLastChildOfParent<TData>(row: Row<TData>): boolean {\n const parent = row.getParentRow();\n if (!parent) return false;\n const siblings = parent.subRows;\n return siblings[siblings.length - 1]?.id === row.id;\n}\n\nfunction isFirstChildOfParent<TData>(row: Row<TData>): boolean {\n const parent = row.getParentRow();\n if (!parent) return false;\n return parent.subRows[0]?.id === row.id;\n}\n\nfunction getAncestorAtDepth<TData>(\n row: Row<TData>,\n targetDepth: number,\n): Row<TData> | undefined {\n let current: Row<TData> | undefined = row;\n while (current && current.depth > targetDepth) {\n current = current.getParentRow();\n }\n return current && current.depth === targetDepth ? current : undefined;\n}\n\nexport function ExpandGuidelines<TData>({ row }: { row: Row<TData> }) {\n const verticalX = (k: number) =>\n guidelineCellPaddingLeft +\n (k - 1) * guidelineIndent +\n guidelineLineOffsetFromParentText;\n const elbowEnd =\n guidelineCellPaddingLeft +\n row.depth * guidelineIndent -\n guidelineElbowGapToChildText;\n\n const lines: ReactNode[] = [];\n\n for (let k = 1; k < row.depth; k++) {\n const ancestor = getAncestorAtDepth(row, k);\n if (!ancestor || isLastChildOfParent(ancestor)) continue;\n lines.push(\n <Box\n key={`v-${k}`}\n aria-hidden\n sx={{\n position: 'absolute',\n left: `${verticalX(k)}px`,\n top: 0,\n bottom: 0,\n width: guidelineStroke,\n bgcolor: guidelineColor,\n pointerEvents: 'none',\n }}\n />,\n );\n }\n\n const elbowX = verticalX(row.depth);\n const rowIsLast = isLastChildOfParent(row);\n const rowIsFirst = isFirstChildOfParent(row);\n const elbowTopOffset = rowIsFirst ? -guidelineFirstChildTopExtension : 0;\n\n lines.push(\n <Box\n key=\"v-elbow-top\"\n aria-hidden\n sx={{\n position: 'absolute',\n left: `${elbowX}px`,\n top: `${elbowTopOffset}px`,\n height: `calc(50% - ${elbowTopOffset}px)`,\n width: guidelineStroke,\n bgcolor: guidelineColor,\n pointerEvents: 'none',\n }}\n />,\n );\n\n if (!rowIsLast) {\n lines.push(\n <Box\n key=\"v-elbow-bottom\"\n aria-hidden\n sx={{\n position: 'absolute',\n left: `${elbowX}px`,\n top: '50%',\n bottom: 0,\n width: guidelineStroke,\n bgcolor: guidelineColor,\n pointerEvents: 'none',\n }}\n />,\n );\n }\n\n lines.push(\n <Box\n key=\"h-elbow\"\n aria-hidden\n sx={{\n position: 'absolute',\n left: `${elbowX}px`,\n top: '50%',\n width: `${elbowEnd - elbowX}px`,\n height: guidelineStroke,\n bgcolor: guidelineColor,\n pointerEvents: 'none',\n }}\n />,\n );\n\n return <>{lines}</>;\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 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 dense\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\" fontWeight={600}>\n {showAllLabel}\n </Typography>\n </ListItem>\n <Divider />\n <Box\n sx={{ maxHeight: 340, overflow: 'auto', overscrollBehavior: 'none' }}\n >\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n column.columnDef.meta?.columnLabel ??\n (typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id);\n return (\n <ListItem\n key={column.id}\n dense\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n sx={{ py: 1 }}\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 { useEffect, 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, pageIndex } = table.getState().pagination;\n\n // Auto-correct page when row count drops (e.g. after filtering)\n const maxPage = Math.max(0, Math.ceil(stableCount / pageSize) - 1);\n useEffect(() => {\n if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\n }, [loading, pageIndex, maxPage, table]);\n\n // Hide when there's no data or everything fits on one page\n if (autoHide && (!stableCount || 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\n display=\"flex\"\n alignItems=\"center\"\n ml=\"auto\"\n gap={{ xs: 0, md: 1 }}\n mr={{ xs: 1, md: 0 }}\n {...props}\n >\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 InputBase,\n TextField,\n Theme,\n useMediaQuery,\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\ntype ExpandableSearchProps =\n | {\n /** When true, the search field collapses to an icon button when empty and unfocused. */\n expandable: true;\n /** Accessible label for the collapsed icon button. @default placeholder */\n expandLabel?: string;\n }\n | {\n expandable?: false;\n expandLabel?: never;\n };\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, renders a simplified full-width InputBase on screens below the `md` breakpoint. @default true */\n enableMobileView?: boolean;\n} & ExpandableSearchProps &\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 enableMobileView = true,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const isMobile = useMediaQuery<Theme>((t) => t.breakpoints.down('md'));\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 (isMobile && enableMobileView) {\n return (\n <Box display=\"flex\" alignItems=\"center\" width=\"100%\" pr={1} gap={1}>\n <SearchIcon sx={{ width: 16, height: 16 }} />\n <InputBase\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n inputProps={{ maxLength, 'aria-label': 'Search' }}\n fullWidth\n value={inputValue}\n sx={{\n paddingLeft: 1,\n height: '36px !important',\n minHeight: '36px !important',\n fontSize: (t) => t.typography.body2.fontSize,\n }}\n onChange={handleChange}\n endAdornment={clearButton}\n />\n </Box>\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","import {\n type ColumnDef,\n type ExpandedState,\n getCoreRowModel,\n getExpandedRowModel,\n type Row,\n type Table,\n useReactTable,\n} from '@tanstack/react-table';\nimport { useMemo } from 'react';\nimport {\n toVisibilityState,\n type ColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n type ServerSideOrder,\n orderToSorting,\n sortingToOrder,\n getOrderFieldMappings,\n getDefaultColumnVisibilityFromDefs,\n getDirtyColumnVisibility,\n selectedIdsToRowSelection,\n rowSelectionToSelectedIds,\n} from './serverSideTableUtils';\nimport './tanstack-meta';\n\n// Stable references — avoid re-creating on every render.\nconst coreRowModel = getCoreRowModel();\nconst expandedRowModel = getExpandedRowModel();\nconst defaultGetRowId = (row: Record<string, string>) => row.id;\n\nexport type UseBiampServerSideTableOptions<TData, F extends string = string> = {\n /** Row data array. */\n data: TData[];\n /** TanStack column definitions. Use `meta.orderField` to map columns to server-side order fields. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[];\n /** Extracts a unique ID from each row. @default `(row) => (row as any).id` */\n getRowId?: (row: TData) => string;\n\n // ── Sorting ──────────────────────────────────────────────────────\n /** Current server-side order. `undefined` means no sorting. */\n order?: ServerSideOrder<F>;\n /** Called when the user changes sorting. `undefined` means sorting was cleared. */\n onOrderChange?: (order?: ServerSideOrder<F>) => void;\n\n // ── Pagination ───────────────────────────────────────────────────\n /** Zero-based page index. */\n page?: number;\n /** Number of rows per page. */\n rowsPerPage?: number;\n /** Called when the user changes page. */\n onPageChange?: (page: number) => void;\n /** Total row count from the server (for pagination display). */\n rowCount?: number;\n\n // ── Column visibility ────────────────────────────────────────────\n /** Current column visibility overrides. Merged with defaults from `meta.defaultVisible`. */\n columnVisibility?: ColumnVisibility;\n /** Called with only the entries that differ from defaults (for URL persistence). */\n onColumnVisibilityChange?: (visibility: ColumnVisibility) => void;\n\n // ── Row selection ────────────────────────────────────────────────\n /** Currently selected row IDs. */\n selectedRowIds?: string[];\n /** Called when selection changes. */\n onSelectedRowIdsChange?: (ids: string[]) => void;\n /** Enable row selection. Pass `true` for all rows, or a predicate. */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean);\n\n // ── Expanding ──────────────────────────────────────────────────\n /** Current expanded state. `{}` means nothing expanded; `true` expands all. */\n expanded?: ExpandedState;\n /** Called when the user expands/collapses rows. */\n onExpandedChange?: (expanded: ExpandedState) => void;\n /** Returns child rows for a given row (enables sub-row expanding). */\n getSubRows?: (row: TData) => TData[] | undefined;\n};\n\n/**\n * Wraps `useReactTable` with the standard server-side configuration:\n * manual sorting, manual pagination, column visibility with dirty-tracking,\n * and optional row selection with ID-based state.\n *\n * Eliminates ~40 lines of boilerplate per table implementation.\n */\nexport function useBiampServerSideTable<TData, F extends string = string>({\n data,\n columns,\n getRowId = defaultGetRowId as (row: TData) => string,\n order,\n onOrderChange,\n page,\n rowsPerPage,\n onPageChange,\n rowCount,\n columnVisibility,\n onColumnVisibilityChange,\n selectedRowIds,\n onSelectedRowIdsChange,\n enableRowSelection,\n expanded,\n onExpandedChange,\n getSubRows,\n}: UseBiampServerSideTableOptions<TData, F>): Table<TData> {\n // ── Derived state (memoized) ─────────────────────────────────────\n\n const { defaultColumnVisibility, columnIdToField, fieldToColumnId } = useMemo(\n () => ({\n defaultColumnVisibility: getDefaultColumnVisibilityFromDefs(columns),\n ...getOrderFieldMappings<F>(columns),\n }),\n [columns],\n );\n\n const sorting = useMemo(\n () => orderToSorting(order, fieldToColumnId),\n [order, fieldToColumnId],\n );\n\n const hasPagination = page != null && rowsPerPage != null;\n const pagination = useMemo(\n () =>\n hasPagination ? { pageIndex: page!, pageSize: rowsPerPage! } : undefined,\n [hasPagination, page, rowsPerPage],\n );\n\n const hasSelection = selectedRowIds != null;\n const rowSelection = useMemo(\n () =>\n hasSelection ? selectedIdsToRowSelection(selectedRowIds!) : undefined,\n [hasSelection, selectedRowIds],\n );\n\n const mergedVisibility = useMemo(\n () =>\n toVisibilityState({\n ...defaultColumnVisibility,\n ...columnVisibility,\n }),\n [defaultColumnVisibility, columnVisibility],\n );\n\n // ── Table instance ───────────────────────────────────────────────\n\n return useReactTable({\n data,\n columns,\n getCoreRowModel: coreRowModel,\n getRowId,\n\n // Server-side tables manage their own state — disable TanStack's auto-reset\n // heuristic which watches for data reference changes and resets page index,\n // selection, etc. With unstable data references (e.g. `items ?? []`) this\n // causes infinite re-render loops.\n autoResetAll: false,\n\n // Sorting — always manual for server-side tables\n manualSorting: true,\n sortDescFirst: false,\n state: {\n sorting,\n ...(pagination && { pagination }),\n columnVisibility: mergedVisibility,\n ...(rowSelection && { rowSelection }),\n ...(expanded != null && { expanded }),\n },\n onSortingChange: onOrderChange\n ? (updater) => {\n const next =\n typeof updater === 'function' ? updater(sorting) : updater;\n onOrderChange(sortingToOrder(next, columnIdToField));\n }\n : undefined,\n\n // Pagination — only when page/rowsPerPage are provided\n ...(hasPagination && {\n manualPagination: true,\n rowCount: rowCount ?? 0,\n onPaginationChange: onPageChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onPaginationChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(pagination!) : updater;\n onPageChange(next.pageIndex);\n }\n : undefined,\n }),\n\n // Column visibility\n onColumnVisibilityChange: onColumnVisibilityChange\n ? (updater) => {\n const next =\n typeof updater === 'function' ? updater(mergedVisibility) : updater;\n onColumnVisibilityChange(\n getDirtyColumnVisibility(next, defaultColumnVisibility),\n );\n }\n : undefined,\n\n // Row selection — only when selectedRowIds is provided\n ...(hasSelection && {\n enableRowSelection: enableRowSelection ?? true,\n onRowSelectionChange: onSelectedRowIdsChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onRowSelectionChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(rowSelection!) : updater;\n onSelectedRowIdsChange(rowSelectionToSelectedIds(next));\n }\n : undefined,\n }),\n\n // Expanding — only when expanded state is provided\n ...(expanded != null && {\n // Only attach getExpandedRowModel when getSubRows is provided.\n // Without it, the expanded model recomputes on every state change\n // (including selection), adding unnecessary overhead.\n ...(getSubRows && { getExpandedRowModel: expandedRowModel, getSubRows }),\n onExpandedChange: onExpandedChange\n ? (\n updater: Parameters<\n NonNullable<\n Parameters<typeof useReactTable>[0]['onExpandedChange']\n >\n >[0],\n ) => {\n const next =\n typeof updater === 'function' ? updater(expanded) : updater;\n onExpandedChange(next);\n }\n : undefined,\n }),\n });\n}\n","import type { RowSelectionState, SortingState } from '@tanstack/react-table';\n\n/** A single-field server-side order, matching typical GraphQL order input types. */\nexport type ServerSideOrder<F extends string> = {\n field: F;\n desc?: boolean;\n};\n\n/**\n * Convert a server-side order object to TanStack SortingState.\n *\n * @param order - `{ field, desc? }` from URL params / GraphQL\n * @param fieldToColumnId - optional map when column IDs differ from order field names\n */\nexport function orderToSorting<F extends string>(\n order: ServerSideOrder<F> | undefined,\n fieldToColumnId?: Partial<Record<F, string>>,\n): SortingState {\n if (!order) return [];\n const id = fieldToColumnId?.[order.field] ?? order.field;\n return [{ id, desc: order.desc ?? false }];\n}\n\n/**\n * Convert TanStack SortingState back to a server-side order object.\n *\n * @param sorting - TanStack sorting state\n * @param columnIdToField - optional map when column IDs differ from order field names\n */\nexport function sortingToOrder<F extends string>(\n sorting: SortingState,\n columnIdToField?: Record<string, F>,\n): ServerSideOrder<F> | undefined {\n if (sorting.length === 0) return undefined;\n const { id, desc } = sorting[0];\n const field = (columnIdToField?.[id] ?? id) as F;\n return { field, desc };\n}\n\n/**\n * Convert an array of selected row IDs to TanStack RowSelectionState.\n */\nexport function selectedIdsToRowSelection(ids: string[]): RowSelectionState {\n const state: RowSelectionState = {};\n for (const id of ids) {\n state[id] = true;\n }\n return state;\n}\n\n/**\n * Convert TanStack RowSelectionState to an array of selected row IDs.\n */\nexport function rowSelectionToSelectedIds(\n selection: RowSelectionState,\n): string[] {\n return Object.keys(selection).filter((key) => selection[key]);\n}\n\n/**\n * Build bidirectional mappings between TanStack column IDs and server-side order\n * field enum values from column definitions that carry `meta.orderField`.\n */\nexport function getOrderFieldMappings<F extends string = string>(\n columns: { id?: string; meta?: { orderField?: string } }[],\n): {\n columnIdToField: Record<string, F>;\n fieldToColumnId: Partial<Record<F, string>>;\n} {\n const columnIdToField: Record<string, F> = {};\n const fieldToColumnId: Partial<Record<F, string>> = {};\n for (const col of columns) {\n const orderField = col.meta?.orderField as F | undefined;\n if (col.id && orderField) {\n columnIdToField[col.id] = orderField;\n fieldToColumnId[orderField] = col.id;\n }\n }\n return { columnIdToField, fieldToColumnId };\n}\n\n/**\n * Derives default column visibility from column definitions' `meta.defaultVisible`.\n * Columns without `defaultVisible` are omitted (treated as visible by TanStack).\n */\nexport function getDefaultColumnVisibilityFromDefs(\n columns: { id?: string; meta?: { defaultVisible?: boolean } }[],\n): Record<string, boolean> {\n const defaults: Record<string, boolean> = {};\n for (const col of columns) {\n if (col.id != null && col.meta?.defaultVisible !== undefined) {\n defaults[col.id] = col.meta.defaultVisible;\n }\n }\n return defaults;\n}\n\n/**\n * Returns only the entries in `visibility` that differ from `defaults`.\n * Columns not present in `defaults` are treated as visible (`true`) by default.\n * Use this to strip default-matching entries before persisting to URL params.\n */\nexport function getDirtyColumnVisibility(\n visibility: Record<string, boolean>,\n defaults: Record<string, boolean>,\n): Record<string, boolean> {\n const dirty: Record<string, boolean> = {};\n for (const [id, visible] of Object.entries(visibility)) {\n if (visible !== (defaults[id] ?? true)) {\n dirty[id] = visible;\n }\n }\n return dirty;\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","import React from 'react';\nimport {\n Box,\n BoxProps,\n Collapse,\n Typography,\n TypographyProps,\n type AlertColor,\n} from '@mui/material';\nimport {\n ErrorStatusIcon,\n InfoStatusIcon,\n SuccessStatusIcon,\n WarningStatusIcon,\n} from '@bwp-web/assets';\n\nexport type BiampBannerProps = {\n show: boolean;\n children: React.ReactNode;\n severity: AlertColor;\n};\n\n/**\n * A full-width notification banner that slides in/out with a Collapse animation.\n * Uses MUI's AlertColor severity to set background and text colors from the theme.\n * Compose with `BiampBannerIcon`, `BiampBannerContent`, and `BiampBannerActions`.\n */\nexport function BiampBanner({ show, children, severity }: BiampBannerProps) {\n return (\n <Collapse in={show} unmountOnExit component=\"aside\">\n <Box\n bgcolor={({ palette }) => palette.background[severity]}\n display=\"flex\"\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={1}\n px={{ xs: 2, sm: 2.5 }}\n minHeight={48}\n sx={{\n borderBottom: ({ palette }) =>\n `0.6px solid ${palette[severity].main}`,\n }}\n >\n {children}\n </Box>\n </Collapse>\n );\n}\n\n// NOTE: we're using the same icon mapping as the `Alert` component.\nconst iconMapping: Record<AlertColor, React.ReactNode> = {\n error: <ErrorStatusIcon color=\"error\" sx={{ width: 14, height: 14 }} />,\n warning: <WarningStatusIcon color=\"warning\" sx={{ width: 16, height: 14 }} />,\n success: <SuccessStatusIcon color=\"success\" sx={{ width: 14, height: 14 }} />,\n info: <InfoStatusIcon color=\"info\" sx={{ width: 14, height: 14 }} />,\n};\n\nexport type BiampBannerIconProps = {\n severity?: AlertColor;\n children?: React.ReactNode;\n};\n\n/**\n * Icon slot for `BiampBanner`. Pass a `severity` to render the matching\n * default icon, or pass `children` to render a custom icon.\n */\nexport function BiampBannerIcon({ severity, children }: BiampBannerIconProps) {\n return <>{severity ? iconMapping[severity] : children}</>;\n}\n\n/**\n * Content slot for `BiampBanner`. Text is centered by default.\n */\nexport function BiampBannerContent({ children, ...props }: TypographyProps) {\n return (\n <Typography textAlign=\"center\" variant=\"h3\" {...props}>\n {children}\n </Typography>\n );\n}\n\n/**\n * Actions slot for `BiampBanner`. Renders children in a horizontal flex row\n * with 8px gap, aligned to the trailing edge of the banner.\n */\nexport function BiampBannerActions({ children, ...props }: BoxProps) {\n return (\n <Box display=\"flex\" gap={1} alignItems=\"center\" {...props}>\n {children}\n </Box>\n );\n}\n","import { Button, ButtonProps, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\n\ntype Props = ButtonProps & {\n children: React.ReactNode;\n active?: boolean;\n small?: boolean;\n component?: React.ElementType;\n};\n\nexport function SegmentedButton({\n children,\n active,\n small,\n sx,\n ...props\n}: Props) {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const backgroundColor = active\n ? isDarkMode\n ? theme.palette.grey[900]\n : theme.palette.common.white\n : 'transparent';\n const textColor = active\n ? theme.palette.text.primary\n : theme.palette.text.secondary;\n const border = active ? 'solid' : undefined;\n return (\n <Button\n sx={{\n backgroundColor,\n color: textColor,\n borderRadius: '4px',\n border,\n borderColor: 'divider',\n lineHeight: 1.5,\n px: 1.5,\n py: 0,\n height: small ? '22px' : '26px',\n ...(small && { fontSize: '12px', letterSpacing: '-0.24px' }),\n boxShadow: active\n ? `0 1px 2px 0 ${alpha(theme.palette.common.black, 0.05)} !important`\n : 'none !important',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Button>\n );\n}\n","import { Stack, StackProps, useTheme } from '@mui/material';\n\ntype Props = StackProps & {\n children: React.ReactNode[];\n component?: React.ElementType;\n};\n\nexport function SegmentedButtonGroup({ children, sx, ...props }: Props) {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n return (\n <Stack\n direction=\"row\"\n p={0.5}\n borderRadius=\"6px\"\n gap={1}\n sx={{\n backgroundColor: isDarkMode\n ? theme.palette.grey[800]\n : theme.palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import React, { createContext, forwardRef, useContext } from 'react';\nimport {\n Autocomplete,\n AutocompleteProps,\n Box,\n Chip,\n InputAdornment,\n Paper,\n PaperProps,\n TextField,\n Typography,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { KeyArrowDownIcon, KeyArrowUpIcon, SearchIcon } from '@bwp-web/assets';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface BiampGlobalSearchOption {\n icon?: React.ReactNode;\n title: string;\n subtitle?: string;\n associatedItems?: { label: string }[];\n endIcon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport type BiampGlobalSearchProps = Omit<\n AutocompleteProps<BiampGlobalSearchOption, false, false, true>,\n 'renderInput' | 'renderOption' | 'PaperComponent'\n> & {\n placeholder?: string;\n noResultsText?: string;\n inputSx?: SxProps<Theme>;\n clearOnSelect?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// SearchContext\n// ---------------------------------------------------------------------------\n\nconst SearchContext = createContext<{\n hasOptions: boolean;\n loading: boolean;\n noResultsText: string;\n query: string;\n}>({\n hasOptions: true,\n loading: false,\n noResultsText: 'No results found',\n query: '',\n});\n\n// ---------------------------------------------------------------------------\n// KeyCap — keyboard key visual wrapper\n// ---------------------------------------------------------------------------\n\nfunction KeyCap({\n children,\n variant = 'icon',\n}: {\n children: React.ReactNode;\n variant?: 'icon' | 'text';\n}) {\n return (\n <Box\n component=\"kbd\"\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 20,\n height: 20,\n px: variant === 'text' ? '8px' : 0.5,\n borderRadius: '4px',\n bgcolor: 'grey.100',\n color: 'grey.400',\n fontFamily: 'inherit',\n fontSize: 'caption.fontSize',\n fontStyle: 'normal',\n fontWeight: (theme: Theme) => theme.typography.fontWeightMedium,\n border: 'none',\n '& svg': { width: 12, height: 12 },\n }}\n >\n {children}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearchPaper\n// ---------------------------------------------------------------------------\n\nconst BiampGlobalSearchPaper = forwardRef<HTMLDivElement, PaperProps>(\n function BiampGlobalSearchPaper({ children, ...props }, ref) {\n const { hasOptions, loading, noResultsText } = useContext(SearchContext);\n\n return (\n <Paper ref={ref} {...props}>\n {hasOptions || loading ? (\n children\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ px: 2, py: 1.5 }}\n >\n {noResultsText}\n </Typography>\n )}\n {hasOptions && (\n <Box\n sx={{\n borderTop: ({ palette }) =>\n `0.6px solid ${palette.dividers.secondary}`,\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n p: 1.5,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <KeyCap>\n <KeyArrowDownIcon />\n </KeyCap>\n <KeyCap>\n <KeyArrowUpIcon />\n </KeyCap>\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={(theme) => theme.typography.fontWeightMedium}\n color=\"text.secondary\"\n >\n Select\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <KeyCap variant=\"text\">Enter</KeyCap>\n <Typography\n variant=\"caption\"\n fontWeight={(theme) => theme.typography.fontWeightMedium}\n color=\"text.secondary\"\n >\n Open\n </Typography>\n </Box>\n </Box>\n )}\n </Paper>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// HighlightText\n// ---------------------------------------------------------------------------\n\nfunction HighlightText({ text, query }: { text: string; query: string }) {\n if (!query) return <>{text}</>;\n\n const index = text.toLowerCase().indexOf(query.toLowerCase());\n if (index === -1) return <>{text}</>;\n\n const before = text.slice(0, index);\n const match = text.slice(index, index + query.length);\n const after = text.slice(index + query.length);\n\n return (\n <>\n {before}\n <Box\n component=\"span\"\n sx={{\n bgcolor: 'background.info',\n borderRadius: '4px',\n color: 'info.main',\n paddingTop: '2px',\n paddingBottom: '2px',\n }}\n >\n {match}\n </Box>\n {after}\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearchListItem\n// ---------------------------------------------------------------------------\n\nfunction BiampGlobalSearchListItem({\n option,\n props: liProps,\n}: {\n option: BiampGlobalSearchOption;\n props: React.HTMLAttributes<HTMLLIElement> & { key?: React.Key };\n}) {\n const { query } = useContext(SearchContext);\n const { key, ...rest } = liProps;\n const maxChips = 3;\n const chips = option.associatedItems?.slice(0, maxChips) ?? [];\n const overflow = (option.associatedItems?.length ?? 0) - maxChips;\n\n return (\n <li\n key={key}\n {...rest}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n gap: 8,\n ...rest.style,\n }}\n >\n {option.icon && (\n <Box\n sx={{\n width: 24,\n height: 24,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {option.icon}\n </Box>\n )}\n\n <Typography variant=\"body2\" noWrap sx={{ flexShrink: 0 }}>\n <HighlightText text={option.title} query={query} />\n </Typography>\n\n {option.subtitle && (\n <Typography\n className=\"hoverContent\"\n variant=\"body2\"\n color=\"text.secondary\"\n noWrap\n sx={{ flexShrink: 1, minWidth: 0, display: 'none' }}\n >\n {option.subtitle}\n </Typography>\n )}\n\n {chips.length > 0 && (\n <Box\n className=\"hoverContent\"\n sx={{\n display: 'none',\n alignItems: 'center',\n gap: 1,\n ml: 'auto',\n flexShrink: 0,\n px: 2,\n }}\n >\n {chips.map((item, i) => (\n <Chip\n key={i}\n size=\"small\"\n label={item.label}\n sx={{\n bgcolor: 'background.info',\n borderRadius: '2px',\n borderColor: ({ palette }: Theme) => palette.dividers.primary,\n padding: '0px 6px',\n '& .MuiChip-label': {\n typography: 'caption',\n fontWeight: (theme: Theme) =>\n theme.typography.fontWeightMedium,\n },\n }}\n />\n ))}\n {overflow > 0 && (\n <Chip\n size=\"small\"\n label={`+${overflow}`}\n sx={{\n bgcolor: 'background.info',\n borderRadius: '2px',\n borderColor: ({ palette }: Theme) => palette.dividers.primary,\n padding: '0px 6px',\n '& .MuiChip-label': {\n typography: 'caption',\n fontWeight: (theme: Theme) =>\n theme.typography.fontWeightMedium,\n },\n }}\n />\n )}\n </Box>\n )}\n\n {option.endIcon && (\n <Box\n className=\"endIcon\"\n sx={{\n width: 48,\n height: 48,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ml: chips.length > 0 ? 0 : 'auto',\n visibility: 'hidden',\n '& .MuiSvgIcon-root': { fontSize: 14 },\n }}\n >\n {option.endIcon}\n </Box>\n )}\n </li>\n );\n}\n\n// ---------------------------------------------------------------------------\n// BiampGlobalSearch\n// ---------------------------------------------------------------------------\n\nexport function BiampGlobalSearch({\n placeholder = 'Search...',\n noResultsText = 'No results found',\n options = [],\n inputValue: inputValueProp,\n loading = false,\n clearOnSelect = true,\n onChange,\n onInputChange,\n ...props\n}: BiampGlobalSearchProps) {\n const hasOptions = options.length > 0;\n\n const handleChange: typeof onChange = (event, value, reason, details) => {\n if (value && typeof value !== 'string' && value.onClick) {\n value.onClick();\n }\n onChange?.(event, value, reason, details);\n };\n\n const handleInputChange: typeof onInputChange = (event, value, reason) => {\n if (clearOnSelect && (reason === 'selectOption' || reason === 'reset')) {\n onInputChange?.(event, '', reason);\n return;\n }\n onInputChange?.(event, value, reason);\n };\n\n return (\n <SearchContext.Provider\n value={{\n hasOptions,\n loading,\n noResultsText,\n query: inputValueProp ?? '',\n }}\n >\n <Autocomplete<BiampGlobalSearchOption, false, false, true>\n options={options}\n inputValue={inputValueProp}\n loading={loading}\n onChange={handleChange}\n onInputChange={handleInputChange}\n loadingText={\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading…\n </Typography>\n }\n freeSolo\n filterOptions={(x) => x}\n getOptionLabel={(option) =>\n typeof option === 'string' ? option : option.title\n }\n noOptionsText={noResultsText}\n slots={{ paper: BiampGlobalSearchPaper }}\n slotProps={{\n listbox: {\n sx: {\n '& .MuiAutocomplete-option': {\n paddingRight: '0px !important',\n },\n '& li:hover .hoverContent, & li.Mui-focused .hoverContent': {\n display: 'flex',\n },\n '& li:hover p.hoverContent, & li.Mui-focused p.hoverContent': {\n display: 'block',\n },\n '& li:hover .endIcon, & li.Mui-focused .endIcon': {\n visibility: 'visible',\n },\n },\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n placeholder={placeholder}\n fullWidth\n sx={{\n '& .MuiOutlinedInput-root': { padding: '0px !important' },\n '& .MuiInputBase-input': { paddingLeft: '8px !important' },\n '& .MuiOutlinedInput-root:not(:hover):not(.Mui-focused) .MuiOutlinedInput-notchedOutline':\n {\n border: 'none',\n },\n }}\n slotProps={{\n input: {\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n },\n }}\n />\n )}\n renderOption={(optionProps, option) => (\n <BiampGlobalSearchListItem\n key={optionProps.key}\n option={option as BiampGlobalSearchOption}\n props={optionProps}\n />\n )}\n {...props}\n />\n </SearchContext.Provider>\n );\n}\n","import { Box, BoxProps, Typography } from '@mui/material';\nimport { darken } from '@mui/material/styles';\nimport randomColor from 'randomcolor';\n\ntype Props = BoxProps & {\n name: string;\n id: string;\n};\n\nconst DEFAULT_SIZE = 40;\nconst DEFAULT_BORDER_RADIUS = 1.5;\nconst TEXT_RATIO = 0.4; // 16px (h3) / 40px default box\n\nexport function UserInitialsIcon({\n name,\n id,\n width = DEFAULT_SIZE,\n height = DEFAULT_SIZE,\n borderRadius = DEFAULT_BORDER_RADIUS,\n sx,\n ...props\n}: Props) {\n const userInitials = getInitials(name);\n const bgColor = randomColor({ luminosity: 'light', seed: id });\n const textColor = darken(randomColor({ luminosity: 'dark', seed: id }), 0.3);\n\n const size = typeof width === 'number' ? width : DEFAULT_SIZE;\n const fontSize = size * TEXT_RATIO;\n\n return (\n <Box\n minWidth={width}\n width={width}\n minHeight={height}\n height={height}\n borderRadius={borderRadius}\n bgcolor={bgColor}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n sx={{ ...sx }}\n {...props}\n >\n <Typography\n variant=\"h3\"\n color={textColor}\n sx={{\n userSelect: 'none',\n fontSize: size !== DEFAULT_SIZE ? `${fontSize}px` : undefined,\n }}\n >\n {userInitials}\n </Typography>\n </Box>\n );\n}\n\nconst getInitials = (name: string) => {\n if (!name) return '--';\n const words = name.trim().split(/\\s+/);\n\n const initials = words\n .filter(Boolean)\n .slice(0, 2)\n .map((word) => word[0].toUpperCase())\n .join('');\n\n return initials;\n};\n","import { SvgIcon, Skeleton, Box } from '@mui/material';\nimport type { SvgIconProps } from '@mui/material';\nimport { useEffect, useState } from 'react';\n\ninterface SvgCacheEntry {\n innerContent: string;\n viewBox: string | null;\n}\n\nconst svgCache = new Map<string, SvgCacheEntry>();\n\n/** Clear the internal SVG fetch cache. Useful for testing or forcing a refetch. */\nexport function clearDynamicSvgIconCache() {\n svgCache.clear();\n}\n\n/**\n * Replace all fill/stroke attribute values (except \"none\" and \"currentColor\")\n * with \"currentColor\" so the SVG inherits its color from CSS.\n */\nfunction applyCurrentColor(svg: string): string {\n return svg\n .replace(/fill=\"(?!none|currentColor)[^\"]*\"/g, 'fill=\"currentColor\"')\n .replace(/stroke=\"(?!none|currentColor)[^\"]*\"/g, 'stroke=\"currentColor\"');\n}\n\nexport interface UseDynamicSvgIconOptions {\n /**\n * When `true`, all `fill` and `stroke` attribute values (except `\"none\"` and\n * `\"currentColor\"`) are replaced with `\"currentColor\"`. This makes the SVG\n * fully themeable via the CSS `color` property or MUI's `sx={{ color }}`.\n *\n * @default false\n */\n replaceColors?: boolean;\n /** Called when the SVG loads successfully */\n onLoad?: () => void;\n /** Called when loading fails */\n onError?: (error: string) => void;\n}\n\nexport interface UseDynamicSvgIconResult {\n /** Whether the SVG is currently being fetched */\n loading: boolean;\n /** Error message if fetching failed, null otherwise */\n error: string | null;\n /** The inner SVG content (paths, groups, etc.) */\n svgContent: string | null;\n /** The viewBox extracted from the source SVG */\n svgViewBox: string | null;\n}\n\n/**\n * Hook that fetches an SVG from a URL and returns the parsed content.\n * The SVG is rendered as-is by default. Pass `replaceColors: true` to replace\n * all fill/stroke colors with `currentColor` for full theming support.\n * Results are cached in-memory so subsequent renders with the same URL are instant.\n *\n * @param url - URL of the SVG to fetch (supports any URL that `fetch` can handle, including data URLs)\n * @param options - Optional callbacks for load/error events\n * @returns Object with `loading`, `error`, `svgContent`, and `svgViewBox` fields\n *\n * @example\n * ```tsx\n * const { loading, error, svgContent, svgViewBox } = useDynamicSvgIcon(\n * 'https://example.com/icon.svg',\n * { onError: (msg) => console.warn(msg) },\n * );\n * ```\n */\nexport function useDynamicSvgIcon(\n url: string,\n options: UseDynamicSvgIconOptions = {},\n): UseDynamicSvgIconResult {\n const { replaceColors = false, onLoad, onError } = options;\n\n const transform = replaceColors ? applyCurrentColor : (s: string) => s;\n\n const [svgContent, setSvgContent] = useState<string | null>(() => {\n const cached = svgCache.get(url);\n return cached ? transform(cached.innerContent) : null;\n });\n const [svgViewBox, setSvgViewBox] = useState<string | null>(() => {\n const cached = svgCache.get(url);\n return cached?.viewBox ?? null;\n });\n const [loading, setLoading] = useState(() => !svgCache.has(url));\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!url) {\n setLoading(false);\n setError('No URL provided');\n setSvgContent(null);\n setSvgViewBox(null);\n return;\n }\n\n let cancelled = false;\n\n const cached = svgCache.get(url);\n if (cached) {\n setSvgContent(transform(cached.innerContent));\n setSvgViewBox(cached.viewBox);\n setLoading(false);\n setError(null);\n onLoad?.();\n return;\n }\n\n setLoading(true);\n setError(null);\n setSvgContent(null);\n setSvgViewBox(null);\n\n (async () => {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch SVG: ${response.status} ${response.statusText}`,\n );\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n const text = await response.text();\n\n if (!text.includes('<svg') && !contentType.includes('svg')) {\n throw new Error('Response is not an SVG');\n }\n\n const viewBoxMatch = text.match(/viewBox=\"([^\"]*)\"/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : null;\n\n const svgMatch = text.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const innerContent = svgMatch ? svgMatch[1] : text;\n\n svgCache.set(url, { innerContent, viewBox });\n\n if (!cancelled) {\n setSvgContent(transform(innerContent));\n setSvgViewBox(viewBox);\n setLoading(false);\n onLoad?.();\n }\n } catch (err) {\n if (!cancelled) {\n const message =\n err instanceof Error ? err.message : 'Failed to load SVG';\n setError(message);\n setLoading(false);\n onError?.(message);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n return { loading, error, svgContent, svgViewBox };\n}\n\nconst DEFAULT_SIZE = 24;\n\nexport interface DynamicSvgIconProps extends Omit<\n SvgIconProps,\n 'children' | 'onLoad' | 'onError' | 'width' | 'height'\n> {\n /** URL of the SVG to load */\n url: string;\n /** Fallback element shown when loading fails */\n fallback: React.ReactNode;\n /** Width in pixels — applied to icon, skeleton, and fallback (default: 24) */\n width?: number;\n /** Height in pixels — applied to icon, skeleton, and fallback (default: 24) */\n height?: number;\n /**\n * Replace all fill/stroke colors (except `\"none\"` and `\"currentColor\"`) with\n * `\"currentColor\"`, making the icon fully themeable via CSS `color`.\n * Set to `false` to preserve the SVG's original colors.\n *\n * @default false\n */\n replaceColors?: boolean;\n /** Skeleton shape shown during loading (default: 'circular') */\n skeletonVariant?: 'circular' | 'rectangular' | 'rounded';\n /** Skeleton animation type (default: 'pulse') */\n skeletonAnimation?: 'pulse' | 'wave' | false;\n /** Called when the SVG loads successfully */\n onLoad?: () => void;\n /** Called when loading fails */\n onError?: (error: string) => void;\n}\n\n/**\n * Renders an SVG icon fetched from a URL with a MUI Skeleton placeholder during\n * loading and a required fallback on error. The `width` and `height` props\n * control the dimensions of all three states (skeleton, icon, fallback).\n *\n * The SVG is rendered as-is — fill, stroke, and viewBox are preserved from the\n * source. Paths without an explicit fill will inherit `currentColor` from MUI\n * SvgIcon's CSS. Set `replaceColors` to force **all** fills and strokes to\n * `\"currentColor\"`, making the icon fully themeable via CSS `color`.\n *\n * Fetched SVGs are cached in-memory; the same URL will only be fetched once\n * per page session. Use {@link clearDynamicSvgIconCache} to force a refetch.\n *\n * @example\n * ```tsx\n * <DynamicSvgIcon\n * url=\"https://example.com/icon.svg\"\n * width={32}\n * height={32}\n * fallback={<BrokenImageIcon />}\n * onError={(msg) => console.warn(msg)}\n * />\n * ```\n */\nexport function DynamicSvgIcon({\n url,\n fallback,\n width = DEFAULT_SIZE,\n height = DEFAULT_SIZE,\n replaceColors,\n skeletonVariant = 'circular',\n skeletonAnimation = 'pulse',\n onLoad,\n onError,\n sx,\n ...svgIconProps\n}: DynamicSvgIconProps) {\n const { loading, error, svgContent, svgViewBox } = useDynamicSvgIcon(url, {\n replaceColors,\n onLoad,\n onError,\n });\n\n if (loading) {\n return (\n <Skeleton\n variant={skeletonVariant}\n animation={skeletonAnimation}\n sx={{ width, height }}\n />\n );\n }\n\n if (error || !svgContent) {\n return (\n <Box\n sx={{\n width,\n height,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n '& > svg, & > .MuiSvgIcon-root': {\n width: '100%',\n height: '100%',\n },\n }}\n >\n {fallback}\n </Box>\n );\n }\n\n return (\n <SvgIcon\n {...svgIconProps}\n {...(svgViewBox && { viewBox: svgViewBox })}\n sx={{\n ...(typeof sx === 'object' && sx !== null && !Array.isArray(sx)\n ? sx\n : undefined),\n width,\n height,\n }}\n >\n <g dangerouslySetInnerHTML={{ __html: svgContent }} />\n </SvgIcon>\n );\n}\n"],"mappings":"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","names":["randomColor","alpha","hex","Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","Checkbox","TableCell","TableRow","flexRender","useEffect","useRef","Stack","Typography","jsx","jsxs","jsx","jsx","Box","React","Box","jsx","Box","jsx","jsx","jsxs","Box","React","useRef","useState","jsx","jsxs","useRef","useEffect","Box","TableRow","TableCell","Checkbox","flexRender","Stack","jsx","IconButton","Tooltip","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","Fragment","jsx","jsxs","useState","useEffect","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","Box","Collapse","Typography","Fragment","jsx","Button","alpha","jsx","Stack","useTheme","jsx","Box","InputAdornment","TextField","Typography","SearchIcon","Fragment","jsx","jsxs","BiampGlobalSearchPaper","Box","Typography","jsx","randomColor","Box","useEffect","useState","jsx","DEFAULT_SIZE"]}