silver-ui 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{chunk-JFLU2X5Q.js → chunk-5HPXPF3F.js} +4 -4
- package/dist/{chunk-JFLU2X5Q.js.map → chunk-5HPXPF3F.js.map} +1 -1
- package/dist/{chunk-IE7GWY4E.cjs → chunk-5MCI3ILK.cjs} +30 -30
- package/dist/{chunk-IE7GWY4E.cjs.map → chunk-5MCI3ILK.cjs.map} +1 -1
- package/dist/{chunk-IH6DJWYH.cjs → chunk-63QPCV4F.cjs} +19 -19
- package/dist/{chunk-IH6DJWYH.cjs.map → chunk-63QPCV4F.cjs.map} +1 -1
- package/dist/{chunk-223UOU3H.js → chunk-6OWEKKOC.js} +3 -3
- package/dist/{chunk-223UOU3H.js.map → chunk-6OWEKKOC.js.map} +1 -1
- package/dist/{chunk-J4MQQ4K5.js → chunk-ACGPBJIS.js} +3 -3
- package/dist/{chunk-J4MQQ4K5.js.map → chunk-ACGPBJIS.js.map} +1 -1
- package/dist/{chunk-AX653SYJ.js → chunk-BBLAZNCC.js} +3 -3
- package/dist/{chunk-AX653SYJ.js.map → chunk-BBLAZNCC.js.map} +1 -1
- package/dist/{chunk-WIFMXZIN.cjs → chunk-BF2DUOC3.cjs} +6 -6
- package/dist/{chunk-WIFMXZIN.cjs.map → chunk-BF2DUOC3.cjs.map} +1 -1
- package/dist/{chunk-SY2A4K6P.cjs → chunk-CQYBC3RJ.cjs} +6 -6
- package/dist/{chunk-SY2A4K6P.cjs.map → chunk-CQYBC3RJ.cjs.map} +1 -1
- package/dist/{chunk-EQFSDFV2.cjs → chunk-D7TT4HUI.cjs} +4 -4
- package/dist/{chunk-EQFSDFV2.cjs.map → chunk-D7TT4HUI.cjs.map} +1 -1
- package/dist/{chunk-YOAFVMEN.cjs → chunk-DDMUYVSV.cjs} +4 -4
- package/dist/{chunk-YOAFVMEN.cjs.map → chunk-DDMUYVSV.cjs.map} +1 -1
- package/dist/{chunk-YRJYWTVG.js → chunk-GQ73VKKN.js} +3 -3
- package/dist/{chunk-YRJYWTVG.js.map → chunk-GQ73VKKN.js.map} +1 -1
- package/dist/{chunk-MUXUHIIV.js → chunk-HC57X3U4.js} +3 -3
- package/dist/{chunk-MUXUHIIV.js.map → chunk-HC57X3U4.js.map} +1 -1
- package/dist/{chunk-NMC7QG2X.cjs → chunk-HENIVDYQ.cjs} +6 -6
- package/dist/{chunk-NMC7QG2X.cjs.map → chunk-HENIVDYQ.cjs.map} +1 -1
- package/dist/{chunk-ZNAGK36T.cjs → chunk-HN4W6TM6.cjs} +7 -7
- package/dist/{chunk-ZNAGK36T.cjs.map → chunk-HN4W6TM6.cjs.map} +1 -1
- package/dist/{chunk-DUGGZUJP.cjs → chunk-J242UTPO.cjs} +7 -7
- package/dist/{chunk-DUGGZUJP.cjs.map → chunk-J242UTPO.cjs.map} +1 -1
- package/dist/{chunk-3M23WX6K.js → chunk-KB36TWOU.js} +4 -3
- package/dist/chunk-KB36TWOU.js.map +1 -0
- package/dist/{chunk-RUQODCTW.cjs → chunk-KLCEDPJ4.cjs} +5 -5
- package/dist/{chunk-RUQODCTW.cjs.map → chunk-KLCEDPJ4.cjs.map} +1 -1
- package/dist/{chunk-4NPVIEWF.js → chunk-NIKT7XSO.js} +3 -3
- package/dist/{chunk-4NPVIEWF.js.map → chunk-NIKT7XSO.js.map} +1 -1
- package/dist/{chunk-OP6WQYYP.js → chunk-OPBELSKN.js} +4 -4
- package/dist/{chunk-OP6WQYYP.js.map → chunk-OPBELSKN.js.map} +1 -1
- package/dist/{chunk-4UYMGEBF.js → chunk-OUUG4RHO.js} +3 -3
- package/dist/{chunk-4UYMGEBF.js.map → chunk-OUUG4RHO.js.map} +1 -1
- package/dist/{chunk-A4QLLTMD.js → chunk-PGBYMBGH.js} +10 -10
- package/dist/{chunk-A4QLLTMD.js.map → chunk-PGBYMBGH.js.map} +1 -1
- package/dist/{chunk-2KLTODOC.js → chunk-PK3NJSHQ.js} +3 -3
- package/dist/{chunk-2KLTODOC.js.map → chunk-PK3NJSHQ.js.map} +1 -1
- package/dist/{chunk-76GVUEFH.cjs → chunk-PXTTIAC4.cjs} +4 -4
- package/dist/{chunk-76GVUEFH.cjs.map → chunk-PXTTIAC4.cjs.map} +1 -1
- package/dist/{chunk-GFMQIR5U.js → chunk-Q6YOSQAM.js} +3 -3
- package/dist/{chunk-GFMQIR5U.js.map → chunk-Q6YOSQAM.js.map} +1 -1
- package/dist/{chunk-UR5EWWWL.cjs → chunk-QQCEGAUQ.cjs} +7 -7
- package/dist/{chunk-UR5EWWWL.cjs.map → chunk-QQCEGAUQ.cjs.map} +1 -1
- package/dist/{chunk-VULMEKZZ.cjs → chunk-TACO5IWI.cjs} +9 -9
- package/dist/{chunk-VULMEKZZ.cjs.map → chunk-TACO5IWI.cjs.map} +1 -1
- package/dist/{chunk-7WQW7H3D.js → chunk-TP6RGZ6A.js} +9 -9
- package/dist/{chunk-7WQW7H3D.js.map → chunk-TP6RGZ6A.js.map} +1 -1
- package/dist/{chunk-VXBVSYPA.cjs → chunk-VPHB56GK.cjs} +4 -3
- package/dist/chunk-VPHB56GK.cjs.map +1 -0
- package/dist/{chunk-VEQ5H765.js → chunk-WLWSQKWI.js} +3 -3
- package/dist/{chunk-VEQ5H765.js.map → chunk-WLWSQKWI.js.map} +1 -1
- package/dist/{chunk-I4XYOJJS.cjs → chunk-ZDZ7FW6V.cjs} +7 -7
- package/dist/{chunk-I4XYOJJS.cjs.map → chunk-ZDZ7FW6V.cjs.map} +1 -1
- package/dist/components/AutocompleteInput/index.cjs +6 -6
- package/dist/components/AutocompleteInput/index.js +2 -2
- package/dist/components/DateInput/index.cjs +3 -3
- package/dist/components/DateInput/index.js +2 -2
- package/dist/components/DateRangeInput/index.cjs +3 -3
- package/dist/components/DateRangeInput/index.js +2 -2
- package/dist/components/DateTimeInput/index.cjs +5 -5
- package/dist/components/DateTimeInput/index.js +4 -4
- package/dist/components/Field/inputStyles.d.ts.map +1 -1
- package/dist/components/MultiSelect/index.cjs +3 -3
- package/dist/components/MultiSelect/index.js +2 -2
- package/dist/components/NumberInput/index.cjs +3 -3
- package/dist/components/NumberInput/index.js +2 -2
- package/dist/components/PasswordInput/index.cjs +4 -4
- package/dist/components/PasswordInput/index.js +3 -3
- package/dist/components/SearchFilterInput/index.cjs +17 -17
- package/dist/components/SearchFilterInput/index.js +9 -9
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Table/index.cjs +36 -36
- package/dist/components/Table/index.js +10 -10
- package/dist/components/TagsInput/index.cjs +4 -4
- package/dist/components/TagsInput/index.js +3 -3
- package/dist/components/TextArea/index.cjs +3 -3
- package/dist/components/TextArea/index.js +2 -2
- package/dist/components/TextInput/index.cjs +3 -3
- package/dist/components/TextInput/index.js +2 -2
- package/dist/components/TimeInput/index.cjs +3 -3
- package/dist/components/TimeInput/index.js +2 -2
- package/dist/index.cjs +65 -65
- package/dist/index.js +15 -15
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-3M23WX6K.js.map +0 -1
- package/dist/chunk-VXBVSYPA.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Table/columnUtils.ts","../src/components/Table/Table.recipe.ts","../src/components/Table/TableBody.tsx","../src/components/Table/TableContext.ts","../src/components/Table/TableCell.tsx","../src/components/Table/TableHeader.tsx","../src/components/Table/TableHeaderCell.tsx","../src/components/Table/TableRow.tsx","../src/components/Table/useBaseTablePlugins.ts","../src/internal/shallowEqual.ts","../src/internal/useShallowEqualMemo.ts","../src/components/Table/Table.tsx","../src/components/Table/TableFooter.tsx","../src/components/Table/plugins/columnResize/useTableColumnResize.tsx","../src/components/Table/plugins/columnSettings/useTableColumnSettings.tsx","../src/components/Table/plugins/columnSettings/useTableColumnSettingsState.tsx","../src/components/Table/plugins/filtering/useTableFiltering.tsx","../src/components/Table/plugins/filtering/useTableFilterState.tsx","../src/components/Table/plugins/pagination/paginateData.ts","../src/components/Table/plugins/pagination/useTablePagination.tsx","../src/internal/useConstant.ts","../src/components/Table/plugins/selection/useTableSelection.tsx","../src/components/Table/plugins/selection/useTableSelectionState.tsx","../src/components/Table/plugins/sortable/useTableSortable.tsx","../src/components/Table/plugins/sortable/useTableSortableState.tsx"],"names":["jsx","useMemo","useRef","jsxs","Fragment","useCallback","createContext","styles","use","Temporal","useState","useEffect","entry","nextDirection"],"mappings":"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","file":"chunk-A4QLLTMD.js","sourcesContent":["import {Temporal} from '@js-temporal/polyfill';\nimport type {CSSProperties, ReactNode} from 'react';\nimport type {\n PixelWidth,\n ProportionalWidth,\n TableColumn,\n} from 'components/Table/types';\n\nexport const DEFAULT_MIN_COLUMN_WIDTH = 120;\n\nexport interface ResolvedColumnWidth {\n style: CSSProperties;\n}\n\nexport interface ResolvedColumnWidths {\n columns: Map<string, ResolvedColumnWidth>;\n tableMinWidth: number;\n}\n\nexport function proportional(\n value: number = 1,\n options?: {minWidth?: number},\n): ProportionalWidth {\n return {\n minWidth: options?.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH,\n type: 'proportional',\n value,\n };\n}\n\nexport function pixel(value: number): PixelWidth {\n return {type: 'pixel', value};\n}\n\nexport function resolveColumnWidths<T extends Record<string, unknown>>(\n columns: TableColumn<T>[],\n): ResolvedColumnWidths {\n let totalProportion = 0;\n let pixelTotal = 0;\n const proportionalColumns: {\n key: string;\n minWidth: number;\n proportion: number;\n }[] = [];\n\n for (const column of columns) {\n const width = column.width;\n if (width?.type === 'pixel') {\n pixelTotal += width.value;\n } else {\n const proportion = width?.value ?? 1;\n const minWidth =\n width == null ? 0 : (width.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH);\n totalProportion += proportion;\n proportionalColumns.push({key: column.key, minWidth, proportion});\n }\n }\n\n let proportionalMinSpace = 0;\n if (totalProportion > 0) {\n for (const column of proportionalColumns) {\n proportionalMinSpace = Math.max(\n proportionalMinSpace,\n (column.minWidth * totalProportion) / column.proportion,\n );\n }\n }\n\n const resolved = new Map<string, ResolvedColumnWidth>();\n for (const column of columns) {\n const width = column.width;\n const style: CSSProperties = {};\n\n if (width?.type === 'pixel') {\n style.minWidth = `${width.value}px`;\n style.width = `${width.value}px`;\n } else {\n const proportion = width?.value ?? 1;\n if (totalProportion > 0) {\n style.width = `${(proportion / totalProportion) * 100}%`;\n }\n if (width != null) {\n style.minWidth = `${width.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH}px`;\n }\n }\n\n resolved.set(column.key, {style});\n }\n\n return {\n columns: resolved,\n tableMinWidth: pixelTotal + proportionalMinSpace,\n };\n}\n\nexport function capitalize(value: string): string {\n return value.length === 0\n ? value\n : value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nconst warnedUnsupportedCellKeys = new Set<string>();\n\nexport function defaultCellRenderer<T extends Record<string, unknown>>(\n item: T,\n key: string,\n): ReactNode {\n const value = item[key];\n if (value == null) {\n return '';\n }\n // Default rendering intentionally supports Temporal date/time values only.\n // Use renderCell for native Date instances or other object values.\n if (\n value instanceof Temporal.Instant ||\n value instanceof Temporal.PlainDate ||\n value instanceof Temporal.PlainDateTime ||\n value instanceof Temporal.PlainTime ||\n value instanceof Temporal.ZonedDateTime\n ) {\n return value.toString();\n }\n if (\n typeof value === 'bigint' ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value);\n }\n // Unsupported type (object, array, native Date, function, …). This renders an\n // empty cell, which usually means a `renderCell` is missing for the column.\n if (\n process.env.NODE_ENV !== 'production' &&\n !warnedUnsupportedCellKeys.has(key)\n ) {\n warnedUnsupportedCellKeys.add(key);\n const typeName =\n typeof value === 'object'\n ? Object.prototype.toString.call(value).slice(8, -1)\n : typeof value;\n console.warn(\n `[Table] Column \"${key}\" has a value of unsupported type ${typeName} and ` +\n 'rendered as an empty cell. Provide a `renderCell` for this column.',\n );\n }\n return '';\n}\n\nfunction estimateContentLength(value: unknown): number {\n if (value == null) {\n return 0;\n }\n if (\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value).length;\n }\n return 0;\n}\n\nfunction longestWord(value: unknown): number {\n if (\n value == null ||\n (typeof value !== 'boolean' &&\n typeof value !== 'number' &&\n typeof value !== 'string')\n ) {\n return 0;\n }\n return String(value)\n .split(/\\s+/)\n .reduce((max, word) => Math.max(max, word.length), 0);\n}\n\nexport function generateColumns<T extends Record<string, unknown>>(\n data: T[],\n): TableColumn<T>[] {\n if (data.length === 0) {\n return [];\n }\n\n const sampleRows = data.slice(0, Math.min(5, data.length));\n return Object.keys(data[0]).map(key => {\n const header = capitalize(key);\n let maxContentLength = header.length;\n let maxWordLength = header.length;\n\n for (const row of sampleRows) {\n maxContentLength = Math.max(\n maxContentLength,\n estimateContentLength(row[key]),\n );\n maxWordLength = Math.max(maxWordLength, longestWord(row[key]));\n }\n\n const proportion =\n maxContentLength <= 6 ? 1 : maxContentLength <= 15 ? 2 : 3;\n const minWidth = Math.max(Math.max(header.length, maxWordLength) * 8, 60);\n\n return {\n header,\n key,\n width: proportional(proportion, {minWidth}),\n };\n });\n}\n","import {sva, type RecipeVariantProps} from 'styled-system/css';\n\n/**\n * Slot recipe consolidating the Table family's context-driven styling. The\n * structural sub-components (`TableCell`, `TableHeaderCell`, `TableRow`) read\n * shared visual state from `TableContext` and each render a single slot from\n * this recipe; `Table` owns the `wrapper`, `table`, and `headerLabelRow`\n * slots. The `density`/`dividers` variants previously lived\n * duplicated across the cell and header-cell components and are unified here.\n */\nexport const tableRecipe = sva({\n slots: ['wrapper', 'table', 'headerLabelRow', 'row', 'cell', 'headerCell'],\n base: {\n wrapper: {\n overflowX: 'auto',\n WebkitOverflowScrolling: 'touch',\n },\n table: {\n color: 'fg',\n fontFamily: 'body',\n w: 'full',\n borderCollapse: 'collapse',\n borderSpacing: 0,\n tableLayout: 'fixed',\n },\n headerLabelRow: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '1',\n minW: 0,\n },\n row: {\n transitionDuration: 'fast',\n transitionProperty: 'background-color',\n transitionTimingFunction: 'default',\n },\n cell: {\n maxWidth: 0,\n },\n headerCell: {\n color: 'fg.muted',\n fontWeight: 'semibold',\n maxWidth: 0,\n overflow: 'hidden',\n textAlign: 'start',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n },\n },\n variants: {\n density: {\n balanced: {\n cell: {fontSize: 'md', px: '3', py: '2'},\n headerCell: {fontSize: 'md', px: '3', py: '2'},\n },\n compact: {\n cell: {fontSize: 'md', px: '2', py: '1'},\n headerCell: {fontSize: 'md', px: '2', py: '1'},\n },\n spacious: {\n cell: {fontSize: 'md', px: '4', py: '3'},\n headerCell: {fontSize: 'md', px: '4', py: '3'},\n },\n },\n dividers: {\n none: {},\n rows: {\n cell: {\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n 'tbody > tr:last-child > &': {\n borderBottomWidth: 0,\n },\n },\n },\n columns: {\n cell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n headerCell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n },\n grid: {\n cell: {\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n 'tbody > tr:last-child > &': {\n borderBottomWidth: 0,\n },\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n headerCell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n },\n },\n verticalAlign: {\n middle: {cell: {verticalAlign: 'middle'}},\n top: {cell: {verticalAlign: 'top'}},\n bottom: {cell: {verticalAlign: 'bottom'}},\n },\n textOverflow: {\n truncate: {\n cell: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n wrap: {\n cell: {\n overflow: 'hidden',\n overflowWrap: 'break-word',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n },\n },\n },\n // Row background variants. Striping and hover combine, so the combined\n // presentation lives in compoundVariants below.\n isStriped: {\n true: {},\n false: {},\n },\n hasHover: {\n true: {},\n false: {},\n },\n // Auto layout when the table renders consumer-provided children; the\n // default fixed layout lives in the base `table` slot.\n isAutoLayout: {\n true: {table: {tableLayout: 'auto'}},\n false: {},\n },\n },\n compoundVariants: [\n {\n isStriped: false,\n hasHover: true,\n css: {\n row: {\n _hover: {\n '@media (hover: hover)': {\n bg: 'bg.subtle',\n },\n },\n },\n },\n },\n {\n isStriped: true,\n hasHover: false,\n css: {\n row: {\n _even: {\n bg: 'bg.subtle',\n },\n },\n },\n },\n {\n isStriped: true,\n hasHover: true,\n css: {\n row: {\n _even: {\n bg: 'bg.subtle',\n },\n _hover: {\n '@media (hover: hover)': {\n bg: 'bg.hover',\n },\n },\n },\n },\n },\n ],\n defaultVariants: {\n density: 'balanced',\n dividers: 'rows',\n verticalAlign: 'middle',\n textOverflow: 'wrap',\n isStriped: false,\n hasHover: false,\n isAutoLayout: false,\n },\n});\n\nexport type TableVariants = RecipeVariantProps<typeof tableRecipe>;\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableBodyProps {\n /**\n * Table row elements rendered inside the body.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tbody.\n */\n className?: string;\n /**\n * Test ID applied to the tbody.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tbody element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the tbody.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table body rows in a `<tbody>` element.\n */\nexport function TableBody({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableBodyProps): React.JSX.Element {\n return (\n <tbody\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tbody>\n );\n}\n\nTableBody.displayName = 'TableBody';\n","import {createContext, use} from 'react';\nimport type {TableContextValue} from 'components/Table/types';\n\nexport const TableContext = createContext<TableContextValue | null>(null);\nTableContext.displayName = 'TableContext';\n\nexport function useTableContext(): TableContextValue | null {\n return use(TableContext);\n}\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableCellProps {\n /**\n * Cell content.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the td.\n */\n className?: string;\n /**\n * Number of columns the cell spans.\n */\n colSpan?: number;\n /**\n * Test ID applied to the td.\n */\n 'data-testid'?: string;\n /**\n * Space-separated list of header cell IDs this cell relates to.\n */\n headers?: string;\n /**\n * Ref forwarded to the td element.\n */\n ref?: Ref<HTMLTableCellElement>;\n /**\n * Number of rows the cell spans.\n */\n rowSpan?: number;\n /**\n * Scope of the cell when used as a header-like td.\n */\n scope?: 'col' | 'colgroup' | 'row' | 'rowgroup';\n /**\n * Inline styles applied to the td.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table data cell with density, alignment, and divider styling from context.\n */\nexport function TableCell({\n children,\n className,\n colSpan,\n 'data-testid': dataTestId,\n headers,\n ref,\n rowSpan,\n style,\n}: TableCellProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n density: context?.density,\n dividers: context?.dividers,\n textOverflow: context?.textOverflow,\n verticalAlign: context?.verticalAlign,\n });\n return (\n <td\n className={cx(classes.cell, className)}\n colSpan={colSpan}\n data-part=\"cell\"\n data-testid={dataTestId}\n headers={headers}\n ref={ref}\n rowSpan={rowSpan}\n style={style}>\n {children}\n </td>\n );\n}\n\nTableCell.displayName = 'TableCell';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableHeaderProps {\n /**\n * Header row elements rendered inside the thead.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the thead.\n */\n className?: string;\n /**\n * Test ID applied to the thead.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the thead element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the thead.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table header rows in a `<thead>` element.\n */\nexport function TableHeader({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableHeaderProps): React.JSX.Element {\n return (\n <thead\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </thead>\n );\n}\n\nTableHeader.displayName = 'TableHeader';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableHeaderCellProps {\n /**\n * Header cell content.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the th.\n */\n className?: string;\n /**\n * Test ID applied to the th.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the th element.\n */\n ref?: Ref<HTMLTableCellElement>;\n /**\n * Scope of the header cell.\n * @default 'col'\n */\n scope?: 'col' | 'colgroup' | 'row' | 'rowgroup';\n /**\n * Inline styles applied to the th.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table header cell with density and divider styling from context.\n */\nexport function TableHeaderCell({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n scope = 'col',\n style,\n}: TableHeaderCellProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n density: context?.density,\n dividers: context?.dividers,\n });\n return (\n <th\n className={cx(classes.headerCell, className)}\n data-part=\"header-cell\"\n data-testid={dataTestId}\n ref={ref}\n scope={scope}\n style={style}>\n {children}\n </th>\n );\n}\n\nTableHeaderCell.displayName = 'TableHeaderCell';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableRowProps {\n /**\n * Cell elements rendered inside the row.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tr.\n */\n className?: string;\n /**\n * Test ID applied to the tr.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tr element.\n */\n ref?: Ref<HTMLTableRowElement>;\n /**\n * Inline styles applied to the tr.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table row with hover and striped styling from context.\n */\nexport function TableRow({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableRowProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n isStriped: context?.isStriped,\n hasHover: context?.hasHover,\n });\n\n return (\n <tr\n className={cx(classes.row, className)}\n data-part=\"row\"\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tr>\n );\n}\n\nTableRow.displayName = 'TableRow';\n","import {useMemo} from 'react';\nimport type {TablePlugin} from 'components/Table/types';\n\nconst CANONICAL_PLUGIN_ORDER = [\n 'columnSettings',\n 'sort',\n 'selection',\n 'filtering',\n 'columnResize',\n 'pagination',\n] as const;\n\nconst CANONICAL_PLUGIN_KEYS = new Set<string>(CANONICAL_PLUGIN_ORDER);\n\nfunction orderNamedPlugins<T extends Record<string, unknown>>(\n userPlugins: Record<string, TablePlugin<T>>,\n): TablePlugin<T>[] {\n const entries = Object.entries(userPlugins);\n const pluginsByName = new Map(entries);\n const orderedPlugins = CANONICAL_PLUGIN_ORDER.filter(key =>\n pluginsByName.has(key),\n ).map(key => pluginsByName.get(key) as TablePlugin<T>);\n const customPlugins = entries\n .filter(([key]) => !CANONICAL_PLUGIN_KEYS.has(key))\n .map(([, plugin]) => plugin);\n\n return [...orderedPlugins, ...customPlugins];\n}\n\nexport function useBaseTablePlugins<T extends Record<string, unknown>>(\n userPlugins?: Record<string, TablePlugin<T>> | TablePlugin<T>[],\n): TablePlugin<T>[] {\n return useMemo(\n () =>\n Array.isArray(userPlugins)\n ? userPlugins\n : orderNamedPlugins(userPlugins ?? {}),\n [userPlugins],\n );\n}\n","/**\n * Shallow structural equality: `true` when `a` and `b` are the same reference,\n * or are arrays/objects with the same set of keys whose values are each equal\n * by `Object.is`. Non-object values are compared with `Object.is`.\n */\nexport function shallowEqual<T>(a: T, b: T): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n const aRecord = a as Record<string, unknown>;\n const bRecord = b as Record<string, unknown>;\n for (const key of aKeys) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !Object.is(aRecord[key], bRecord[key])\n ) {\n return false;\n }\n }\n return true;\n}\n","import {useRef} from 'react';\nimport {shallowEqual} from 'internal/shallowEqual';\n\n/**\n * Returns a referentially stable version of `value`: the same reference is\n * preserved across renders for as long as each new value is shallow-equal to\n * the last one returned. Identity only changes when the shallow contents\n * change.\n *\n * Useful when an upstream value is rebuilt every render (e.g. a freshly mapped\n * array) but its contents are usually unchanged, and something downstream\n * compares it by reference — a `memo` comparator, an effect dependency, etc.\n */\nconst useShallowEqualMemo = <T>(value: T): T => {\n const ref = useRef(value);\n /* eslint-disable @eslint-react/refs -- memo-compare: the slot is read and rewritten only when the shallow contents change, preserving identity otherwise */\n if (!shallowEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n /* eslint-enable @eslint-react/refs */\n};\n\nexport default useShallowEqualMemo;\n","import {\n memo,\n useMemo,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {EmptyState} from 'components/EmptyState';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {TableBody} from 'components/Table/TableBody';\nimport {TableCell} from 'components/Table/TableCell';\nimport {TableContext} from 'components/Table/TableContext';\nimport {TableHeader} from 'components/Table/TableHeader';\nimport {TableHeaderCell} from 'components/Table/TableHeaderCell';\nimport {TableRow} from 'components/Table/TableRow';\nimport {\n defaultCellRenderer,\n generateColumns,\n resolveColumnWidths,\n} from 'components/Table/columnUtils';\nimport type {\n BodyCellRenderProps,\n BodyRowRenderProps,\n HeaderCellRenderProps,\n HeaderRowRenderProps,\n TableCellComponentProps,\n TableColumn,\n TableContextValue,\n TableDensity,\n TableDividers,\n TableHeaderCellComponentProps,\n TablePlugin,\n TableRenderProps,\n TableRowComponentProps,\n TableTextOverflow,\n TableVerticalAlign,\n} from 'components/Table/types';\nimport {useBaseTablePlugins} from 'components/Table/useBaseTablePlugins';\nimport {Text} from 'components/Text';\nimport {cx} from 'internal/cx';\nimport isReactNode from 'internal/isReactNode';\nimport useShallowEqualMemo from 'internal/useShallowEqualMemo';\n\nexport interface TableProps<T extends Record<string, unknown>> {\n /**\n * Table primitives rendered instead of data-driven content. When provided,\n * `columns`/`data` are ignored and the children are rendered as-is.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the table element.\n */\n className?: string;\n /**\n * Column definitions. When omitted, columns are inferred from `data`.\n */\n columns?: TableColumn<T>[];\n /**\n * Row data rendered into the table body.\n */\n data?: T[];\n /**\n * Test ID applied to the table element.\n */\n 'data-testid'?: string;\n /**\n * Spacing density for rows and cells.\n * @default 'balanced'\n */\n density?: TableDensity;\n /**\n * Which divider lines to show between cells.\n * @default 'rows'\n */\n dividers?: TableDividers;\n /**\n * Content shown when `data` is an empty array. Omit for the default empty\n * state; pass `null` to render nothing.\n */\n emptyState?: ReactNode;\n /**\n * Whether rows highlight on hover.\n * @default false\n */\n hasHover?: boolean;\n /**\n * Stable row identity, used as the React key for each body row.\n */\n idKey?: (keyof T & string) | ((item: T) => number | string);\n /**\n * Whether alternating rows have a subtle background.\n * @default false\n */\n isStriped?: boolean;\n /**\n * Plugin map or array that extends table behavior.\n */\n plugins?: Record<string, TablePlugin<T>> | TablePlugin<T>[];\n /**\n * Ref forwarded to the table element.\n */\n ref?: Ref<HTMLTableElement>;\n /**\n * Inline styles applied to the table element.\n */\n style?: CSSProperties;\n /**\n * Extra HTML attributes spread onto the table element.\n */\n tableProps?: HTMLAttributes<HTMLTableElement>;\n /**\n * How overflowing cell text is handled.\n * @default 'wrap'\n */\n textOverflow?: TableTextOverflow;\n /**\n * Vertical alignment of cell content.\n * @default 'middle'\n */\n verticalAlign?: TableVerticalAlign;\n}\n\nfunction applyPlugins<TPlugin, TProps, TArgs extends unknown[]>(\n plugins: TPlugin[],\n getter: (\n plugin: TPlugin,\n ) => ((props: TProps, ...args: TArgs) => TProps) | undefined,\n initial: TProps,\n ...args: TArgs\n): TProps {\n return plugins.reduce<TProps>((accumulator, plugin, index) => {\n const transform = getter(plugin);\n if (transform == null) {\n return accumulator;\n }\n try {\n return transform(accumulator, ...args);\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n throw error;\n }\n console.error(`[Table] Plugin at index ${index} threw:`, error);\n return accumulator;\n }\n }, initial);\n}\n\ninterface DataRowProps<T extends Record<string, unknown>> {\n CellComponent: React.ComponentType<TableCellComponentProps>;\n columns: TableColumn<T>[];\n item: T;\n plugins: TablePlugin<T>[];\n RowComponent: React.ComponentType<TableRowComponentProps>;\n rowIndex: number;\n rowKey: number | string;\n textOverflow: 'truncate' | 'wrap';\n}\n\nfunction DataRowInner<T extends Record<string, unknown>>({\n CellComponent,\n RowComponent,\n columns,\n item,\n plugins,\n rowIndex,\n rowKey,\n textOverflow,\n}: DataRowProps<T>): ReactElement {\n const cells = columns.map(column => {\n const initialHtmlProps: BodyCellRenderProps['htmlProps'] = {};\n if (column.align) {\n initialHtmlProps.style = {textAlign: column.align};\n }\n\n const cellProps = applyPlugins(\n plugins,\n plugin => plugin.transformBodyCell,\n {htmlProps: initialHtmlProps} satisfies BodyCellRenderProps,\n column,\n item,\n );\n\n const isDefaultRenderer = column.renderCell == null;\n const rawContent = isDefaultRenderer\n ? defaultCellRenderer(item, column.key)\n : (column.renderCell?.(item) ?? null);\n const content =\n isDefaultRenderer &&\n textOverflow === 'truncate' &&\n typeof rawContent === 'string' &&\n rawContent.length > 0 ? (\n <Text maxLines={1} type=\"body\">\n {rawContent}\n </Text>\n ) : (\n rawContent\n );\n\n return (\n <CellComponent\n key={column.key}\n {...cellProps.htmlProps}\n className={cx(cellProps.htmlProps.className, cellProps.className)}>\n {content}\n </CellComponent>\n );\n });\n\n const rowProps = applyPlugins(\n plugins,\n plugin => plugin.transformBodyRow,\n {\n children: <>{cells}</>,\n htmlProps: {},\n } satisfies BodyRowRenderProps,\n item,\n rowIndex,\n );\n\n return (\n <RowComponent\n key={rowKey}\n {...rowProps.htmlProps}\n className={cx(rowProps.htmlProps.className, rowProps.className)}\n ref={rowProps.ref}>\n {rowProps.children}\n </RowComponent>\n );\n}\n\nfunction areRowPropsEqual<T extends Record<string, unknown>>(\n previous: DataRowProps<T>,\n next: DataRowProps<T>,\n): boolean {\n if (\n previous.CellComponent !== next.CellComponent ||\n previous.RowComponent !== next.RowComponent ||\n previous.columns !== next.columns ||\n previous.plugins !== next.plugins ||\n previous.rowIndex !== next.rowIndex ||\n previous.rowKey !== next.rowKey ||\n previous.textOverflow !== next.textOverflow\n ) {\n return false;\n }\n\n if (previous.item === next.item) {\n return true;\n }\n\n return Object.keys(next.item).every(\n key => previous.item[key] === next.item[key],\n );\n}\n\nconst MemoizedDataRow = memo(DataRowInner, areRowPropsEqual) as <\n T extends Record<string, unknown>,\n>(\n props: DataRowProps<T>,\n) => ReactElement;\n\n/**\n * Data table with configurable density, dividers, hover, and striping. Applies\n * column definitions, plugins, and data mapping, and shares visual state with\n * its row/cell primitives through `TableContext`.\n */\nfunction TableInner<T extends Record<string, unknown>>({\n children,\n className,\n columns: columnsProp,\n data,\n 'data-testid': dataTestId,\n density = 'balanced',\n dividers = 'rows',\n emptyState,\n hasHover = false,\n idKey,\n isStriped = false,\n plugins: userPlugins,\n ref,\n style,\n tableProps,\n textOverflow = 'wrap',\n verticalAlign = 'middle',\n}: TableProps<T> & {ref?: Ref<HTMLTableElement>}): ReactElement {\n const plugins = useBaseTablePlugins(userPlugins);\n const contextValue = useMemo(\n (): TableContextValue => ({\n density,\n dividers,\n hasHover,\n isStriped,\n textOverflow,\n verticalAlign,\n }),\n [density, dividers, hasHover, isStriped, textOverflow, verticalAlign],\n );\n\n const classes = tableRecipe({isAutoLayout: isReactNode(children)});\n const RowComponent = TableRow as React.ComponentType<TableRowComponentProps>;\n const CellComponent =\n TableCell as React.ComponentType<TableCellComponentProps>;\n const HeaderCellComponent =\n TableHeaderCell as React.ComponentType<TableHeaderCellComponentProps>;\n\n const baseColumns =\n columnsProp ?? (data == null ? [] : generateColumns(data));\n const transformedColumns = applyPlugins(\n plugins,\n plugin => plugin.transformColumns,\n baseColumns,\n );\n // Keep `columns` referentially stable while its contents are unchanged so the\n // memoized data rows (which compare `columns` by identity) skip re-rendering\n // when an upstream value rebuilds the array each render.\n const columns = useShallowEqualMemo(transformedColumns);\n const widths = resolveColumnWidths(columns);\n\n const tableRenderProps = applyPlugins(\n plugins,\n plugin => plugin.transformTable,\n {\n htmlProps: tableProps ?? {},\n } satisfies TableRenderProps,\n );\n\n const headerCells = columns.map(column => {\n const headerContent = column.header ?? column.key;\n const initialHtmlProps: HeaderCellRenderProps['htmlProps'] & {\n 'data-column-key'?: string;\n } = {\n 'data-column-key': column.key,\n };\n if (column.align) {\n initialHtmlProps.style = {textAlign: column.align};\n }\n\n const headerCellProps = applyPlugins(\n plugins,\n plugin => plugin.transformHeaderCell,\n {\n content: headerContent,\n htmlProps: initialHtmlProps,\n } satisfies HeaderCellRenderProps,\n column,\n );\n\n const widthStyle = widths.columns.get(column.key)?.style ?? {};\n const mergedStyle = {\n ...widthStyle,\n ...headerCellProps.htmlProps.style,\n };\n const resolvedContent = headerCellProps.content ?? headerContent;\n const title =\n typeof resolvedContent === 'string' && resolvedContent.length > 0\n ? resolvedContent\n : undefined;\n const renderedContent =\n typeof resolvedContent === 'string' ||\n typeof resolvedContent === 'number' ? (\n <Text\n color=\"secondary\"\n maxLines={1}\n size=\"md\"\n type=\"body\"\n weight=\"semibold\">\n {resolvedContent}\n </Text>\n ) : (\n resolvedContent\n );\n const hasSlots =\n isReactNode(headerCellProps.before) ||\n isReactNode(headerCellProps.after) ||\n isReactNode(headerCellProps.overlay) ||\n isReactNode(headerCellProps.below);\n\n return (\n <HeaderCellComponent\n key={column.key}\n {...headerCellProps.htmlProps}\n className={cx(\n headerCellProps.htmlProps.className,\n headerCellProps.className,\n )}\n style={mergedStyle}\n title={title}>\n {hasSlots ? (\n <>\n {headerCellProps.before}\n {!isReactNode(headerCellProps.after) ? (\n renderedContent\n ) : (\n <div\n className={classes.headerLabelRow}\n data-part=\"header-label-row\">\n {renderedContent}\n {headerCellProps.after}\n </div>\n )}\n {headerCellProps.overlay}\n {headerCellProps.below}\n </>\n ) : (\n renderedContent\n )}\n </HeaderCellComponent>\n );\n });\n\n const headerRowProps = applyPlugins(\n plugins,\n plugin => plugin.transformHeaderRow,\n {\n children: <>{headerCells}</>,\n htmlProps: {},\n } satisfies HeaderRowRenderProps,\n );\n\n const tableStyle = {\n ...style,\n ...tableRenderProps.htmlProps.style,\n minWidth:\n widths.tableMinWidth > 0 ? `${widths.tableMinWidth}px` : undefined,\n };\n const hasData = data != null && data.length > 0;\n const hasColumns = columns.length > 0;\n\n let tableElement: ReactNode = (\n <div className={classes.wrapper} data-part=\"wrapper\">\n <table\n {...tableRenderProps.htmlProps}\n className={cx(\n classes.table,\n tableRenderProps.htmlProps.className,\n tableRenderProps.className,\n className,\n )}\n data-part=\"table\"\n data-testid={dataTestId}\n ref={ref}\n style={tableStyle}>\n {children ?? (\n <>\n {hasColumns ? (\n <TableHeader>\n <RowComponent\n {...headerRowProps.htmlProps}\n className={cx(\n headerRowProps.htmlProps.className,\n headerRowProps.className,\n )}>\n {headerRowProps.children}\n </RowComponent>\n </TableHeader>\n ) : null}\n <TableBody>\n {hasData\n ? data.map((item, rowIndex) => {\n const rowKey =\n idKey == null\n ? rowIndex\n : typeof idKey === 'function'\n ? idKey(item)\n : String(item[idKey]);\n return (\n <MemoizedDataRow\n CellComponent={CellComponent}\n columns={columns}\n item={item}\n key={rowKey}\n plugins={plugins}\n RowComponent={RowComponent}\n rowIndex={rowIndex}\n rowKey={rowKey}\n textOverflow={textOverflow}\n />\n );\n })\n : data != null &&\n (emptyState === undefined || isReactNode(emptyState)) && (\n <tr>\n <td colSpan={Math.max(columns.length, 1)}>\n {emptyState ?? <EmptyState isCompact title=\"No data\" />}\n </td>\n </tr>\n )}\n </TableBody>\n </>\n )}\n </table>\n </div>\n );\n\n for (let index = plugins.length - 1; index >= 0; index--) {\n const plugin = plugins[index];\n if (plugin.transformTableContext != null) {\n try {\n tableElement = plugin.transformTableContext(tableElement);\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n throw error;\n }\n console.error('[Table] Plugin threw in transformTableContext:', error);\n }\n }\n }\n\n return <TableContext value={contextValue}>{tableElement}</TableContext>;\n}\n\nexport const Table = TableInner as <T extends Record<string, unknown>>(\n props: TableProps<T> & {ref?: Ref<HTMLTableElement>},\n) => ReactElement;\n\n(Table as {displayName?: string}).displayName = 'Table';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableFooterProps {\n /**\n * Footer row elements rendered inside the tfoot.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tfoot.\n */\n className?: string;\n /**\n * Test ID applied to the tfoot.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tfoot element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the tfoot.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table footer rows in a `<tfoot>` element.\n */\nexport function TableFooter({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableFooterProps): React.JSX.Element {\n return (\n <tfoot\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tfoot>\n );\n}\n\nTableFooter.displayName = 'TableFooter';\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {DEFAULT_MIN_COLUMN_WIDTH} from 'components/Table/columnUtils';\nimport type {\n ColumnWidth,\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport interface UseTableColumnResizeConfig {\n columns?: TableColumn<Record<string, unknown>>[];\n columnWidths?: Record<string, number>;\n maxWidth?: number;\n minWidth?: number;\n onColumnResizeEnd?: (updates: Record<string, number>) => void;\n}\n\ninterface DragState {\n columnKey: string;\n neighborIndex: number | null;\n resizeIndex: number;\n snapshots: ColumnSnapshot[];\n startX: number;\n tableWidth: number;\n}\n\ninterface ColumnSnapshot {\n initialMaxWidth: string;\n initialMinWidth: string;\n initialWidth: number;\n initialWidthStyle: string;\n key: string;\n maxWidth: number;\n minWidth: number;\n th: HTMLTableCellElement;\n}\n\ninterface PointerListeners {\n cancel: (event: PointerEvent) => void;\n move: (event: PointerEvent) => void;\n up: (event: PointerEvent) => void;\n}\n\nconst KEYBOARD_STEP = 10;\nconst KEYBOARD_LARGE_STEP = 50;\n\nconst styles = {\n handle: css({\n position: 'absolute',\n insetInlineEnd: 0,\n top: 0,\n bottom: 0,\n zIndex: 1,\n w: '4',\n cursor: 'ew-resize',\n borderWidth: 0,\n bg: 'transparent',\n p: 0,\n touchAction: 'none',\n userSelect: 'none',\n _after: {\n content: '\"\"',\n position: 'absolute',\n insetInlineEnd: 0,\n top: 0,\n bottom: 0,\n w: '2px',\n bg: 'transparent',\n transitionDuration: 'fast',\n transitionProperty: 'background-color, width',\n transitionTimingFunction: 'default',\n },\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffset',\n },\n _hover: {\n _after: {\n bg: 'primary',\n },\n },\n '@media (pointer: coarse)': {\n display: 'none',\n },\n }),\n headerCell: css({\n overflow: 'visible',\n position: 'relative',\n }),\n} as const;\n\nfunction resolveColumnMinWidth(\n width: ColumnWidth | undefined,\n globalMinWidth: number | undefined,\n): number {\n if (globalMinWidth != null) {\n return globalMinWidth;\n }\n if (width?.type === 'pixel') {\n return width.value;\n }\n return width?.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH;\n}\n\nfunction applyWidth(th: HTMLTableCellElement, width: number): void {\n th.style.width = `${width}px`;\n th.style.minWidth = `${width}px`;\n th.style.maxWidth = `${width}px`;\n}\n\nfunction isProportionalColumn(width: ColumnWidth | undefined): boolean {\n return width == null || width.type === 'proportional';\n}\n\nfunction getRTLMultiplier(element: HTMLElement): number {\n return getComputedStyle(element).direction === 'rtl' ? -1 : 1;\n}\n\nfunction computeColumnWidths(drag: DragState, delta: number): number[] {\n const widths = drag.snapshots.map(snapshot => snapshot.initialWidth);\n\n if (drag.neighborIndex != null) {\n const neighbor = drag.snapshots[drag.neighborIndex];\n const self = drag.snapshots[drag.resizeIndex];\n const maxDelta = neighbor.initialWidth - neighbor.minWidth;\n const minDelta = self.minWidth - self.initialWidth;\n const clampedDelta = Math.max(minDelta, Math.min(delta, maxDelta));\n widths[drag.resizeIndex] = self.initialWidth + clampedDelta;\n widths[drag.neighborIndex] = neighbor.initialWidth - clampedDelta;\n } else {\n const self = drag.snapshots[drag.resizeIndex];\n widths[drag.resizeIndex] = Math.min(\n self.maxWidth,\n Math.max(self.minWidth, self.initialWidth + delta),\n );\n }\n\n const lastIndex = drag.snapshots.length - 1;\n const isResizingLastColumnWithoutNeighbor =\n drag.resizeIndex === lastIndex && drag.neighborIndex == null;\n if (\n lastIndex >= 0 &&\n drag.tableWidth > 0 &&\n !isResizingLastColumnWithoutNeighbor\n ) {\n const sumOthers = widths.reduce(\n (sum, width, index) => (index === lastIndex ? sum : sum + width),\n 0,\n );\n widths[lastIndex] = Math.max(\n drag.snapshots[lastIndex].minWidth,\n drag.tableWidth - sumOthers,\n );\n }\n\n return widths;\n}\n\nfunction applyWidths(snapshots: ColumnSnapshot[], widths: number[]): void {\n snapshots.forEach((snapshot, index) => {\n applyWidth(snapshot.th, widths[index]);\n });\n}\n\nfunction restoreSnapshotStyles(snapshots: ColumnSnapshot[]): void {\n snapshots.forEach(snapshot => {\n snapshot.th.style.width = snapshot.initialWidthStyle;\n snapshot.th.style.minWidth = snapshot.initialMinWidth;\n snapshot.th.style.maxWidth = snapshot.initialMaxWidth;\n });\n}\n\nfunction buildUpdates(\n drag: DragState,\n widths: number[],\n): Record<string, number> {\n const updates: Record<string, number> = {};\n const lastIndex = drag.snapshots.length - 1;\n const isResizingLastColumnWithoutNeighbor =\n drag.resizeIndex === lastIndex && drag.neighborIndex == null;\n if (isResizingLastColumnWithoutNeighbor) {\n const snapshot = drag.snapshots[drag.resizeIndex];\n updates[snapshot.key] = Math.round(widths[drag.resizeIndex]);\n return updates;\n }\n drag.snapshots.forEach((snapshot, index) => {\n if (index === lastIndex) {\n return;\n }\n updates[snapshot.key] = Math.round(widths[index]);\n });\n return updates;\n}\n\nfunction ResizeHandle({\n columnHeader,\n columnKey,\n configRef,\n currentWidth,\n maxWidth,\n minWidth,\n neighborKey,\n}: {\n columnHeader: ReactNode;\n columnKey: string;\n configRef: React.RefObject<UseTableColumnResizeConfig>;\n currentWidth: number | undefined;\n maxWidth: number;\n minWidth: number;\n neighborKey: string | null;\n}): React.JSX.Element {\n const dragStateRef = useRef<DragState | null>(null);\n const pointerListenersRef = useRef<PointerListeners | null>(null);\n\n const removePointerListeners = useCallback(() => {\n const listeners = pointerListenersRef.current;\n if (listeners == null) {\n return;\n }\n window.removeEventListener('pointermove', listeners.move);\n window.removeEventListener('pointerup', listeners.up);\n window.removeEventListener('pointercancel', listeners.cancel);\n pointerListenersRef.current = null;\n }, []);\n\n const buildDragState = useCallback(\n (th: HTMLTableCellElement, startX: number): DragState | null => {\n const headerRow = th.parentElement;\n if (headerRow == null) {\n return null;\n }\n\n const table = th.closest('table');\n const tableWidth = table?.getBoundingClientRect().width ?? 0;\n const columns = configRef.current.columns;\n const activeHeaderIndex = Array.from(headerRow.children).indexOf(th);\n const activeColumnIndex =\n columns?.findIndex(column => column.key === columnKey) ?? -1;\n const columnIndexOffset =\n activeHeaderIndex >= 0 && activeColumnIndex >= 0\n ? activeHeaderIndex - activeColumnIndex\n : 0;\n const columnsByKey = new Map(\n columns?.map(column => [column.key, column]),\n );\n const currentWidths = configRef.current.columnWidths ?? {};\n const snapshots: ColumnSnapshot[] = [];\n\n const allHeaders = Array.from(headerRow.children).filter(\n (child): child is HTMLTableCellElement =>\n child instanceof HTMLTableCellElement,\n );\n for (const [index, header] of allHeaders.entries()) {\n const key =\n header\n .querySelector<HTMLElement>('[data-column-key]')\n ?.getAttribute('data-column-key') ??\n columns?.[index - columnIndexOffset]?.key;\n if (key == null) {\n continue;\n }\n const snapshotColumn = columnsByKey.get(key);\n if (columns != null && snapshotColumn == null) {\n continue;\n }\n if (snapshotColumn?.resizable === false) {\n continue;\n }\n\n const renderedWidth = header.getBoundingClientRect().width;\n const overrideWidth: number | undefined =\n Object.prototype.hasOwnProperty.call(currentWidths, key)\n ? currentWidths[key]\n : undefined;\n snapshots.push({\n initialMaxWidth: header.style.maxWidth,\n initialMinWidth: header.style.minWidth,\n initialWidth:\n overrideWidth ?? (renderedWidth > 0 ? renderedWidth : minWidth),\n initialWidthStyle: header.style.width,\n key,\n maxWidth: configRef.current.maxWidth ?? Number.POSITIVE_INFINITY,\n minWidth:\n snapshotColumn == null\n ? minWidth\n : resolveColumnMinWidth(\n snapshotColumn.width,\n configRef.current.minWidth,\n ),\n th: header,\n });\n }\n\n const resizeIndex = snapshots.findIndex(\n snapshot => snapshot.key === columnKey,\n );\n if (resizeIndex < 0) {\n return null;\n }\n\n const neighborIndex =\n neighborKey == null\n ? null\n : snapshots.findIndex(snapshot => snapshot.key === neighborKey);\n\n return {\n columnKey,\n neighborIndex:\n neighborIndex == null || neighborIndex < 0 ? null : neighborIndex,\n resizeIndex,\n snapshots,\n startX,\n tableWidth,\n };\n },\n [columnKey, configRef, minWidth, neighborKey],\n );\n\n const commitResize = useCallback(\n (drag: DragState, delta: number) => {\n const widths = computeColumnWidths(drag, delta);\n applyWidths(drag.snapshots, widths);\n const updates = buildUpdates(drag, widths);\n if (Object.keys(updates).length > 0) {\n configRef.current.onColumnResizeEnd?.(updates);\n }\n },\n [configRef],\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n const drag = dragStateRef.current;\n if (drag == null) {\n return;\n }\n const delta =\n (event.clientX - drag.startX) *\n getRTLMultiplier(drag.snapshots[drag.resizeIndex].th);\n applyWidths(drag.snapshots, computeColumnWidths(drag, delta));\n },\n [dragStateRef],\n );\n\n const handlePointerUp = useCallback(\n (event: PointerEvent) => {\n const drag = dragStateRef.current;\n removePointerListeners();\n if (drag != null) {\n const delta =\n (event.clientX - drag.startX) *\n getRTLMultiplier(drag.snapshots[drag.resizeIndex].th);\n commitResize(drag, delta);\n }\n dragStateRef.current = null;\n },\n [commitResize, dragStateRef, removePointerListeners],\n );\n\n const handlePointerCancel = useCallback(() => {\n const drag = dragStateRef.current;\n if (drag != null) {\n restoreSnapshotStyles(drag.snapshots);\n }\n removePointerListeners();\n dragStateRef.current = null;\n }, [dragStateRef, removePointerListeners]);\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const th = event.currentTarget.closest('th');\n if (th == null) {\n return;\n }\n const drag = buildDragState(th, event.clientX);\n if (drag == null) {\n return;\n }\n dragStateRef.current = drag;\n applyWidths(drag.snapshots, computeColumnWidths(drag, 0));\n pointerListenersRef.current = {\n cancel: handlePointerCancel,\n move: handlePointerMove,\n up: handlePointerUp,\n };\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerCancel);\n },\n [\n buildDragState,\n dragStateRef,\n handlePointerCancel,\n handlePointerMove,\n handlePointerUp,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n event.key !== 'ArrowLeft' &&\n event.key !== 'ArrowRight' &&\n event.key !== 'Home' &&\n event.key !== 'End'\n ) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const th = event.currentTarget.closest('th');\n if (th == null) {\n return;\n }\n const drag = buildDragState(th, 0);\n if (drag == null) {\n return;\n }\n const activeSnapshot = drag.snapshots[drag.resizeIndex];\n const step = event.shiftKey ? KEYBOARD_LARGE_STEP : KEYBOARD_STEP;\n const delta =\n event.key === 'Home'\n ? activeSnapshot.minWidth - activeSnapshot.initialWidth\n : event.key === 'End'\n ? Number.isFinite(activeSnapshot.maxWidth)\n ? activeSnapshot.maxWidth - activeSnapshot.initialWidth\n : 0\n : event.key === 'ArrowLeft'\n ? -step * getRTLMultiplier(th)\n : step * getRTLMultiplier(th);\n commitResize(drag, delta);\n },\n [buildDragState, commitResize],\n );\n const headerLabel =\n typeof columnHeader === 'string' ? columnHeader : columnKey;\n\n /* eslint-disable jsx-a11y-x/no-noninteractive-element-interactions, jsx-a11y-x/no-noninteractive-tabindex -- ARIA separator uses the window splitter keyboard pattern. */\n return (\n <div\n aria-label={`Resize column ${headerLabel}`}\n aria-orientation=\"vertical\"\n aria-valuemax={Number.isFinite(maxWidth) ? maxWidth : undefined}\n aria-valuemin={minWidth}\n aria-valuenow={currentWidth}\n className={styles.handle}\n data-column-key={columnKey}\n onKeyDown={handleKeyDown}\n onPointerDown={handlePointerDown}\n role=\"separator\"\n tabIndex={0}\n />\n );\n /* eslint-enable jsx-a11y-x/no-noninteractive-element-interactions, jsx-a11y-x/no-noninteractive-tabindex */\n}\n\nexport function useTableColumnResize<T extends Record<string, unknown>>(\n config: UseTableColumnResizeConfig,\n): TablePlugin<T> {\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n const globalMinWidth = config.minWidth;\n const maxWidth = config.maxWidth ?? Number.POSITIVE_INFINITY;\n const columnWidths = config.columnWidths;\n const resizableColumns = useMemo(\n () => config.columns?.filter(column => column.resizable !== false),\n [config.columns],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n if (column.resizable === false) {\n return props;\n }\n\n let neighborKey: string | null = null;\n if (resizableColumns != null && isProportionalColumn(column.width)) {\n const columnIndex = resizableColumns.findIndex(\n resizableColumn => resizableColumn.key === column.key,\n );\n const isLastResizable = columnIndex === resizableColumns.length - 1;\n if (isLastResizable) {\n return props;\n }\n if (columnIndex >= 0) {\n neighborKey = resizableColumns[columnIndex + 1]?.key ?? null;\n }\n }\n\n const overrideWidth = columnWidths?.[column.key];\n const widthStyle: CSSProperties | undefined =\n overrideWidth == null\n ? undefined\n : {\n maxWidth: `${overrideWidth}px`,\n minWidth: `${overrideWidth}px`,\n width: `${overrideWidth}px`,\n };\n const effectiveMinWidth = resolveColumnMinWidth(\n column.width,\n globalMinWidth,\n );\n\n return {\n ...props,\n className: styles.headerCell,\n htmlProps: {\n ...props.htmlProps,\n style:\n widthStyle == null\n ? props.htmlProps.style\n : {...props.htmlProps.style, ...widthStyle},\n },\n overlay: (\n <>\n {props.overlay}\n <ResizeHandle\n columnHeader={column.header ?? column.key}\n columnKey={column.key}\n configRef={configRef}\n currentWidth={overrideWidth}\n maxWidth={maxWidth}\n minWidth={effectiveMinWidth}\n neighborKey={neighborKey}\n />\n </>\n ),\n };\n },\n }),\n [columnWidths, configRef, globalMinWidth, maxWidth, resizableColumns],\n );\n}\n","import {useMemo} from 'react';\nimport type {UseTableColumnSettingsStateConfig} from 'components/Table/plugins/columnSettings/useTableColumnSettingsState';\nimport type {TableColumn, TablePlugin} from 'components/Table/types';\n\nexport interface TableColumnSettingsOption<TColumnKey extends string = string> {\n group?: string;\n isAlwaysVisible?: boolean;\n key: TColumnKey;\n label: string;\n}\n\nexport type UseTableColumnSettingsConfig<TColumnKey extends string = string> =\n UseTableColumnSettingsStateConfig<TColumnKey>;\n\nexport function useTableColumnSettings<\n T extends Record<string, unknown>,\n TColumnKey extends string = string,\n>(config: UseTableColumnSettingsConfig<TColumnKey>): TablePlugin<T> {\n return useMemo(\n (): TablePlugin<T> => ({\n transformColumns(columns: TableColumn<T>[]): TableColumn<T>[] {\n const activeSet = new Set(config.activeColumnKeys);\n const orderMap = new Map(\n config.activeColumnKeys.map((key, index) => [key, index]),\n );\n return columns\n .filter(column => activeSet.has(column.key as TColumnKey))\n .sort(\n (a, b) =>\n (orderMap.get(a.key as TColumnKey) ?? Infinity) -\n (orderMap.get(b.key as TColumnKey) ?? Infinity),\n );\n },\n }),\n [config],\n );\n}\n","import {useCallback, useMemo} from 'react';\nimport type {TableColumnSettingsOption} from 'components/Table/plugins/columnSettings/useTableColumnSettings';\n\nexport interface UseTableColumnSettingsStateConfig<\n TColumnKey extends string = string,\n> {\n activeColumnKeys: ReadonlyArray<TColumnKey>;\n columns: ReadonlyArray<TableColumnSettingsOption<TColumnKey>>;\n defaultColumnKeys?: ReadonlyArray<TColumnKey>;\n onChangeActiveColumnKeys: (keys: ReadonlyArray<TColumnKey>) => void;\n}\n\nexport interface UseTableColumnSettingsStateReturn<\n TColumnKey extends string = string,\n> {\n activeColumnKeys: ReadonlyArray<TColumnKey>;\n columnSettingsConfig: UseTableColumnSettingsStateConfig<TColumnKey>;\n getIsColumnActive: (key: TColumnKey) => boolean;\n getIsColumnToggleable: (key: TColumnKey) => boolean;\n resetToDefault: () => void;\n setActiveColumnKeys: (keys: string[]) => void;\n showAllColumns: () => void;\n toggleColumn: (key: TColumnKey) => void;\n}\n\nexport function useTableColumnSettingsState<TColumnKey extends string = string>(\n config: UseTableColumnSettingsStateConfig<TColumnKey>,\n): UseTableColumnSettingsStateReturn<TColumnKey> {\n const {activeColumnKeys, columns} = config;\n const activeSet = useMemo(\n () => new Set(activeColumnKeys),\n [activeColumnKeys],\n );\n const alwaysVisibleSet = useMemo(\n () =>\n new Set(\n columns\n .filter(column => column.isAlwaysVisible)\n .map(column => column.key),\n ),\n [columns],\n );\n\n const toggleColumn = useCallback(\n (key: TColumnKey) => {\n if (\n config.columns.some(\n column => column.key === key && column.isAlwaysVisible,\n )\n ) {\n return;\n }\n const currentSet = new Set(config.activeColumnKeys);\n config.onChangeActiveColumnKeys(\n currentSet.has(key)\n ? config.activeColumnKeys.filter(columnKey => columnKey !== key)\n : [...config.activeColumnKeys, key],\n );\n },\n [config],\n );\n const getIsColumnActive = useCallback(\n (key: TColumnKey) => activeSet.has(key),\n [activeSet],\n );\n const getIsColumnToggleable = useCallback(\n (key: TColumnKey) => !alwaysVisibleSet.has(key),\n [alwaysVisibleSet],\n );\n const showAllColumns = useCallback(() => {\n config.onChangeActiveColumnKeys(config.columns.map(column => column.key));\n }, [config]);\n const resetToDefault = useCallback(() => {\n config.onChangeActiveColumnKeys(\n config.defaultColumnKeys ?? config.columns.map(column => column.key),\n );\n }, [config]);\n const setActiveColumnKeys = useCallback(\n (keys: string[]) => {\n const next = new Set(keys as TColumnKey[]);\n for (const column of config.columns) {\n if (column.isAlwaysVisible) {\n next.add(column.key);\n }\n }\n config.onChangeActiveColumnKeys(Array.from(next));\n },\n [config],\n );\n\n return {\n activeColumnKeys,\n columnSettingsConfig: config,\n getIsColumnActive,\n getIsColumnToggleable,\n resetToDefault,\n setActiveColumnKeys,\n showAllColumns,\n toggleColumn,\n };\n}\n","import {Temporal} from '@js-temporal/polyfill';\nimport {Filter} from 'lucide-react';\nimport {\n createContext,\n use,\n useCallback,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport {\n createStaticSearchSource,\n type SearchableItem,\n} from 'components/AutocompleteInput';\nimport {Button} from 'components/Button';\nimport {DateInput} from 'components/DateInput';\nimport {MultiSelect} from 'components/MultiSelect';\nimport {NumberInput} from 'components/NumberInput';\nimport {Popover} from 'components/Popover';\nimport type {\n FilterValue,\n FloatOperatorValue,\n IntegerOperatorValue,\n OperatorValue,\n SearchFilterInputConfig,\n SearchFilterInputField,\n SearchFilterInputFilter,\n SearchFilterInputOperator,\n StringListOperatorValue,\n EntityListOperatorValue,\n EnumListOperatorValue,\n EnumOperatorValue,\n} from 'components/SearchFilterInput';\nimport {Select} from 'components/Select';\nimport {proportional} from 'components/Table/columnUtils';\nimport type {\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {TagsInput} from 'components/TagsInput';\nimport {TextInput} from 'components/TextInput';\nimport {TimeInput} from 'components/TimeInput';\nimport {plainDateToUnixSeconds, type PlainDate} from 'internal/plainDate';\nimport {getBrowserTimezoneID} from 'internal/time';\nimport {css} from 'styled-system/css';\n\nexport type TableFilterValue = number | string | string[] | PlainDate;\nexport type TableFilterState = Record<string, TableFilterValue | undefined>;\nexport type TableFilterVariant = 'inline' | 'popover';\n\nexport interface TableFilterFieldRef {\n field: string;\n operator?: string;\n}\n\nexport interface UseTableFilteringConfig {\n filters: TableFilterState;\n onFilterChange: (columnKey: string, value: TableFilterValue | null) => void;\n searchConfig: SearchFilterInputConfig;\n timezoneID?: string;\n variant?: TableFilterVariant;\n}\n\ntype ToSearchFiltersConfig =\n | Pick<UseTableFilteringConfig, 'searchConfig' | 'timezoneID'>\n | SearchFilterInputConfig;\n\ninterface FilterStore {\n getConfig: () => UseTableFilteringConfig;\n}\n\nconst FilterStoreContext = createContext<FilterStore | null>(null);\nFilterStoreContext.displayName = 'TableFilterStoreContext';\n\nconst styles = {\n afterPopover: css({\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n }),\n inlineWrapper: css({\n mt: '1',\n }),\n popoverActions: css({\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '2',\n mt: '2',\n }),\n popoverActionsSpacer: css({\n flex: 1,\n }),\n popoverContent: css({\n w: '60',\n }),\n} as const;\n\nfunction useFilterStore(): FilterStore {\n const store = use(FilterStoreContext);\n if (store == null) {\n throw new Error(\n 'useFilterStore must be used within a Table filtering plugin',\n );\n }\n return store;\n}\n\nfunction resolveOperator(\n field: SearchFilterInputField,\n operatorKey?: string,\n): SearchFilterInputOperator | undefined {\n if (operatorKey != null) {\n return field.operators.find(operator => operator.key === operatorKey);\n }\n if (field.defaultOperator != null) {\n return field.operators.find(\n operator => operator.key === field.defaultOperator,\n );\n }\n return field.operators[0];\n}\n\nfunction resolveFilterConfig(\n filter: string | TableFilterFieldRef,\n searchConfig: SearchFilterInputConfig,\n): OperatorValue | undefined {\n const fieldKey = typeof filter === 'string' ? filter : filter.field;\n const operatorKey = typeof filter === 'string' ? undefined : filter.operator;\n const field = searchConfig.fields.find(\n candidate => candidate.key === fieldKey,\n );\n return field == null ? undefined : resolveOperator(field, operatorKey)?.value;\n}\n\nfunction tableValueToFilterValue(\n value: TableFilterValue,\n operatorValue: OperatorValue,\n timezoneID: string,\n): FilterValue | undefined {\n switch (operatorValue.type) {\n case 'date_absolute':\n return value instanceof Temporal.PlainDate\n ? {\n type: 'date_absolute',\n unixSeconds: plainDateToUnixSeconds(value, timezoneID),\n }\n : undefined;\n case 'enum':\n return typeof value === 'string' ? {type: 'enum', value} : undefined;\n case 'enum_list':\n return Array.isArray(value) ? {type: 'enum_list', value} : undefined;\n case 'entity_list':\n return Array.isArray(value)\n ? {\n type: 'entity_list',\n value: value.map(id => ({id, label: id})),\n }\n : undefined;\n case 'float':\n return typeof value === 'number' ? {type: 'float', value} : undefined;\n case 'integer':\n return typeof value === 'number' ? {type: 'integer', value} : undefined;\n case 'string':\n return typeof value === 'string' ? {type: 'string', value} : undefined;\n case 'string_list':\n return Array.isArray(value) ? {type: 'string_list', value} : undefined;\n case 'time':\n return typeof value === 'string' ? {type: 'time', value} : undefined;\n case 'custom':\n case 'date_range':\n case 'date_relative':\n case 'empty':\n case 'nested':\n return undefined;\n }\n}\n\nexport function toSearchFilters<T extends Record<string, unknown>>(\n filters: TableFilterState,\n columns: ReadonlyArray<Pick<TableColumn<T>, 'filter' | 'key'>>,\n config: ToSearchFiltersConfig,\n timezoneID?: string,\n): SearchFilterInputFilter[] {\n const result: SearchFilterInputFilter[] = [];\n const searchConfig = 'searchConfig' in config ? config.searchConfig : config;\n const effectiveTimezoneID =\n ('searchConfig' in config ? config.timezoneID : undefined) ??\n timezoneID ??\n getBrowserTimezoneID();\n\n for (const column of columns) {\n if (column.filter == null) {\n continue;\n }\n const value = filters[column.key];\n if (value == null) {\n continue;\n }\n const fieldKey =\n typeof column.filter === 'string' ? column.filter : column.filter.field;\n const operatorKey =\n typeof column.filter === 'string' ? undefined : column.filter.operator;\n const field = searchConfig.fields.find(\n candidate => candidate.key === fieldKey,\n );\n const operator =\n field == null ? undefined : resolveOperator(field, operatorKey);\n if (operator == null) {\n continue;\n }\n const filterValue = tableValueToFilterValue(\n value,\n operator.value,\n effectiveTimezoneID,\n );\n if (filterValue != null) {\n result.push({\n field: fieldKey,\n operator: operator.key,\n value: filterValue,\n });\n }\n }\n\n return result;\n}\n\nfunction TextFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <TextInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue === '' ? null : nextValue);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={typeof value === 'string' ? value : ''}\n />\n );\n}\n\nfunction NumberFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: FloatOperatorValue | IntegerOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n const sharedProps = {\n isIntegerOnly: operatorValue.type === 'integer',\n isLabelHidden: true as const,\n label: `Filter ${header}`,\n max: operatorValue.maxValue ?? null,\n min: operatorValue.minValue ?? null,\n placeholder: `Filter ${header}`,\n size,\n step: operatorValue.type === 'integer' ? 1 : null,\n value: typeof value === 'number' ? value : null,\n };\n if (hasClear === false) {\n return (\n <NumberInput\n {...sharedProps}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n />\n );\n }\n return (\n <NumberInput\n {...sharedProps}\n hasClear\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n />\n );\n}\n\nfunction SelectFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EnumOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <Select\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n options={operatorValue.values.map(option => ({\n icon: option.icon,\n label: option.label,\n value: option.value,\n }))}\n placeholder=\"All\"\n size={size}\n value={typeof value === 'string' ? value : null}\n />\n );\n}\n\nfunction MultiSelectFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EnumListOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <MultiSelect\n hasClear={hasClear}\n hasSearch={false}\n hasSelectAll\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue.length === 0 ? null : nextValue);\n }}\n options={operatorValue.values.map(option => ({\n icon: option.icon,\n label: option.label,\n value: option.value,\n }))}\n placeholder=\"All\"\n size={size}\n value={Array.isArray(value) ? value : []}\n />\n );\n}\n\nfunction DateFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <DateInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue ?? null);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={value instanceof Temporal.PlainDate ? value : null}\n />\n );\n}\n\nfunction TimeFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <TimeInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue?.toString() ?? null);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={value instanceof Temporal.PlainTime ? value : null}\n />\n );\n}\n\nfunction ListFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EntityListOperatorValue | StringListOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n const items = Array.isArray(value) ? value.map(id => ({id, label: id})) : [];\n const source =\n operatorValue.searchSource ??\n createStaticSearchSource<SearchableItem>(items, {\n getKeywords: item => [item.id],\n });\n\n return (\n <TagsInput\n hasClear={hasClear}\n hasCreate={operatorValue.isArbitraryStringAllowed ?? true}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextItems => {\n const ids = nextItems.map(item => item.id);\n store\n .getConfig()\n .onFilterChange(columnKey, ids.length === 0 ? null : ids);\n }}\n placeholder={`Filter ${header}`}\n renderItem={\n operatorValue.type === 'entity_list'\n ? operatorValue.renderItem\n : undefined\n }\n searchSource={source}\n size={size}\n value={items}\n />\n );\n}\n\nfunction getHeaderText<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string {\n return typeof column.header === 'string' ? column.header : column.key;\n}\n\nfunction FilterControl<T extends Record<string, unknown>>({\n column,\n hasClear,\n operatorValue,\n size,\n}: {\n column: TableColumn<T>;\n hasClear?: boolean;\n operatorValue: OperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element | null {\n const header = getHeaderText(column);\n switch (operatorValue.type) {\n case 'date_absolute':\n return (\n <DateFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'enum':\n return (\n <SelectFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'enum_list':\n return (\n <MultiSelectFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'entity_list':\n case 'string_list':\n return (\n <ListFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'float':\n case 'integer':\n return (\n <NumberFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'string':\n return (\n <TextFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'time':\n return (\n <TimeFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'custom':\n case 'date_range':\n case 'date_relative':\n case 'empty':\n case 'nested':\n return null;\n }\n}\n\nfunction PopoverFilterTrigger<T extends Record<string, unknown>>({\n column,\n operatorValue,\n}: {\n column: TableColumn<T>;\n operatorValue: OperatorValue;\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[column.key];\n const isActive = value != null;\n const [isOpen, setIsOpen] = useState(false);\n const [draft, setDraft] = useState<TableFilterValue | null>(null);\n\n const handleOpenChange = useCallback(\n (isOpenNext: boolean) => {\n if (isOpenNext) {\n setDraft(value ?? null);\n }\n setIsOpen(isOpenNext);\n },\n [value],\n );\n\n const handleApply = useCallback(() => {\n store.getConfig().onFilterChange(column.key, draft);\n setIsOpen(false);\n }, [column.key, draft, store]);\n\n const handleReset = useCallback(() => {\n store.getConfig().onFilterChange(column.key, null);\n setDraft(null);\n setIsOpen(false);\n }, [column.key, store]);\n\n const draftStore = useMemo<FilterStore>(\n () => ({\n getConfig() {\n const config = store.getConfig();\n return {\n ...config,\n filters: {\n ...config.filters,\n [column.key]: draft ?? undefined,\n },\n onFilterChange: (_columnKey, nextValue) => {\n setDraft(nextValue);\n },\n };\n },\n }),\n [column.key, draft, store],\n );\n\n return (\n <Popover\n content={\n <FilterStoreContext value={draftStore}>\n <div className={styles.popoverContent}>\n <FilterControl\n column={column}\n hasClear={false}\n operatorValue={operatorValue}\n size=\"sm\"\n />\n <div className={styles.popoverActions}>\n <Button\n label=\"Reset\"\n onClick={handleReset}\n size=\"sm\"\n variant=\"ghost\"\n />\n <div className={styles.popoverActionsSpacer} />\n <Button\n label=\"Apply\"\n onClick={handleApply}\n size=\"sm\"\n variant=\"primary\"\n />\n </div>\n </div>\n </FilterStoreContext>\n }\n isOpen={isOpen}\n label={`Filter ${getHeaderText(column)}`}\n onOpenChange={handleOpenChange}\n padding={3}\n placement=\"below\">\n <Button\n icon={Filter}\n isIconOnly\n label={`Filter ${getHeaderText(column)}`}\n size=\"sm\"\n variant={isActive ? 'primary' : 'ghost'}\n />\n </Popover>\n );\n}\n\nexport function useTableFiltering<T extends Record<string, unknown>>(\n config: UseTableFilteringConfig,\n): TablePlugin<T> {\n const {variant = 'popover'} = config;\n\n const store = useMemo<FilterStore>(\n () => ({\n getConfig: () => config,\n }),\n [config],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformColumns:\n variant === 'inline'\n ? (columns: TableColumn<T>[]): TableColumn<T>[] =>\n columns.map(column => {\n if (column.filter != null && column.width == null) {\n return {...column, width: proportional(1)};\n }\n return column;\n })\n : undefined,\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n if (column.filter == null) {\n if (variant === 'inline') {\n return {\n ...props,\n htmlProps: {\n ...props.htmlProps,\n style: {\n ...props.htmlProps.style,\n verticalAlign: 'bottom',\n },\n },\n };\n }\n return props;\n }\n const operatorValue = resolveFilterConfig(\n column.filter,\n config.searchConfig,\n );\n if (operatorValue == null) {\n return props;\n }\n\n if (variant === 'popover') {\n return {\n ...props,\n after: (\n <span className={styles.afterPopover}>\n <PopoverFilterTrigger\n column={column}\n operatorValue={operatorValue}\n />\n </span>\n ),\n };\n }\n\n return {\n ...props,\n below: (\n <>\n {props.below}\n <div className={styles.inlineWrapper}>\n <FilterControl\n column={column}\n hasClear\n operatorValue={operatorValue}\n size=\"sm\"\n />\n </div>\n </>\n ),\n };\n },\n transformTableContext(children: ReactNode): ReactNode {\n return (\n <FilterStoreContext value={store}>{children}</FilterStoreContext>\n );\n },\n }),\n [config.searchConfig, store, variant],\n );\n}\n","import {useCallback, useState} from 'react';\nimport type {\n TableFilterState,\n TableFilterValue,\n} from 'components/Table/plugins/filtering/useTableFiltering';\n\nexport interface UseTableFilterStateResult {\n clearAll: () => void;\n filters: TableFilterState;\n onFilterChange: (key: string, value: TableFilterValue | null) => void;\n}\n\nexport function useTableFilterState(\n initialState?: TableFilterState,\n): UseTableFilterStateResult {\n const [filters, setFilters] = useState<TableFilterState>(initialState ?? {});\n const onFilterChange = useCallback(\n (key: string, value: TableFilterValue | null) => {\n setFilters(previous => {\n if (value == null) {\n const {[key]: _removed, ...next} = previous;\n return next;\n }\n return {...previous, [key]: value};\n });\n },\n [],\n );\n const clearAll = useCallback(() => setFilters({}), []);\n\n return {clearAll, filters, onFilterChange};\n}\n","export interface PaginateDataOptions {\n page: number;\n pageSize: number;\n}\n\nexport function paginateData<T>(\n data: ReadonlyArray<T>,\n {page, pageSize}: PaginateDataOptions,\n): T[] {\n const safePage = Math.max(1, page);\n const safePageSize = Math.max(1, pageSize);\n const start = (safePage - 1) * safePageSize;\n return data.slice(start, start + safePageSize);\n}\n","import {useMemo, type ReactNode} from 'react';\nimport {Pagination, type PaginationProps} from 'components/Pagination';\nimport type {TablePlugin} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport interface UseTablePaginationConfig {\n align?: 'center' | 'end' | 'start';\n hasMore?: boolean;\n label?: string;\n onPageChange: (page: number) => void;\n page: number;\n pageSize?: number;\n position?: 'above' | 'below' | 'both' | 'none';\n size?: 'lg' | 'md' | 'sm';\n totalItems?: number;\n totalPages?: number;\n variant?: 'compact' | 'count' | 'none' | 'pages';\n}\n\nconst styles = {\n align: {\n center: css({justifyContent: 'center'}),\n end: css({justifyContent: 'flex-end'}),\n start: css({justifyContent: 'flex-start'}),\n },\n below: css({mt: '2'}),\n root: css({display: 'flex'}),\n above: css({mb: '2'}),\n} as const;\n\nexport function useTablePagination<T extends Record<string, unknown>>({\n align = 'center',\n hasMore,\n label = 'Table pagination',\n onPageChange,\n page,\n pageSize = 10,\n position = 'below',\n size = 'md',\n totalItems,\n totalPages,\n variant = 'pages',\n}: UseTablePaginationConfig): TablePlugin<T> {\n const computedTotalPages =\n totalPages ??\n (totalItems == null ? undefined : Math.ceil(totalItems / pageSize));\n const paginationProps = useMemo(\n (): PaginationProps => ({\n hasMore,\n label,\n onChange: onPageChange,\n page,\n pageSize,\n size,\n ...(totalItems != null\n ? {totalItems}\n : computedTotalPages != null\n ? {totalPages: computedTotalPages}\n : {}),\n variant,\n }),\n [\n computedTotalPages,\n hasMore,\n label,\n onPageChange,\n page,\n pageSize,\n size,\n totalItems,\n variant,\n ],\n );\n return useMemo(\n (): TablePlugin<T> => ({\n transformTableContext(children: ReactNode): ReactNode {\n const current = {align, paginationProps, position};\n if (current.position === 'none') {\n return children;\n }\n if (computedTotalPages === 1 && hasMore !== true) {\n return children;\n }\n\n const makePagination = (side: 'above' | 'below') => (\n <div\n className={`${styles.root} ${styles.align[current.align]} ${\n side === 'above' ? styles.above : styles.below\n }`}>\n <Pagination {...current.paginationProps} />\n </div>\n );\n\n return (\n <>\n {current.position === 'above' || current.position === 'both'\n ? makePagination('above')\n : null}\n {children}\n {current.position === 'below' || current.position === 'both'\n ? makePagination('below')\n : null}\n </>\n );\n },\n }),\n [align, computedTotalPages, hasMore, paginationProps, position],\n );\n}\n","import {useRef} from 'react';\n\nconst UNSET = Symbol('useConstant.unset');\n\n/**\n * Computes `init` once on the first render and returns the same value on every\n * subsequent render. Unlike `useMemo`, the value is guaranteed stable for the\n * lifetime of the component (no dependency array, never recomputed).\n */\nconst useConstant = <T>(init: () => T): T => {\n const ref = useRef<T | typeof UNSET>(UNSET);\n /* eslint-disable @eslint-react/refs -- first-render lazy initialization: slot is read and written once, value is stable thereafter */\n if (ref.current === UNSET) {\n ref.current = init();\n }\n return ref.current;\n /* eslint-enable @eslint-react/refs */\n};\n\nexport default useConstant;\n","import {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {CheckboxInput} from 'components/CheckboxInput';\nimport {pixel} from 'components/Table/columnUtils';\nimport type {\n BodyRowRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {mergeRefs} from 'internal/mergeRefs';\nimport useConstant from 'internal/useConstant';\nimport useLatest from 'internal/useLatest';\nimport {css} from 'styled-system/css';\n\nexport interface UseTableSelectionConfig<T extends Record<string, unknown>> {\n getIsAllSelected: () => boolean;\n getIsIndeterminate?: () => boolean;\n getIsItemEnabled?: (item: T) => boolean;\n getIsItemSelectable?: (item: T) => boolean;\n getIsItemSelected: (item: T) => boolean;\n onSelectAll: (event: {isAllSelected: boolean}) => void;\n onSelectItem: (event: {isSelected: boolean; item: T}) => void;\n}\n\nconst styles = {\n center: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n selectedRow: css({\n bg: 'bg.selected',\n }),\n} as const;\n\nconst SELECTION_COLUMN_KEY = '__table_selection';\n\ninterface SelectionStore<T extends Record<string, unknown>> {\n getConfig: () => UseTableSelectionConfig<T>;\n notify: () => void;\n subscribe: (listener: () => void) => () => void;\n}\n\nfunction createSelectionStore<T extends Record<string, unknown>>(configRef: {\n current: UseTableSelectionConfig<T>;\n}): SelectionStore<T> {\n const listeners = new Set<() => void>();\n\n return {\n getConfig: () => configRef.current,\n notify: () => {\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe: listener => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nfunction applyRowSelectionStyle(\n element: HTMLTableRowElement,\n isSelected: boolean,\n): void {\n element.classList.toggle(styles.selectedRow, isSelected);\n if (isSelected) {\n element.setAttribute('aria-selected', 'true');\n } else {\n element.removeAttribute('aria-selected');\n }\n}\n\nconst ITEM_SELECTED = 1;\nconst ITEM_SELECTABLE = 2;\nconst ITEM_ENABLED = 4;\n\nfunction getItemSelectionSnapshot<T extends Record<string, unknown>>(\n config: UseTableSelectionConfig<T>,\n item: T,\n): number {\n const isSelected = config.getIsItemSelected(item);\n const isSelectable = config.getIsItemSelectable?.(item) ?? true;\n const isEnabled = config.getIsItemEnabled?.(item) ?? true;\n\n return (\n (isSelected ? ITEM_SELECTED : 0) |\n (isSelectable ? ITEM_SELECTABLE : 0) |\n (isEnabled ? ITEM_ENABLED : 0)\n );\n}\n\nconst SELECT_NONE = 0;\nconst SELECT_INDETERMINATE = 1;\nconst SELECT_ALL = 2;\n\nconst SelectionStoreContext = createContext<SelectionStore<\n Record<string, unknown>\n> | null>(null);\nSelectionStoreContext.displayName = 'TableSelectionStoreContext';\n\nfunction SelectAllCheckbox<T extends Record<string, unknown>>(): ReactNode {\n const store = use(SelectionStoreContext) as SelectionStore<T> | null;\n if (store == null) {\n return null;\n }\n\n return <SelectAllCheckboxInner store={store} />;\n}\n\nfunction SelectAllCheckboxInner<T extends Record<string, unknown>>({\n store,\n}: {\n store: SelectionStore<T>;\n}): ReactNode {\n const getSnapshot = useCallback(() => {\n const config = store.getConfig();\n if (config.getIsAllSelected()) {\n return SELECT_ALL;\n }\n return config.getIsIndeterminate?.() === true\n ? SELECT_INDETERMINATE\n : SELECT_NONE;\n }, [store]);\n const state = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n const isAllSelected = state === SELECT_ALL;\n\n return (\n <CheckboxInput\n isLabelHidden\n label=\"Select all rows\"\n onChange={() => {\n store.getConfig().onSelectAll({\n isAllSelected: !isAllSelected,\n });\n }}\n size=\"sm\"\n value={\n isAllSelected\n ? true\n : state === SELECT_INDETERMINATE\n ? 'indeterminate'\n : false\n }\n />\n );\n}\n\nfunction SelectionCellContent<T extends Record<string, unknown>>({\n item,\n}: {\n item: T;\n}): ReactNode {\n const store = use(SelectionStoreContext) as SelectionStore<T> | null;\n if (store == null) {\n return null;\n }\n\n return <SelectionCellContentInner item={item} store={store} />;\n}\n\nfunction SelectionCellContentInner<T extends Record<string, unknown>>({\n item,\n store,\n}: {\n item: T;\n store: SelectionStore<T>;\n}): ReactNode {\n const getSnapshot = useCallback(\n () => getItemSelectionSnapshot(store.getConfig(), item),\n [item, store],\n );\n const state = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n const isSelected = (state & ITEM_SELECTED) !== 0;\n const isSelectable = (state & ITEM_SELECTABLE) !== 0;\n const isEnabled = (state & ITEM_ENABLED) !== 0;\n\n if (!isSelectable) {\n return null;\n }\n\n return (\n <CheckboxInput\n isDisabled={!isEnabled}\n isLabelHidden\n label=\"Select row\"\n onChange={() => {\n store.getConfig().onSelectItem({isSelected: !isSelected, item});\n }}\n size=\"sm\"\n value={isSelected}\n />\n );\n}\n\nexport function useTableSelection<T extends Record<string, unknown>>(\n config: UseTableSelectionConfig<T>,\n): TablePlugin<T> {\n const configRef = useLatest(config);\n const store = useConstant(() => createSelectionStore(configRef));\n\n // Re-notify subscribers only when the selection config changes (new selected\n // keys, data, or predicates). `config` is memoized upstream by\n // `useTableSelectionState`, so unrelated parent re-renders skip the\n // notification and its downstream snapshot re-evaluations.\n useEffect(() => {\n store.notify();\n }, [config, store]);\n\n const selectionColumn = useMemo(\n (): TableColumn<T> => ({\n header: (\n <div className={styles.center}>\n <SelectAllCheckbox<T> />\n </div>\n ),\n key: SELECTION_COLUMN_KEY,\n renderCell: item => (\n <div className={styles.center}>\n <SelectionCellContent item={item} />\n </div>\n ),\n resizable: false,\n width: pixel(36),\n }),\n [],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformTableContext(children: ReactNode): ReactNode {\n return (\n <SelectionStoreContext\n value={store as unknown as SelectionStore<Record<string, unknown>>}>\n {children}\n </SelectionStoreContext>\n );\n },\n transformBodyRow(props: BodyRowRenderProps, item: T): BodyRowRenderProps {\n let unsubscribe: (() => void) | null = null;\n const selectionRef: RefCallback<HTMLTableRowElement> = element => {\n unsubscribe?.();\n unsubscribe = null;\n\n if (element == null) {\n return;\n }\n\n applyRowSelectionStyle(\n element,\n store.getConfig().getIsItemSelected(item),\n );\n unsubscribe = store.subscribe(() => {\n if (!element.isConnected) {\n unsubscribe?.();\n unsubscribe = null;\n return;\n }\n applyRowSelectionStyle(\n element,\n store.getConfig().getIsItemSelected(item),\n );\n });\n };\n\n return {\n ...props,\n ref:\n props.ref == null\n ? selectionRef\n : mergeRefs(props.ref, selectionRef),\n };\n },\n transformColumns(columns: TableColumn<T>[]): TableColumn<T>[] {\n return [selectionColumn, ...columns];\n },\n }),\n [selectionColumn, store],\n );\n}\n","import {useCallback, useMemo} from 'react';\nimport type {UseTableSelectionConfig} from 'components/Table/plugins/selection/useTableSelection';\n\nexport interface UseTableSelectionStateConfig<\n T extends Record<string, unknown>,\n> {\n data: T[];\n getIsItemEnabled?: (item: T) => boolean;\n getIsItemSelectable?: (item: T) => boolean;\n idKey: (keyof T & string) | ((item: T) => string);\n selectedKeys: Set<string>;\n setSelectedKeys: React.Dispatch<React.SetStateAction<Set<string>>>;\n}\n\nexport interface UseTableSelectionStateResult<\n T extends Record<string, unknown>,\n> {\n selectionConfig: UseTableSelectionConfig<T>;\n}\n\nconst stableTrue = () => true;\n\nexport function useTableSelectionState<T extends Record<string, unknown>>({\n data,\n getIsItemEnabled = stableTrue,\n getIsItemSelectable = stableTrue,\n idKey,\n selectedKeys,\n setSelectedKeys,\n}: UseTableSelectionStateConfig<T>): UseTableSelectionStateResult<T> {\n const getId = useCallback(\n (item: T): string =>\n typeof idKey === 'function' ? idKey(item) : String(item[idKey]),\n [idKey],\n );\n\n const getIsActionable = useCallback(\n (item: T) => getIsItemSelectable(item) && getIsItemEnabled(item),\n [getIsItemEnabled, getIsItemSelectable],\n );\n const actionableIDs = useMemo(\n () => new Set(data.filter(getIsActionable).map(getId)),\n [data, getId, getIsActionable],\n );\n const frozenSelectedIDs = useMemo(() => {\n const frozen = new Set<string>();\n for (const id of selectedKeys) {\n if (!actionableIDs.has(id)) {\n frozen.add(id);\n }\n }\n return frozen;\n }, [actionableIDs, selectedKeys]);\n const allSelectableIDs = useMemo(\n () => new Set([...selectedKeys, ...actionableIDs]),\n [actionableIDs, selectedKeys],\n );\n\n const onSelectAll = useCallback(\n ({isAllSelected}: {isAllSelected: boolean}) => {\n setSelectedKeys(isAllSelected ? allSelectableIDs : frozenSelectedIDs);\n },\n [allSelectableIDs, frozenSelectedIDs, setSelectedKeys],\n );\n const onSelectItem = useCallback(\n ({isSelected, item}: {isSelected: boolean; item: T}) => {\n setSelectedKeys(previous => {\n const next = new Set(previous);\n const id = getId(item);\n if (isSelected) {\n next.add(id);\n } else {\n next.delete(id);\n }\n return next;\n });\n },\n [getId, setSelectedKeys],\n );\n const getIsAllSelected = useCallback(\n () =>\n allSelectableIDs.size > 0 && allSelectableIDs.size === selectedKeys.size,\n [allSelectableIDs, selectedKeys],\n );\n const getIsIndeterminate = useCallback(() => {\n const selectedActionableCount = data.filter(\n item => getIsActionable(item) && selectedKeys.has(getId(item)),\n ).length;\n return (\n selectedActionableCount > 0 &&\n selectedActionableCount < actionableIDs.size\n );\n }, [actionableIDs.size, data, getId, getIsActionable, selectedKeys]);\n\n const selectionConfig = useMemo(\n (): UseTableSelectionConfig<T> => ({\n getIsAllSelected,\n getIsIndeterminate,\n getIsItemEnabled,\n getIsItemSelectable,\n getIsItemSelected: item => selectedKeys.has(getId(item)),\n onSelectAll,\n onSelectItem,\n }),\n [\n getId,\n getIsAllSelected,\n getIsIndeterminate,\n getIsItemEnabled,\n getIsItemSelectable,\n onSelectAll,\n onSelectItem,\n selectedKeys,\n ],\n );\n\n return {selectionConfig};\n}\n","import {ArrowDown, ArrowUp, ChevronsUpDown} from 'lucide-react';\nimport {useMemo, type ReactNode} from 'react';\nimport {Icon} from 'components/Icon';\nimport type {\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport type TableSortDirection = 'ascending' | 'descending';\n\nexport interface TableSortEntry<TSortKey extends string = string> {\n direction: TableSortDirection;\n sortKey: TSortKey;\n}\n\nexport type TableSortState<TSortKey extends string = string> =\n TableSortEntry<TSortKey>[];\n\nexport interface UseTableSortableConfig<TSortKey extends string = string> {\n hasUnsortedState?: boolean;\n isMultiSortEnabled?: boolean;\n onSortChange: (sort: TableSortState<TSortKey>) => void;\n sort: TableSortState<TSortKey>;\n}\n\nconst styles = {\n button: css({\n display: 'flex',\n alignItems: 'center',\n gap: '1',\n w: 'full',\n h: 'full',\n p: 0,\n m: 0,\n borderWidth: 0,\n borderRadius: 'sm',\n bg: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n font: 'inherit',\n textAlign: 'inherit',\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffset',\n },\n '&:is(:hover, [data-hover]) [data-table-sort-icon-state=\"inactive\"], &:is(:focus-visible, [data-focus-visible]) [data-table-sort-icon-state=\"inactive\"]':\n {\n opacity: 1,\n },\n }),\n icon: css({\n display: 'inline-flex',\n flexShrink: 0,\n color: 'fg.muted',\n }),\n iconInactive: css({\n opacity: 0.35,\n }),\n iconActive: css({\n color: 'primary',\n }),\n label: css({\n minW: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n rank: css({\n color: 'primary',\n fontSize: '2xs',\n lineHeight: 1,\n }),\n} as const;\n\nfunction resolveSortKey<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string | null {\n if (!column.sortable) {\n return null;\n }\n return column.sortable === true\n ? column.key\n : (column.sortable.sortKey ?? column.key);\n}\n\nfunction getHeaderLabel<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string {\n return typeof column.header === 'string' ? column.header : column.key;\n}\n\nfunction getNextDirection(\n current: TableSortDirection | null,\n hasUnsortedState: boolean,\n): TableSortDirection | null {\n if (current == null) {\n return 'ascending';\n }\n if (current === 'ascending') {\n return 'descending';\n }\n return hasUnsortedState ? null : 'ascending';\n}\n\nfunction SortHeaderButton<T extends Record<string, unknown>>({\n children,\n column,\n config,\n}: {\n children: ReactNode;\n column: TableColumn<T>;\n config: UseTableSortableConfig;\n}): React.JSX.Element {\n const sortKey = resolveSortKey(column) ?? '';\n const entryIndex = config.sort.findIndex(entry => entry.sortKey === sortKey);\n const entry = entryIndex >= 0 ? config.sort[entryIndex] : null;\n const direction = entry?.direction ?? null;\n const rank =\n config.isMultiSortEnabled === true &&\n config.sort.length > 1 &&\n entryIndex >= 0\n ? entryIndex + 1\n : null;\n const SortIcon =\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ChevronsUpDown;\n const label = getHeaderLabel(column);\n const ariaLabel =\n direction == null\n ? `Sort by ${label}`\n : `Sort by ${label}, sorted ${direction}${\n rank == null ? '' : `, priority ${rank} of ${config.sort.length}`\n }`;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const nextConfig = config;\n const isMultiSort =\n event.shiftKey && nextConfig.isMultiSortEnabled === true;\n const allowUnsorted = nextConfig.hasUnsortedState ?? true;\n\n if (isMultiSort) {\n const index = nextConfig.sort.findIndex(sort => sort.sortKey === sortKey);\n if (index >= 0) {\n const nextDirection = getNextDirection(\n nextConfig.sort[index].direction,\n allowUnsorted,\n );\n const nextSort = [...nextConfig.sort];\n if (nextDirection == null) {\n nextSort.splice(index, 1);\n } else {\n nextSort[index] = {...nextSort[index], direction: nextDirection};\n }\n nextConfig.onSortChange(nextSort);\n } else {\n nextConfig.onSortChange([\n ...nextConfig.sort,\n {direction: 'ascending', sortKey},\n ]);\n }\n return;\n }\n\n const currentEntry = nextConfig.sort.find(sort => sort.sortKey === sortKey);\n const nextDirection = getNextDirection(\n currentEntry?.direction ?? null,\n allowUnsorted,\n );\n nextConfig.onSortChange(\n nextDirection == null ? [] : [{direction: nextDirection, sortKey}],\n );\n };\n\n return (\n <button\n aria-label={ariaLabel}\n className={styles.button}\n onClick={handleClick}\n type=\"button\">\n <span className={styles.label}>{children}</span>\n <span\n className={`${styles.icon} ${\n direction == null ? styles.iconInactive : styles.iconActive\n }`}\n data-table-sort-icon-state={direction == null ? 'inactive' : 'active'}\n data-testid={`table-sort-icon-${sortKey}`}>\n <Icon icon={SortIcon} size=\"sm\" />\n </span>\n {rank == null ? null : (\n <span aria-hidden=\"true\" className={styles.rank}>\n {rank}\n </span>\n )}\n </button>\n );\n}\n\nexport function useTableSortable<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n>(config: UseTableSortableConfig<TSortKey>): TablePlugin<T> {\n const sortableConfig = config as unknown as UseTableSortableConfig;\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n const sortKey = resolveSortKey(column);\n if (sortKey == null) {\n return props;\n }\n const entry = sortableConfig.sort.find(\n sort => sort.sortKey === sortKey,\n );\n return {\n ...props,\n content: (\n <SortHeaderButton column={column} config={sortableConfig}>\n {props.content}\n </SortHeaderButton>\n ),\n htmlProps: {\n ...props.htmlProps,\n ...(entry == null ? {} : {'aria-sort': entry.direction}),\n },\n };\n },\n }),\n [sortableConfig],\n );\n}\n","import {Temporal} from '@js-temporal/polyfill';\nimport {useCallback, useMemo, useState} from 'react';\nimport type {\n TableSortState,\n UseTableSortableConfig,\n} from 'components/Table/plugins/sortable/useTableSortable';\n\nexport type TableSortComparator<T> = (a: T, b: T) => number;\n\nexport interface UseTableSortableStateConfig<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n> {\n comparators?: Partial<Record<TSortKey, TableSortComparator<T>>>;\n data: T[];\n defaultSort?: TableSortState<TSortKey>;\n hasUnsortedState?: boolean;\n isMultiSortEnabled?: boolean;\n onSortChange?: (sort: TableSortState<TSortKey>) => void;\n sort?: TableSortState<TSortKey>;\n}\n\nexport interface UseTableSortableStateResult<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n> {\n applySort: (data: T[]) => T[];\n sort: TableSortState<TSortKey>;\n sortConfig: UseTableSortableConfig<TSortKey>;\n sortedData: T[];\n}\n\nfunction stringifySortable(value: unknown): string {\n if (\n value instanceof Temporal.Instant ||\n value instanceof Temporal.PlainDate ||\n value instanceof Temporal.PlainDateTime ||\n value instanceof Temporal.PlainTime ||\n value instanceof Temporal.ZonedDateTime\n ) {\n return value.toString();\n }\n if (\n typeof value === 'bigint' ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value);\n }\n return '';\n}\n\nfunction defaultCompare<T extends Record<string, unknown>>(\n a: T,\n b: T,\n sortKey: string,\n): number {\n const left = a[sortKey];\n const right = b[sortKey];\n if (left == null && right == null) {\n return 0;\n }\n if (left == null) {\n return 1;\n }\n if (right == null) {\n return -1;\n }\n if (typeof left === 'number' && typeof right === 'number') {\n return left - right;\n }\n return stringifySortable(left).localeCompare(\n stringifySortable(right),\n undefined,\n {\n numeric: true,\n },\n );\n}\n\nexport function useTableSortableState<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n>({\n hasUnsortedState,\n comparators,\n data,\n defaultSort = [],\n isMultiSortEnabled,\n onSortChange: controlledOnSortChange,\n sort: controlledSort,\n}: UseTableSortableStateConfig<T, TSortKey>): UseTableSortableStateResult<\n T,\n TSortKey\n> {\n const [uncontrolledSort, setUncontrolledSort] =\n useState<TableSortState<TSortKey>>(defaultSort);\n const sort = controlledSort ?? uncontrolledSort;\n const onSortChange = useCallback(\n (nextSort: TableSortState<TSortKey>) => {\n if (controlledSort == null) {\n setUncontrolledSort(nextSort);\n }\n controlledOnSortChange?.(nextSort);\n },\n [controlledOnSortChange, controlledSort],\n );\n\n const applySort = useCallback(\n (items: T[]): T[] => {\n if (sort.length === 0) {\n return items;\n }\n return [...items].sort((a, b) => {\n for (const entry of sort) {\n const customCompare = comparators?.[entry.sortKey];\n const result =\n customCompare == null\n ? defaultCompare(a, b, entry.sortKey)\n : customCompare(a, b);\n if (result !== 0) {\n return entry.direction === 'ascending' ? result : -result;\n }\n }\n return 0;\n });\n },\n [comparators, sort],\n );\n const sortedData = useMemo(() => applySort(data), [applySort, data]);\n const sortConfig = useMemo(\n (): UseTableSortableConfig<TSortKey> => ({\n hasUnsortedState,\n isMultiSortEnabled,\n onSortChange,\n sort,\n }),\n [hasUnsortedState, isMultiSortEnabled, onSortChange, sort],\n );\n\n return {applySort, sort, sortConfig, sortedData};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Table/columnUtils.ts","../src/components/Table/Table.recipe.ts","../src/components/Table/TableBody.tsx","../src/components/Table/TableContext.ts","../src/components/Table/TableCell.tsx","../src/components/Table/TableHeader.tsx","../src/components/Table/TableHeaderCell.tsx","../src/components/Table/TableRow.tsx","../src/components/Table/useBaseTablePlugins.ts","../src/internal/shallowEqual.ts","../src/internal/useShallowEqualMemo.ts","../src/components/Table/Table.tsx","../src/components/Table/TableFooter.tsx","../src/components/Table/plugins/columnResize/useTableColumnResize.tsx","../src/components/Table/plugins/columnSettings/useTableColumnSettings.tsx","../src/components/Table/plugins/columnSettings/useTableColumnSettingsState.tsx","../src/components/Table/plugins/filtering/useTableFiltering.tsx","../src/components/Table/plugins/filtering/useTableFilterState.tsx","../src/components/Table/plugins/pagination/paginateData.ts","../src/components/Table/plugins/pagination/useTablePagination.tsx","../src/internal/useConstant.ts","../src/components/Table/plugins/selection/useTableSelection.tsx","../src/components/Table/plugins/selection/useTableSelectionState.tsx","../src/components/Table/plugins/sortable/useTableSortable.tsx","../src/components/Table/plugins/sortable/useTableSortableState.tsx"],"names":["jsx","useMemo","useRef","jsxs","Fragment","useCallback","createContext","styles","use","Temporal","useState","useEffect","entry","nextDirection"],"mappings":"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","file":"chunk-PGBYMBGH.js","sourcesContent":["import {Temporal} from '@js-temporal/polyfill';\nimport type {CSSProperties, ReactNode} from 'react';\nimport type {\n PixelWidth,\n ProportionalWidth,\n TableColumn,\n} from 'components/Table/types';\n\nexport const DEFAULT_MIN_COLUMN_WIDTH = 120;\n\nexport interface ResolvedColumnWidth {\n style: CSSProperties;\n}\n\nexport interface ResolvedColumnWidths {\n columns: Map<string, ResolvedColumnWidth>;\n tableMinWidth: number;\n}\n\nexport function proportional(\n value: number = 1,\n options?: {minWidth?: number},\n): ProportionalWidth {\n return {\n minWidth: options?.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH,\n type: 'proportional',\n value,\n };\n}\n\nexport function pixel(value: number): PixelWidth {\n return {type: 'pixel', value};\n}\n\nexport function resolveColumnWidths<T extends Record<string, unknown>>(\n columns: TableColumn<T>[],\n): ResolvedColumnWidths {\n let totalProportion = 0;\n let pixelTotal = 0;\n const proportionalColumns: {\n key: string;\n minWidth: number;\n proportion: number;\n }[] = [];\n\n for (const column of columns) {\n const width = column.width;\n if (width?.type === 'pixel') {\n pixelTotal += width.value;\n } else {\n const proportion = width?.value ?? 1;\n const minWidth =\n width == null ? 0 : (width.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH);\n totalProportion += proportion;\n proportionalColumns.push({key: column.key, minWidth, proportion});\n }\n }\n\n let proportionalMinSpace = 0;\n if (totalProportion > 0) {\n for (const column of proportionalColumns) {\n proportionalMinSpace = Math.max(\n proportionalMinSpace,\n (column.minWidth * totalProportion) / column.proportion,\n );\n }\n }\n\n const resolved = new Map<string, ResolvedColumnWidth>();\n for (const column of columns) {\n const width = column.width;\n const style: CSSProperties = {};\n\n if (width?.type === 'pixel') {\n style.minWidth = `${width.value}px`;\n style.width = `${width.value}px`;\n } else {\n const proportion = width?.value ?? 1;\n if (totalProportion > 0) {\n style.width = `${(proportion / totalProportion) * 100}%`;\n }\n if (width != null) {\n style.minWidth = `${width.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH}px`;\n }\n }\n\n resolved.set(column.key, {style});\n }\n\n return {\n columns: resolved,\n tableMinWidth: pixelTotal + proportionalMinSpace,\n };\n}\n\nexport function capitalize(value: string): string {\n return value.length === 0\n ? value\n : value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nconst warnedUnsupportedCellKeys = new Set<string>();\n\nexport function defaultCellRenderer<T extends Record<string, unknown>>(\n item: T,\n key: string,\n): ReactNode {\n const value = item[key];\n if (value == null) {\n return '';\n }\n // Default rendering intentionally supports Temporal date/time values only.\n // Use renderCell for native Date instances or other object values.\n if (\n value instanceof Temporal.Instant ||\n value instanceof Temporal.PlainDate ||\n value instanceof Temporal.PlainDateTime ||\n value instanceof Temporal.PlainTime ||\n value instanceof Temporal.ZonedDateTime\n ) {\n return value.toString();\n }\n if (\n typeof value === 'bigint' ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value);\n }\n // Unsupported type (object, array, native Date, function, …). This renders an\n // empty cell, which usually means a `renderCell` is missing for the column.\n if (\n process.env.NODE_ENV !== 'production' &&\n !warnedUnsupportedCellKeys.has(key)\n ) {\n warnedUnsupportedCellKeys.add(key);\n const typeName =\n typeof value === 'object'\n ? Object.prototype.toString.call(value).slice(8, -1)\n : typeof value;\n console.warn(\n `[Table] Column \"${key}\" has a value of unsupported type ${typeName} and ` +\n 'rendered as an empty cell. Provide a `renderCell` for this column.',\n );\n }\n return '';\n}\n\nfunction estimateContentLength(value: unknown): number {\n if (value == null) {\n return 0;\n }\n if (\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value).length;\n }\n return 0;\n}\n\nfunction longestWord(value: unknown): number {\n if (\n value == null ||\n (typeof value !== 'boolean' &&\n typeof value !== 'number' &&\n typeof value !== 'string')\n ) {\n return 0;\n }\n return String(value)\n .split(/\\s+/)\n .reduce((max, word) => Math.max(max, word.length), 0);\n}\n\nexport function generateColumns<T extends Record<string, unknown>>(\n data: T[],\n): TableColumn<T>[] {\n if (data.length === 0) {\n return [];\n }\n\n const sampleRows = data.slice(0, Math.min(5, data.length));\n return Object.keys(data[0]).map(key => {\n const header = capitalize(key);\n let maxContentLength = header.length;\n let maxWordLength = header.length;\n\n for (const row of sampleRows) {\n maxContentLength = Math.max(\n maxContentLength,\n estimateContentLength(row[key]),\n );\n maxWordLength = Math.max(maxWordLength, longestWord(row[key]));\n }\n\n const proportion =\n maxContentLength <= 6 ? 1 : maxContentLength <= 15 ? 2 : 3;\n const minWidth = Math.max(Math.max(header.length, maxWordLength) * 8, 60);\n\n return {\n header,\n key,\n width: proportional(proportion, {minWidth}),\n };\n });\n}\n","import {sva, type RecipeVariantProps} from 'styled-system/css';\n\n/**\n * Slot recipe consolidating the Table family's context-driven styling. The\n * structural sub-components (`TableCell`, `TableHeaderCell`, `TableRow`) read\n * shared visual state from `TableContext` and each render a single slot from\n * this recipe; `Table` owns the `wrapper`, `table`, and `headerLabelRow`\n * slots. The `density`/`dividers` variants previously lived\n * duplicated across the cell and header-cell components and are unified here.\n */\nexport const tableRecipe = sva({\n slots: ['wrapper', 'table', 'headerLabelRow', 'row', 'cell', 'headerCell'],\n base: {\n wrapper: {\n overflowX: 'auto',\n WebkitOverflowScrolling: 'touch',\n },\n table: {\n color: 'fg',\n fontFamily: 'body',\n w: 'full',\n borderCollapse: 'collapse',\n borderSpacing: 0,\n tableLayout: 'fixed',\n },\n headerLabelRow: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '1',\n minW: 0,\n },\n row: {\n transitionDuration: 'fast',\n transitionProperty: 'background-color',\n transitionTimingFunction: 'default',\n },\n cell: {\n maxWidth: 0,\n },\n headerCell: {\n color: 'fg.muted',\n fontWeight: 'semibold',\n maxWidth: 0,\n overflow: 'hidden',\n textAlign: 'start',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n },\n },\n variants: {\n density: {\n balanced: {\n cell: {fontSize: 'md', px: '3', py: '2'},\n headerCell: {fontSize: 'md', px: '3', py: '2'},\n },\n compact: {\n cell: {fontSize: 'md', px: '2', py: '1'},\n headerCell: {fontSize: 'md', px: '2', py: '1'},\n },\n spacious: {\n cell: {fontSize: 'md', px: '4', py: '3'},\n headerCell: {fontSize: 'md', px: '4', py: '3'},\n },\n },\n dividers: {\n none: {},\n rows: {\n cell: {\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n 'tbody > tr:last-child > &': {\n borderBottomWidth: 0,\n },\n },\n },\n columns: {\n cell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n headerCell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n },\n grid: {\n cell: {\n borderBottomWidth: 'default',\n borderBottomStyle: 'solid',\n borderBottomColor: 'border',\n 'tbody > tr:last-child > &': {\n borderBottomWidth: 0,\n },\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n headerCell: {\n borderInlineEndWidth: 'default',\n borderInlineEndStyle: 'solid',\n borderInlineEndColor: 'border',\n _last: {\n borderInlineEndWidth: 0,\n },\n },\n },\n },\n verticalAlign: {\n middle: {cell: {verticalAlign: 'middle'}},\n top: {cell: {verticalAlign: 'top'}},\n bottom: {cell: {verticalAlign: 'bottom'}},\n },\n textOverflow: {\n truncate: {\n cell: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n wrap: {\n cell: {\n overflow: 'hidden',\n overflowWrap: 'break-word',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n },\n },\n },\n // Row background variants. Striping and hover combine, so the combined\n // presentation lives in compoundVariants below.\n isStriped: {\n true: {},\n false: {},\n },\n hasHover: {\n true: {},\n false: {},\n },\n // Auto layout when the table renders consumer-provided children; the\n // default fixed layout lives in the base `table` slot.\n isAutoLayout: {\n true: {table: {tableLayout: 'auto'}},\n false: {},\n },\n },\n compoundVariants: [\n {\n isStriped: false,\n hasHover: true,\n css: {\n row: {\n _hover: {\n '@media (hover: hover)': {\n bg: 'bg.subtle',\n },\n },\n },\n },\n },\n {\n isStriped: true,\n hasHover: false,\n css: {\n row: {\n _even: {\n bg: 'bg.subtle',\n },\n },\n },\n },\n {\n isStriped: true,\n hasHover: true,\n css: {\n row: {\n _even: {\n bg: 'bg.subtle',\n },\n _hover: {\n '@media (hover: hover)': {\n bg: 'bg.hover',\n },\n },\n },\n },\n },\n ],\n defaultVariants: {\n density: 'balanced',\n dividers: 'rows',\n verticalAlign: 'middle',\n textOverflow: 'wrap',\n isStriped: false,\n hasHover: false,\n isAutoLayout: false,\n },\n});\n\nexport type TableVariants = RecipeVariantProps<typeof tableRecipe>;\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableBodyProps {\n /**\n * Table row elements rendered inside the body.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tbody.\n */\n className?: string;\n /**\n * Test ID applied to the tbody.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tbody element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the tbody.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table body rows in a `<tbody>` element.\n */\nexport function TableBody({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableBodyProps): React.JSX.Element {\n return (\n <tbody\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tbody>\n );\n}\n\nTableBody.displayName = 'TableBody';\n","import {createContext, use} from 'react';\nimport type {TableContextValue} from 'components/Table/types';\n\nexport const TableContext = createContext<TableContextValue | null>(null);\nTableContext.displayName = 'TableContext';\n\nexport function useTableContext(): TableContextValue | null {\n return use(TableContext);\n}\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableCellProps {\n /**\n * Cell content.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the td.\n */\n className?: string;\n /**\n * Number of columns the cell spans.\n */\n colSpan?: number;\n /**\n * Test ID applied to the td.\n */\n 'data-testid'?: string;\n /**\n * Space-separated list of header cell IDs this cell relates to.\n */\n headers?: string;\n /**\n * Ref forwarded to the td element.\n */\n ref?: Ref<HTMLTableCellElement>;\n /**\n * Number of rows the cell spans.\n */\n rowSpan?: number;\n /**\n * Scope of the cell when used as a header-like td.\n */\n scope?: 'col' | 'colgroup' | 'row' | 'rowgroup';\n /**\n * Inline styles applied to the td.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table data cell with density, alignment, and divider styling from context.\n */\nexport function TableCell({\n children,\n className,\n colSpan,\n 'data-testid': dataTestId,\n headers,\n ref,\n rowSpan,\n style,\n}: TableCellProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n density: context?.density,\n dividers: context?.dividers,\n textOverflow: context?.textOverflow,\n verticalAlign: context?.verticalAlign,\n });\n return (\n <td\n className={cx(classes.cell, className)}\n colSpan={colSpan}\n data-part=\"cell\"\n data-testid={dataTestId}\n headers={headers}\n ref={ref}\n rowSpan={rowSpan}\n style={style}>\n {children}\n </td>\n );\n}\n\nTableCell.displayName = 'TableCell';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableHeaderProps {\n /**\n * Header row elements rendered inside the thead.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the thead.\n */\n className?: string;\n /**\n * Test ID applied to the thead.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the thead element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the thead.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table header rows in a `<thead>` element.\n */\nexport function TableHeader({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableHeaderProps): React.JSX.Element {\n return (\n <thead\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </thead>\n );\n}\n\nTableHeader.displayName = 'TableHeader';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableHeaderCellProps {\n /**\n * Header cell content.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the th.\n */\n className?: string;\n /**\n * Test ID applied to the th.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the th element.\n */\n ref?: Ref<HTMLTableCellElement>;\n /**\n * Scope of the header cell.\n * @default 'col'\n */\n scope?: 'col' | 'colgroup' | 'row' | 'rowgroup';\n /**\n * Inline styles applied to the th.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table header cell with density and divider styling from context.\n */\nexport function TableHeaderCell({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n scope = 'col',\n style,\n}: TableHeaderCellProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n density: context?.density,\n dividers: context?.dividers,\n });\n return (\n <th\n className={cx(classes.headerCell, className)}\n data-part=\"header-cell\"\n data-testid={dataTestId}\n ref={ref}\n scope={scope}\n style={style}>\n {children}\n </th>\n );\n}\n\nTableHeaderCell.displayName = 'TableHeaderCell';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {useTableContext} from 'components/Table/TableContext';\nimport {cx} from 'internal/cx';\n\nexport interface TableRowProps {\n /**\n * Cell elements rendered inside the row.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tr.\n */\n className?: string;\n /**\n * Test ID applied to the tr.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tr element.\n */\n ref?: Ref<HTMLTableRowElement>;\n /**\n * Inline styles applied to the tr.\n */\n style?: CSSProperties;\n}\n\n/**\n * Table row with hover and striped styling from context.\n */\nexport function TableRow({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableRowProps): React.JSX.Element {\n const context = useTableContext();\n const classes = tableRecipe({\n isStriped: context?.isStriped,\n hasHover: context?.hasHover,\n });\n\n return (\n <tr\n className={cx(classes.row, className)}\n data-part=\"row\"\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tr>\n );\n}\n\nTableRow.displayName = 'TableRow';\n","import {useMemo} from 'react';\nimport type {TablePlugin} from 'components/Table/types';\n\nconst CANONICAL_PLUGIN_ORDER = [\n 'columnSettings',\n 'sort',\n 'selection',\n 'filtering',\n 'columnResize',\n 'pagination',\n] as const;\n\nconst CANONICAL_PLUGIN_KEYS = new Set<string>(CANONICAL_PLUGIN_ORDER);\n\nfunction orderNamedPlugins<T extends Record<string, unknown>>(\n userPlugins: Record<string, TablePlugin<T>>,\n): TablePlugin<T>[] {\n const entries = Object.entries(userPlugins);\n const pluginsByName = new Map(entries);\n const orderedPlugins = CANONICAL_PLUGIN_ORDER.filter(key =>\n pluginsByName.has(key),\n ).map(key => pluginsByName.get(key) as TablePlugin<T>);\n const customPlugins = entries\n .filter(([key]) => !CANONICAL_PLUGIN_KEYS.has(key))\n .map(([, plugin]) => plugin);\n\n return [...orderedPlugins, ...customPlugins];\n}\n\nexport function useBaseTablePlugins<T extends Record<string, unknown>>(\n userPlugins?: Record<string, TablePlugin<T>> | TablePlugin<T>[],\n): TablePlugin<T>[] {\n return useMemo(\n () =>\n Array.isArray(userPlugins)\n ? userPlugins\n : orderNamedPlugins(userPlugins ?? {}),\n [userPlugins],\n );\n}\n","/**\n * Shallow structural equality: `true` when `a` and `b` are the same reference,\n * or are arrays/objects with the same set of keys whose values are each equal\n * by `Object.is`. Non-object values are compared with `Object.is`.\n */\nexport function shallowEqual<T>(a: T, b: T): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n const aRecord = a as Record<string, unknown>;\n const bRecord = b as Record<string, unknown>;\n for (const key of aKeys) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !Object.is(aRecord[key], bRecord[key])\n ) {\n return false;\n }\n }\n return true;\n}\n","import {useRef} from 'react';\nimport {shallowEqual} from 'internal/shallowEqual';\n\n/**\n * Returns a referentially stable version of `value`: the same reference is\n * preserved across renders for as long as each new value is shallow-equal to\n * the last one returned. Identity only changes when the shallow contents\n * change.\n *\n * Useful when an upstream value is rebuilt every render (e.g. a freshly mapped\n * array) but its contents are usually unchanged, and something downstream\n * compares it by reference — a `memo` comparator, an effect dependency, etc.\n */\nconst useShallowEqualMemo = <T>(value: T): T => {\n const ref = useRef(value);\n /* eslint-disable @eslint-react/refs -- memo-compare: the slot is read and rewritten only when the shallow contents change, preserving identity otherwise */\n if (!shallowEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n /* eslint-enable @eslint-react/refs */\n};\n\nexport default useShallowEqualMemo;\n","import {\n memo,\n useMemo,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {EmptyState} from 'components/EmptyState';\nimport {tableRecipe} from 'components/Table/Table.recipe';\nimport {TableBody} from 'components/Table/TableBody';\nimport {TableCell} from 'components/Table/TableCell';\nimport {TableContext} from 'components/Table/TableContext';\nimport {TableHeader} from 'components/Table/TableHeader';\nimport {TableHeaderCell} from 'components/Table/TableHeaderCell';\nimport {TableRow} from 'components/Table/TableRow';\nimport {\n defaultCellRenderer,\n generateColumns,\n resolveColumnWidths,\n} from 'components/Table/columnUtils';\nimport type {\n BodyCellRenderProps,\n BodyRowRenderProps,\n HeaderCellRenderProps,\n HeaderRowRenderProps,\n TableCellComponentProps,\n TableColumn,\n TableContextValue,\n TableDensity,\n TableDividers,\n TableHeaderCellComponentProps,\n TablePlugin,\n TableRenderProps,\n TableRowComponentProps,\n TableTextOverflow,\n TableVerticalAlign,\n} from 'components/Table/types';\nimport {useBaseTablePlugins} from 'components/Table/useBaseTablePlugins';\nimport {Text} from 'components/Text';\nimport {cx} from 'internal/cx';\nimport isReactNode from 'internal/isReactNode';\nimport useShallowEqualMemo from 'internal/useShallowEqualMemo';\n\nexport interface TableProps<T extends Record<string, unknown>> {\n /**\n * Table primitives rendered instead of data-driven content. When provided,\n * `columns`/`data` are ignored and the children are rendered as-is.\n */\n children?: ReactNode;\n /**\n * Additional CSS class names applied to the table element.\n */\n className?: string;\n /**\n * Column definitions. When omitted, columns are inferred from `data`.\n */\n columns?: TableColumn<T>[];\n /**\n * Row data rendered into the table body.\n */\n data?: T[];\n /**\n * Test ID applied to the table element.\n */\n 'data-testid'?: string;\n /**\n * Spacing density for rows and cells.\n * @default 'balanced'\n */\n density?: TableDensity;\n /**\n * Which divider lines to show between cells.\n * @default 'rows'\n */\n dividers?: TableDividers;\n /**\n * Content shown when `data` is an empty array. Omit for the default empty\n * state; pass `null` to render nothing.\n */\n emptyState?: ReactNode;\n /**\n * Whether rows highlight on hover.\n * @default false\n */\n hasHover?: boolean;\n /**\n * Stable row identity, used as the React key for each body row.\n */\n idKey?: (keyof T & string) | ((item: T) => number | string);\n /**\n * Whether alternating rows have a subtle background.\n * @default false\n */\n isStriped?: boolean;\n /**\n * Plugin map or array that extends table behavior.\n */\n plugins?: Record<string, TablePlugin<T>> | TablePlugin<T>[];\n /**\n * Ref forwarded to the table element.\n */\n ref?: Ref<HTMLTableElement>;\n /**\n * Inline styles applied to the table element.\n */\n style?: CSSProperties;\n /**\n * Extra HTML attributes spread onto the table element.\n */\n tableProps?: HTMLAttributes<HTMLTableElement>;\n /**\n * How overflowing cell text is handled.\n * @default 'wrap'\n */\n textOverflow?: TableTextOverflow;\n /**\n * Vertical alignment of cell content.\n * @default 'middle'\n */\n verticalAlign?: TableVerticalAlign;\n}\n\nfunction applyPlugins<TPlugin, TProps, TArgs extends unknown[]>(\n plugins: TPlugin[],\n getter: (\n plugin: TPlugin,\n ) => ((props: TProps, ...args: TArgs) => TProps) | undefined,\n initial: TProps,\n ...args: TArgs\n): TProps {\n return plugins.reduce<TProps>((accumulator, plugin, index) => {\n const transform = getter(plugin);\n if (transform == null) {\n return accumulator;\n }\n try {\n return transform(accumulator, ...args);\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n throw error;\n }\n console.error(`[Table] Plugin at index ${index} threw:`, error);\n return accumulator;\n }\n }, initial);\n}\n\ninterface DataRowProps<T extends Record<string, unknown>> {\n CellComponent: React.ComponentType<TableCellComponentProps>;\n columns: TableColumn<T>[];\n item: T;\n plugins: TablePlugin<T>[];\n RowComponent: React.ComponentType<TableRowComponentProps>;\n rowIndex: number;\n rowKey: number | string;\n textOverflow: 'truncate' | 'wrap';\n}\n\nfunction DataRowInner<T extends Record<string, unknown>>({\n CellComponent,\n RowComponent,\n columns,\n item,\n plugins,\n rowIndex,\n rowKey,\n textOverflow,\n}: DataRowProps<T>): ReactElement {\n const cells = columns.map(column => {\n const initialHtmlProps: BodyCellRenderProps['htmlProps'] = {};\n if (column.align) {\n initialHtmlProps.style = {textAlign: column.align};\n }\n\n const cellProps = applyPlugins(\n plugins,\n plugin => plugin.transformBodyCell,\n {htmlProps: initialHtmlProps} satisfies BodyCellRenderProps,\n column,\n item,\n );\n\n const isDefaultRenderer = column.renderCell == null;\n const rawContent = isDefaultRenderer\n ? defaultCellRenderer(item, column.key)\n : (column.renderCell?.(item) ?? null);\n const content =\n isDefaultRenderer &&\n textOverflow === 'truncate' &&\n typeof rawContent === 'string' &&\n rawContent.length > 0 ? (\n <Text maxLines={1} type=\"body\">\n {rawContent}\n </Text>\n ) : (\n rawContent\n );\n\n return (\n <CellComponent\n key={column.key}\n {...cellProps.htmlProps}\n className={cx(cellProps.htmlProps.className, cellProps.className)}>\n {content}\n </CellComponent>\n );\n });\n\n const rowProps = applyPlugins(\n plugins,\n plugin => plugin.transformBodyRow,\n {\n children: <>{cells}</>,\n htmlProps: {},\n } satisfies BodyRowRenderProps,\n item,\n rowIndex,\n );\n\n return (\n <RowComponent\n key={rowKey}\n {...rowProps.htmlProps}\n className={cx(rowProps.htmlProps.className, rowProps.className)}\n ref={rowProps.ref}>\n {rowProps.children}\n </RowComponent>\n );\n}\n\nfunction areRowPropsEqual<T extends Record<string, unknown>>(\n previous: DataRowProps<T>,\n next: DataRowProps<T>,\n): boolean {\n if (\n previous.CellComponent !== next.CellComponent ||\n previous.RowComponent !== next.RowComponent ||\n previous.columns !== next.columns ||\n previous.plugins !== next.plugins ||\n previous.rowIndex !== next.rowIndex ||\n previous.rowKey !== next.rowKey ||\n previous.textOverflow !== next.textOverflow\n ) {\n return false;\n }\n\n if (previous.item === next.item) {\n return true;\n }\n\n return Object.keys(next.item).every(\n key => previous.item[key] === next.item[key],\n );\n}\n\nconst MemoizedDataRow = memo(DataRowInner, areRowPropsEqual) as <\n T extends Record<string, unknown>,\n>(\n props: DataRowProps<T>,\n) => ReactElement;\n\n/**\n * Data table with configurable density, dividers, hover, and striping. Applies\n * column definitions, plugins, and data mapping, and shares visual state with\n * its row/cell primitives through `TableContext`.\n */\nfunction TableInner<T extends Record<string, unknown>>({\n children,\n className,\n columns: columnsProp,\n data,\n 'data-testid': dataTestId,\n density = 'balanced',\n dividers = 'rows',\n emptyState,\n hasHover = false,\n idKey,\n isStriped = false,\n plugins: userPlugins,\n ref,\n style,\n tableProps,\n textOverflow = 'wrap',\n verticalAlign = 'middle',\n}: TableProps<T> & {ref?: Ref<HTMLTableElement>}): ReactElement {\n const plugins = useBaseTablePlugins(userPlugins);\n const contextValue = useMemo(\n (): TableContextValue => ({\n density,\n dividers,\n hasHover,\n isStriped,\n textOverflow,\n verticalAlign,\n }),\n [density, dividers, hasHover, isStriped, textOverflow, verticalAlign],\n );\n\n const classes = tableRecipe({isAutoLayout: isReactNode(children)});\n const RowComponent = TableRow as React.ComponentType<TableRowComponentProps>;\n const CellComponent =\n TableCell as React.ComponentType<TableCellComponentProps>;\n const HeaderCellComponent =\n TableHeaderCell as React.ComponentType<TableHeaderCellComponentProps>;\n\n const baseColumns =\n columnsProp ?? (data == null ? [] : generateColumns(data));\n const transformedColumns = applyPlugins(\n plugins,\n plugin => plugin.transformColumns,\n baseColumns,\n );\n // Keep `columns` referentially stable while its contents are unchanged so the\n // memoized data rows (which compare `columns` by identity) skip re-rendering\n // when an upstream value rebuilds the array each render.\n const columns = useShallowEqualMemo(transformedColumns);\n const widths = resolveColumnWidths(columns);\n\n const tableRenderProps = applyPlugins(\n plugins,\n plugin => plugin.transformTable,\n {\n htmlProps: tableProps ?? {},\n } satisfies TableRenderProps,\n );\n\n const headerCells = columns.map(column => {\n const headerContent = column.header ?? column.key;\n const initialHtmlProps: HeaderCellRenderProps['htmlProps'] & {\n 'data-column-key'?: string;\n } = {\n 'data-column-key': column.key,\n };\n if (column.align) {\n initialHtmlProps.style = {textAlign: column.align};\n }\n\n const headerCellProps = applyPlugins(\n plugins,\n plugin => plugin.transformHeaderCell,\n {\n content: headerContent,\n htmlProps: initialHtmlProps,\n } satisfies HeaderCellRenderProps,\n column,\n );\n\n const widthStyle = widths.columns.get(column.key)?.style ?? {};\n const mergedStyle = {\n ...widthStyle,\n ...headerCellProps.htmlProps.style,\n };\n const resolvedContent = headerCellProps.content ?? headerContent;\n const title =\n typeof resolvedContent === 'string' && resolvedContent.length > 0\n ? resolvedContent\n : undefined;\n const renderedContent =\n typeof resolvedContent === 'string' ||\n typeof resolvedContent === 'number' ? (\n <Text\n color=\"secondary\"\n maxLines={1}\n size=\"md\"\n type=\"body\"\n weight=\"semibold\">\n {resolvedContent}\n </Text>\n ) : (\n resolvedContent\n );\n const hasSlots =\n isReactNode(headerCellProps.before) ||\n isReactNode(headerCellProps.after) ||\n isReactNode(headerCellProps.overlay) ||\n isReactNode(headerCellProps.below);\n\n return (\n <HeaderCellComponent\n key={column.key}\n {...headerCellProps.htmlProps}\n className={cx(\n headerCellProps.htmlProps.className,\n headerCellProps.className,\n )}\n style={mergedStyle}\n title={title}>\n {hasSlots ? (\n <>\n {headerCellProps.before}\n {!isReactNode(headerCellProps.after) ? (\n renderedContent\n ) : (\n <div\n className={classes.headerLabelRow}\n data-part=\"header-label-row\">\n {renderedContent}\n {headerCellProps.after}\n </div>\n )}\n {headerCellProps.overlay}\n {headerCellProps.below}\n </>\n ) : (\n renderedContent\n )}\n </HeaderCellComponent>\n );\n });\n\n const headerRowProps = applyPlugins(\n plugins,\n plugin => plugin.transformHeaderRow,\n {\n children: <>{headerCells}</>,\n htmlProps: {},\n } satisfies HeaderRowRenderProps,\n );\n\n const tableStyle = {\n ...style,\n ...tableRenderProps.htmlProps.style,\n minWidth:\n widths.tableMinWidth > 0 ? `${widths.tableMinWidth}px` : undefined,\n };\n const hasData = data != null && data.length > 0;\n const hasColumns = columns.length > 0;\n\n let tableElement: ReactNode = (\n <div className={classes.wrapper} data-part=\"wrapper\">\n <table\n {...tableRenderProps.htmlProps}\n className={cx(\n classes.table,\n tableRenderProps.htmlProps.className,\n tableRenderProps.className,\n className,\n )}\n data-part=\"table\"\n data-testid={dataTestId}\n ref={ref}\n style={tableStyle}>\n {children ?? (\n <>\n {hasColumns ? (\n <TableHeader>\n <RowComponent\n {...headerRowProps.htmlProps}\n className={cx(\n headerRowProps.htmlProps.className,\n headerRowProps.className,\n )}>\n {headerRowProps.children}\n </RowComponent>\n </TableHeader>\n ) : null}\n <TableBody>\n {hasData\n ? data.map((item, rowIndex) => {\n const rowKey =\n idKey == null\n ? rowIndex\n : typeof idKey === 'function'\n ? idKey(item)\n : String(item[idKey]);\n return (\n <MemoizedDataRow\n CellComponent={CellComponent}\n columns={columns}\n item={item}\n key={rowKey}\n plugins={plugins}\n RowComponent={RowComponent}\n rowIndex={rowIndex}\n rowKey={rowKey}\n textOverflow={textOverflow}\n />\n );\n })\n : data != null &&\n (emptyState === undefined || isReactNode(emptyState)) && (\n <tr>\n <td colSpan={Math.max(columns.length, 1)}>\n {emptyState ?? <EmptyState isCompact title=\"No data\" />}\n </td>\n </tr>\n )}\n </TableBody>\n </>\n )}\n </table>\n </div>\n );\n\n for (let index = plugins.length - 1; index >= 0; index--) {\n const plugin = plugins[index];\n if (plugin.transformTableContext != null) {\n try {\n tableElement = plugin.transformTableContext(tableElement);\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n throw error;\n }\n console.error('[Table] Plugin threw in transformTableContext:', error);\n }\n }\n }\n\n return <TableContext value={contextValue}>{tableElement}</TableContext>;\n}\n\nexport const Table = TableInner as <T extends Record<string, unknown>>(\n props: TableProps<T> & {ref?: Ref<HTMLTableElement>},\n) => ReactElement;\n\n(Table as {displayName?: string}).displayName = 'Table';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\n\nexport interface TableFooterProps {\n /**\n * Footer row elements rendered inside the tfoot.\n */\n children: ReactNode;\n /**\n * Additional CSS class names applied to the tfoot.\n */\n className?: string;\n /**\n * Test ID applied to the tfoot.\n */\n 'data-testid'?: string;\n /**\n * Ref forwarded to the tfoot element.\n */\n ref?: Ref<HTMLTableSectionElement>;\n /**\n * Inline styles applied to the tfoot.\n */\n style?: CSSProperties;\n}\n\n/**\n * Wraps table footer rows in a `<tfoot>` element.\n */\nexport function TableFooter({\n children,\n className,\n 'data-testid': dataTestId,\n ref,\n style,\n}: TableFooterProps): React.JSX.Element {\n return (\n <tfoot\n className={className}\n data-testid={dataTestId}\n ref={ref}\n style={style}>\n {children}\n </tfoot>\n );\n}\n\nTableFooter.displayName = 'TableFooter';\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {DEFAULT_MIN_COLUMN_WIDTH} from 'components/Table/columnUtils';\nimport type {\n ColumnWidth,\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport interface UseTableColumnResizeConfig {\n columns?: TableColumn<Record<string, unknown>>[];\n columnWidths?: Record<string, number>;\n maxWidth?: number;\n minWidth?: number;\n onColumnResizeEnd?: (updates: Record<string, number>) => void;\n}\n\ninterface DragState {\n columnKey: string;\n neighborIndex: number | null;\n resizeIndex: number;\n snapshots: ColumnSnapshot[];\n startX: number;\n tableWidth: number;\n}\n\ninterface ColumnSnapshot {\n initialMaxWidth: string;\n initialMinWidth: string;\n initialWidth: number;\n initialWidthStyle: string;\n key: string;\n maxWidth: number;\n minWidth: number;\n th: HTMLTableCellElement;\n}\n\ninterface PointerListeners {\n cancel: (event: PointerEvent) => void;\n move: (event: PointerEvent) => void;\n up: (event: PointerEvent) => void;\n}\n\nconst KEYBOARD_STEP = 10;\nconst KEYBOARD_LARGE_STEP = 50;\n\nconst styles = {\n handle: css({\n position: 'absolute',\n insetInlineEnd: 0,\n top: 0,\n bottom: 0,\n zIndex: 1,\n w: '4',\n cursor: 'ew-resize',\n borderWidth: 0,\n bg: 'transparent',\n p: 0,\n touchAction: 'none',\n userSelect: 'none',\n _after: {\n content: '\"\"',\n position: 'absolute',\n insetInlineEnd: 0,\n top: 0,\n bottom: 0,\n w: '2px',\n bg: 'transparent',\n transitionDuration: 'fast',\n transitionProperty: 'background-color, width',\n transitionTimingFunction: 'default',\n },\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffset',\n },\n _hover: {\n _after: {\n bg: 'primary',\n },\n },\n '@media (pointer: coarse)': {\n display: 'none',\n },\n }),\n headerCell: css({\n overflow: 'visible',\n position: 'relative',\n }),\n} as const;\n\nfunction resolveColumnMinWidth(\n width: ColumnWidth | undefined,\n globalMinWidth: number | undefined,\n): number {\n if (globalMinWidth != null) {\n return globalMinWidth;\n }\n if (width?.type === 'pixel') {\n return width.value;\n }\n return width?.minWidth ?? DEFAULT_MIN_COLUMN_WIDTH;\n}\n\nfunction applyWidth(th: HTMLTableCellElement, width: number): void {\n th.style.width = `${width}px`;\n th.style.minWidth = `${width}px`;\n th.style.maxWidth = `${width}px`;\n}\n\nfunction isProportionalColumn(width: ColumnWidth | undefined): boolean {\n return width == null || width.type === 'proportional';\n}\n\nfunction getRTLMultiplier(element: HTMLElement): number {\n return getComputedStyle(element).direction === 'rtl' ? -1 : 1;\n}\n\nfunction computeColumnWidths(drag: DragState, delta: number): number[] {\n const widths = drag.snapshots.map(snapshot => snapshot.initialWidth);\n\n if (drag.neighborIndex != null) {\n const neighbor = drag.snapshots[drag.neighborIndex];\n const self = drag.snapshots[drag.resizeIndex];\n const maxDelta = neighbor.initialWidth - neighbor.minWidth;\n const minDelta = self.minWidth - self.initialWidth;\n const clampedDelta = Math.max(minDelta, Math.min(delta, maxDelta));\n widths[drag.resizeIndex] = self.initialWidth + clampedDelta;\n widths[drag.neighborIndex] = neighbor.initialWidth - clampedDelta;\n } else {\n const self = drag.snapshots[drag.resizeIndex];\n widths[drag.resizeIndex] = Math.min(\n self.maxWidth,\n Math.max(self.minWidth, self.initialWidth + delta),\n );\n }\n\n const lastIndex = drag.snapshots.length - 1;\n const isResizingLastColumnWithoutNeighbor =\n drag.resizeIndex === lastIndex && drag.neighborIndex == null;\n if (\n lastIndex >= 0 &&\n drag.tableWidth > 0 &&\n !isResizingLastColumnWithoutNeighbor\n ) {\n const sumOthers = widths.reduce(\n (sum, width, index) => (index === lastIndex ? sum : sum + width),\n 0,\n );\n widths[lastIndex] = Math.max(\n drag.snapshots[lastIndex].minWidth,\n drag.tableWidth - sumOthers,\n );\n }\n\n return widths;\n}\n\nfunction applyWidths(snapshots: ColumnSnapshot[], widths: number[]): void {\n snapshots.forEach((snapshot, index) => {\n applyWidth(snapshot.th, widths[index]);\n });\n}\n\nfunction restoreSnapshotStyles(snapshots: ColumnSnapshot[]): void {\n snapshots.forEach(snapshot => {\n snapshot.th.style.width = snapshot.initialWidthStyle;\n snapshot.th.style.minWidth = snapshot.initialMinWidth;\n snapshot.th.style.maxWidth = snapshot.initialMaxWidth;\n });\n}\n\nfunction buildUpdates(\n drag: DragState,\n widths: number[],\n): Record<string, number> {\n const updates: Record<string, number> = {};\n const lastIndex = drag.snapshots.length - 1;\n const isResizingLastColumnWithoutNeighbor =\n drag.resizeIndex === lastIndex && drag.neighborIndex == null;\n if (isResizingLastColumnWithoutNeighbor) {\n const snapshot = drag.snapshots[drag.resizeIndex];\n updates[snapshot.key] = Math.round(widths[drag.resizeIndex]);\n return updates;\n }\n drag.snapshots.forEach((snapshot, index) => {\n if (index === lastIndex) {\n return;\n }\n updates[snapshot.key] = Math.round(widths[index]);\n });\n return updates;\n}\n\nfunction ResizeHandle({\n columnHeader,\n columnKey,\n configRef,\n currentWidth,\n maxWidth,\n minWidth,\n neighborKey,\n}: {\n columnHeader: ReactNode;\n columnKey: string;\n configRef: React.RefObject<UseTableColumnResizeConfig>;\n currentWidth: number | undefined;\n maxWidth: number;\n minWidth: number;\n neighborKey: string | null;\n}): React.JSX.Element {\n const dragStateRef = useRef<DragState | null>(null);\n const pointerListenersRef = useRef<PointerListeners | null>(null);\n\n const removePointerListeners = useCallback(() => {\n const listeners = pointerListenersRef.current;\n if (listeners == null) {\n return;\n }\n window.removeEventListener('pointermove', listeners.move);\n window.removeEventListener('pointerup', listeners.up);\n window.removeEventListener('pointercancel', listeners.cancel);\n pointerListenersRef.current = null;\n }, []);\n\n const buildDragState = useCallback(\n (th: HTMLTableCellElement, startX: number): DragState | null => {\n const headerRow = th.parentElement;\n if (headerRow == null) {\n return null;\n }\n\n const table = th.closest('table');\n const tableWidth = table?.getBoundingClientRect().width ?? 0;\n const columns = configRef.current.columns;\n const activeHeaderIndex = Array.from(headerRow.children).indexOf(th);\n const activeColumnIndex =\n columns?.findIndex(column => column.key === columnKey) ?? -1;\n const columnIndexOffset =\n activeHeaderIndex >= 0 && activeColumnIndex >= 0\n ? activeHeaderIndex - activeColumnIndex\n : 0;\n const columnsByKey = new Map(\n columns?.map(column => [column.key, column]),\n );\n const currentWidths = configRef.current.columnWidths ?? {};\n const snapshots: ColumnSnapshot[] = [];\n\n const allHeaders = Array.from(headerRow.children).filter(\n (child): child is HTMLTableCellElement =>\n child instanceof HTMLTableCellElement,\n );\n for (const [index, header] of allHeaders.entries()) {\n const key =\n header\n .querySelector<HTMLElement>('[data-column-key]')\n ?.getAttribute('data-column-key') ??\n columns?.[index - columnIndexOffset]?.key;\n if (key == null) {\n continue;\n }\n const snapshotColumn = columnsByKey.get(key);\n if (columns != null && snapshotColumn == null) {\n continue;\n }\n if (snapshotColumn?.resizable === false) {\n continue;\n }\n\n const renderedWidth = header.getBoundingClientRect().width;\n const overrideWidth: number | undefined =\n Object.prototype.hasOwnProperty.call(currentWidths, key)\n ? currentWidths[key]\n : undefined;\n snapshots.push({\n initialMaxWidth: header.style.maxWidth,\n initialMinWidth: header.style.minWidth,\n initialWidth:\n overrideWidth ?? (renderedWidth > 0 ? renderedWidth : minWidth),\n initialWidthStyle: header.style.width,\n key,\n maxWidth: configRef.current.maxWidth ?? Number.POSITIVE_INFINITY,\n minWidth:\n snapshotColumn == null\n ? minWidth\n : resolveColumnMinWidth(\n snapshotColumn.width,\n configRef.current.minWidth,\n ),\n th: header,\n });\n }\n\n const resizeIndex = snapshots.findIndex(\n snapshot => snapshot.key === columnKey,\n );\n if (resizeIndex < 0) {\n return null;\n }\n\n const neighborIndex =\n neighborKey == null\n ? null\n : snapshots.findIndex(snapshot => snapshot.key === neighborKey);\n\n return {\n columnKey,\n neighborIndex:\n neighborIndex == null || neighborIndex < 0 ? null : neighborIndex,\n resizeIndex,\n snapshots,\n startX,\n tableWidth,\n };\n },\n [columnKey, configRef, minWidth, neighborKey],\n );\n\n const commitResize = useCallback(\n (drag: DragState, delta: number) => {\n const widths = computeColumnWidths(drag, delta);\n applyWidths(drag.snapshots, widths);\n const updates = buildUpdates(drag, widths);\n if (Object.keys(updates).length > 0) {\n configRef.current.onColumnResizeEnd?.(updates);\n }\n },\n [configRef],\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n const drag = dragStateRef.current;\n if (drag == null) {\n return;\n }\n const delta =\n (event.clientX - drag.startX) *\n getRTLMultiplier(drag.snapshots[drag.resizeIndex].th);\n applyWidths(drag.snapshots, computeColumnWidths(drag, delta));\n },\n [dragStateRef],\n );\n\n const handlePointerUp = useCallback(\n (event: PointerEvent) => {\n const drag = dragStateRef.current;\n removePointerListeners();\n if (drag != null) {\n const delta =\n (event.clientX - drag.startX) *\n getRTLMultiplier(drag.snapshots[drag.resizeIndex].th);\n commitResize(drag, delta);\n }\n dragStateRef.current = null;\n },\n [commitResize, dragStateRef, removePointerListeners],\n );\n\n const handlePointerCancel = useCallback(() => {\n const drag = dragStateRef.current;\n if (drag != null) {\n restoreSnapshotStyles(drag.snapshots);\n }\n removePointerListeners();\n dragStateRef.current = null;\n }, [dragStateRef, removePointerListeners]);\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const th = event.currentTarget.closest('th');\n if (th == null) {\n return;\n }\n const drag = buildDragState(th, event.clientX);\n if (drag == null) {\n return;\n }\n dragStateRef.current = drag;\n applyWidths(drag.snapshots, computeColumnWidths(drag, 0));\n pointerListenersRef.current = {\n cancel: handlePointerCancel,\n move: handlePointerMove,\n up: handlePointerUp,\n };\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerCancel);\n },\n [\n buildDragState,\n dragStateRef,\n handlePointerCancel,\n handlePointerMove,\n handlePointerUp,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n event.key !== 'ArrowLeft' &&\n event.key !== 'ArrowRight' &&\n event.key !== 'Home' &&\n event.key !== 'End'\n ) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const th = event.currentTarget.closest('th');\n if (th == null) {\n return;\n }\n const drag = buildDragState(th, 0);\n if (drag == null) {\n return;\n }\n const activeSnapshot = drag.snapshots[drag.resizeIndex];\n const step = event.shiftKey ? KEYBOARD_LARGE_STEP : KEYBOARD_STEP;\n const delta =\n event.key === 'Home'\n ? activeSnapshot.minWidth - activeSnapshot.initialWidth\n : event.key === 'End'\n ? Number.isFinite(activeSnapshot.maxWidth)\n ? activeSnapshot.maxWidth - activeSnapshot.initialWidth\n : 0\n : event.key === 'ArrowLeft'\n ? -step * getRTLMultiplier(th)\n : step * getRTLMultiplier(th);\n commitResize(drag, delta);\n },\n [buildDragState, commitResize],\n );\n const headerLabel =\n typeof columnHeader === 'string' ? columnHeader : columnKey;\n\n /* eslint-disable jsx-a11y-x/no-noninteractive-element-interactions, jsx-a11y-x/no-noninteractive-tabindex -- ARIA separator uses the window splitter keyboard pattern. */\n return (\n <div\n aria-label={`Resize column ${headerLabel}`}\n aria-orientation=\"vertical\"\n aria-valuemax={Number.isFinite(maxWidth) ? maxWidth : undefined}\n aria-valuemin={minWidth}\n aria-valuenow={currentWidth}\n className={styles.handle}\n data-column-key={columnKey}\n onKeyDown={handleKeyDown}\n onPointerDown={handlePointerDown}\n role=\"separator\"\n tabIndex={0}\n />\n );\n /* eslint-enable jsx-a11y-x/no-noninteractive-element-interactions, jsx-a11y-x/no-noninteractive-tabindex */\n}\n\nexport function useTableColumnResize<T extends Record<string, unknown>>(\n config: UseTableColumnResizeConfig,\n): TablePlugin<T> {\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n const globalMinWidth = config.minWidth;\n const maxWidth = config.maxWidth ?? Number.POSITIVE_INFINITY;\n const columnWidths = config.columnWidths;\n const resizableColumns = useMemo(\n () => config.columns?.filter(column => column.resizable !== false),\n [config.columns],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n if (column.resizable === false) {\n return props;\n }\n\n let neighborKey: string | null = null;\n if (resizableColumns != null && isProportionalColumn(column.width)) {\n const columnIndex = resizableColumns.findIndex(\n resizableColumn => resizableColumn.key === column.key,\n );\n const isLastResizable = columnIndex === resizableColumns.length - 1;\n if (isLastResizable) {\n return props;\n }\n if (columnIndex >= 0) {\n neighborKey = resizableColumns[columnIndex + 1]?.key ?? null;\n }\n }\n\n const overrideWidth = columnWidths?.[column.key];\n const widthStyle: CSSProperties | undefined =\n overrideWidth == null\n ? undefined\n : {\n maxWidth: `${overrideWidth}px`,\n minWidth: `${overrideWidth}px`,\n width: `${overrideWidth}px`,\n };\n const effectiveMinWidth = resolveColumnMinWidth(\n column.width,\n globalMinWidth,\n );\n\n return {\n ...props,\n className: styles.headerCell,\n htmlProps: {\n ...props.htmlProps,\n style:\n widthStyle == null\n ? props.htmlProps.style\n : {...props.htmlProps.style, ...widthStyle},\n },\n overlay: (\n <>\n {props.overlay}\n <ResizeHandle\n columnHeader={column.header ?? column.key}\n columnKey={column.key}\n configRef={configRef}\n currentWidth={overrideWidth}\n maxWidth={maxWidth}\n minWidth={effectiveMinWidth}\n neighborKey={neighborKey}\n />\n </>\n ),\n };\n },\n }),\n [columnWidths, configRef, globalMinWidth, maxWidth, resizableColumns],\n );\n}\n","import {useMemo} from 'react';\nimport type {UseTableColumnSettingsStateConfig} from 'components/Table/plugins/columnSettings/useTableColumnSettingsState';\nimport type {TableColumn, TablePlugin} from 'components/Table/types';\n\nexport interface TableColumnSettingsOption<TColumnKey extends string = string> {\n group?: string;\n isAlwaysVisible?: boolean;\n key: TColumnKey;\n label: string;\n}\n\nexport type UseTableColumnSettingsConfig<TColumnKey extends string = string> =\n UseTableColumnSettingsStateConfig<TColumnKey>;\n\nexport function useTableColumnSettings<\n T extends Record<string, unknown>,\n TColumnKey extends string = string,\n>(config: UseTableColumnSettingsConfig<TColumnKey>): TablePlugin<T> {\n return useMemo(\n (): TablePlugin<T> => ({\n transformColumns(columns: TableColumn<T>[]): TableColumn<T>[] {\n const activeSet = new Set(config.activeColumnKeys);\n const orderMap = new Map(\n config.activeColumnKeys.map((key, index) => [key, index]),\n );\n return columns\n .filter(column => activeSet.has(column.key as TColumnKey))\n .sort(\n (a, b) =>\n (orderMap.get(a.key as TColumnKey) ?? Infinity) -\n (orderMap.get(b.key as TColumnKey) ?? Infinity),\n );\n },\n }),\n [config],\n );\n}\n","import {useCallback, useMemo} from 'react';\nimport type {TableColumnSettingsOption} from 'components/Table/plugins/columnSettings/useTableColumnSettings';\n\nexport interface UseTableColumnSettingsStateConfig<\n TColumnKey extends string = string,\n> {\n activeColumnKeys: ReadonlyArray<TColumnKey>;\n columns: ReadonlyArray<TableColumnSettingsOption<TColumnKey>>;\n defaultColumnKeys?: ReadonlyArray<TColumnKey>;\n onChangeActiveColumnKeys: (keys: ReadonlyArray<TColumnKey>) => void;\n}\n\nexport interface UseTableColumnSettingsStateReturn<\n TColumnKey extends string = string,\n> {\n activeColumnKeys: ReadonlyArray<TColumnKey>;\n columnSettingsConfig: UseTableColumnSettingsStateConfig<TColumnKey>;\n getIsColumnActive: (key: TColumnKey) => boolean;\n getIsColumnToggleable: (key: TColumnKey) => boolean;\n resetToDefault: () => void;\n setActiveColumnKeys: (keys: string[]) => void;\n showAllColumns: () => void;\n toggleColumn: (key: TColumnKey) => void;\n}\n\nexport function useTableColumnSettingsState<TColumnKey extends string = string>(\n config: UseTableColumnSettingsStateConfig<TColumnKey>,\n): UseTableColumnSettingsStateReturn<TColumnKey> {\n const {activeColumnKeys, columns} = config;\n const activeSet = useMemo(\n () => new Set(activeColumnKeys),\n [activeColumnKeys],\n );\n const alwaysVisibleSet = useMemo(\n () =>\n new Set(\n columns\n .filter(column => column.isAlwaysVisible)\n .map(column => column.key),\n ),\n [columns],\n );\n\n const toggleColumn = useCallback(\n (key: TColumnKey) => {\n if (\n config.columns.some(\n column => column.key === key && column.isAlwaysVisible,\n )\n ) {\n return;\n }\n const currentSet = new Set(config.activeColumnKeys);\n config.onChangeActiveColumnKeys(\n currentSet.has(key)\n ? config.activeColumnKeys.filter(columnKey => columnKey !== key)\n : [...config.activeColumnKeys, key],\n );\n },\n [config],\n );\n const getIsColumnActive = useCallback(\n (key: TColumnKey) => activeSet.has(key),\n [activeSet],\n );\n const getIsColumnToggleable = useCallback(\n (key: TColumnKey) => !alwaysVisibleSet.has(key),\n [alwaysVisibleSet],\n );\n const showAllColumns = useCallback(() => {\n config.onChangeActiveColumnKeys(config.columns.map(column => column.key));\n }, [config]);\n const resetToDefault = useCallback(() => {\n config.onChangeActiveColumnKeys(\n config.defaultColumnKeys ?? config.columns.map(column => column.key),\n );\n }, [config]);\n const setActiveColumnKeys = useCallback(\n (keys: string[]) => {\n const next = new Set(keys as TColumnKey[]);\n for (const column of config.columns) {\n if (column.isAlwaysVisible) {\n next.add(column.key);\n }\n }\n config.onChangeActiveColumnKeys(Array.from(next));\n },\n [config],\n );\n\n return {\n activeColumnKeys,\n columnSettingsConfig: config,\n getIsColumnActive,\n getIsColumnToggleable,\n resetToDefault,\n setActiveColumnKeys,\n showAllColumns,\n toggleColumn,\n };\n}\n","import {Temporal} from '@js-temporal/polyfill';\nimport {Filter} from 'lucide-react';\nimport {\n createContext,\n use,\n useCallback,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport {\n createStaticSearchSource,\n type SearchableItem,\n} from 'components/AutocompleteInput';\nimport {Button} from 'components/Button';\nimport {DateInput} from 'components/DateInput';\nimport {MultiSelect} from 'components/MultiSelect';\nimport {NumberInput} from 'components/NumberInput';\nimport {Popover} from 'components/Popover';\nimport type {\n FilterValue,\n FloatOperatorValue,\n IntegerOperatorValue,\n OperatorValue,\n SearchFilterInputConfig,\n SearchFilterInputField,\n SearchFilterInputFilter,\n SearchFilterInputOperator,\n StringListOperatorValue,\n EntityListOperatorValue,\n EnumListOperatorValue,\n EnumOperatorValue,\n} from 'components/SearchFilterInput';\nimport {Select} from 'components/Select';\nimport {proportional} from 'components/Table/columnUtils';\nimport type {\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {TagsInput} from 'components/TagsInput';\nimport {TextInput} from 'components/TextInput';\nimport {TimeInput} from 'components/TimeInput';\nimport {plainDateToUnixSeconds, type PlainDate} from 'internal/plainDate';\nimport {getBrowserTimezoneID} from 'internal/time';\nimport {css} from 'styled-system/css';\n\nexport type TableFilterValue = number | string | string[] | PlainDate;\nexport type TableFilterState = Record<string, TableFilterValue | undefined>;\nexport type TableFilterVariant = 'inline' | 'popover';\n\nexport interface TableFilterFieldRef {\n field: string;\n operator?: string;\n}\n\nexport interface UseTableFilteringConfig {\n filters: TableFilterState;\n onFilterChange: (columnKey: string, value: TableFilterValue | null) => void;\n searchConfig: SearchFilterInputConfig;\n timezoneID?: string;\n variant?: TableFilterVariant;\n}\n\ntype ToSearchFiltersConfig =\n | Pick<UseTableFilteringConfig, 'searchConfig' | 'timezoneID'>\n | SearchFilterInputConfig;\n\ninterface FilterStore {\n getConfig: () => UseTableFilteringConfig;\n}\n\nconst FilterStoreContext = createContext<FilterStore | null>(null);\nFilterStoreContext.displayName = 'TableFilterStoreContext';\n\nconst styles = {\n afterPopover: css({\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n }),\n inlineWrapper: css({\n mt: '1',\n }),\n popoverActions: css({\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '2',\n mt: '2',\n }),\n popoverActionsSpacer: css({\n flex: 1,\n }),\n popoverContent: css({\n w: '60',\n }),\n} as const;\n\nfunction useFilterStore(): FilterStore {\n const store = use(FilterStoreContext);\n if (store == null) {\n throw new Error(\n 'useFilterStore must be used within a Table filtering plugin',\n );\n }\n return store;\n}\n\nfunction resolveOperator(\n field: SearchFilterInputField,\n operatorKey?: string,\n): SearchFilterInputOperator | undefined {\n if (operatorKey != null) {\n return field.operators.find(operator => operator.key === operatorKey);\n }\n if (field.defaultOperator != null) {\n return field.operators.find(\n operator => operator.key === field.defaultOperator,\n );\n }\n return field.operators[0];\n}\n\nfunction resolveFilterConfig(\n filter: string | TableFilterFieldRef,\n searchConfig: SearchFilterInputConfig,\n): OperatorValue | undefined {\n const fieldKey = typeof filter === 'string' ? filter : filter.field;\n const operatorKey = typeof filter === 'string' ? undefined : filter.operator;\n const field = searchConfig.fields.find(\n candidate => candidate.key === fieldKey,\n );\n return field == null ? undefined : resolveOperator(field, operatorKey)?.value;\n}\n\nfunction tableValueToFilterValue(\n value: TableFilterValue,\n operatorValue: OperatorValue,\n timezoneID: string,\n): FilterValue | undefined {\n switch (operatorValue.type) {\n case 'date_absolute':\n return value instanceof Temporal.PlainDate\n ? {\n type: 'date_absolute',\n unixSeconds: plainDateToUnixSeconds(value, timezoneID),\n }\n : undefined;\n case 'enum':\n return typeof value === 'string' ? {type: 'enum', value} : undefined;\n case 'enum_list':\n return Array.isArray(value) ? {type: 'enum_list', value} : undefined;\n case 'entity_list':\n return Array.isArray(value)\n ? {\n type: 'entity_list',\n value: value.map(id => ({id, label: id})),\n }\n : undefined;\n case 'float':\n return typeof value === 'number' ? {type: 'float', value} : undefined;\n case 'integer':\n return typeof value === 'number' ? {type: 'integer', value} : undefined;\n case 'string':\n return typeof value === 'string' ? {type: 'string', value} : undefined;\n case 'string_list':\n return Array.isArray(value) ? {type: 'string_list', value} : undefined;\n case 'time':\n return typeof value === 'string' ? {type: 'time', value} : undefined;\n case 'custom':\n case 'date_range':\n case 'date_relative':\n case 'empty':\n case 'nested':\n return undefined;\n }\n}\n\nexport function toSearchFilters<T extends Record<string, unknown>>(\n filters: TableFilterState,\n columns: ReadonlyArray<Pick<TableColumn<T>, 'filter' | 'key'>>,\n config: ToSearchFiltersConfig,\n timezoneID?: string,\n): SearchFilterInputFilter[] {\n const result: SearchFilterInputFilter[] = [];\n const searchConfig = 'searchConfig' in config ? config.searchConfig : config;\n const effectiveTimezoneID =\n ('searchConfig' in config ? config.timezoneID : undefined) ??\n timezoneID ??\n getBrowserTimezoneID();\n\n for (const column of columns) {\n if (column.filter == null) {\n continue;\n }\n const value = filters[column.key];\n if (value == null) {\n continue;\n }\n const fieldKey =\n typeof column.filter === 'string' ? column.filter : column.filter.field;\n const operatorKey =\n typeof column.filter === 'string' ? undefined : column.filter.operator;\n const field = searchConfig.fields.find(\n candidate => candidate.key === fieldKey,\n );\n const operator =\n field == null ? undefined : resolveOperator(field, operatorKey);\n if (operator == null) {\n continue;\n }\n const filterValue = tableValueToFilterValue(\n value,\n operator.value,\n effectiveTimezoneID,\n );\n if (filterValue != null) {\n result.push({\n field: fieldKey,\n operator: operator.key,\n value: filterValue,\n });\n }\n }\n\n return result;\n}\n\nfunction TextFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <TextInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue === '' ? null : nextValue);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={typeof value === 'string' ? value : ''}\n />\n );\n}\n\nfunction NumberFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: FloatOperatorValue | IntegerOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n const sharedProps = {\n isIntegerOnly: operatorValue.type === 'integer',\n isLabelHidden: true as const,\n label: `Filter ${header}`,\n max: operatorValue.maxValue ?? null,\n min: operatorValue.minValue ?? null,\n placeholder: `Filter ${header}`,\n size,\n step: operatorValue.type === 'integer' ? 1 : null,\n value: typeof value === 'number' ? value : null,\n };\n if (hasClear === false) {\n return (\n <NumberInput\n {...sharedProps}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n />\n );\n }\n return (\n <NumberInput\n {...sharedProps}\n hasClear\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n />\n );\n}\n\nfunction SelectFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EnumOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <Select\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue);\n }}\n options={operatorValue.values.map(option => ({\n icon: option.icon,\n label: option.label,\n value: option.value,\n }))}\n placeholder=\"All\"\n size={size}\n value={typeof value === 'string' ? value : null}\n />\n );\n}\n\nfunction MultiSelectFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EnumListOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <MultiSelect\n hasClear={hasClear}\n hasSearch={false}\n hasSelectAll\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue.length === 0 ? null : nextValue);\n }}\n options={operatorValue.values.map(option => ({\n icon: option.icon,\n label: option.label,\n value: option.value,\n }))}\n placeholder=\"All\"\n size={size}\n value={Array.isArray(value) ? value : []}\n />\n );\n}\n\nfunction DateFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <DateInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store.getConfig().onFilterChange(columnKey, nextValue ?? null);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={value instanceof Temporal.PlainDate ? value : null}\n />\n );\n}\n\nfunction TimeFilterControl({\n columnKey,\n hasClear,\n header,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n return (\n <TimeInput\n hasClear={hasClear}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextValue => {\n store\n .getConfig()\n .onFilterChange(columnKey, nextValue?.toString() ?? null);\n }}\n placeholder={`Filter ${header}`}\n size={size}\n value={value instanceof Temporal.PlainTime ? value : null}\n />\n );\n}\n\nfunction ListFilterControl({\n columnKey,\n hasClear,\n header,\n operatorValue,\n size,\n}: {\n columnKey: string;\n hasClear?: boolean;\n header: string;\n operatorValue: EntityListOperatorValue | StringListOperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[columnKey];\n const items = Array.isArray(value) ? value.map(id => ({id, label: id})) : [];\n const source =\n operatorValue.searchSource ??\n createStaticSearchSource<SearchableItem>(items, {\n getKeywords: item => [item.id],\n });\n\n return (\n <TagsInput\n hasClear={hasClear}\n hasCreate={operatorValue.isArbitraryStringAllowed ?? true}\n isLabelHidden\n label={`Filter ${header}`}\n onChange={nextItems => {\n const ids = nextItems.map(item => item.id);\n store\n .getConfig()\n .onFilterChange(columnKey, ids.length === 0 ? null : ids);\n }}\n placeholder={`Filter ${header}`}\n renderItem={\n operatorValue.type === 'entity_list'\n ? operatorValue.renderItem\n : undefined\n }\n searchSource={source}\n size={size}\n value={items}\n />\n );\n}\n\nfunction getHeaderText<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string {\n return typeof column.header === 'string' ? column.header : column.key;\n}\n\nfunction FilterControl<T extends Record<string, unknown>>({\n column,\n hasClear,\n operatorValue,\n size,\n}: {\n column: TableColumn<T>;\n hasClear?: boolean;\n operatorValue: OperatorValue;\n size: 'md' | 'sm';\n}): React.JSX.Element | null {\n const header = getHeaderText(column);\n switch (operatorValue.type) {\n case 'date_absolute':\n return (\n <DateFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'enum':\n return (\n <SelectFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'enum_list':\n return (\n <MultiSelectFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'entity_list':\n case 'string_list':\n return (\n <ListFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'float':\n case 'integer':\n return (\n <NumberFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n operatorValue={operatorValue}\n size={size}\n />\n );\n case 'string':\n return (\n <TextFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'time':\n return (\n <TimeFilterControl\n columnKey={column.key}\n hasClear={hasClear}\n header={header}\n size={size}\n />\n );\n case 'custom':\n case 'date_range':\n case 'date_relative':\n case 'empty':\n case 'nested':\n return null;\n }\n}\n\nfunction PopoverFilterTrigger<T extends Record<string, unknown>>({\n column,\n operatorValue,\n}: {\n column: TableColumn<T>;\n operatorValue: OperatorValue;\n}): React.JSX.Element {\n const store = useFilterStore();\n const value = store.getConfig().filters[column.key];\n const isActive = value != null;\n const [isOpen, setIsOpen] = useState(false);\n const [draft, setDraft] = useState<TableFilterValue | null>(null);\n\n const handleOpenChange = useCallback(\n (isOpenNext: boolean) => {\n if (isOpenNext) {\n setDraft(value ?? null);\n }\n setIsOpen(isOpenNext);\n },\n [value],\n );\n\n const handleApply = useCallback(() => {\n store.getConfig().onFilterChange(column.key, draft);\n setIsOpen(false);\n }, [column.key, draft, store]);\n\n const handleReset = useCallback(() => {\n store.getConfig().onFilterChange(column.key, null);\n setDraft(null);\n setIsOpen(false);\n }, [column.key, store]);\n\n const draftStore = useMemo<FilterStore>(\n () => ({\n getConfig() {\n const config = store.getConfig();\n return {\n ...config,\n filters: {\n ...config.filters,\n [column.key]: draft ?? undefined,\n },\n onFilterChange: (_columnKey, nextValue) => {\n setDraft(nextValue);\n },\n };\n },\n }),\n [column.key, draft, store],\n );\n\n return (\n <Popover\n content={\n <FilterStoreContext value={draftStore}>\n <div className={styles.popoverContent}>\n <FilterControl\n column={column}\n hasClear={false}\n operatorValue={operatorValue}\n size=\"sm\"\n />\n <div className={styles.popoverActions}>\n <Button\n label=\"Reset\"\n onClick={handleReset}\n size=\"sm\"\n variant=\"ghost\"\n />\n <div className={styles.popoverActionsSpacer} />\n <Button\n label=\"Apply\"\n onClick={handleApply}\n size=\"sm\"\n variant=\"primary\"\n />\n </div>\n </div>\n </FilterStoreContext>\n }\n isOpen={isOpen}\n label={`Filter ${getHeaderText(column)}`}\n onOpenChange={handleOpenChange}\n padding={3}\n placement=\"below\">\n <Button\n icon={Filter}\n isIconOnly\n label={`Filter ${getHeaderText(column)}`}\n size=\"sm\"\n variant={isActive ? 'primary' : 'ghost'}\n />\n </Popover>\n );\n}\n\nexport function useTableFiltering<T extends Record<string, unknown>>(\n config: UseTableFilteringConfig,\n): TablePlugin<T> {\n const {variant = 'popover'} = config;\n\n const store = useMemo<FilterStore>(\n () => ({\n getConfig: () => config,\n }),\n [config],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformColumns:\n variant === 'inline'\n ? (columns: TableColumn<T>[]): TableColumn<T>[] =>\n columns.map(column => {\n if (column.filter != null && column.width == null) {\n return {...column, width: proportional(1)};\n }\n return column;\n })\n : undefined,\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n if (column.filter == null) {\n if (variant === 'inline') {\n return {\n ...props,\n htmlProps: {\n ...props.htmlProps,\n style: {\n ...props.htmlProps.style,\n verticalAlign: 'bottom',\n },\n },\n };\n }\n return props;\n }\n const operatorValue = resolveFilterConfig(\n column.filter,\n config.searchConfig,\n );\n if (operatorValue == null) {\n return props;\n }\n\n if (variant === 'popover') {\n return {\n ...props,\n after: (\n <span className={styles.afterPopover}>\n <PopoverFilterTrigger\n column={column}\n operatorValue={operatorValue}\n />\n </span>\n ),\n };\n }\n\n return {\n ...props,\n below: (\n <>\n {props.below}\n <div className={styles.inlineWrapper}>\n <FilterControl\n column={column}\n hasClear\n operatorValue={operatorValue}\n size=\"sm\"\n />\n </div>\n </>\n ),\n };\n },\n transformTableContext(children: ReactNode): ReactNode {\n return (\n <FilterStoreContext value={store}>{children}</FilterStoreContext>\n );\n },\n }),\n [config.searchConfig, store, variant],\n );\n}\n","import {useCallback, useState} from 'react';\nimport type {\n TableFilterState,\n TableFilterValue,\n} from 'components/Table/plugins/filtering/useTableFiltering';\n\nexport interface UseTableFilterStateResult {\n clearAll: () => void;\n filters: TableFilterState;\n onFilterChange: (key: string, value: TableFilterValue | null) => void;\n}\n\nexport function useTableFilterState(\n initialState?: TableFilterState,\n): UseTableFilterStateResult {\n const [filters, setFilters] = useState<TableFilterState>(initialState ?? {});\n const onFilterChange = useCallback(\n (key: string, value: TableFilterValue | null) => {\n setFilters(previous => {\n if (value == null) {\n const {[key]: _removed, ...next} = previous;\n return next;\n }\n return {...previous, [key]: value};\n });\n },\n [],\n );\n const clearAll = useCallback(() => setFilters({}), []);\n\n return {clearAll, filters, onFilterChange};\n}\n","export interface PaginateDataOptions {\n page: number;\n pageSize: number;\n}\n\nexport function paginateData<T>(\n data: ReadonlyArray<T>,\n {page, pageSize}: PaginateDataOptions,\n): T[] {\n const safePage = Math.max(1, page);\n const safePageSize = Math.max(1, pageSize);\n const start = (safePage - 1) * safePageSize;\n return data.slice(start, start + safePageSize);\n}\n","import {useMemo, type ReactNode} from 'react';\nimport {Pagination, type PaginationProps} from 'components/Pagination';\nimport type {TablePlugin} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport interface UseTablePaginationConfig {\n align?: 'center' | 'end' | 'start';\n hasMore?: boolean;\n label?: string;\n onPageChange: (page: number) => void;\n page: number;\n pageSize?: number;\n position?: 'above' | 'below' | 'both' | 'none';\n size?: 'lg' | 'md' | 'sm';\n totalItems?: number;\n totalPages?: number;\n variant?: 'compact' | 'count' | 'none' | 'pages';\n}\n\nconst styles = {\n align: {\n center: css({justifyContent: 'center'}),\n end: css({justifyContent: 'flex-end'}),\n start: css({justifyContent: 'flex-start'}),\n },\n below: css({mt: '2'}),\n root: css({display: 'flex'}),\n above: css({mb: '2'}),\n} as const;\n\nexport function useTablePagination<T extends Record<string, unknown>>({\n align = 'center',\n hasMore,\n label = 'Table pagination',\n onPageChange,\n page,\n pageSize = 10,\n position = 'below',\n size = 'md',\n totalItems,\n totalPages,\n variant = 'pages',\n}: UseTablePaginationConfig): TablePlugin<T> {\n const computedTotalPages =\n totalPages ??\n (totalItems == null ? undefined : Math.ceil(totalItems / pageSize));\n const paginationProps = useMemo(\n (): PaginationProps => ({\n hasMore,\n label,\n onChange: onPageChange,\n page,\n pageSize,\n size,\n ...(totalItems != null\n ? {totalItems}\n : computedTotalPages != null\n ? {totalPages: computedTotalPages}\n : {}),\n variant,\n }),\n [\n computedTotalPages,\n hasMore,\n label,\n onPageChange,\n page,\n pageSize,\n size,\n totalItems,\n variant,\n ],\n );\n return useMemo(\n (): TablePlugin<T> => ({\n transformTableContext(children: ReactNode): ReactNode {\n const current = {align, paginationProps, position};\n if (current.position === 'none') {\n return children;\n }\n if (computedTotalPages === 1 && hasMore !== true) {\n return children;\n }\n\n const makePagination = (side: 'above' | 'below') => (\n <div\n className={`${styles.root} ${styles.align[current.align]} ${\n side === 'above' ? styles.above : styles.below\n }`}>\n <Pagination {...current.paginationProps} />\n </div>\n );\n\n return (\n <>\n {current.position === 'above' || current.position === 'both'\n ? makePagination('above')\n : null}\n {children}\n {current.position === 'below' || current.position === 'both'\n ? makePagination('below')\n : null}\n </>\n );\n },\n }),\n [align, computedTotalPages, hasMore, paginationProps, position],\n );\n}\n","import {useRef} from 'react';\n\nconst UNSET = Symbol('useConstant.unset');\n\n/**\n * Computes `init` once on the first render and returns the same value on every\n * subsequent render. Unlike `useMemo`, the value is guaranteed stable for the\n * lifetime of the component (no dependency array, never recomputed).\n */\nconst useConstant = <T>(init: () => T): T => {\n const ref = useRef<T | typeof UNSET>(UNSET);\n /* eslint-disable @eslint-react/refs -- first-render lazy initialization: slot is read and written once, value is stable thereafter */\n if (ref.current === UNSET) {\n ref.current = init();\n }\n return ref.current;\n /* eslint-enable @eslint-react/refs */\n};\n\nexport default useConstant;\n","import {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {CheckboxInput} from 'components/CheckboxInput';\nimport {pixel} from 'components/Table/columnUtils';\nimport type {\n BodyRowRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {mergeRefs} from 'internal/mergeRefs';\nimport useConstant from 'internal/useConstant';\nimport useLatest from 'internal/useLatest';\nimport {css} from 'styled-system/css';\n\nexport interface UseTableSelectionConfig<T extends Record<string, unknown>> {\n getIsAllSelected: () => boolean;\n getIsIndeterminate?: () => boolean;\n getIsItemEnabled?: (item: T) => boolean;\n getIsItemSelectable?: (item: T) => boolean;\n getIsItemSelected: (item: T) => boolean;\n onSelectAll: (event: {isAllSelected: boolean}) => void;\n onSelectItem: (event: {isSelected: boolean; item: T}) => void;\n}\n\nconst styles = {\n center: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n selectedRow: css({\n bg: 'bg.selected',\n }),\n} as const;\n\nconst SELECTION_COLUMN_KEY = '__table_selection';\n\ninterface SelectionStore<T extends Record<string, unknown>> {\n getConfig: () => UseTableSelectionConfig<T>;\n notify: () => void;\n subscribe: (listener: () => void) => () => void;\n}\n\nfunction createSelectionStore<T extends Record<string, unknown>>(configRef: {\n current: UseTableSelectionConfig<T>;\n}): SelectionStore<T> {\n const listeners = new Set<() => void>();\n\n return {\n getConfig: () => configRef.current,\n notify: () => {\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe: listener => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nfunction applyRowSelectionStyle(\n element: HTMLTableRowElement,\n isSelected: boolean,\n): void {\n element.classList.toggle(styles.selectedRow, isSelected);\n if (isSelected) {\n element.setAttribute('aria-selected', 'true');\n } else {\n element.removeAttribute('aria-selected');\n }\n}\n\nconst ITEM_SELECTED = 1;\nconst ITEM_SELECTABLE = 2;\nconst ITEM_ENABLED = 4;\n\nfunction getItemSelectionSnapshot<T extends Record<string, unknown>>(\n config: UseTableSelectionConfig<T>,\n item: T,\n): number {\n const isSelected = config.getIsItemSelected(item);\n const isSelectable = config.getIsItemSelectable?.(item) ?? true;\n const isEnabled = config.getIsItemEnabled?.(item) ?? true;\n\n return (\n (isSelected ? ITEM_SELECTED : 0) |\n (isSelectable ? ITEM_SELECTABLE : 0) |\n (isEnabled ? ITEM_ENABLED : 0)\n );\n}\n\nconst SELECT_NONE = 0;\nconst SELECT_INDETERMINATE = 1;\nconst SELECT_ALL = 2;\n\nconst SelectionStoreContext = createContext<SelectionStore<\n Record<string, unknown>\n> | null>(null);\nSelectionStoreContext.displayName = 'TableSelectionStoreContext';\n\nfunction SelectAllCheckbox<T extends Record<string, unknown>>(): ReactNode {\n const store = use(SelectionStoreContext) as SelectionStore<T> | null;\n if (store == null) {\n return null;\n }\n\n return <SelectAllCheckboxInner store={store} />;\n}\n\nfunction SelectAllCheckboxInner<T extends Record<string, unknown>>({\n store,\n}: {\n store: SelectionStore<T>;\n}): ReactNode {\n const getSnapshot = useCallback(() => {\n const config = store.getConfig();\n if (config.getIsAllSelected()) {\n return SELECT_ALL;\n }\n return config.getIsIndeterminate?.() === true\n ? SELECT_INDETERMINATE\n : SELECT_NONE;\n }, [store]);\n const state = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n const isAllSelected = state === SELECT_ALL;\n\n return (\n <CheckboxInput\n isLabelHidden\n label=\"Select all rows\"\n onChange={() => {\n store.getConfig().onSelectAll({\n isAllSelected: !isAllSelected,\n });\n }}\n size=\"sm\"\n value={\n isAllSelected\n ? true\n : state === SELECT_INDETERMINATE\n ? 'indeterminate'\n : false\n }\n />\n );\n}\n\nfunction SelectionCellContent<T extends Record<string, unknown>>({\n item,\n}: {\n item: T;\n}): ReactNode {\n const store = use(SelectionStoreContext) as SelectionStore<T> | null;\n if (store == null) {\n return null;\n }\n\n return <SelectionCellContentInner item={item} store={store} />;\n}\n\nfunction SelectionCellContentInner<T extends Record<string, unknown>>({\n item,\n store,\n}: {\n item: T;\n store: SelectionStore<T>;\n}): ReactNode {\n const getSnapshot = useCallback(\n () => getItemSelectionSnapshot(store.getConfig(), item),\n [item, store],\n );\n const state = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n const isSelected = (state & ITEM_SELECTED) !== 0;\n const isSelectable = (state & ITEM_SELECTABLE) !== 0;\n const isEnabled = (state & ITEM_ENABLED) !== 0;\n\n if (!isSelectable) {\n return null;\n }\n\n return (\n <CheckboxInput\n isDisabled={!isEnabled}\n isLabelHidden\n label=\"Select row\"\n onChange={() => {\n store.getConfig().onSelectItem({isSelected: !isSelected, item});\n }}\n size=\"sm\"\n value={isSelected}\n />\n );\n}\n\nexport function useTableSelection<T extends Record<string, unknown>>(\n config: UseTableSelectionConfig<T>,\n): TablePlugin<T> {\n const configRef = useLatest(config);\n const store = useConstant(() => createSelectionStore(configRef));\n\n // Re-notify subscribers only when the selection config changes (new selected\n // keys, data, or predicates). `config` is memoized upstream by\n // `useTableSelectionState`, so unrelated parent re-renders skip the\n // notification and its downstream snapshot re-evaluations.\n useEffect(() => {\n store.notify();\n }, [config, store]);\n\n const selectionColumn = useMemo(\n (): TableColumn<T> => ({\n header: (\n <div className={styles.center}>\n <SelectAllCheckbox<T> />\n </div>\n ),\n key: SELECTION_COLUMN_KEY,\n renderCell: item => (\n <div className={styles.center}>\n <SelectionCellContent item={item} />\n </div>\n ),\n resizable: false,\n width: pixel(36),\n }),\n [],\n );\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformTableContext(children: ReactNode): ReactNode {\n return (\n <SelectionStoreContext\n value={store as unknown as SelectionStore<Record<string, unknown>>}>\n {children}\n </SelectionStoreContext>\n );\n },\n transformBodyRow(props: BodyRowRenderProps, item: T): BodyRowRenderProps {\n let unsubscribe: (() => void) | null = null;\n const selectionRef: RefCallback<HTMLTableRowElement> = element => {\n unsubscribe?.();\n unsubscribe = null;\n\n if (element == null) {\n return;\n }\n\n applyRowSelectionStyle(\n element,\n store.getConfig().getIsItemSelected(item),\n );\n unsubscribe = store.subscribe(() => {\n if (!element.isConnected) {\n unsubscribe?.();\n unsubscribe = null;\n return;\n }\n applyRowSelectionStyle(\n element,\n store.getConfig().getIsItemSelected(item),\n );\n });\n };\n\n return {\n ...props,\n ref:\n props.ref == null\n ? selectionRef\n : mergeRefs(props.ref, selectionRef),\n };\n },\n transformColumns(columns: TableColumn<T>[]): TableColumn<T>[] {\n return [selectionColumn, ...columns];\n },\n }),\n [selectionColumn, store],\n );\n}\n","import {useCallback, useMemo} from 'react';\nimport type {UseTableSelectionConfig} from 'components/Table/plugins/selection/useTableSelection';\n\nexport interface UseTableSelectionStateConfig<\n T extends Record<string, unknown>,\n> {\n data: T[];\n getIsItemEnabled?: (item: T) => boolean;\n getIsItemSelectable?: (item: T) => boolean;\n idKey: (keyof T & string) | ((item: T) => string);\n selectedKeys: Set<string>;\n setSelectedKeys: React.Dispatch<React.SetStateAction<Set<string>>>;\n}\n\nexport interface UseTableSelectionStateResult<\n T extends Record<string, unknown>,\n> {\n selectionConfig: UseTableSelectionConfig<T>;\n}\n\nconst stableTrue = () => true;\n\nexport function useTableSelectionState<T extends Record<string, unknown>>({\n data,\n getIsItemEnabled = stableTrue,\n getIsItemSelectable = stableTrue,\n idKey,\n selectedKeys,\n setSelectedKeys,\n}: UseTableSelectionStateConfig<T>): UseTableSelectionStateResult<T> {\n const getId = useCallback(\n (item: T): string =>\n typeof idKey === 'function' ? idKey(item) : String(item[idKey]),\n [idKey],\n );\n\n const getIsActionable = useCallback(\n (item: T) => getIsItemSelectable(item) && getIsItemEnabled(item),\n [getIsItemEnabled, getIsItemSelectable],\n );\n const actionableIDs = useMemo(\n () => new Set(data.filter(getIsActionable).map(getId)),\n [data, getId, getIsActionable],\n );\n const frozenSelectedIDs = useMemo(() => {\n const frozen = new Set<string>();\n for (const id of selectedKeys) {\n if (!actionableIDs.has(id)) {\n frozen.add(id);\n }\n }\n return frozen;\n }, [actionableIDs, selectedKeys]);\n const allSelectableIDs = useMemo(\n () => new Set([...selectedKeys, ...actionableIDs]),\n [actionableIDs, selectedKeys],\n );\n\n const onSelectAll = useCallback(\n ({isAllSelected}: {isAllSelected: boolean}) => {\n setSelectedKeys(isAllSelected ? allSelectableIDs : frozenSelectedIDs);\n },\n [allSelectableIDs, frozenSelectedIDs, setSelectedKeys],\n );\n const onSelectItem = useCallback(\n ({isSelected, item}: {isSelected: boolean; item: T}) => {\n setSelectedKeys(previous => {\n const next = new Set(previous);\n const id = getId(item);\n if (isSelected) {\n next.add(id);\n } else {\n next.delete(id);\n }\n return next;\n });\n },\n [getId, setSelectedKeys],\n );\n const getIsAllSelected = useCallback(\n () =>\n allSelectableIDs.size > 0 && allSelectableIDs.size === selectedKeys.size,\n [allSelectableIDs, selectedKeys],\n );\n const getIsIndeterminate = useCallback(() => {\n const selectedActionableCount = data.filter(\n item => getIsActionable(item) && selectedKeys.has(getId(item)),\n ).length;\n return (\n selectedActionableCount > 0 &&\n selectedActionableCount < actionableIDs.size\n );\n }, [actionableIDs.size, data, getId, getIsActionable, selectedKeys]);\n\n const selectionConfig = useMemo(\n (): UseTableSelectionConfig<T> => ({\n getIsAllSelected,\n getIsIndeterminate,\n getIsItemEnabled,\n getIsItemSelectable,\n getIsItemSelected: item => selectedKeys.has(getId(item)),\n onSelectAll,\n onSelectItem,\n }),\n [\n getId,\n getIsAllSelected,\n getIsIndeterminate,\n getIsItemEnabled,\n getIsItemSelectable,\n onSelectAll,\n onSelectItem,\n selectedKeys,\n ],\n );\n\n return {selectionConfig};\n}\n","import {ArrowDown, ArrowUp, ChevronsUpDown} from 'lucide-react';\nimport {useMemo, type ReactNode} from 'react';\nimport {Icon} from 'components/Icon';\nimport type {\n HeaderCellRenderProps,\n TableColumn,\n TablePlugin,\n} from 'components/Table/types';\nimport {css} from 'styled-system/css';\n\nexport type TableSortDirection = 'ascending' | 'descending';\n\nexport interface TableSortEntry<TSortKey extends string = string> {\n direction: TableSortDirection;\n sortKey: TSortKey;\n}\n\nexport type TableSortState<TSortKey extends string = string> =\n TableSortEntry<TSortKey>[];\n\nexport interface UseTableSortableConfig<TSortKey extends string = string> {\n hasUnsortedState?: boolean;\n isMultiSortEnabled?: boolean;\n onSortChange: (sort: TableSortState<TSortKey>) => void;\n sort: TableSortState<TSortKey>;\n}\n\nconst styles = {\n button: css({\n display: 'flex',\n alignItems: 'center',\n gap: '1',\n w: 'full',\n h: 'full',\n p: 0,\n m: 0,\n borderWidth: 0,\n borderRadius: 'sm',\n bg: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n font: 'inherit',\n textAlign: 'inherit',\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffset',\n },\n '&:is(:hover, [data-hover]) [data-table-sort-icon-state=\"inactive\"], &:is(:focus-visible, [data-focus-visible]) [data-table-sort-icon-state=\"inactive\"]':\n {\n opacity: 1,\n },\n }),\n icon: css({\n display: 'inline-flex',\n flexShrink: 0,\n color: 'fg.muted',\n }),\n iconInactive: css({\n opacity: 0.35,\n }),\n iconActive: css({\n color: 'primary',\n }),\n label: css({\n minW: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n rank: css({\n color: 'primary',\n fontSize: '2xs',\n lineHeight: 1,\n }),\n} as const;\n\nfunction resolveSortKey<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string | null {\n if (!column.sortable) {\n return null;\n }\n return column.sortable === true\n ? column.key\n : (column.sortable.sortKey ?? column.key);\n}\n\nfunction getHeaderLabel<T extends Record<string, unknown>>(\n column: TableColumn<T>,\n): string {\n return typeof column.header === 'string' ? column.header : column.key;\n}\n\nfunction getNextDirection(\n current: TableSortDirection | null,\n hasUnsortedState: boolean,\n): TableSortDirection | null {\n if (current == null) {\n return 'ascending';\n }\n if (current === 'ascending') {\n return 'descending';\n }\n return hasUnsortedState ? null : 'ascending';\n}\n\nfunction SortHeaderButton<T extends Record<string, unknown>>({\n children,\n column,\n config,\n}: {\n children: ReactNode;\n column: TableColumn<T>;\n config: UseTableSortableConfig;\n}): React.JSX.Element {\n const sortKey = resolveSortKey(column) ?? '';\n const entryIndex = config.sort.findIndex(entry => entry.sortKey === sortKey);\n const entry = entryIndex >= 0 ? config.sort[entryIndex] : null;\n const direction = entry?.direction ?? null;\n const rank =\n config.isMultiSortEnabled === true &&\n config.sort.length > 1 &&\n entryIndex >= 0\n ? entryIndex + 1\n : null;\n const SortIcon =\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ChevronsUpDown;\n const label = getHeaderLabel(column);\n const ariaLabel =\n direction == null\n ? `Sort by ${label}`\n : `Sort by ${label}, sorted ${direction}${\n rank == null ? '' : `, priority ${rank} of ${config.sort.length}`\n }`;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const nextConfig = config;\n const isMultiSort =\n event.shiftKey && nextConfig.isMultiSortEnabled === true;\n const allowUnsorted = nextConfig.hasUnsortedState ?? true;\n\n if (isMultiSort) {\n const index = nextConfig.sort.findIndex(sort => sort.sortKey === sortKey);\n if (index >= 0) {\n const nextDirection = getNextDirection(\n nextConfig.sort[index].direction,\n allowUnsorted,\n );\n const nextSort = [...nextConfig.sort];\n if (nextDirection == null) {\n nextSort.splice(index, 1);\n } else {\n nextSort[index] = {...nextSort[index], direction: nextDirection};\n }\n nextConfig.onSortChange(nextSort);\n } else {\n nextConfig.onSortChange([\n ...nextConfig.sort,\n {direction: 'ascending', sortKey},\n ]);\n }\n return;\n }\n\n const currentEntry = nextConfig.sort.find(sort => sort.sortKey === sortKey);\n const nextDirection = getNextDirection(\n currentEntry?.direction ?? null,\n allowUnsorted,\n );\n nextConfig.onSortChange(\n nextDirection == null ? [] : [{direction: nextDirection, sortKey}],\n );\n };\n\n return (\n <button\n aria-label={ariaLabel}\n className={styles.button}\n onClick={handleClick}\n type=\"button\">\n <span className={styles.label}>{children}</span>\n <span\n className={`${styles.icon} ${\n direction == null ? styles.iconInactive : styles.iconActive\n }`}\n data-table-sort-icon-state={direction == null ? 'inactive' : 'active'}\n data-testid={`table-sort-icon-${sortKey}`}>\n <Icon icon={SortIcon} size=\"sm\" />\n </span>\n {rank == null ? null : (\n <span aria-hidden=\"true\" className={styles.rank}>\n {rank}\n </span>\n )}\n </button>\n );\n}\n\nexport function useTableSortable<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n>(config: UseTableSortableConfig<TSortKey>): TablePlugin<T> {\n const sortableConfig = config as unknown as UseTableSortableConfig;\n\n return useMemo(\n (): TablePlugin<T> => ({\n transformHeaderCell(\n props: HeaderCellRenderProps,\n column: TableColumn<T>,\n ): HeaderCellRenderProps {\n const sortKey = resolveSortKey(column);\n if (sortKey == null) {\n return props;\n }\n const entry = sortableConfig.sort.find(\n sort => sort.sortKey === sortKey,\n );\n return {\n ...props,\n content: (\n <SortHeaderButton column={column} config={sortableConfig}>\n {props.content}\n </SortHeaderButton>\n ),\n htmlProps: {\n ...props.htmlProps,\n ...(entry == null ? {} : {'aria-sort': entry.direction}),\n },\n };\n },\n }),\n [sortableConfig],\n );\n}\n","import {Temporal} from '@js-temporal/polyfill';\nimport {useCallback, useMemo, useState} from 'react';\nimport type {\n TableSortState,\n UseTableSortableConfig,\n} from 'components/Table/plugins/sortable/useTableSortable';\n\nexport type TableSortComparator<T> = (a: T, b: T) => number;\n\nexport interface UseTableSortableStateConfig<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n> {\n comparators?: Partial<Record<TSortKey, TableSortComparator<T>>>;\n data: T[];\n defaultSort?: TableSortState<TSortKey>;\n hasUnsortedState?: boolean;\n isMultiSortEnabled?: boolean;\n onSortChange?: (sort: TableSortState<TSortKey>) => void;\n sort?: TableSortState<TSortKey>;\n}\n\nexport interface UseTableSortableStateResult<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n> {\n applySort: (data: T[]) => T[];\n sort: TableSortState<TSortKey>;\n sortConfig: UseTableSortableConfig<TSortKey>;\n sortedData: T[];\n}\n\nfunction stringifySortable(value: unknown): string {\n if (\n value instanceof Temporal.Instant ||\n value instanceof Temporal.PlainDate ||\n value instanceof Temporal.PlainDateTime ||\n value instanceof Temporal.PlainTime ||\n value instanceof Temporal.ZonedDateTime\n ) {\n return value.toString();\n }\n if (\n typeof value === 'bigint' ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return String(value);\n }\n return '';\n}\n\nfunction defaultCompare<T extends Record<string, unknown>>(\n a: T,\n b: T,\n sortKey: string,\n): number {\n const left = a[sortKey];\n const right = b[sortKey];\n if (left == null && right == null) {\n return 0;\n }\n if (left == null) {\n return 1;\n }\n if (right == null) {\n return -1;\n }\n if (typeof left === 'number' && typeof right === 'number') {\n return left - right;\n }\n return stringifySortable(left).localeCompare(\n stringifySortable(right),\n undefined,\n {\n numeric: true,\n },\n );\n}\n\nexport function useTableSortableState<\n T extends Record<string, unknown>,\n TSortKey extends string = string,\n>({\n hasUnsortedState,\n comparators,\n data,\n defaultSort = [],\n isMultiSortEnabled,\n onSortChange: controlledOnSortChange,\n sort: controlledSort,\n}: UseTableSortableStateConfig<T, TSortKey>): UseTableSortableStateResult<\n T,\n TSortKey\n> {\n const [uncontrolledSort, setUncontrolledSort] =\n useState<TableSortState<TSortKey>>(defaultSort);\n const sort = controlledSort ?? uncontrolledSort;\n const onSortChange = useCallback(\n (nextSort: TableSortState<TSortKey>) => {\n if (controlledSort == null) {\n setUncontrolledSort(nextSort);\n }\n controlledOnSortChange?.(nextSort);\n },\n [controlledOnSortChange, controlledSort],\n );\n\n const applySort = useCallback(\n (items: T[]): T[] => {\n if (sort.length === 0) {\n return items;\n }\n return [...items].sort((a, b) => {\n for (const entry of sort) {\n const customCompare = comparators?.[entry.sortKey];\n const result =\n customCompare == null\n ? defaultCompare(a, b, entry.sortKey)\n : customCompare(a, b);\n if (result !== 0) {\n return entry.direction === 'ascending' ? result : -result;\n }\n }\n return 0;\n });\n },\n [comparators, sort],\n );\n const sortedData = useMemo(() => applySort(data), [applySort, data]);\n const sortConfig = useMemo(\n (): UseTableSortableConfig<TSortKey> => ({\n hasUnsortedState,\n isMultiSortEnabled,\n onSortChange,\n sort,\n }),\n [hasUnsortedState, isMultiSortEnabled, onSortChange, sort],\n );\n\n return {applySort, sort, sortConfig, sortedData};\n}\n"]}
|