Skip to content

Commit 4f0c16f

Browse files
committed
Set the dark class on static output
1 parent a25fded commit 4f0c16f

File tree

5 files changed

+19
-17
lines changed

5 files changed

+19
-17
lines changed

packages/gitbook-v2/src/app/sites/dynamic/[mode]/[siteURL]/[siteData]/(content)/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default async function SiteDynamicLayout({
2020
const forcedTheme = await getThemeFromMiddleware();
2121

2222
return (
23-
<CustomizationRootLayout customization={context.customization}>
23+
<CustomizationRootLayout forcedTheme={forcedTheme} customization={context.customization}>
2424
<SiteLayout
2525
context={context}
2626
forcedTheme={forcedTheme}

packages/gitbook/src/components/PDF/PDFPage.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
type CustomizationSettings,
32
type Revision,
43
type RevisionPageDocument,
54
type RevisionPageGroup,
@@ -180,7 +179,7 @@ export async function PDFPage(props: {
180179

181180
async function PDFSpaceIntro(props: {
182181
space: Space;
183-
customization: CustomizationSettings | SiteCustomizationSettings;
182+
customization: SiteCustomizationSettings;
184183
}) {
185184
const { space, customization } = props;
186185

packages/gitbook/src/components/RootLayout/CustomizationRootLayout.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import {
22
CustomizationCorners,
33
CustomizationHeaderPreset,
44
CustomizationIconsStyle,
5-
type CustomizationSettings,
65
CustomizationSidebarBackgroundStyle,
76
CustomizationSidebarListStyle,
7+
CustomizationThemeMode,
88
type CustomizationThemedColor,
99
type CustomizationTint,
1010
type SiteCustomizationSettings,
@@ -40,10 +40,11 @@ import { GITBOOK_FONTS_URL, GITBOOK_ICONS_TOKEN, GITBOOK_ICONS_URL } from '@v2/l
4040
* It takes care of setting the theme and the language.
4141
*/
4242
export async function CustomizationRootLayout(props: {
43-
customization: SiteCustomizationSettings | CustomizationSettings;
43+
forcedTheme?: CustomizationThemeMode;
44+
customization: SiteCustomizationSettings;
4445
children: React.ReactNode;
4546
}) {
46-
const { customization, children } = props;
47+
const { customization, forcedTheme, children } = props;
4748

4849
const language = getSpaceLanguage(customization);
4950
const tintColor = getTintColor(customization);
@@ -85,7 +86,12 @@ export async function CustomizationRootLayout(props: {
8586
'links' in customization.styling && `links-${customization.styling.links}`,
8687
fontNotoColorEmoji.variable,
8788
ibmPlexMono.variable,
88-
fontData.type === 'default' ? fontData.variable : 'font-custom'
89+
fontData.type === 'default' ? fontData.variable : 'font-custom',
90+
91+
// Set the dark/light class statically to avoid flashing and make it work when JS is disabled
92+
(forcedTheme ?? customization.themes.default) === CustomizationThemeMode.Dark
93+
? 'dark'
94+
: ''
8995
)}
9096
>
9197
<head>
@@ -175,7 +181,7 @@ export async function CustomizationRootLayout(props: {
175181
* If the tint color is not set or it is a space customization, it will return the default color.
176182
*/
177183
function getTintColor(
178-
customization: CustomizationSettings | SiteCustomizationSettings
184+
customization: SiteCustomizationSettings
179185
): CustomizationTint['color'] | undefined {
180186
if ('tint' in customization.styling && customization.styling.tint) {
181187
return {
@@ -222,7 +228,7 @@ function getTintMixColor(
222228
* If it is a space customization, it will return the default styles.
223229
*/
224230
function getSidebarStyles(
225-
customization: CustomizationSettings | SiteCustomizationSettings
231+
customization: SiteCustomizationSettings
226232
): SiteCustomizationSettings['styling']['sidebar'] {
227233
if ('sidebar' in customization.styling) {
228234
return {
@@ -242,7 +248,7 @@ function getSidebarStyles(
242248
* If it is a space customization, it will return the default styles.
243249
*/
244250
function getSemanticColors(
245-
customization: CustomizationSettings | SiteCustomizationSettings
251+
customization: SiteCustomizationSettings
246252
): Pick<
247253
SiteCustomizationSettings['styling'],
248254
'infoColor' | 'successColor' | 'warningColor' | 'dangerColor'

packages/gitbook/src/components/TableOfContents/Trademark.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type {
2-
CustomizationSettings,
32
SiteCustomizationSettings,
43
SiteInsightsTrademarkPlacement,
54
Space,
@@ -16,7 +15,7 @@ import { Link } from '../primitives';
1615
*/
1716
export function Trademark(props: {
1817
space: Space;
19-
customization: CustomizationSettings | SiteCustomizationSettings;
18+
customization: SiteCustomizationSettings;
2019
placement: SiteInsightsTrademarkPlacement;
2120
}) {
2221
return (
@@ -69,7 +68,7 @@ export function Trademark(props: {
6968
*/
7069
export function TrademarkLink(props: {
7170
space: Space;
72-
customization: CustomizationSettings | SiteCustomizationSettings;
71+
customization: SiteCustomizationSettings;
7372
placement: SiteInsightsTrademarkPlacement;
7473
}) {
7574
const { space, customization, placement } = props;

packages/gitbook/src/intl/server.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { CustomizationSettings, SiteCustomizationSettings } from '@gitbook/api';
1+
import type { SiteCustomizationSettings } from '@gitbook/api';
22

33
import { type TranslationLanguage, languages } from './translations';
44

@@ -7,9 +7,7 @@ export * from './translate';
77
/**
88
* Create the translation context for a space to use in the server components.
99
*/
10-
export function getSpaceLanguage(
11-
customization: CustomizationSettings | SiteCustomizationSettings
12-
): TranslationLanguage {
10+
export function getSpaceLanguage(customization: SiteCustomizationSettings): TranslationLanguage {
1311
const fallback = languages.en;
1412

1513
const { locale } = customization.internationalization;

0 commit comments

Comments
 (0)