Skip to content

Commit 8842595

Browse files
Add color-scheme selection component (Comcast#3825)
* Add an open to select color-scheme * Add label * Rename * Simplify * Update src/style/core.ts Co-authored-by: Nicolas Stepien <567105+nstepien@users.noreply.github.com> * Add space --------- Co-authored-by: Nicolas Stepien <567105+nstepien@users.noreply.github.com>
1 parent 3c3b617 commit 8842595

3 files changed

Lines changed: 46 additions & 49 deletions

File tree

src/style/core.ts

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,6 @@ import { css } from '@linaria/core';
33
import { cell } from './cell';
44
import { bottomSummaryRowClassname, row, topSummaryRowClassname } from './row';
55

6-
const lightTheme = `
7-
--rdg-color: #000;
8-
--rdg-border-color: #ddd;
9-
--rdg-summary-border-color: #aaa;
10-
--rdg-background-color: hsl(0deg 0% 100%);
11-
--rdg-header-background-color: hsl(0deg 0% 97.5%);
12-
--rdg-header-draggable-background-color: hsl(0deg 0% 90.5%);
13-
--rdg-row-hover-background-color: hsl(0deg 0% 96%);
14-
--rdg-row-selected-background-color: hsl(207deg 76% 92%);
15-
--rdg-row-selected-hover-background-color: hsl(207deg 76% 88%);
16-
17-
--rdg-checkbox-focus-color: hsl(207deg 100% 69%);
18-
`;
19-
20-
const darkTheme = `
21-
--rdg-color: #ddd;
22-
--rdg-border-color: #444;
23-
--rdg-summary-border-color: #555;
24-
--rdg-background-color: hsl(0deg 0% 13%);
25-
--rdg-header-background-color: hsl(0deg 0% 10.5%);
26-
--rdg-header-draggable-background-color: hsl(0deg 0% 17.5%);
27-
--rdg-row-hover-background-color: hsl(0deg 0% 9%);
28-
--rdg-row-selected-background-color: hsl(207deg 76% 42%);
29-
--rdg-row-selected-hover-background-color: hsl(207deg 76% 38%);
30-
31-
--rdg-checkbox-focus-color: hsl(207deg 100% 89%);
32-
`;
33-
346
const root = css`
357
@layer rdg.Defaults {
368
*,
@@ -41,21 +13,39 @@ const root = css`
4113
}
4214
4315
@layer rdg.Root {
44-
${lightTheme}
4516
--rdg-selection-width: 2px;
4617
--rdg-selection-color: hsl(207, 75%, 66%);
4718
--rdg-font-size: 14px;
4819
--rdg-cell-frozen-box-shadow: 2px 0 5px -2px rgba(136, 136, 136, 0.3);
4920
--rdg-border-width: 1px;
5021
--rdg-summary-border-width: calc(var(--rdg-border-width) * 2);
22+
--rdg-color: light-dark(#000, #ddd);
23+
--rdg-border-color: light-dark(#ddd, #444);
24+
--rdg-summary-border-color: light-dark(#aaa, #555);
25+
--rdg-background-color: light-dark(hsl(0deg 0% 100%), hsl(0deg 0% 13%));
26+
--rdg-header-background-color: light-dark(hsl(0deg 0% 97.5%), hsl(0deg 0% 10.5%));
27+
--rdg-header-draggable-background-color: light-dark(hsl(0deg 0% 90.5%), hsl(0deg 0% 17.5%));
28+
--rdg-row-hover-background-color: light-dark(hsl(0deg 0% 96%), hsl(0deg 0% 9%));
29+
--rdg-row-selected-background-color: light-dark(hsl(207deg 76% 92%), hsl(207deg 76% 42%));
30+
--rdg-row-selected-hover-background-color: light-dark(hsl(207deg 76% 88%), hsl(207deg 76% 38%));
31+
--rdg-checkbox-focus-color: hsl(207deg 100% 69%);
32+
33+
&.rdg-dark {
34+
--rdg-color-scheme: dark;
35+
}
36+
37+
&.rdg-light {
38+
--rdg-color-scheme: light;
39+
}
40+
41+
color-scheme: var(--rdg-color-scheme, light dark);
5142
5243
&:dir(rtl) {
5344
--rdg-cell-frozen-box-shadow: -2px 0 5px -2px rgba(136, 136, 136, 0.3);
5445
}
5546
5647
display: grid;
5748
58-
color-scheme: var(--rdg-color-scheme, light dark);
5949
accent-color: light-dark(hsl(207deg 100% 29%), hsl(207deg 100% 79%));
6050
6151
/* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context */
@@ -78,21 +68,6 @@ const root = css`
7868
grid-row: 1/-1;
7969
}
8070
81-
&.rdg-dark {
82-
--rdg-color-scheme: dark;
83-
${darkTheme}
84-
}
85-
86-
&.rdg-light {
87-
--rdg-color-scheme: light;
88-
}
89-
90-
@media (prefers-color-scheme: dark) {
91-
&:not(.rdg-light) {
92-
${darkTheme}
93-
}
94-
}
95-
9671
> :nth-last-child(1 of .${topSummaryRowClassname}) {
9772
> .${cell} {
9873
border-block-end: var(--rdg-summary-border-width) solid var(--rdg-summary-border-color);

website/Nav.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useId } from 'react';
1+
import { useId, useState } from 'react';
22
import { Link } from '@tanstack/react-router';
33
import { css } from '@linaria/core';
44

@@ -46,10 +46,12 @@ const navClassname = css`
4646
}
4747
`;
4848

49-
const rtlCheckboxClassname = css`
49+
const labelClassname = css`
5050
padding-inline-start: 8px;
5151
`;
5252

53+
export type Theme = 'light' | 'dark' | 'system';
54+
5355
interface Props {
5456
direction: Direction;
5557
onDirectionChange: (direction: Direction) => void;
@@ -58,10 +60,21 @@ interface Props {
5860
export default function Nav({ direction, onDirectionChange }: Props) {
5961
const demosNavId = useId();
6062
const linksNavId = useId();
63+
const [theme, setTheme] = useState<Theme>('system');
6164

6265
return (
6366
<header className={headerClassname}>
6467
<h1>react-data-grid</h1>
68+
69+
<label className={labelClassname}>
70+
Theme{' '}
71+
<select value={theme} onChange={(e) => setTheme(e.target.value as Theme)}>
72+
<option value="light">Light</option>
73+
<option value="dark">Dark</option>
74+
<option value="system">System</option>
75+
</select>
76+
</label>
77+
6578
<nav aria-labelledby={demosNavId} className={navClassname}>
6679
<h2 id={demosNavId}>Demos</h2>
6780
<Link to="/CommonFeatures">Common Features</Link>
@@ -119,7 +132,7 @@ export default function Nav({ direction, onDirectionChange }: Props) {
119132
</nav>
120133

121134
<h2>Direction</h2>
122-
<label className={rtlCheckboxClassname}>
135+
<label className={labelClassname}>
123136
<input
124137
type="checkbox"
125138
checked={direction === 'rtl'}

website/root.css

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,17 @@ body {
66
}
77

88
:root {
9-
color-scheme: light dark;
9+
&:has([value='light']:checked) {
10+
--rdg-color-scheme: light;
11+
}
1012

13+
&:has([value='dark']:checked) {
14+
--rdg-color-scheme: dark;
15+
}
16+
}
17+
18+
body {
19+
color-scheme: var(--rdg-color-scheme, light dark);
1120
background-color: light-dark(#fff, hsl(0deg 0% 10%));
1221
color: light-dark(#111, #fff);
1322
}

0 commit comments

Comments
 (0)