@bwp-web/components 0.11.6 → 0.11.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"BiampTable.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAUd,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAc,EAAE,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAG9E,OAAO,iBAAiB,CAAC;AAGzB,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI,QAAQ,GAAG;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,qFAAqF;IACrF,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC;IACzC,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wKAAwK;IACxK,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACpC,6IAA6I;IAC7I,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iGAAiG;IACjG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gIAAgI;IAChI,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,EAChC,KAAK,EACL,UAAU,EACV,cAAc,EACd,OAAO,EACP,KAAK,EACL,KAAK,EACL,kBAA0B,EAC1B,aAAa,EACb,WAAW,EACX,EAAE,EACF,GAAG,QAAQ,EACZ,EAAE,eAAe,CAAC,KAAK,CAAC,2CAkTxB"}
1
+ {"version":3,"file":"BiampTable.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAUd,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAc,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAGtD,OAAO,iBAAiB,CAAC;AAGzB,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI,QAAQ,GAAG;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,qFAAqF;IACrF,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC;IACzC,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wKAAwK;IACxK,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACpC,6IAA6I;IAC7I,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iGAAiG;IACjG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gIAAgI;IAChI,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,EAChC,KAAK,EACL,UAAU,EACV,cAAc,EACd,OAAO,EACP,KAAK,EACL,KAAK,EACL,kBAA0B,EAC1B,aAAa,EACb,WAAW,EACX,EAAE,EACF,GAAG,QAAQ,EACZ,EAAE,eAAe,CAAC,KAAK,CAAC,2CA6RxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"BiampTableToolbarActions.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTableToolbarActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;AAErD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,6BAA6B,2CAM/B"}
1
+ {"version":3,"file":"BiampTableToolbarActions.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTableToolbarActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;AAErD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,6BAA6B,2CAa/B"}
@@ -18,6 +18,8 @@ export type BiampTableToolbarSearchProps = {
18
18
  expandable?: boolean;
19
19
  /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */
20
20
  expandLabel?: string;
21
+ /** When true, renders a simplified full-width InputBase on screens below the `md` breakpoint. @default true */
22
+ enableMobileView?: boolean;
21
23
  } & Omit<TextFieldProps, 'onChange' | 'value' | 'defaultValue'>;
22
- export declare function BiampTableToolbarSearch({ onChange, defaultValue, debounceDelay, maxLength, maxWidth, placeholder, clearLabel, expandable, expandLabel, sx, ...textFieldProps }: BiampTableToolbarSearchProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function BiampTableToolbarSearch({ onChange, defaultValue, debounceDelay, maxLength, maxWidth, placeholder, clearLabel, expandable, expandLabel, enableMobileView, sx, ...textFieldProps }: BiampTableToolbarSearchProps): import("react/jsx-runtime").JSX.Element;
23
25
  //# sourceMappingURL=BiampTableToolbarSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BiampTableToolbarSearch.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTableToolbarSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAQvB,MAAM,MAAM,4BAA4B,GAAG;IACzC,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC;AAYhE,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,YAAiB,EACjB,aAA0C,EAC1C,SAAe,EACf,QAAc,EACd,WAAsB,EACtB,UAA2B,EAC3B,UAAkB,EAClB,WAAW,EACX,EAAE,EACF,GAAG,cAAc,EAClB,EAAE,4BAA4B,2CAmG9B"}
1
+ {"version":3,"file":"BiampTableToolbarSearch.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTableToolbarSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAQvB,MAAM,MAAM,4BAA4B,GAAG;IACzC,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+GAA+G;IAC/G,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC;AAYhE,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,YAAiB,EACjB,aAA0C,EAC1C,SAAe,EACf,QAAc,EACd,WAAsB,EACtB,UAA2B,EAC3B,UAAkB,EAClB,WAAW,EACX,gBAAuB,EACvB,EAAE,EACF,GAAG,cAAc,EAClB,EAAE,4BAA4B,2CA4H9B"}
package/dist/index.cjs CHANGED
@@ -627,22 +627,6 @@ function BiampTable({
627
627
  enableRowSelection ? 48 : 0
628
628
  );
629
629
  const containerRef = (0, import_react3.useRef)(null);
630
- const lastScrollLeftRef = (0, import_react3.useRef)(null);
631
- const onContainerScroll = (0, import_react3.useCallback)((target) => {
632
- const { scrollLeft, scrollWidth, clientWidth } = target;
633
- if (!containerRef.current || lastScrollLeftRef.current === scrollLeft)
634
- return;
635
- containerRef.current.dataset["rightShadow"] = scrollWidth - clientWidth > scrollLeft ? "true" : "false";
636
- lastScrollLeftRef.current = scrollLeft;
637
- }, []);
638
- (0, import_react3.useEffect)(() => {
639
- if (!containerRef.current) return;
640
- const observer = new ResizeObserver(
641
- ([{ target }]) => onContainerScroll(target)
642
- );
643
- observer.observe(containerRef.current);
644
- return () => observer.disconnect();
645
- }, [onContainerScroll]);
646
630
  const showLoading = useLoadingDelay(!!loading);
647
631
  const rows = table.getRowModel().rows;
648
632
  const showError = !!error && !loading;
@@ -653,7 +637,6 @@ function BiampTable({
653
637
  component: import_material6.Box,
654
638
  ...boxProps,
655
639
  ref: containerRef,
656
- onScroll: (e) => onContainerScroll(e.currentTarget),
657
640
  sx: {
658
641
  display: "flex",
659
642
  flexDirection: "column",
@@ -661,12 +644,6 @@ function BiampTable({
661
644
  overflow: "auto",
662
645
  overscrollBehavior: "none",
663
646
  position: "relative",
664
- '& [data-sticky="right"]': {
665
- transition: "box-shadow .2s"
666
- },
667
- '&[data-right-shadow="true"] [data-sticky="right"]': {
668
- boxShadow: ({ palette }) => `-16px 0px 12px -2px ${palette.background.default}`
669
- },
670
647
  ...sx
671
648
  },
672
649
  children: [
@@ -693,6 +670,7 @@ function BiampTable({
693
670
  checked: table.getIsAllPageRowsSelected(),
694
671
  indeterminate: table.getIsSomePageRowsSelected(),
695
672
  onChange: table.getToggleAllPageRowsSelectedHandler(),
673
+ sx: rows.length === 0 ? { visibility: "hidden" } : void 0,
696
674
  slotProps: { input: { "aria-label": "Select all rows" } }
697
675
  }
698
676
  )
@@ -781,6 +759,7 @@ function BiampTable({
781
759
  disabled: !row.getCanSelect(),
782
760
  onChange: row.getToggleSelectedHandler(),
783
761
  onClick: (e) => e.stopPropagation(),
762
+ sx: !row.getCanSelect() ? { visibility: "hidden" } : void 0,
784
763
  slotProps: {
785
764
  input: {
786
765
  "aria-label": getRowLabel ? `Select ${getRowLabel(row.original)}` : `Select row ${row.index + 1}`
@@ -1206,7 +1185,18 @@ function BiampTableToolbarActions({
1206
1185
  children,
1207
1186
  ...props
1208
1187
  }) {
1209
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_material13.Box, { display: "flex", alignItems: "center", gap: 1, ml: "auto", ...props, children });
1188
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1189
+ import_material13.Box,
1190
+ {
1191
+ display: "flex",
1192
+ alignItems: "center",
1193
+ ml: "auto",
1194
+ gap: { xs: 0, md: 1 },
1195
+ mr: { xs: 1, md: 0 },
1196
+ ...props,
1197
+ children
1198
+ }
1199
+ );
1210
1200
  }
1211
1201
 
1212
1202
  // src/BiampTable/BiampTableToolbarExport.tsx
@@ -1415,9 +1405,11 @@ function BiampTableToolbarSearch({
1415
1405
  clearLabel = "Clear search",
1416
1406
  expandable = false,
1417
1407
  expandLabel,
1408
+ enableMobileView = true,
1418
1409
  sx,
1419
1410
  ...textFieldProps
1420
1411
  }) {
1412
+ const isMobile = (0, import_material16.useMediaQuery)((t) => t.breakpoints.down("md"));
1421
1413
  const [inputValue, setInputValue] = (0, import_react8.useState)(defaultValue);
1422
1414
  const [isExpanded, setIsExpanded] = (0, import_react8.useState)(false);
1423
1415
  const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);
@@ -1481,6 +1473,30 @@ function BiampTableToolbarSearch({
1481
1473
  ...textFieldProps
1482
1474
  }
1483
1475
  );
1476
+ if (isMobile && enableMobileView) {
1477
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material16.Box, { display: "flex", alignItems: "center", width: "100%", pr: 1, gap: 1, children: [
1478
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_assets9.SearchIcon, { sx: { width: 16, height: 16 } }),
1479
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1480
+ import_material16.InputBase,
1481
+ {
1482
+ name: "search",
1483
+ type: "text",
1484
+ placeholder,
1485
+ inputProps: { maxLength, "aria-label": "Search" },
1486
+ fullWidth: true,
1487
+ value: inputValue,
1488
+ sx: {
1489
+ paddingLeft: 1,
1490
+ height: "36px !important",
1491
+ minHeight: "36px !important",
1492
+ fontSize: (t) => t.typography.body2.fontSize
1493
+ },
1494
+ onChange: handleChange,
1495
+ endAdornment: clearButton
1496
+ }
1497
+ )
1498
+ ] });
1499
+ }
1484
1500
  if (expandable) {
1485
1501
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material16.Box, { display: "flex", alignItems: "center", minWidth: 28, children: [
1486
1502
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["export { BiampWrapper, type BiampWrapperProps } from './BiampWrapper';\nexport * from './BiampSidebar';\nexport * from './BiampHeader';\nexport * from './BiampLayout';\nexport * from './BiampTable';\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, renders a checkbox column for row selection. @default false */\n enableRowSelection?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n // Sum visible column min-widths so the <table> element itself gets a concrete\n // minWidth. Without this, `width: 100%` on the table always fills the container\n // and columns just share available space instead of overflowing horizontally.\n const tableMinWidth = table.getVisibleLeafColumns().reduce(\n (sum, col) => {\n const mw = col.columnDef.meta?.minWidth;\n return sum + (typeof mw === 'number' ? mw : 40);\n },\n enableRowSelection ? 48 : 0,\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const lastScrollLeftRef = useRef<number | null>(null);\n\n const onContainerScroll = useCallback((target: Element) => {\n const { scrollLeft, scrollWidth, clientWidth } = target;\n if (!containerRef.current || lastScrollLeftRef.current === scrollLeft)\n return;\n containerRef.current.dataset['rightShadow'] =\n scrollWidth - clientWidth > scrollLeft ? 'true' : 'false';\n lastScrollLeftRef.current = scrollLeft;\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const observer = new ResizeObserver(([{ target }]) =>\n onContainerScroll(target),\n );\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [onContainerScroll]);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const showError = !!error && !loading;\n const showEmpty = !showError && !loading && rows.length === 0;\n\n return (\n <TableContainer\n component={Box}\n {...boxProps}\n ref={containerRef}\n onScroll={(e: React.UIEvent<HTMLDivElement>) =>\n onContainerScroll(e.currentTarget)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'auto',\n overscrollBehavior: 'none',\n position: 'relative',\n '& [data-sticky=\"right\"]': {\n transition: 'box-shadow .2s',\n },\n '&[data-right-shadow=\"true\"] [data-sticky=\"right\"]': {\n boxShadow: ({ palette }: Theme) =>\n `-16px 0px 12px -2px ${palette.background.default}`,\n },\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{ minWidth: tableMinWidth, tableLayout: 'auto' }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n slotProps={{ input: { 'aria-label': 'Select all rows' } }}\n />\n )}\n </TableCell>\n )}\n {headerGroup.headers.map((header) => {\n const sticky = header.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={header.id}\n data-sticky={sticky || undefined}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: sticky\n ? undefined\n : (header.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {!showError &&\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n data-sticky={sticky || undefined}\n sx={{\n minWidth: sticky\n ? undefined\n : (cell.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {error === true ? (\n <BiampTableErrorState sx={{ pointerEvents: 'auto' }} />\n ) : error instanceof Error ? (\n <BiampTableErrorState\n description={error.message}\n sx={{ pointerEvents: 'auto' }}\n />\n ) : (\n error\n )}\n </Box>\n )}\n\n {showEmpty && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {empty && empty !== true ? (\n empty\n ) : (\n <BiampTableEmptyState sx={{ pointerEvents: 'auto' }} />\n )}\n </Box>\n )}\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table, VisibilityState } from '@tanstack/react-table';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Converts a `ColumnVisibility` to TanStack's `VisibilityState`.\n * Use this when passing to `useReactTable({ state: { columnVisibility } })`.\n */\nexport function toVisibilityState(\n visibility: ColumnVisibility,\n): VisibilityState {\n return visibility as VisibilityState;\n}\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import { useRef } from 'react';\nimport { TablePagination, type TablePaginationProps } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n /** Horizontal alignment of the pagination controls. @default 'center' */\n position?: 'left' | 'center' | 'right';\n} & Omit<\n TablePaginationProps<'div'>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n | 'position'\n>;\n\nconst positionMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n position = 'center',\n sx,\n ...paginationProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const { pageSize, 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 if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\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 display=\"flex\" alignItems=\"center\" gap={1} ml=\"auto\" {...props}>\n {children}\n </Box>\n );\n}\n","import { CircularProgress } from '@mui/material';\nimport { DownloadIcon } from '@bwp-web/assets';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarExportProps = {\n /** Called when the export button is clicked. */\n onExport: () => void;\n /** When true, shows a spinner instead of the icon and disables the button. */\n loading?: boolean;\n /** Icon element for the button. @default DownloadIcon */\n icon?: React.ReactNode;\n /** Accessible label for the button. @default \"Export\" */\n label?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent'\n>;\n\nexport function BiampTableToolbarExport({\n onExport,\n loading,\n icon = <DownloadIcon variant=\"xs\" />,\n label = 'Export',\n ...props\n}: BiampTableToolbarExportProps) {\n return (\n <BiampTableToolbarActionButton\n label={loading ? `${label}, loading` : label}\n icon={loading ? <CircularProgress size={20} color=\"inherit\" /> : icon}\n disabled={loading}\n onClick={onExport}\n {...props}\n />\n );\n}\n","import {\n Badge,\n Box,\n Button,\n Divider,\n Drawer,\n type DrawerProps,\n IconButton,\n Typography,\n} from '@mui/material';\nimport { CloseIcon, FilterIcon } from '@bwp-web/assets';\nimport { type ReactNode, useId, useState } from 'react';\nimport { BiampTableToolbarActionButton } from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarFiltersProps = {\n /** Number of currently active filters. Shown as a badge on the trigger button. */\n activeFilterCount: number;\n /** Filter form content rendered inside the drawer body. */\n children: ReactNode;\n /** Called when the user clicks the reset / clear-all button. */\n onReset: () => void;\n /** Called when the drawer is closed (via close button, apply, or backdrop click). */\n onApply?: () => void;\n /** Icon for the toolbar trigger button. @default FilterIcon */\n icon?: ReactNode;\n /** Drawer heading. @default \"Filters\" */\n title?: string;\n /** Reset button label. @default \"Clear filters\" */\n resetLabel?: string;\n /** Apply button label. @default \"Apply\" */\n applyLabel?: string;\n /** Accessible label for the drawer close button. @default \"Close\" */\n closeLabel?: string;\n /** Accessible label for the toolbar trigger button. @default \"Filters\" */\n buttonLabel?: string;\n /** Additional props forwarded to the MUI Drawer. */\n DrawerProps?: Partial<DrawerProps>;\n};\n\nexport function BiampTableToolbarFilters({\n activeFilterCount,\n children,\n onReset,\n onApply,\n icon = <FilterIcon variant=\"xs\" />,\n title = 'Filters',\n resetLabel = 'Clear filters',\n applyLabel = 'Apply',\n closeLabel = 'Close',\n buttonLabel = 'Filters',\n DrawerProps: drawerProps,\n}: BiampTableToolbarFiltersProps) {\n const [open, setOpen] = useState(false);\n const titleId = useId();\n\n function handleClose() {\n onApply?.();\n setOpen(false);\n }\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={buttonLabel}\n icon={icon}\n badgeContent={activeFilterCount}\n onClick={() => setOpen(true)}\n />\n\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n aria-labelledby={titleId}\n {...drawerProps}\n PaperProps={{\n sx: { width: { xs: '100%', sm: 480 } },\n ...drawerProps?.PaperProps,\n }}\n >\n <Box\n height=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n >\n {/* Header */}\n <Box>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n px={3.5}\n py={2.5}\n >\n <Typography id={titleId} variant=\"h2\">\n {title}\n <Badge\n badgeContent={activeFilterCount}\n color=\"secondary\"\n sx={{ ml: 1.5, mb: 0.5 }}\n />\n </Typography>\n <IconButton\n size=\"medium\"\n onClick={handleClose}\n aria-label={closeLabel}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n <Divider />\n\n {/* Body */}\n <Box\n role=\"group\"\n aria-label=\"Filter options\"\n display=\"flex\"\n flexDirection=\"column\"\n gap={2}\n p={3.5}\n overflow=\"auto\"\n >\n {children}\n </Box>\n </Box>\n\n {/* Footer */}\n <Box display=\"flex\">\n <Button\n variant=\"overlay\"\n color=\"secondary\"\n fullWidth\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n {resetLabel}\n </Button>\n <Button\n variant=\"overlay\"\n color=\"primary\"\n fullWidth\n onClick={handleClose}\n >\n {applyLabel}\n </Button>\n </Box>\n </Box>\n </Drawer>\n </>\n );\n}\n","import {\n Box,\n Collapse,\n IconButton,\n InputAdornment,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { CloseIcon, SearchIcon } from '@bwp-web/assets';\nimport { useEffect, useState } from 'react';\nimport {\n BIAMP_TABLE_DEBOUNCE_DELAY,\n useDebouncedCallback,\n} from './useDebouncedCallback';\n\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n} & Omit<TextFieldProps, 'onChange' | 'value' | 'defaultValue'>;\n\nconst searchFieldSx = {\n '& .MuiInputBase-root': {\n height: '36px !important',\n minHeight: '36px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '36px !important',\n },\n} as const;\n\nexport function BiampTableToolbarSearch({\n onChange,\n defaultValue = '',\n debounceDelay = BIAMP_TABLE_DEBOUNCE_DELAY,\n maxLength = 120,\n maxWidth = 280,\n placeholder = 'Search',\n clearLabel = 'Clear search',\n expandable = false,\n expandLabel,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const [inputValue, setInputValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);\n\n useEffect(() => {\n setInputValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedOnChange(e.target.value);\n };\n\n const handleClear = () => {\n setInputValue('');\n debouncedOnChange('');\n };\n\n const handleBlur = () => {\n if (expandable && !inputValue) {\n setIsExpanded(false);\n }\n };\n\n const clearButton = inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={handleClear}\n aria-label={clearLabel}\n sx={{ mr: 0.5 }}\n >\n <CloseIcon variant=\"xs\" sx={{ width: 20, height: 20 }} />\n </IconButton>\n </InputAdornment>\n ) : null;\n\n const textField = (\n <TextField\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n slotProps={{\n htmlInput: { maxLength, 'aria-label': placeholder },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 1 }}>\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </InputAdornment>\n ),\n endAdornment: clearButton,\n },\n }}\n fullWidth\n sx={[\n searchFieldSx,\n expandable ? { width: 170 } : { maxWidth },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n variant=\"outlined\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n {...(expandable && isExpanded && !defaultValue && { autoFocus: true })}\n {...textFieldProps}\n />\n );\n\n if (expandable) {\n return (\n <Box display=\"flex\" alignItems=\"center\" minWidth={28}>\n <IconButton\n aria-label={expandLabel ?? placeholder}\n onClick={() => setIsExpanded(true)}\n sx={{ display: isExpanded || inputValue ? 'none' : 'flex' }}\n >\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </IconButton>\n <Collapse\n in={isExpanded || !!inputValue}\n orientation=\"horizontal\"\n unmountOnExit\n >\n {textField}\n </Collapse>\n </Box>\n );\n }\n\n return textField;\n}\n","import { useCallback, useEffect, useRef } from 'react';\n\n/** Default debounce delay (ms) shared across all BiampTable components. */\nexport const BIAMP_TABLE_DEBOUNCE_DELAY = 300;\n\n/**\n * Returns a debounced version of the given callback.\n * The debounced function delays invocation until `delay` ms after\n * the last call. The pending timer is cleared on unmount.\n */\nexport function useDebouncedCallback<Args extends unknown[]>(\n callback: (...args: Args) => void,\n delay: number = BIAMP_TABLE_DEBOUNCE_DELAY,\n): (...args: Args) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Keep callback ref fresh without restarting timers.\n callbackRef.current = callback;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return useCallback(\n (...args: Args) => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => callbackRef.current(...args),\n delay,\n );\n },\n [delay],\n );\n}\n","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_react","import_assets","import_material","import_jsx_runtime","import_jsx_runtime","import_assets","import_jsx_runtime","import_react","import_jsx_runtime","MuiTable","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_assets","import_react","import_material","import_jsx_runtime","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_assets","import_react","import_jsx_runtime","import_material","import_assets","import_react","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["export { BiampWrapper, type BiampWrapperProps } from './BiampWrapper';\nexport * from './BiampSidebar';\nexport * from './BiampHeader';\nexport * from './BiampLayout';\nexport * from './BiampTable';\n","import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, renders a checkbox column for row selection. @default false */\n enableRowSelection?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\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 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 overflow: 'auto',\n overscrollBehavior: 'none',\n position: 'relative',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{ minWidth: tableMinWidth, tableLayout: 'auto' }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n sx={\n rows.length === 0 ? { visibility: 'hidden' } : 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 return (\n <TableCell\n key={header.id}\n data-sticky={sticky || undefined}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: sticky\n ? undefined\n : (header.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {!showError &&\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n sx={\n !row.getCanSelect()\n ? { visibility: 'hidden' }\n : undefined\n }\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n data-sticky={sticky || undefined}\n sx={{\n minWidth: sticky\n ? undefined\n : (cell.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {error === true ? (\n <BiampTableErrorState sx={{ pointerEvents: 'auto' }} />\n ) : error instanceof Error ? (\n <BiampTableErrorState\n description={error.message}\n sx={{ pointerEvents: 'auto' }}\n />\n ) : (\n error\n )}\n </Box>\n )}\n\n {showEmpty && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {empty && empty !== true ? (\n empty\n ) : (\n <BiampTableEmptyState sx={{ pointerEvents: 'auto' }} />\n )}\n </Box>\n )}\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table, VisibilityState } from '@tanstack/react-table';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Converts a `ColumnVisibility` to TanStack's `VisibilityState`.\n * Use this when passing to `useReactTable({ state: { columnVisibility } })`.\n */\nexport function toVisibilityState(\n visibility: ColumnVisibility,\n): VisibilityState {\n return visibility as VisibilityState;\n}\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import { useRef } from 'react';\nimport { TablePagination, type TablePaginationProps } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n /** Horizontal alignment of the pagination controls. @default 'center' */\n position?: 'left' | 'center' | 'right';\n} & Omit<\n TablePaginationProps<'div'>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n | 'position'\n>;\n\nconst positionMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n position = 'center',\n sx,\n ...paginationProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const { pageSize, 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 if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\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\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n /** When true, renders a simplified full-width InputBase on screens below the `md` breakpoint. @default true */\n enableMobileView?: boolean;\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","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_react","import_assets","import_material","import_jsx_runtime","import_jsx_runtime","import_assets","import_jsx_runtime","import_react","import_jsx_runtime","MuiTable","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_assets","import_react","import_material","import_jsx_runtime","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_assets","import_jsx_runtime","import_material","import_assets","import_react","import_jsx_runtime","import_material","import_assets","import_react","import_react","import_jsx_runtime"]}
package/dist/index.js CHANGED
@@ -480,7 +480,7 @@ import {
480
480
  DropdownChevronUpIcon
481
481
  } from "@bwp-web/assets";
482
482
  import { flexRender } from "@tanstack/react-table";
483
- import { useCallback, useEffect as useEffect2, useRef as useRef2 } from "react";
483
+ import { useRef as useRef2 } from "react";
484
484
 
485
485
  // src/BiampTable/BiampTableEmptyState.tsx
486
486
  import { NoResultsIcon } from "@bwp-web/assets";
@@ -590,22 +590,6 @@ function BiampTable({
590
590
  enableRowSelection ? 48 : 0
591
591
  );
592
592
  const containerRef = useRef2(null);
593
- const lastScrollLeftRef = useRef2(null);
594
- const onContainerScroll = useCallback((target) => {
595
- const { scrollLeft, scrollWidth, clientWidth } = target;
596
- if (!containerRef.current || lastScrollLeftRef.current === scrollLeft)
597
- return;
598
- containerRef.current.dataset["rightShadow"] = scrollWidth - clientWidth > scrollLeft ? "true" : "false";
599
- lastScrollLeftRef.current = scrollLeft;
600
- }, []);
601
- useEffect2(() => {
602
- if (!containerRef.current) return;
603
- const observer = new ResizeObserver(
604
- ([{ target }]) => onContainerScroll(target)
605
- );
606
- observer.observe(containerRef.current);
607
- return () => observer.disconnect();
608
- }, [onContainerScroll]);
609
593
  const showLoading = useLoadingDelay(!!loading);
610
594
  const rows = table.getRowModel().rows;
611
595
  const showError = !!error && !loading;
@@ -616,7 +600,6 @@ function BiampTable({
616
600
  component: Box3,
617
601
  ...boxProps,
618
602
  ref: containerRef,
619
- onScroll: (e) => onContainerScroll(e.currentTarget),
620
603
  sx: {
621
604
  display: "flex",
622
605
  flexDirection: "column",
@@ -624,12 +607,6 @@ function BiampTable({
624
607
  overflow: "auto",
625
608
  overscrollBehavior: "none",
626
609
  position: "relative",
627
- '& [data-sticky="right"]': {
628
- transition: "box-shadow .2s"
629
- },
630
- '&[data-right-shadow="true"] [data-sticky="right"]': {
631
- boxShadow: ({ palette }) => `-16px 0px 12px -2px ${palette.background.default}`
632
- },
633
610
  ...sx
634
611
  },
635
612
  children: [
@@ -656,6 +633,7 @@ function BiampTable({
656
633
  checked: table.getIsAllPageRowsSelected(),
657
634
  indeterminate: table.getIsSomePageRowsSelected(),
658
635
  onChange: table.getToggleAllPageRowsSelectedHandler(),
636
+ sx: rows.length === 0 ? { visibility: "hidden" } : void 0,
659
637
  slotProps: { input: { "aria-label": "Select all rows" } }
660
638
  }
661
639
  )
@@ -744,6 +722,7 @@ function BiampTable({
744
722
  disabled: !row.getCanSelect(),
745
723
  onChange: row.getToggleSelectedHandler(),
746
724
  onClick: (e) => e.stopPropagation(),
725
+ sx: !row.getCanSelect() ? { visibility: "hidden" } : void 0,
747
726
  slotProps: {
748
727
  input: {
749
728
  "aria-label": getRowLabel ? `Select ${getRowLabel(row.original)}` : `Select row ${row.index + 1}`
@@ -1181,7 +1160,18 @@ function BiampTableToolbarActions({
1181
1160
  children,
1182
1161
  ...props
1183
1162
  }) {
1184
- return /* @__PURE__ */ jsx15(Box6, { display: "flex", alignItems: "center", gap: 1, ml: "auto", ...props, children });
1163
+ return /* @__PURE__ */ jsx15(
1164
+ Box6,
1165
+ {
1166
+ display: "flex",
1167
+ alignItems: "center",
1168
+ ml: "auto",
1169
+ gap: { xs: 0, md: 1 },
1170
+ mr: { xs: 1, md: 0 },
1171
+ ...props,
1172
+ children
1173
+ }
1174
+ );
1185
1175
  }
1186
1176
 
1187
1177
  // src/BiampTable/BiampTableToolbarExport.tsx
@@ -1354,24 +1344,26 @@ import {
1354
1344
  Collapse,
1355
1345
  IconButton as IconButton4,
1356
1346
  InputAdornment as InputAdornment2,
1357
- TextField as TextField2
1347
+ InputBase,
1348
+ TextField as TextField2,
1349
+ useMediaQuery
1358
1350
  } from "@mui/material";
1359
1351
  import { CloseIcon as CloseIcon2, SearchIcon as SearchIcon2 } from "@bwp-web/assets";
1360
- import { useEffect as useEffect4, useState as useState4 } from "react";
1352
+ import { useEffect as useEffect3, useState as useState4 } from "react";
1361
1353
 
1362
1354
  // src/BiampTable/useDebouncedCallback.ts
1363
- import { useCallback as useCallback2, useEffect as useEffect3, useRef as useRef4 } from "react";
1355
+ import { useCallback, useEffect as useEffect2, useRef as useRef4 } from "react";
1364
1356
  var BIAMP_TABLE_DEBOUNCE_DELAY = 300;
1365
1357
  function useDebouncedCallback(callback, delay = BIAMP_TABLE_DEBOUNCE_DELAY) {
1366
1358
  const timeoutRef = useRef4(null);
1367
1359
  const callbackRef = useRef4(callback);
1368
1360
  callbackRef.current = callback;
1369
- useEffect3(() => {
1361
+ useEffect2(() => {
1370
1362
  return () => {
1371
1363
  if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);
1372
1364
  };
1373
1365
  }, []);
1374
- return useCallback2(
1366
+ return useCallback(
1375
1367
  (...args) => {
1376
1368
  if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);
1377
1369
  timeoutRef.current = setTimeout(
@@ -1404,13 +1396,15 @@ function BiampTableToolbarSearch({
1404
1396
  clearLabel = "Clear search",
1405
1397
  expandable = false,
1406
1398
  expandLabel,
1399
+ enableMobileView = true,
1407
1400
  sx,
1408
1401
  ...textFieldProps
1409
1402
  }) {
1403
+ const isMobile = useMediaQuery((t) => t.breakpoints.down("md"));
1410
1404
  const [inputValue, setInputValue] = useState4(defaultValue);
1411
1405
  const [isExpanded, setIsExpanded] = useState4(false);
1412
1406
  const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);
1413
- useEffect4(() => {
1407
+ useEffect3(() => {
1414
1408
  setInputValue(defaultValue);
1415
1409
  }, [defaultValue]);
1416
1410
  const handleChange = (e) => {
@@ -1470,6 +1464,30 @@ function BiampTableToolbarSearch({
1470
1464
  ...textFieldProps
1471
1465
  }
1472
1466
  );
1467
+ if (isMobile && enableMobileView) {
1468
+ return /* @__PURE__ */ jsxs9(Box8, { display: "flex", alignItems: "center", width: "100%", pr: 1, gap: 1, children: [
1469
+ /* @__PURE__ */ jsx18(SearchIcon2, { sx: { width: 16, height: 16 } }),
1470
+ /* @__PURE__ */ jsx18(
1471
+ InputBase,
1472
+ {
1473
+ name: "search",
1474
+ type: "text",
1475
+ placeholder,
1476
+ inputProps: { maxLength, "aria-label": "Search" },
1477
+ fullWidth: true,
1478
+ value: inputValue,
1479
+ sx: {
1480
+ paddingLeft: 1,
1481
+ height: "36px !important",
1482
+ minHeight: "36px !important",
1483
+ fontSize: (t) => t.typography.body2.fontSize
1484
+ },
1485
+ onChange: handleChange,
1486
+ endAdornment: clearButton
1487
+ }
1488
+ )
1489
+ ] });
1490
+ }
1473
1491
  if (expandable) {
1474
1492
  return /* @__PURE__ */ jsxs9(Box8, { display: "flex", alignItems: "center", minWidth: 28, children: [
1475
1493
  /* @__PURE__ */ jsx18(
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, renders a checkbox column for row selection. @default false */\n enableRowSelection?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\n // Sum visible column min-widths so the <table> element itself gets a concrete\n // minWidth. Without this, `width: 100%` on the table always fills the container\n // and columns just share available space instead of overflowing horizontally.\n const tableMinWidth = table.getVisibleLeafColumns().reduce(\n (sum, col) => {\n const mw = col.columnDef.meta?.minWidth;\n return sum + (typeof mw === 'number' ? mw : 40);\n },\n enableRowSelection ? 48 : 0,\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const lastScrollLeftRef = useRef<number | null>(null);\n\n const onContainerScroll = useCallback((target: Element) => {\n const { scrollLeft, scrollWidth, clientWidth } = target;\n if (!containerRef.current || lastScrollLeftRef.current === scrollLeft)\n return;\n containerRef.current.dataset['rightShadow'] =\n scrollWidth - clientWidth > scrollLeft ? 'true' : 'false';\n lastScrollLeftRef.current = scrollLeft;\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const observer = new ResizeObserver(([{ target }]) =>\n onContainerScroll(target),\n );\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [onContainerScroll]);\n\n const showLoading = useLoadingDelay(!!loading);\n\n const rows = table.getRowModel().rows;\n const showError = !!error && !loading;\n const showEmpty = !showError && !loading && rows.length === 0;\n\n return (\n <TableContainer\n component={Box}\n {...boxProps}\n ref={containerRef}\n onScroll={(e: React.UIEvent<HTMLDivElement>) =>\n onContainerScroll(e.currentTarget)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'auto',\n overscrollBehavior: 'none',\n position: 'relative',\n '& [data-sticky=\"right\"]': {\n transition: 'box-shadow .2s',\n },\n '&[data-right-shadow=\"true\"] [data-sticky=\"right\"]': {\n boxShadow: ({ palette }: Theme) =>\n `-16px 0px 12px -2px ${palette.background.default}`,\n },\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{ minWidth: tableMinWidth, tableLayout: 'auto' }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n slotProps={{ input: { 'aria-label': 'Select all rows' } }}\n />\n )}\n </TableCell>\n )}\n {headerGroup.headers.map((header) => {\n const sticky = header.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={header.id}\n data-sticky={sticky || undefined}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: sticky\n ? undefined\n : (header.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {!showError &&\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n data-sticky={sticky || undefined}\n sx={{\n minWidth: sticky\n ? undefined\n : (cell.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {error === true ? (\n <BiampTableErrorState sx={{ pointerEvents: 'auto' }} />\n ) : error instanceof Error ? (\n <BiampTableErrorState\n description={error.message}\n sx={{ pointerEvents: 'auto' }}\n />\n ) : (\n error\n )}\n </Box>\n )}\n\n {showEmpty && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {empty && empty !== true ? (\n empty\n ) : (\n <BiampTableEmptyState sx={{ pointerEvents: 'auto' }} />\n )}\n </Box>\n )}\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table, VisibilityState } from '@tanstack/react-table';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Converts a `ColumnVisibility` to TanStack's `VisibilityState`.\n * Use this when passing to `useReactTable({ state: { columnVisibility } })`.\n */\nexport function toVisibilityState(\n visibility: ColumnVisibility,\n): VisibilityState {\n return visibility as VisibilityState;\n}\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import { useRef } from 'react';\nimport { TablePagination, type TablePaginationProps } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n /** Horizontal alignment of the pagination controls. @default 'center' */\n position?: 'left' | 'center' | 'right';\n} & Omit<\n TablePaginationProps<'div'>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n | 'position'\n>;\n\nconst positionMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n position = 'center',\n sx,\n ...paginationProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const { pageSize, 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 if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\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 display=\"flex\" alignItems=\"center\" gap={1} ml=\"auto\" {...props}>\n {children}\n </Box>\n );\n}\n","import { CircularProgress } from '@mui/material';\nimport { DownloadIcon } from '@bwp-web/assets';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarExportProps = {\n /** Called when the export button is clicked. */\n onExport: () => void;\n /** When true, shows a spinner instead of the icon and disables the button. */\n loading?: boolean;\n /** Icon element for the button. @default DownloadIcon */\n icon?: React.ReactNode;\n /** Accessible label for the button. @default \"Export\" */\n label?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent'\n>;\n\nexport function BiampTableToolbarExport({\n onExport,\n loading,\n icon = <DownloadIcon variant=\"xs\" />,\n label = 'Export',\n ...props\n}: BiampTableToolbarExportProps) {\n return (\n <BiampTableToolbarActionButton\n label={loading ? `${label}, loading` : label}\n icon={loading ? <CircularProgress size={20} color=\"inherit\" /> : icon}\n disabled={loading}\n onClick={onExport}\n {...props}\n />\n );\n}\n","import {\n Badge,\n Box,\n Button,\n Divider,\n Drawer,\n type DrawerProps,\n IconButton,\n Typography,\n} from '@mui/material';\nimport { CloseIcon, FilterIcon } from '@bwp-web/assets';\nimport { type ReactNode, useId, useState } from 'react';\nimport { BiampTableToolbarActionButton } from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarFiltersProps = {\n /** Number of currently active filters. Shown as a badge on the trigger button. */\n activeFilterCount: number;\n /** Filter form content rendered inside the drawer body. */\n children: ReactNode;\n /** Called when the user clicks the reset / clear-all button. */\n onReset: () => void;\n /** Called when the drawer is closed (via close button, apply, or backdrop click). */\n onApply?: () => void;\n /** Icon for the toolbar trigger button. @default FilterIcon */\n icon?: ReactNode;\n /** Drawer heading. @default \"Filters\" */\n title?: string;\n /** Reset button label. @default \"Clear filters\" */\n resetLabel?: string;\n /** Apply button label. @default \"Apply\" */\n applyLabel?: string;\n /** Accessible label for the drawer close button. @default \"Close\" */\n closeLabel?: string;\n /** Accessible label for the toolbar trigger button. @default \"Filters\" */\n buttonLabel?: string;\n /** Additional props forwarded to the MUI Drawer. */\n DrawerProps?: Partial<DrawerProps>;\n};\n\nexport function BiampTableToolbarFilters({\n activeFilterCount,\n children,\n onReset,\n onApply,\n icon = <FilterIcon variant=\"xs\" />,\n title = 'Filters',\n resetLabel = 'Clear filters',\n applyLabel = 'Apply',\n closeLabel = 'Close',\n buttonLabel = 'Filters',\n DrawerProps: drawerProps,\n}: BiampTableToolbarFiltersProps) {\n const [open, setOpen] = useState(false);\n const titleId = useId();\n\n function handleClose() {\n onApply?.();\n setOpen(false);\n }\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={buttonLabel}\n icon={icon}\n badgeContent={activeFilterCount}\n onClick={() => setOpen(true)}\n />\n\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n aria-labelledby={titleId}\n {...drawerProps}\n PaperProps={{\n sx: { width: { xs: '100%', sm: 480 } },\n ...drawerProps?.PaperProps,\n }}\n >\n <Box\n height=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n >\n {/* Header */}\n <Box>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n px={3.5}\n py={2.5}\n >\n <Typography id={titleId} variant=\"h2\">\n {title}\n <Badge\n badgeContent={activeFilterCount}\n color=\"secondary\"\n sx={{ ml: 1.5, mb: 0.5 }}\n />\n </Typography>\n <IconButton\n size=\"medium\"\n onClick={handleClose}\n aria-label={closeLabel}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n <Divider />\n\n {/* Body */}\n <Box\n role=\"group\"\n aria-label=\"Filter options\"\n display=\"flex\"\n flexDirection=\"column\"\n gap={2}\n p={3.5}\n overflow=\"auto\"\n >\n {children}\n </Box>\n </Box>\n\n {/* Footer */}\n <Box display=\"flex\">\n <Button\n variant=\"overlay\"\n color=\"secondary\"\n fullWidth\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n {resetLabel}\n </Button>\n <Button\n variant=\"overlay\"\n color=\"primary\"\n fullWidth\n onClick={handleClose}\n >\n {applyLabel}\n </Button>\n </Box>\n </Box>\n </Drawer>\n </>\n );\n}\n","import {\n Box,\n Collapse,\n IconButton,\n InputAdornment,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { CloseIcon, SearchIcon } from '@bwp-web/assets';\nimport { useEffect, useState } from 'react';\nimport {\n BIAMP_TABLE_DEBOUNCE_DELAY,\n useDebouncedCallback,\n} from './useDebouncedCallback';\n\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n} & Omit<TextFieldProps, 'onChange' | 'value' | 'defaultValue'>;\n\nconst searchFieldSx = {\n '& .MuiInputBase-root': {\n height: '36px !important',\n minHeight: '36px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '36px !important',\n },\n} as const;\n\nexport function BiampTableToolbarSearch({\n onChange,\n defaultValue = '',\n debounceDelay = BIAMP_TABLE_DEBOUNCE_DELAY,\n maxLength = 120,\n maxWidth = 280,\n placeholder = 'Search',\n clearLabel = 'Clear search',\n expandable = false,\n expandLabel,\n sx,\n ...textFieldProps\n}: BiampTableToolbarSearchProps) {\n const [inputValue, setInputValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n const debouncedOnChange = useDebouncedCallback(onChange, debounceDelay);\n\n useEffect(() => {\n setInputValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedOnChange(e.target.value);\n };\n\n const handleClear = () => {\n setInputValue('');\n debouncedOnChange('');\n };\n\n const handleBlur = () => {\n if (expandable && !inputValue) {\n setIsExpanded(false);\n }\n };\n\n const clearButton = inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={handleClear}\n aria-label={clearLabel}\n sx={{ mr: 0.5 }}\n >\n <CloseIcon variant=\"xs\" sx={{ width: 20, height: 20 }} />\n </IconButton>\n </InputAdornment>\n ) : null;\n\n const textField = (\n <TextField\n name=\"search\"\n type=\"text\"\n placeholder={placeholder}\n slotProps={{\n htmlInput: { maxLength, 'aria-label': placeholder },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 1 }}>\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </InputAdornment>\n ),\n endAdornment: clearButton,\n },\n }}\n fullWidth\n sx={[\n searchFieldSx,\n expandable ? { width: 170 } : { maxWidth },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n variant=\"outlined\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n {...(expandable && isExpanded && !defaultValue && { autoFocus: true })}\n {...textFieldProps}\n />\n );\n\n if (expandable) {\n return (\n <Box display=\"flex\" alignItems=\"center\" minWidth={28}>\n <IconButton\n aria-label={expandLabel ?? placeholder}\n onClick={() => setIsExpanded(true)}\n sx={{ display: isExpanded || inputValue ? 'none' : 'flex' }}\n >\n <SearchIcon\n variant=\"xs\"\n color=\"inherit\"\n sx={{ width: 16, height: 16 }}\n />\n </IconButton>\n <Collapse\n in={isExpanded || !!inputValue}\n orientation=\"horizontal\"\n unmountOnExit\n >\n {textField}\n </Collapse>\n </Box>\n );\n }\n\n return textField;\n}\n","import { useCallback, useEffect, useRef } from 'react';\n\n/** Default debounce delay (ms) shared across all BiampTable components. */\nexport const BIAMP_TABLE_DEBOUNCE_DELAY = 300;\n\n/**\n * Returns a debounced version of the given callback.\n * The debounced function delays invocation until `delay` ms after\n * the last call. The pending timer is cleared on unmount.\n */\nexport function useDebouncedCallback<Args extends unknown[]>(\n callback: (...args: Args) => void,\n delay: number = BIAMP_TABLE_DEBOUNCE_DELAY,\n): (...args: Args) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Keep callback ref fresh without restarting timers.\n callbackRef.current = callback;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return useCallback(\n (...args: Args) => {\n if (timeoutRef.current !== null) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => callbackRef.current(...args),\n delay,\n );\n },\n [delay],\n );\n}\n","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","useEffect","useRef","Stack","Typography","jsx","jsxs","jsx","jsx","jsx","jsxs","useRef","useEffect","Box","Stack","jsx","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","jsx","jsxs","useState","useRef","jsx","Box","jsx","Box","jsx","jsx","Badge","Box","Divider","IconButton","Typography","useState","Fragment","jsx","jsxs","useState","Box","Typography","Badge","IconButton","Divider","Box","IconButton","InputAdornment","TextField","CloseIcon","SearchIcon","useEffect","useState","useCallback","useEffect","useRef","jsx","jsxs","useState","useEffect","InputAdornment","IconButton","CloseIcon","TextField","SearchIcon","Box"]}
1
+ {"version":3,"sources":["../src/BiampWrapper/BiampWrapper.tsx","../src/BiampSidebar/BiampSidebar.tsx","../src/BiampHeader/BiampHeader.tsx","../src/BiampLayout/BiampLayout.tsx","../src/BiampTable/BiampTable.tsx","../src/BiampTable/BiampTableEmptyState.tsx","../src/BiampTable/BiampTableStatusMessage.tsx","../src/BiampTable/BiampTableErrorState.tsx","../src/BiampTable/useLoadingDelay.ts","../src/BiampTable/BiampTableContainer.tsx","../src/BiampTable/BiampTableCellActionButton.tsx","../src/BiampTable/BiampTableColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarColumnVisibility.tsx","../src/BiampTable/BiampTableToolbarActionButton.tsx","../src/BiampTable/BiampTablePagination.tsx","../src/BiampTable/BiampTableToolbar.tsx","../src/BiampTable/BiampTableToolbarActions.tsx","../src/BiampTable/BiampTableToolbarExport.tsx","../src/BiampTable/BiampTableToolbarFilters.tsx","../src/BiampTable/BiampTableToolbarSearch.tsx","../src/BiampTable/useDebouncedCallback.ts","../src/BiampTable/exportCsv.ts"],"sourcesContent":["import React from 'react';\nimport { Stack, StackProps } from '@mui/material';\n\nexport type BiampWrapperProps = StackProps & {\n children?: React.ReactNode;\n};\n\n/**\n * A full-page content wrapper that stretches to fill all available space\n * with 16px padding, 8px border radius, and scrollable overflow.\n * Background: white (light) / `grey.800` (dark).\n */\nexport function BiampWrapper({ children, sx, ...props }: BiampWrapperProps) {\n return (\n <Stack\n direction=\"column\"\n padding=\"16px\"\n alignItems=\"flex-start\"\n sx={{\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: '8px',\n overflow: 'auto',\n overscrollBehavior: 'none',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import {\n Box,\n ListItemButton,\n ListItemButtonProps,\n Stack,\n StackProps,\n} from '@mui/material';\nimport { BiampLogoIcon } from '@bwp-web/assets';\nimport { JSX } from 'react';\n\ntype BiampSidebarProps = StackProps & {\n children: React.ReactNode;\n bottomLogoIcon?: JSX.Element;\n};\n\nexport function BiampSidebar({\n children,\n bottomLogoIcon,\n sx,\n ...props\n}: BiampSidebarProps) {\n return (\n <Stack width=\"48px\" height=\"100%\" sx={{ ...sx }} {...props}>\n <Stack height=\"100%\">{children}</Stack>\n {bottomLogoIcon ?? (\n <BiampLogoIcon sx={{ width: '48px', height: '15px' }} />\n )}\n </Stack>\n );\n}\n\ntype BiampSidebarIconList = StackProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarIconList({\n children,\n sx,\n ...props\n}: BiampSidebarIconList) {\n return (\n <Stack height=\"100%\" sx={{ gap: '4px', ...sx }} {...props}>\n {children}\n </Stack>\n );\n}\n\ntype BiampSidebarIconProps = ListItemButtonProps & {\n selected?: boolean;\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n};\n\nexport function BiampSidebarIcon({\n selected,\n icon,\n selectedIcon,\n sx,\n ...props\n}: BiampSidebarIconProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampSidebarComponentProps = ListItemButtonProps & {\n children: React.ReactNode;\n};\n\nexport function BiampSidebarComponent({\n children,\n sx,\n ...props\n}: BiampSidebarComponentProps) {\n return (\n <Box\n sx={{\n minWidth: '48px',\n maxWidth: '48px',\n minHeight: '48px',\n maxHeight: '48px',\n borderRadius: '8px',\n overflow: 'hidden',\n justifyContent: 'center',\n alignItems: 'center',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n","import {\n alpha,\n Box,\n BoxProps,\n InputAdornment,\n ListItemButton,\n ListItemButtonProps,\n Popover,\n PopoverProps,\n Stack,\n StackProps,\n TextField,\n TextFieldProps,\n Typography,\n} from '@mui/material';\nimport { JSX } from 'react';\nimport { BiampRedLogo, SearchIcon } from '@bwp-web/assets';\n\ntype BiampHeaderProps = StackProps & {\n children?: React.ReactNode;\n};\n\nexport function BiampHeader({ children, sx, ...props }: BiampHeaderProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{ px: 2.5, py: 1.5, ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n\ntype BiampHeaderTitleProps = BoxProps & {\n icon?: JSX.Element;\n title?: string;\n subtitle?: string;\n};\n\nexport function BiampHeaderTitle({\n icon,\n title,\n subtitle,\n sx,\n ...props\n}: BiampHeaderTitleProps) {\n return (\n <Box\n sx={{ pr: 3, display: 'flex', alignItems: 'center', gap: '12px', ...sx }}\n {...props}\n >\n {icon ? (\n <Box\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {icon}\n </Box>\n ) : (\n <Box\n component=\"img\"\n src={BiampRedLogo}\n alt=\"Biamp\"\n sx={{ width: 24, height: 24 }}\n />\n )}\n <Stack direction=\"row\" gap={0.5}>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n {subtitle && (\n <Typography variant=\"h4\" color=\"text.secondary\">\n {subtitle}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\ntype BiampHeaderSearchProps = TextFieldProps;\n\nexport function BiampHeaderSearch({ sx, ...props }: BiampHeaderSearchProps) {\n return (\n <TextField\n placeholder=\"Search...\"\n fullWidth\n sx={{\n px: 1.5,\n '& .MuiOutlinedInput-root': {\n height: '40px !important',\n minHeight: '40px',\n },\n '& .MuiOutlinedInput-input': {\n height: '40px !important',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n height: '40px !important',\n border: 'none',\n boxShadow: 'none',\n },\n ...sx,\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n },\n }}\n {...props}\n />\n );\n}\n\ntype BiampHeaderActionsProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderActions({\n children,\n sx,\n ...props\n}: BiampHeaderActionsProps) {\n return (\n <Box\n sx={{\n pl: 3,\n gap: 2,\n display: 'flex',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonListProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampHeaderButtonList({\n children,\n sx,\n ...props\n}: BiampHeaderButtonListProps) {\n return (\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, ...sx }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampHeaderButtonProps = ListItemButtonProps & {\n icon: JSX.Element;\n selectedIcon?: JSX.Element;\n selected?: boolean;\n};\n\nexport function BiampHeaderButton({\n icon,\n selectedIcon,\n selected,\n sx,\n ...props\n}: BiampHeaderButtonProps) {\n const displayedSelectedIcon = selectedIcon ?? icon;\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '40px',\n maxWidth: '40px',\n minHeight: '40px',\n maxHeight: '40px',\n borderRadius: '4px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n {selected ? displayedSelectedIcon : icon}\n </ListItemButton>\n );\n}\n\ntype BiampAppPopoverProps = PopoverProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppPopover({\n children,\n open,\n sx,\n ...props\n}: BiampAppPopoverProps) {\n return (\n <Popover\n open={open}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n sx={{ ...sx }}\n transformOrigin={{ vertical: -4, horizontal: 150 }}\n slotProps={{\n paper: {\n sx: {\n borderRadius: '16px',\n backgroundImage: 'none',\n border: ({ palette }) => `0.6px solid ${palette.divider}`,\n boxShadow: ({ palette }) =>\n `0px 4px 24px 0px ${alpha(palette.common.black, 0.15)};`,\n },\n },\n }}\n {...props}\n >\n {children}\n </Popover>\n );\n}\n\ntype BiampAppDialogProps = BoxProps & {\n children: React.ReactNode;\n};\n\nexport function BiampAppDialog({\n children,\n sx,\n ...props\n}: BiampAppDialogProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 1.5,\n maxWidth: '284px',\n borderRadius: '16px',\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.common.white,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n}\n\ntype BiampAppDialogItemProps = BoxProps & {\n children: React.ReactNode;\n name: string;\n};\n\nexport function BiampAppDialogItem({\n children,\n name,\n sx,\n ...props\n}: BiampAppDialogItemProps) {\n return (\n <Box\n sx={{\n width: '76px',\n height: '89px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n justifyContent: 'center',\n gap: '4px',\n borderRadius: '12px',\n border: '0.6px solid transparent',\n transition: 'background-color 0.2s ease, border-color 0.2s ease',\n ':hover': {\n backgroundColor: ({ palette }) => alpha(palette.info.main, 0.1),\n borderColor: ({ palette }) => palette.info.main,\n },\n ...sx,\n }}\n {...props}\n >\n <Box\n sx={{\n mt: '8px',\n width: '54px',\n height: '54px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {children}\n </Box>\n <Typography\n variant=\"caption\"\n fontWeight={600}\n sx={{\n textAlign: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n }}\n >\n {name}\n </Typography>\n </Box>\n );\n}\n\ntype BiampHeaderProfileProps = ListItemButtonProps & {\n image: string;\n selected?: boolean;\n};\n\nexport function BiampHeaderProfile({\n image,\n selected,\n sx,\n ...props\n}: BiampHeaderProfileProps) {\n return (\n <ListItemButton\n selected={selected}\n disableGutters\n disableRipple\n sx={{\n minWidth: '36px',\n maxWidth: '36px',\n minHeight: '36px',\n maxHeight: '36px',\n borderRadius: '6px',\n justifyContent: 'center',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n >\n <Box\n component=\"img\"\n src={image}\n alt={'Profile Image'}\n sx={{\n width: 32,\n height: 32,\n borderRadius: '4px',\n border: ({ palette }) =>\n `0.6px solid var(--Divider-divider_primary, ${alpha(palette.background.paper, 0.15)})`,\n }}\n />\n </ListItemButton>\n );\n}\n","import { Stack, StackProps } from '@mui/material';\nimport React from 'react';\n\ntype BiampLayoutProps = StackProps & {\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n children: React.ReactNode;\n};\n\nexport function BiampLayout({\n header,\n sidebar,\n children,\n sx,\n ...props\n}: BiampLayoutProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100vh\"\n sx={{\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[900] : palette.grey[100],\n ...sx,\n }}\n {...props}\n >\n {header}\n <Stack\n direction=\"row\"\n flex={1}\n minHeight={0}\n gap={{ xs: 1.5, md: 2.5 }}\n px={{ xs: 1.5, md: 2.5 }}\n pb={{ xs: 1.5, md: 2.5 }}\n pt={{ xs: header ? 0 : 1.5, md: header ? 0 : 2.5 }}\n >\n {sidebar}\n {children}\n </Stack>\n </Stack>\n );\n}\n","import {\n Box,\n type BoxProps,\n Checkbox,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n type Theme,\n} from '@mui/material';\nimport {\n DropdownChevronDownIcon,\n DropdownChevronUpIcon,\n} from '@bwp-web/assets';\nimport { flexRender, type Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useRef } from 'react';\nimport { BiampTableEmptyState } from './BiampTableEmptyState';\nimport { BiampTableErrorState } from './BiampTableErrorState';\nimport './tanstack-meta';\nimport { useLoadingDelay } from './useLoadingDelay';\n\nexport type BiampTableProps<TData> = BoxProps & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Called when a clickable body row is clicked. Receives the row's original data. */\n onRowClick?: (row: TData) => void;\n /**\n * Controls which rows are clickable. When omitted, all rows are clickable if\n * `onRowClick` is provided. Has no effect when `onRowClick` is not provided.\n */\n isRowClickable?: (row: TData) => boolean;\n /** When true, shows a LinearProgress bar below the table header. */\n loading?: boolean;\n /** When truthy, shown in place of table body rows. Pass `true` or an `Error` for the default error state (an `Error`'s message is displayed), or a custom ReactNode. */\n error?: boolean | Error | ReactNode;\n /** When truthy and the table has no rows, shown instead of an empty body. Pass `true` for the default empty state, or a custom ReactNode. */\n empty?: boolean | ReactNode;\n /** When true, renders a checkbox column for row selection. @default false */\n enableRowSelection?: boolean;\n /** When true, hides the \"select all\" header checkbox while keeping individual row checkboxes. */\n hideSelectAll?: boolean;\n /** Returns a human-readable name for a row, used in ARIA labels (e.g. \"Select: Conference Room A\"). Falls back to row index. */\n getRowLabel?: (row: TData) => string;\n};\n\nexport function BiampTable<TData>({\n table,\n onRowClick,\n isRowClickable,\n loading,\n error,\n empty,\n enableRowSelection = false,\n hideSelectAll,\n getRowLabel,\n sx,\n ...boxProps\n}: BiampTableProps<TData>) {\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 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 overflow: 'auto',\n overscrollBehavior: 'none',\n position: 'relative',\n ...sx,\n }}\n >\n <MuiTable\n aria-busy={showLoading || undefined}\n sx={{ minWidth: tableMinWidth, tableLayout: 'auto' }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 3,\n bgcolor: 'background.paper',\n }}\n >\n {!hideSelectAll && (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n sx={\n rows.length === 0 ? { visibility: 'hidden' } : 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 return (\n <TableCell\n key={header.id}\n data-sticky={sticky || undefined}\n sortDirection={header.column.getIsSorted() || false}\n {...(header.column.getCanSort() && {\n 'aria-sort': header.column.getIsSorted()\n ? header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none',\n })}\n sx={{\n minWidth: sticky\n ? undefined\n : (header.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 3,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n }),\n }}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <TableSortLabel\n active={!!header.column.getIsSorted()}\n direction={header.column.getIsSorted() || 'asc'}\n onClick={header.column.getToggleSortingHandler()}\n {...(header.column.getIsSorted() && {\n IconComponent:\n header.column.getIsSorted() === 'asc'\n ? DropdownChevronUpIcon\n : DropdownChevronDownIcon,\n })}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableSortLabel>\n ) : (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n\n <TableBody sx={{ opacity: showLoading ? 0.3 : 1 }}>\n {!showError &&\n rows.map((row) => {\n const clickable = onRowClick\n ? isRowClickable\n ? isRowClickable(row.original)\n : true\n : false;\n\n return (\n <TableRow\n key={row.id}\n hover={clickable}\n selected={\n enableRowSelection ? row.getIsSelected() : undefined\n }\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n sx={{ cursor: clickable ? 'pointer' : undefined }}\n onClick={\n clickable && onRowClick\n ? () => onRowClick(row.original)\n : undefined\n }\n onKeyDown={\n clickable && onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n >\n {enableRowSelection && (\n <TableCell\n padding=\"checkbox\"\n sx={{\n position: 'sticky',\n left: 0,\n zIndex: 2,\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }}\n >\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n sx={\n !row.getCanSelect()\n ? { visibility: 'hidden' }\n : undefined\n }\n slotProps={{\n input: {\n 'aria-label': getRowLabel\n ? `Select ${getRowLabel(row.original)}`\n : `Select row ${row.index + 1}`,\n },\n }}\n />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const sticky = cell.column.columnDef.meta?.sticky;\n return (\n <TableCell\n key={cell.id}\n data-sticky={sticky || undefined}\n sx={{\n minWidth: sticky\n ? undefined\n : (cell.column.columnDef.meta?.minWidth ?? 40),\n ...(sticky && {\n position: 'sticky',\n [sticky]: 0,\n zIndex: 2,\n width: 0,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n bgcolor: 'background.paper',\n '.MuiTableRow-hover:hover > &, .Mui-selected > &': {\n bgcolor: ({ palette }: Theme) =>\n palette.mode === 'dark'\n ? palette.grey[800]\n : palette.grey[100],\n },\n }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n\n {showError && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {error === true ? (\n <BiampTableErrorState sx={{ pointerEvents: 'auto' }} />\n ) : error instanceof Error ? (\n <BiampTableErrorState\n description={error.message}\n sx={{ pointerEvents: 'auto' }}\n />\n ) : (\n error\n )}\n </Box>\n )}\n\n {showEmpty && (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n {empty && empty !== true ? (\n empty\n ) : (\n <BiampTableEmptyState sx={{ pointerEvents: 'auto' }} />\n )}\n </Box>\n )}\n </TableContainer>\n );\n}\n","import { NoResultsIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableEmptyStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableEmptyState({\n icon = <NoResultsIcon />,\n title = 'Nothing to show',\n ...rest\n}: BiampTableEmptyStateProps) {\n return (\n <BiampTableStatusMessage\n role=\"status\"\n icon={icon}\n title={title}\n {...rest}\n />\n );\n}\n","import { Stack, type StackProps, Typography } from '@mui/material';\nimport { cloneElement, type JSX, type ReactNode } from 'react';\n\nexport type BiampTableStatusMessageProps = StackProps & {\n /** Required icon element rendered at 56×56. */\n icon: JSX.Element;\n /** Required title text. */\n title: string;\n /** Optional description text. */\n description?: string;\n /** Optional extra content (e.g. retry buttons). */\n children?: ReactNode;\n};\n\nexport function BiampTableStatusMessage({\n icon,\n title,\n description,\n children,\n ...stackProps\n}: BiampTableStatusMessageProps) {\n return (\n <Stack alignItems=\"center\" gap={2} {...stackProps}>\n {cloneElement(icon, {\n 'aria-hidden': true,\n sx: { width: 56, height: 56, ...icon.props.sx },\n })}\n <Typography variant=\"h2\">{title}</Typography>\n {description && <Typography variant=\"body1\">{description}</Typography>}\n {children}\n </Stack>\n );\n}\n","import { ServiceNotReachableIcon } from '@bwp-web/assets';\nimport {\n BiampTableStatusMessage,\n type BiampTableStatusMessageProps,\n} from './BiampTableStatusMessage';\n\nexport type BiampTableErrorStateProps = Partial<BiampTableStatusMessageProps>;\n\nexport function BiampTableErrorState({\n icon = <ServiceNotReachableIcon />,\n title = 'Failed to load',\n ...rest\n}: BiampTableErrorStateProps) {\n return (\n <BiampTableStatusMessage role=\"alert\" icon={icon} title={title} {...rest} />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype Status = 'idle' | 'delaying' | 'loading' | 'ending';\n\n/**\n * Delays showing a loading indicator so that fast loads don't cause a flicker.\n *\n * State machine:\n * idle ──(loading=true)──▶ delaying ──(delay ms)──▶ loading ──(minDuration ms)──▶ ending\n * ▲ │ │\n * └──(loading=false)───────┘ └────────(loading=false)──────┘\n *\n * - Waits `delay` ms before showing the indicator.\n * - Once shown, keeps it visible for at least `minDuration` ms.\n * - If loading finishes before the delay, no indicator is shown at all.\n */\nexport function useLoadingDelay(\n loading: boolean,\n { delay = 150, minDuration = 500 } = {},\n): boolean {\n const [status, setStatus] = useState<Status>('idle');\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n function clearPending() {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }\n\n useEffect(() => {\n if (loading && status === 'idle') {\n clearPending();\n\n // After the initial delay, show the indicator and schedule end.\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = setTimeout(() => {\n setStatus('ending');\n }, minDuration);\n\n setStatus('loading');\n }, delay);\n\n setStatus('delaying');\n }\n\n if (!loading && status !== 'loading') {\n clearPending();\n setStatus('idle');\n }\n }, [loading, delay, minDuration, status]);\n\n useEffect(() => clearPending, []);\n\n return status === 'loading' || status === 'ending';\n}\n","import { Stack, StackProps } from '@mui/material';\n\nexport type BiampTableContainerProps = {\n /** Show a top border. @default true */\n withBorderTop?: boolean;\n /** Show a bottom border. @default false */\n withBorderBottom?: boolean;\n} & StackProps;\n\nexport function BiampTableContainer({\n withBorderTop = true,\n withBorderBottom = false,\n children,\n sx,\n ...props\n}: BiampTableContainerProps) {\n return (\n <Stack\n direction=\"column\"\n height=\"100%\"\n overflow=\"hidden\"\n px={{ xs: 2, sm: 3, xl: 12.5 }}\n py={{ xs: 0, md: 1.5 }}\n gap={{ xs: 0, md: 1 }}\n borderTop={\n withBorderTop\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n borderBottom={\n withBorderBottom\n ? ({ palette }) => `0.6px solid ${palette.divider}`\n : undefined\n }\n sx={{ ...sx }}\n {...props}\n >\n {children}\n </Stack>\n );\n}\n","import { IconButton, type IconButtonProps, Tooltip } from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableCellActionButtonProps<\n C extends React.ElementType = 'button',\n> = {\n /** Tooltip label for the action button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n} & IconButtonProps<C, { component?: C }>;\n\n/** Icon button with a tooltip, designed for use inside table cell action columns. */\nexport function BiampTableCellActionButton<\n C extends React.ElementType = 'button',\n>({ label, icon, ...props }: BiampTableCellActionButtonProps<C>) {\n return (\n <Tooltip\n title={label}\n placement=\"top\"\n enterDelay={500}\n enterNextDelay={500}\n disableInteractive\n >\n <span>\n <IconButton aria-label={label} {...props}>\n {icon}\n </IconButton>\n </span>\n </Tooltip>\n );\n}\n","import {\n alpha,\n Box,\n Checkbox,\n Divider,\n List,\n ListItem,\n Popover,\n type PopoverProps,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport type { Table, VisibilityState } from '@tanstack/react-table';\nimport './tanstack-meta';\n\n/**\n * A looser alternative to TanStack's `VisibilityState` (`Record<string, boolean>`).\n * Accepts `Partial<Record<string, boolean>>` so callers don't need to cast\n * from URL params or partial objects. Internally, `undefined` values are\n * treated as `true` (visible).\n */\nexport type ColumnVisibility = Partial<Record<string, boolean>>;\n\n/**\n * Converts a `ColumnVisibility` to TanStack's `VisibilityState`.\n * Use this when passing to `useReactTable({ state: { columnVisibility } })`.\n */\nexport function toVisibilityState(\n visibility: ColumnVisibility,\n): VisibilityState {\n return visibility as VisibilityState;\n}\n\n/**\n * Reads `meta.defaultVisible` from all leaf columns and returns a\n * `ColumnVisibility` map. Columns without `defaultVisible` are omitted\n * (treated as visible by default).\n */\nexport function getDefaultColumnVisibility<TData>(\n table: Table<TData>,\n): ColumnVisibility {\n const result: ColumnVisibility = {};\n for (const col of table.getAllLeafColumns()) {\n const dv = col.columnDef.meta?.defaultVisible;\n if (dv !== undefined) result[col.id] = dv;\n }\n return result;\n}\n\n/**\n * Returns the number of columns whose visibility differs from the default.\n * When `defaultVisibility` is omitted, auto-derives from `meta.defaultVisible`\n * on each column definition.\n */\nexport function getColumnVisibilityDirtyCount<TData>(\n table: Table<TData>,\n defaultVisibility?: ColumnVisibility,\n): number {\n const current = table.getState().columnVisibility;\n const defaults = defaultVisibility ?? getDefaultColumnVisibility(table);\n let count = 0;\n for (const col of table.getAllLeafColumns()) {\n const isVisible = current[col.id] ?? true;\n const wasVisible = defaults[col.id] ?? true;\n if (isVisible !== wasVisible) count++;\n }\n return count;\n}\n\nexport type BiampTableColumnVisibilityProps<TData> = Omit<\n PopoverProps,\n 'open'\n> & {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Label for the \"show all\" toggle. @default \"Show all\" */\n showAllLabel?: string;\n};\n\nconst columnListItemSx: SxProps<Theme> = {\n py: 0,\n pr: 1.5,\n pl: 0,\n alignItems: 'center',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: ({ palette }) =>\n palette.mode === 'dark' ? palette.grey[800] : palette.grey[100],\n },\n};\n\nexport function BiampTableColumnVisibility<TData>({\n table,\n showAllLabel = 'Show all',\n anchorEl,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n slotProps,\n ...popoverProps\n}: BiampTableColumnVisibilityProps<TData>) {\n const allVisible = table\n .getAllLeafColumns()\n .every((col) => col.getIsVisible());\n\n const someVisible = table\n .getAllLeafColumns()\n .some((col) => col.getIsVisible());\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n sx: ({ palette }) => ({\n borderRadius: '6px',\n backgroundImage: 'none',\n border: `0.6px solid ${palette.dividers.secondary}`,\n boxShadow: `0px 1px 1px 0px ${alpha(palette.common.black, 0.05)}`,\n minWidth: '150px',\n }),\n ...((slotProps?.paper ?? {}) as Record<string, unknown>),\n },\n }}\n {...popoverProps}\n >\n <List dense disablePadding>\n <ListItem\n sx={columnListItemSx}\n onClick={() => table.toggleAllColumnsVisible(!allVisible)}\n >\n <Checkbox\n checked={allVisible}\n indeterminate={!allVisible && someVisible}\n size=\"small\"\n slotProps={{ input: { 'aria-label': `${showAllLabel} columns` } }}\n />\n <Typography variant=\"caption\">{showAllLabel}</Typography>\n </ListItem>\n <Divider />\n <Box sx={{ maxHeight: 340, overflow: 'auto' }}>\n {table.getAllLeafColumns().map((column) => {\n const columnName =\n typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n return (\n <ListItem\n key={column.id}\n sx={columnListItemSx}\n onClick={column.getToggleVisibilityHandler()}\n >\n <Checkbox\n checked={column.getIsVisible()}\n size=\"small\"\n slotProps={{\n input: { 'aria-label': `Show ${columnName}` },\n }}\n />\n <Typography variant=\"caption\">{columnName}</Typography>\n </ListItem>\n );\n })}\n </Box>\n </List>\n </Popover>\n );\n}\n","import { ColumnsIcon } from '@bwp-web/assets';\nimport type { Table } from '@tanstack/react-table';\nimport React, { type ReactNode, useState } from 'react';\nimport {\n BiampTableColumnVisibility,\n type ColumnVisibility,\n getColumnVisibilityDirtyCount,\n getDefaultColumnVisibility,\n} from './BiampTableColumnVisibility';\nimport {\n BiampTableToolbarActionButton,\n type BiampTableToolbarActionButtonProps,\n} from './BiampTableToolbarActionButton';\n\nexport type BiampTableToolbarColumnVisibilityProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Icon for the toolbar trigger button. @default <ColumnsIcon variant=\"xs\" /> */\n icon?: ReactNode;\n /** Accessible label for the toolbar trigger button. @default \"Columns\" */\n label?: string;\n /**\n * Default column visibility map used to compute the badge count.\n * When omitted, auto-derived from `meta.defaultVisible` on each column.\n */\n defaultColumnVisibility?: ColumnVisibility;\n /** Label for the \"show all\" toggle inside the popover. @default \"Show all\" */\n showAllLabel?: string;\n} & Omit<\n BiampTableToolbarActionButtonProps,\n 'icon' | 'label' | 'onClick' | 'badgeContent' | 'onChange'\n>;\n\nexport function BiampTableToolbarColumnVisibility<TData>({\n table,\n icon = <ColumnsIcon variant=\"xs\" />,\n label = 'Columns',\n defaultColumnVisibility,\n showAllLabel,\n ...actionButtonProps\n}: BiampTableToolbarColumnVisibilityProps<TData>) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const defaults = defaultColumnVisibility ?? getDefaultColumnVisibility(table);\n const dirtyCount = getColumnVisibilityDirtyCount(table, defaults);\n\n return (\n <>\n <BiampTableToolbarActionButton\n label={label}\n icon={icon}\n badgeContent={dirtyCount}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(e.currentTarget)\n }\n {...actionButtonProps}\n />\n <BiampTableColumnVisibility\n table={table}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n showAllLabel={showAllLabel}\n />\n </>\n );\n}\n","import {\n Badge,\n type BadgeProps,\n IconButton,\n type IconButtonProps,\n} from '@mui/material';\nimport type React from 'react';\n\nexport type BiampTableToolbarActionButtonProps = {\n /** Accessible label for the icon button. */\n label: string;\n /** Icon to display inside the button. */\n icon: React.ReactNode;\n /** Optional badge content. Shown as a dot indicator when provided. */\n badgeContent?: BadgeProps['badgeContent'];\n} & Omit<IconButtonProps, 'children' | 'aria-label'>;\n\nexport function BiampTableToolbarActionButton({\n label,\n icon,\n badgeContent,\n ...props\n}: BiampTableToolbarActionButtonProps) {\n const showBadge = badgeContent != null && badgeContent !== 0;\n\n return (\n <IconButton\n aria-label={showBadge ? `${label} (${badgeContent})` : label}\n {...props}\n >\n {showBadge ? (\n <Badge\n badgeContent={badgeContent}\n color=\"info\"\n variant=\"dot\"\n sx={{\n '& .MuiBadge-badge': {\n width: 6,\n height: 6,\n minWidth: 6,\n borderRadius: '50%',\n top: 0,\n right: -3,\n },\n }}\n >\n {icon}\n </Badge>\n ) : (\n icon\n )}\n </IconButton>\n );\n}\n","import { useRef } from 'react';\nimport { TablePagination, type TablePaginationProps } from '@mui/material';\nimport type { Table } from '@tanstack/react-table';\n\nexport type BiampTablePaginationProps<TData> = {\n /** TanStack Table instance to connect to. */\n table: Table<TData>;\n /** Rows-per-page options. When omitted, the selector is hidden and defaults to 25. */\n rowsPerPageOptions?: number[];\n /** When true, keeps the previous row count visible instead of dropping to 0. */\n loading?: boolean;\n /** Hide pagination when all rows fit on one page. @default true */\n autoHide?: boolean;\n /** Horizontal alignment of the pagination controls. @default 'center' */\n position?: 'left' | 'center' | 'right';\n} & Omit<\n TablePaginationProps<'div'>,\n | 'component'\n | 'count'\n | 'page'\n | 'rowsPerPage'\n | 'onPageChange'\n | 'onRowsPerPageChange'\n | 'rowsPerPageOptions'\n | 'position'\n>;\n\nconst positionMap = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nexport function BiampTablePagination<TData>({\n table,\n rowsPerPageOptions,\n loading,\n autoHide = true,\n position = 'center',\n sx,\n ...paginationProps\n}: BiampTablePaginationProps<TData>) {\n const rowCount = table.getRowCount();\n const lastRowCountRef = useRef(rowCount);\n\n // Update the stable count only when not loading and the count is meaningful.\n if (!loading && rowCount >= 0) {\n lastRowCountRef.current = rowCount;\n }\n\n const stableCount = loading ? lastRowCountRef.current : rowCount;\n const { pageSize, 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 if (!loading && pageIndex > maxPage) {\n table.setPageIndex(maxPage);\n }\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\nexport type BiampTableToolbarSearchProps = {\n /** Called with the debounced search string whenever the value changes. */\n onChange: (value: string) => void;\n /** Initial value for the search field. When this prop changes the input resets. */\n defaultValue?: string;\n /** Debounce delay in milliseconds. @default BIAMP_TABLE_DEBOUNCE_DELAY (300) */\n debounceDelay?: number;\n /** Maximum character length for the input. @default 120 */\n maxLength?: number;\n /** Maximum width of the text field. @default 280 */\n maxWidth?: number;\n /** Placeholder text. @default \"Search\" */\n placeholder?: string;\n /** Accessible label for the clear button. @default \"Clear search\" */\n clearLabel?: string;\n /** When true, the search field collapses to an icon button when empty and unfocused. @default false */\n expandable?: boolean;\n /** Accessible label for the collapsed icon button (only used when expandable is true). @default placeholder */\n expandLabel?: string;\n /** When true, renders a simplified full-width InputBase on screens below the `md` breakpoint. @default true */\n enableMobileView?: boolean;\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","export interface ExportColumn<TData> {\n header: string;\n accessor: (row: TData) => unknown;\n}\n\n/**\n * Converts an array of rows and column definitions to a CSV string\n * and triggers a browser download.\n */\nexport function exportToCsv<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n filename: string = 'export',\n): void {\n const csvContent = buildCsvString(rows, columns);\n downloadCsv(csvContent, filename);\n}\n\n/**\n * Builds a CSV string from rows and columns.\n * Handles quoting for values that contain commas, quotes, or newlines.\n */\nexport function buildCsvString<TData>(\n rows: TData[],\n columns: ExportColumn<TData>[],\n): string {\n const header = columns.map((col) => escapeCsvField(col.header)).join(',');\n const dataRows = rows.map((row) =>\n columns\n .map((col) => escapeCsvField(formatCsvValue(col.accessor(row))))\n .join(','),\n );\n return [header, ...dataRows].join('\\n');\n}\n\nfunction escapeCsvField(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nfunction formatCsvValue(value: unknown): string {\n if (value == null) return '';\n if (value instanceof Date) return value.toISOString();\n return String(value);\n}\n\nfunction downloadCsv(csvContent: string, filename: string): void {\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', `${filename}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n"],"mappings":"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","names":["Stack","jsx","Box","ListItemButton","Stack","jsx","jsxs","Stack","jsxs","Box","useRef","Stack","Typography","jsx","jsxs","jsx","jsx","jsx","jsxs","useRef","Box","Stack","jsx","jsx","alpha","Box","Checkbox","Popover","Typography","jsx","jsxs","Popover","alpha","Checkbox","Typography","Box","useState","IconButton","jsx","jsx","jsxs","useState","useRef","jsx","Box","jsx","Box","jsx","jsx","Badge","Box","Divider","IconButton","Typography","useState","Fragment","jsx","jsxs","useState","Box","Typography","Badge","IconButton","Divider","Box","IconButton","InputAdornment","TextField","CloseIcon","SearchIcon","useEffect","useState","useEffect","useRef","jsx","jsxs","useState","useEffect","InputAdornment","IconButton","CloseIcon","TextField","SearchIcon","Box"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bwp-web/components",
3
- "version": "0.11.6",
3
+ "version": "0.11.7",
4
4
  "description": "Shared Biamp Workplace React components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -32,8 +32,8 @@
32
32
  "prepublishOnly": "npm run build"
33
33
  },
34
34
  "peerDependencies": {
35
- "@bwp-web/styles": ">=0.11.6",
36
- "@bwp-web/assets": ">=0.11.6",
35
+ "@bwp-web/styles": ">=0.11.7",
36
+ "@bwp-web/assets": ">=0.11.7",
37
37
  "@mui/material": ">=7.0.0",
38
38
  "@tanstack/react-table": ">=8.0.0",
39
39
  "react": ">=18.0.0",