Skip to content

Commit c6aa695

Browse files
itspradeclaude
andcommitted
refactor(themes): drop deep-dark, default to bloom, flatten button + sidebar chrome
- Remove deep-dark palette + types + switcher entry + globals selectors; dark covers the same need. - Default theme now bloom (existing localStorage choices preserved); legacy tailor-dark id remaps to dark. - Strip tactile button overrides; cream/bloom/dark buttons inherit default shadcn Button styling. - Drop sidebar right-edge divider (border-r/border-l and inset-variant border-x). - Dark --sidebar matches --background; sidebar blends with app surface. - Unify --destructive at #dc2626 across light/cream/bloom for brand-consistent red. - Neutral badge uses Tailwind neutral palette so lavender --secondary doesn't bleed in. - Outline button transparent on cream/bloom only (rule sits in @layer utilities to beat Tailwind's astw:bg-background which also lives in utilities). - Secondary button hover now brightness-based (visible regardless of token value). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 7e4cb07 commit c6aa695

11 files changed

Lines changed: 45 additions & 394 deletions

File tree

docs/api/use-theme.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ React hook to access and control the current appearance theme.
1212
Exported types:
1313

1414
```typescript
15-
export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system";
15+
export type Theme = "light" | "dark" | "cream" | "bloom" | "system";
1616

17-
export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom";
17+
export type ResolvedTheme = "light" | "dark" | "cream" | "bloom";
1818

1919
export type ThemeOption = { readonly value: Theme; readonly label: string };
2020

@@ -37,12 +37,12 @@ const useTheme: () => {
3737
### `theme`
3838

3939
- **Type:** `Theme`
40-
- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not cream, bloom, or deep-dark).
40+
- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not cream or bloom).
4141

4242
### `resolvedTheme`
4343

4444
- **Type:** `ResolvedTheme`
45-
- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`cream`**, **`bloom`**, and **`deep-dark`** are never produced by **`system`**; pick them explicitly with **`setTheme`**.
45+
- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`cream`** and **`bloom`** are never produced by **`system`**; pick them explicitly with **`setTheme`**.
4646

4747
When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-theme`** set to this value and a **`light`** / **`dark`** class for Tailwind **`dark`** variant compatibility.
4848

@@ -51,7 +51,7 @@ When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-th
5151
- **Type:** `(theme: Theme) => void`
5252
- **Description:** Set the theme. Persisted to **`localStorage`** (key **`appshell-ui-theme`** when using AppShell’s built-in provider).
5353

54-
Previously saved ids **`tailor-light`**, **`tailor-bloom`**, **`tailor-dark`** are mapped on read to **`cream`**, **`bloom`**, **`deep-dark`** (see **`LEGACY_THEME_IDS`** in **`theme-context.tsx`**).
54+
Previously saved ids **`tailor-light`**, **`tailor-bloom`**, **`tailor-dark`** are mapped on read to **`cream`**, **`bloom`**, **`dark`** (see **`LEGACY_THEME_IDS`** in **`theme-context.tsx`**).
5555

5656
## Usage
5757

