Skip to content

Commit d1b79d3

Browse files
Support group header hover and regular bg (#927)
* feat: support group header hover and regular bg * chore: remove storybook override * Fix merge conflicts * Revert * Update implementation * Minor change --------- Co-authored-by: lukasmasuch <[email protected]>
1 parent 991115f commit d1b79d3

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

packages/core/API.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,8 @@ The data grid uses the `Theme` provided to the DataEditer in the `theme` prop. T
371371
| bgHeader | string | --gdg-bg-header | The header background color |
372372
| bgHeaderHasFocus | string | --gdg-bg-header-has | The header background color when its column contains the selected cell |
373373
| bgHeaderHovered | string | --gdg-bg-header-hovered | The header background color when it is hovered |
374+
| bgGroupHeader | string \| undefined | --gdg-bg-group-header | The group header background color, if none provided the `bgHeader` is used instead. |
375+
| bgGroupHeaderHovered | string \| undefined | --gdg-bg-group-header-hovered | The group header background color when it is hovered, if none provided the `bgHeaderHovered` is used instead. |
374376
| bgBubble | string | --gdg-bg-bubble | The background color used in bubbles |
375377
| bgBubbleSelected | string | --gdg-bg-bubble-selected | The background color used in bubbles when the cell is selected |
376378
| bgSearchResult | string | --gdg-bg-search-result | The background color used for cells which match the search string |

packages/core/src/common/styles.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export function makeCSSStyle(theme: Theme): Record<string, string> {
1717
"--gdg-fg-icon-header": theme.fgIconHeader,
1818
"--gdg-text-header": theme.textHeader,
1919
"--gdg-text-group-header": theme.textGroupHeader ?? theme.textHeader,
20+
"--gdg-bg-group-header": theme.bgGroupHeader ?? theme.bgHeader,
21+
"--gdg-bg-group-header-hovered": theme.bgGroupHeaderHovered ?? theme.bgHeaderHovered,
2022
"--gdg-text-header-selected": theme.textHeaderSelected,
2123
"--gdg-bg-cell": theme.bgCell,
2224
"--gdg-bg-cell-medium": theme.bgCellMedium,
@@ -60,6 +62,8 @@ export interface Theme {
6062
fgIconHeader: string;
6163
textHeader: string;
6264
textGroupHeader?: string;
65+
bgGroupHeader?: string;
66+
bgGroupHeaderHovered?: string;
6367
textHeaderSelected: string;
6468
bgCell: string;
6569
bgCellMedium: string;

packages/core/src/docs/08-theming.stories.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,9 @@ The global theme is provided by the DataEditor by default and can be overriden b
254254
| bgIconHeader | --gdg-bg-icon-header | string | The background color for header icons |
255255
| fgIconHeader | --gdg-fg-icon-header | string | The foreground color for header icons |
256256
| textHeader | --gdg-text-header | string | The header text color |
257-
| textGroupHeader | --gdg-text-group-header | string \\| undefined | The group header text color, if none provided the \`textHeader\` is used instead. |
257+
| bgGroupHeader | --gdg-bg-group-header | string | The group header background color, if none provided the \`bgHeader\` is used instead. |
258+
| bgGroupHeaderHovered | --gdg-bg-group-header-hovered | string | The group header background color when it is hovered, if none provided the \`bgHeaderHovered\` is used instead. |
259+
| textGroupHeader | --gdg-text-group-header | string | The group header text color, if none provided the \`textHeader\` is used instead. |
258260
| textHeaderSelected | --gdg-text-header-selected | string | The text color used for selected headers |
259261
| bgCell | --gdg-bg-cell | string | The primary background color of the data grid. |
260262
| bgCellMedium | --gdg-bg-cell-medium | string | Used for disabled or otherwise off colored cells. |
@@ -281,10 +283,10 @@ If an option is missing from any theme it will be filled in with the default the
281283
</Marked>
282284
<Highlight>
283285
{`
284-
return <DataEditor
286+
return <DataEditor
285287
theme={{
286288
bgCell: "#F2F9FF"
287-
}}
289+
}}
288290
getCellContent={getContent} columns={columns} rows={data.length} />
289291
`}
290292
</Highlight>
@@ -376,7 +378,7 @@ const getContent = React.useCallback((cell: Item): GridCell => {
376378
textDark: "#FF0000",
377379
}
378380
}
379-
381+
380382
const d = getDataForCell(col, row);
381383
return {
382384
kind: GridCellKind.Text,

packages/core/src/internal/data-grid/render/data-grid-render.header.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import type { HoverValues } from "../animation-manager.js";
55
import type { CellSet } from "../cell-set.js";
66
import { withAlpha } from "../color-parser.js";
77
import type { SpriteManager, SpriteVariant } from "../data-grid-sprites.js";
8-
import { type DrawHeaderCallback, type Rectangle, GridColumnMenuIcon, type GridSelection } from "../data-grid-types.js";
8+
import { GridColumnMenuIcon, type DrawHeaderCallback, type GridSelection, type Rectangle } from "../data-grid-types.js";
99
import {
1010
drawMenuDots,
11+
getMeasuredTextCache,
1112
getMiddleCenterBias,
13+
measureTextCached,
1214
roundedPoly,
1315
type MappedGridColumn,
14-
measureTextCached,
15-
getMeasuredTextCache,
1616
} from "./data-grid-lib.js";
1717
import type { GroupDetails, GroupDetailsCallback } from "./data-grid-render.cells.js";
1818
import { walkColumns, walkGroups } from "./data-grid-render.walk.js";
@@ -185,8 +185,10 @@ export function drawGroups(
185185
const groupTheme =
186186
group?.overrideTheme === undefined ? theme : mergeAndRealizeTheme(theme, group.overrideTheme);
187187
const isHovered = hRow === -2 && hCol !== undefined && hCol >= span[0] && hCol <= span[1];
188+
const fillColor = isHovered
189+
? groupTheme.bgGroupHeaderHovered ?? groupTheme.bgHeaderHovered
190+
: groupTheme.bgGroupHeader ?? groupTheme.bgHeader;
188191

189-
const fillColor = isHovered ? groupTheme.bgHeaderHovered : groupTheme.bgHeader;
190192
if (fillColor !== theme.bgHeader) {
191193
ctx.fillStyle = fillColor;
192194
ctx.fill();

0 commit comments

Comments
 (0)