Skip to content

Commit 34b0013

Browse files
authored
Add Scoobie code themes, delete styles submodule (#792)
I realised theming was pretty simple so I just frankensteined the `github` and `vs` ones with a Braid palette. https://github.com/FormidableLabs/prism-react-renderer/blob/e1c83a468b05df7f452b3ad7e4ae5ab874574d4e/packages/prism-react-renderer/src/themes/github.ts
1 parent ac19b66 commit 34b0013

18 files changed

+917
-100
lines changed

.changeset/tame-bugs-relax.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'scoobie': major
3+
---
4+
5+
styles: Remove submodule export

.changeset/ten-cups-eat.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'scoobie': minor
3+
---
4+
5+
CodeBlock, CodeContainer, CodeThemeProvider: Add `scoobieDark` and `scoobieLight` themes
Loading
Loading

.storybook/preview.tsx

+43-25
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ import { BraidProvider, Card, PageBlock } from 'braid-design-system';
55
import docs from 'braid-design-system/themes/docs';
66
import seekJobs from 'braid-design-system/themes/seekJobs';
77
import wireframe from 'braid-design-system/themes/wireframe';
8-
import { themes } from 'prism-react-renderer';
9-
import React from 'react';
108
import { Helmet, HelmetProvider } from 'react-helmet-async';
119
import { BrowserRouter } from 'react-router-dom';
1210

1311
import { CodeThemeProvider } from '../src/components/CodeThemeProvider';
1412
import { ScoobieLink } from '../src/components/ScoobieLink';
13+
import { codeThemes } from '../src/private/codeThemes';
1514
import { robotoHref, robotoMonoHref } from '../typography';
1615

1716
const THEMES = { docs, seekJobs, wireframe };
@@ -20,13 +19,22 @@ export type BraidThemeName = 'docs' | 'seekJobs' | 'wireframe';
2019

2120
export default {
2221
globalTypes: {
22+
colorMode: {
23+
description: 'Color mode to use',
24+
defaultValue: 'lightMode',
25+
toolbar: {
26+
title: 'Color mode',
27+
icon: 'contrast',
28+
items: ['darkMode', 'lightMode'],
29+
},
30+
},
2331
codeTheme: {
2432
description: 'Code theme to use',
2533
defaultValue: 'github',
2634
toolbar: {
2735
title: 'Code theme',
2836
icon: 'contrast',
29-
items: Object.keys(themes),
37+
items: Object.keys(codeThemes),
3038
},
3139
},
3240
theme: {
@@ -40,27 +48,37 @@ export default {
4048
},
4149
},
4250
decorators: [
43-
(Story, { globals }) => (
44-
<BraidProvider
45-
theme={THEMES[globals.theme as BraidThemeName]}
46-
linkComponent={ScoobieLink}
47-
>
48-
<CodeThemeProvider theme={globals.codeTheme}>
49-
<BrowserRouter>
50-
<HelmetProvider>
51-
<Helmet>
52-
<link href={robotoHref} rel="stylesheet" />
53-
<link href={robotoMonoHref} rel="stylesheet" />
54-
</Helmet>
55-
<PageBlock>
56-
<Card>
57-
<Story />
58-
</Card>
59-
</PageBlock>
60-
</HelmetProvider>
61-
</BrowserRouter>
62-
</CodeThemeProvider>
63-
</BraidProvider>
64-
),
51+
(Story, { globals }) => {
52+
const DARK_MODE_CLASS = 'sprinkles_darkMode__1t46ksg10';
53+
54+
if (globals.colorMode === 'darkMode') {
55+
document.documentElement.classList.add(DARK_MODE_CLASS);
56+
} else {
57+
document.documentElement.classList.remove(DARK_MODE_CLASS);
58+
}
59+
60+
return (
61+
<BraidProvider
62+
theme={THEMES[globals.theme as BraidThemeName]}
63+
linkComponent={ScoobieLink}
64+
>
65+
<CodeThemeProvider theme={globals.codeTheme}>
66+
<BrowserRouter>
67+
<HelmetProvider>
68+
<Helmet>
69+
<link href={robotoHref} rel="stylesheet" />
70+
<link href={robotoMonoHref} rel="stylesheet" />
71+
</Helmet>
72+
<PageBlock>
73+
<Card>
74+
<Story />
75+
</Card>
76+
</PageBlock>
77+
</HelmetProvider>
78+
</BrowserRouter>
79+
</CodeThemeProvider>
80+
</BraidProvider>
81+
);
82+
},
6583
],
6684
} satisfies Preview;

README.md

-33
Original file line numberDiff line numberDiff line change
@@ -234,39 +234,6 @@ export const SomeLinks = () => (
234234
);
235235
```
236236

237-
## Styling reference
238-
239-
Scoobie distributes some vanilla-extract styles via `scoobie/styles` submodules.
240-
241-
### code
242-
243-
Render text with the same monospace styling as our [CodeBlock](#codeblock):
244-
245-
```tsx
246-
import { Box } from 'braid-design-system';
247-
import React from 'react';
248-
import { code } from 'scoobie/styles/code.css';
249-
250-
export const MyBox = () => (
251-
<Box className={code.standard}>
252-
<Box component="pre">Hello</Box>
253-
</Box>
254-
);
255-
```
256-
257-
### img
258-
259-
```tsx
260-
import React from 'react';
261-
import { img } from 'scoobie/styles/img.css';
262-
263-
export const MySvg = () => (
264-
<svg className={img}>
265-
<path />
266-
</svg>
267-
);
268-
```
269-
270237
## Webpack reference
271238

272239
Scoobie distributes its Webpack config via a `scoobie/webpack` submodule:

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
},
3737
"files": [
3838
"src",
39-
"styles",
4039
"webpack",
4140
"types.d.ts",
4241
"typography.ts"

sku.config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { SkuConfig } from 'sku';
22

33
const config: SkuConfig = {
44
rootResolution: false,
5-
srcPaths: ['./src', './styles'],
5+
srcPaths: ['./src'],
66

77
dangerouslySetESLintConfig: (skuConfig) => [
88
...skuConfig,

src/components/CodeContainer.css.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { calc } from '@vanilla-extract/css-utils';
33
import { colorModeStyle, responsiveStyle, vars } from 'braid-design-system/css';
44
import { darken, lighten } from 'polished';
55

6-
import { codeBackgroundColor } from '../../styles';
6+
import { codeBackgroundColor } from '../private/color';
77

88
export const lineNumberContainer = style([
99
{

src/components/CodeContainer.tsx

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { Box, Stack } from 'braid-design-system';
22
import { Highlight, type Token } from 'prism-react-renderer';
33

4-
import { Prism, themes } from '../private/Prism';
4+
import { Prism } from '../private/Prism';
5+
import { codeThemes } from '../private/codeThemes';
56

67
import { useCodeTheme } from './CodeThemeProvider';
78

89
import * as styles from './CodeContainer.css';
9-
import * as codeStyles from '../../styles/code.css';
10+
import * as fontStyles from '../private/font.css';
1011

1112
export const CodeContainer = ({
1213
code,
@@ -25,7 +26,7 @@ export const CodeContainer = ({
2526
prism={Prism}
2627
code={code}
2728
language={language}
28-
theme={themes[theme]}
29+
theme={codeThemes[theme]}
2930
>
3031
{({ getTokenProps, tokens }) => (
3132
<Box display="flex">
@@ -46,7 +47,7 @@ const LineNumbers = ({ count }: { count: number }) => {
4647
<Box aria-hidden className={styles.lineNumberContainer} padding="medium">
4748
<Stack align="right" space="small">
4849
{numbers.map((number) => (
49-
<Box className={codeStyles.code} key={number}>
50+
<Box className={fontStyles.code} key={number}>
5051
<Box component="pre">{number}</Box>
5152
</Box>
5253
))}
@@ -69,7 +70,7 @@ const Lines = ({
6970
<Box padding="medium">
7071
<Stack space="small">
7172
{lines.map((line, lineIndex) => (
72-
<Box className={codeStyles.code} key={lineIndex}>
73+
<Box className={fontStyles.code} key={lineIndex}>
7374
<Box component="pre">
7475
{line.map((token, tokenIndex) => {
7576
const props = getTokenProps({ token });

0 commit comments

Comments
 (0)