@@ -114,13 +114,12 @@ function CustomThemeList() {
114114

115115
### Logo or assets by lightness
116116

117-
Use **`resolvedTheme`** and treat **`light`**, **`cream`**, and **`bloom`** like “light” palettes and **`dark`** and **`deep-dark`** like “dark” for monochrome assets:
117+
Use **`resolvedTheme`** and treat **`light`**, **`cream`**, and **`bloom`** like “light” palettes and **`dark`** like “dark” for monochrome assets:
118118

119119
```typescript
120120
function Logo() {
121121
const { resolvedTheme } = useTheme();
122-
const darkish =
123-
resolvedTheme === "dark" || resolvedTheme === "deep-dark";
122+
const darkish = resolvedTheme === "dark";
124123

125124
return <img src={darkish ? "/logo-dark.svg" : "/logo-light.svg"} alt="Logo" />;
126125
}

docs/concepts/styling-theming.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ AppShell ships **five** named semantic palettes controlled by **`data-theme`** o
3636
| `dark` | Default neutral dark |
3737
| `cream` | Tailor brand — cream shell, violet accents |
3838
| `bloom` | Lavender shell (**Bloom**) and cream accents |
39-
| `deep-dark` | Tailor brand — near-black tuning surface |
4039

41-
**`system`** resolves to **`light`** or **`dark`** only — not **`cream`**, **`bloom`**, or **`deep-dark`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**.
40+
**`system`** resolves to **`light`** or **`dark`** only — not **`cream`** or **`bloom`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**.
4241

4342
Semantic tokens (**`--background`**, **`--primary`**, **`--border`**, sidebar tokens, **`--semantic-shadow-*`**, statuses, **`--radius`**, …) live in **`theme.css`**; override there or in host CSS keyed off **`html[data-theme='…']`**.
4443

packages/core/__snapshots__/src__components__button.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ exports[`Button > snapshots > link variant 1`] = `"<button type="button" data-sl
1818

1919
exports[`Button > snapshots > outline variant 1`] = `"<button type="button" data-slot="button" class="astw:inline-flex astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&amp;_svg]:pointer-events-none astw:[&amp;_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&amp;_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive astw:border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50 astw:dark:hover:text-foreground astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3">Outline</button>"`;
2020

21-
exports[`Button > snapshots > secondary variant 1`] = `"<button type="button" data-slot="button" class="astw:inline-flex astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&amp;_svg]:pointer-events-none astw:[&amp;_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&amp;_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80 astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3">Secondary</button>"`;
21+
exports[`Button > snapshots > secondary variant 1`] = `"<button type="button" data-slot="button" class="astw:inline-flex astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&amp;_svg]:pointer-events-none astw:[&amp;_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&amp;_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:brightness-95 astw:dark:hover:brightness-110 astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3">Secondary</button>"`;
2222

2323
exports[`Button > snapshots > small size 1`] = `"<button type="button" data-slot="button" class="astw:inline-flex astw:items-center astw:justify-center astw:whitespace-nowrap astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&amp;_svg]:pointer-events-none astw:[&amp;_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&amp;_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90 astw:h-8 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5">Small</button>"`;
2424

packages/core/src/assets/theme.css

Lines changed: 7 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@
7373
--chart-3: rgba(245, 158, 11, 1);
7474
--chart-4: rgba(168, 85, 247, 1);
7575
--chart-5: rgba(244, 63, 94, 1);
76-
--sidebar: rgba(23, 23, 23, 1);
76+
/* Match --background so sidebar blends with the app surface. */
77+
--sidebar: rgba(10, 10, 10, 1);
7778
--sidebar-foreground: rgba(250, 250, 250, 1);
7879
--sidebar-primary: rgba(29, 78, 216, 1);
7980
--sidebar-primary-foreground: rgba(250, 250, 250, 1);
@@ -113,7 +114,8 @@ html[data-theme="cream"] {
113114
--muted-foreground: rgba(16, 18, 43, 0.72);
114115
--accent: rgba(226, 212, 254, 1);
115116
--accent-foreground: rgba(1, 55, 66, 1);
116-
--destructive: rgba(185, 28, 28, 1);
117+
/* Destructive matches default light theme so the brand red stays consistent across light/cream/bloom. */
118+
--destructive: rgba(220, 38, 38, 1);
117119
--destructive-foreground: rgba(254, 242, 242, 1);
118120
--border: rgba(0, 0, 0, 0.08);
119121
--input: rgba(0, 0, 0, 0.08);
@@ -166,9 +168,9 @@ html[data-theme="bloom"] {
166168
--muted-foreground: rgba(16, 18, 43, 0.72);
167169
--accent: rgba(248, 243, 228, 1);
168170
--accent-foreground: rgba(16, 18, 43, 1);
169-
/* Softer reds than cream — less harsh against lavender gradient / cream fills */
170-
--destructive: rgba(176, 45, 64, 1);
171-
--destructive-foreground: rgba(255, 251, 252, 1);
171+
/* Destructive matches default light theme so the brand red stays consistent across light/cream/bloom. */
172+
--destructive: rgba(220, 38, 38, 1);
173+
--destructive-foreground: rgba(254, 242, 242, 1);
172174
--border: rgba(0, 0, 0, 0.08);
173175
--input: rgba(0, 0, 0, 0.08);
174176
--ring: rgba(83, 90, 232, 0.45);
@@ -199,61 +201,6 @@ html[data-theme="bloom"] {
199201
--semantic-shadow-lg: 0 10px 15px -3px rgb(16 18 43 / 0.12), 0 4px 6px -4px rgb(83 90 232 / 0.1);
200202
}
201203

202-
/**
203-
* Tailor brand — dark palette (`deep-dark`): near-black shell; same primaries / secondaries as cream.
204-
*/
205-
html[data-theme="deep-dark"] {
206-
color-scheme: dark;
207-
--background: rgba(10, 10, 11, 1);
208-
--foreground: rgba(237, 238, 242, 1);
209-
--card: rgba(18, 18, 21, 1);
210-
--card-foreground: rgba(237, 238, 242, 1);
211-
--popover: rgba(22, 22, 26, 1);
212-
--popover-foreground: rgba(237, 238, 242, 1);
213-
/* Match cream — Primary #535AE8 */
214-
--primary: rgba(83, 90, 232, 1);
215-
--primary-foreground: rgba(255, 255, 255, 1);
216-
/* Light violet + dark green text (same pairing as cream) */
217-
--secondary: rgba(226, 212, 254, 1);
218-
--secondary-foreground: rgba(1, 55, 66, 1);
219-
--muted: rgba(28, 28, 34, 1);
220-
--muted-foreground: rgba(163, 167, 180, 1);
221-
--accent: rgba(226, 212, 254, 1);
222-
--accent-foreground: rgba(1, 55, 66, 1);
223-
--destructive: rgba(185, 28, 28, 1);
224-
--destructive-foreground: rgba(254, 242, 242, 1);
225-
--border: rgba(255, 255, 255, 0.1);
226-
--input: rgba(255, 255, 255, 0.12);
227-
--ring: rgba(83, 90, 232, 0.45);
228-
--chart-1: rgba(83, 90, 232, 1);
229-
--chart-2: rgba(0, 151, 156, 1);
230-
--chart-3: rgba(1, 55, 66, 1);
231-
--chart-4: rgba(110, 95, 195, 1);
232-
--chart-5: rgba(217, 119, 6, 1);
233-
--radius: 1rem;
234-
--sidebar: rgba(10, 10, 11, 1);
235-
--sidebar-foreground: rgba(237, 238, 242, 1);
236-
--sidebar-primary: rgba(83, 90, 232, 1);
237-
--sidebar-primary-foreground: rgba(255, 255, 255, 1);
238-
/*
239-
* Hover + current row: dark elevated chip on near-black sidebar — light label.
240-
* (Lavender wash reads as a “light tab” here; a muted lift matches dark UI better.)
241-
*/
242-
--sidebar-accent: rgba(42, 43, 54, 1);
243-
--sidebar-accent-foreground: rgba(238, 239, 246, 1);
244-
--sidebar-border: rgba(255, 255, 255, 0.1);
245-
--sidebar-ring: rgba(83, 90, 232, 0.45);
246-
--status-default: rgba(144, 150, 168, 0.88);
247-
--status-neutral: #00979c;
248-
--status-completed: #00979c;
249-
--status-attention: #d97706;
250-
--status-danger: #dc2626;
251-
--semantic-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.42);
252-
--semantic-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.42), 0 1px 2px -1px rgb(0 0 0 / 0.36);
253-
--semantic-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.46), 0 2px 4px -2px rgb(0 0 0 / 0.36);
254-
--semantic-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.54), 0 4px 6px -4px rgb(83 90 232 / 0.12);
255-
}
256-
257204
@theme inline {
258205
--color-background: var(--background);
259206
--color-foreground: var(--foreground);

packages/core/src/components/appshell.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,10 @@ type SharedAppShellProps = React.PropsWithChildren<{
173173
* Initial theme before any value is loaded from localStorage (`appshell-ui-theme`).
174174
* Does not replace a stored preference.
175175
*
176-
* Named palettes **`cream`**, **`bloom`**, **`deep-dark`**, plus default **`light`** / **`dark`**, in addition to
177-
* default light/dark and `system` (OS preference maps to **default** light or dark only).
176+
* Named palettes **`cream`**, **`bloom`**, plus default **`light`** / **`dark`**, in addition to
177+
* `system` (OS preference maps to **default** light or dark only — not cream or bloom).
178178
*
179-
* @default "system"
179+
* @default "bloom"
180180
*/
181181
defaultTheme?: Theme;
182182
}>;
@@ -286,7 +286,7 @@ export const AppShell = (props: AppShellProps) => {
286286
<BreadcrumbOverrideProvider>
287287
<CommandPaletteProvider searchSources={props.searchSources}>
288288
<ThemeProvider
289-
defaultTheme={props.defaultTheme ?? "system"}
289+
defaultTheme={props.defaultTheme ?? "bloom"}
290290
storageKey="appshell-ui-theme"
291291
>
292292
<RouterContainer rootComponent={props.rootComponent} rootGuards={props.rootGuards}>

packages/core/src/components/badge.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const badgeVariants = cva(
1616
error:
1717
"astw:border-transparent astw:bg-destructive astw:text-destructive-foreground astw:hover:bg-destructive/80",
1818
neutral:
19-
"astw:border-transparent astw:bg-secondary astw:text-secondary-foreground astw:hover:bg-secondary/80",
19+
"astw:border-transparent astw:bg-neutral-200 astw:text-neutral-700 astw:hover:bg-neutral-300 astw:dark:bg-neutral-800 astw:dark:text-neutral-200 astw:dark:hover:bg-neutral-700",
2020
// Outline variants with status dots - matches Figma design
2121
"outline-success":
2222
"astw:gap-0.5 astw:pl-1.5 astw:pr-2 astw:border-border astw:bg-card astw:text-foreground",

packages/core/src/components/button.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const buttonVariants = cva(
1616
outline:
1717
"astw:border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50 astw:dark:hover:text-foreground",
1818
secondary:
19-
"astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80",
19+
"astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:brightness-95 astw:dark:hover:brightness-110",
2020
ghost:
2121
"astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:hover:bg-accent/50 astw:dark:hover:text-foreground",
2222
link: "astw:text-primary astw:underline-offset-4 astw:hover:underline",

packages/core/src/components/sidebar.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,7 @@ function Sidebar({
243243
side === "left" ? "astw:left-0" : "astw:right-0",
244244
variant === "floating" || variant === "inset"
245245
? "astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
246-
: "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l",
247-
variant === "inset" && "astw:border-x astw:border-x-border",
246+
: "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)",
248247
)}
249248
>
250249
<div
@@ -311,8 +310,7 @@ function Sidebar({
311310
// Adjust the padding for floating and inset variants.
312311
variant === "floating" || variant === "inset"
313312
? "astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
314-
: "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l",
315-
variant === "inset" && "astw:border-x astw:border-x-border",
313+
: "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)",
316314
className,
317315
)}
318316
{...props}

packages/core/src/components/theme-switcher.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { useTheme, type ResolvedTheme, type Theme, THEME_OPTIONS } from "@/conte
88
const RESOLVED_THEME_SHORT: Record<ResolvedTheme, string> = {
99
light: "Light",
1010
dark: "Dark",
11-
"deep-dark": "Deep dark",
1211
cream: "Cream",
1312
bloom: "Bloom",
1413
};
@@ -19,7 +18,6 @@ const RESOLVED_THEME_SHORT: Record<ResolvedTheme, string> = {
1918
const THEME_PREVIEW: Record<Theme, { readonly a: `#${string}`; readonly b: `#${string}` }> = {
2019
light: { a: "#ffffff", b: "#d4d4d8" },
2120
dark: { a: "#3f3f46", b: "#d4d4d8" },
22-
"deep-dark": { a: "#09090b", b: "#a1a1aa" },
2321
cream: { a: "#f8f3e4", b: "#e2d4fe" },
2422
bloom: { a: "#535ae8", b: "#f8f3e4" },
2523
system: { a: "#52525b", b: "#7c73e6" },

packages/core/src/contexts/theme-context.tsx

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,19 @@
11
import { createContext, useContext, useEffect, useMemo, useState } from "react";
22

3-
/** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom/deep-dark). */
4-
export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system";
3+
/** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom). */
4+
export type Theme = "light" | "dark" | "cream" | "bloom" | "system";
55

66
/** Resolved paint after applying `system`. */
7-
export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom";
8-
9-
const ALL_THEMES: readonly Theme[] = [
10-
"light",
11-
"dark",
12-
"deep-dark",
13-
"cream",
14-
"bloom",
15-
"system",
16-
] as const;
7+
export type ResolvedTheme = "light" | "dark" | "cream" | "bloom";
8+
9+
const ALL_THEMES: readonly Theme[] = ["light", "dark", "cream", "bloom", "system"] as const;
1710

1811
/** Dropdown / switcher entries: order matches selectable themes; labels are user-facing. */
1912
export type ThemeOption = { readonly value: Theme; readonly label: string };
2013

2114
export const THEME_OPTIONS: readonly ThemeOption[] = [
2215
{ value: "light", label: "Light" },
2316
{ value: "dark", label: "Dark" },
24-
{ value: "deep-dark", label: "Deep dark" },
2517
{ value: "cream", label: "Cream" },
2618
{ value: "bloom", label: "Bloom" },
2719
{ value: "system", label: "System" },
@@ -31,7 +23,7 @@ export const THEME_OPTIONS: readonly ThemeOption[] = [
3123
const LEGACY_THEME_IDS: Partial<Record<string, Theme>> = {
3224
"tailor-light": "cream",
3325
"tailor-bloom": "bloom",
34-
"tailor-dark": "deep-dark",
26+
"tailor-dark": "dark",
3527
};
3628

3729
function parseStoredTheme(value: string | null, fallback: Theme): Theme {
@@ -78,8 +70,8 @@ type ThemeProviderState = {
7870
};
7971

8072
const initialState: ThemeProviderState = {
81-
resolvedTheme: "light",
82-
theme: "system",
73+
resolvedTheme: "bloom",
74+
theme: "bloom",
8375
setTheme: () => null,
8476
};
8577

@@ -94,7 +86,7 @@ function resolveTheme(theme: Theme): ResolvedTheme {
9486
export function ThemeProvider({
9587
children,
9688
storageKey,
97-
defaultTheme = "system",
89+
defaultTheme = "bloom",
9890
...props
9991
}: ThemeProviderProps) {
10092
const [theme, setThemeState] = useState<Theme>(() => readStoredTheme(storageKey, defaultTheme));
@@ -104,9 +96,7 @@ export function ThemeProvider({
10496
useEffect(() => {
10597
const root = window.document.documentElement;
10698
root.classList.remove("light", "dark");
107-
root.classList.add(
108-
resolvedTheme === "dark" || resolvedTheme === "deep-dark" ? "dark" : "light",
109-
);
99+
root.classList.add(resolvedTheme === "dark" ? "dark" : "light");
110100
root.dataset.theme = resolvedTheme;
111101
}, [resolvedTheme]);
112102

0 commit comments

Comments
 (0)