Skip to content

Commit 451738b

Browse files
author
Neo Nie
committed
replace react-live with react-runner
1 parent 529f451 commit 451738b

File tree

9 files changed

+31875
-31528
lines changed

9 files changed

+31875
-31528
lines changed

components/CodeBlock.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
import React from 'react';
2-
import { Editor } from 'react-live';
2+
import { CodeBlock as Code } from 'react-live-runner';
33
import styled from 'styled-components';
44
import { darkGrey } from '../utils/colors';
55
import { monospace } from '../utils/fonts';
66
import rem from '../utils/rem';
77
import { Note } from './Note';
88

9-
const CodeBlock = styled((props) => {
10-
const language = (props.language || 'clike').toLowerCase().trim();
9+
const CodeBlock = styled(({ code, ...rest }) => {
10+
const language = (rest.language || 'clike').toLowerCase().trim();
1111

12-
return <Editor {...props} disabled language={language} />;
12+
return (
13+
<Code {...rest} disabled language={language}>
14+
{code}
15+
</Code>
16+
);
1317
})`
1418
background: ${darkGrey};
1519
border-radius: ${rem(3)};

components/LiveEdit.js

+7-29
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
1-
import React, { useEffect, useState } from 'react';
2-
import { LiveEditor, LiveError, LivePreview, LiveProvider } from 'react-live';
3-
import styled, {
4-
createGlobalStyle,
5-
css,
6-
keyframes,
7-
StyleSheetManager,
8-
ThemeProvider,
9-
withTheme,
10-
} from 'styled-components';
11-
import stylisRTLPlugin from 'stylis-plugin-rtl';
1+
import React from 'react';
2+
import { LiveEditor, LiveError, LivePreview, LiveProvider } from 'react-live-runner';
3+
import styled, { css } from 'styled-components';
124
import { darkGrey, red } from '../utils/colors';
135
import { headerFont, monospace } from '../utils/fonts';
146
import { phone } from '../utils/media';
157
import rem from '../utils/rem';
8+
import baseScope from '../utils/scope';
169

1710
const StyledProvider = styled(LiveProvider)`
1811
box-shadow: ${rem(1)} ${rem(1)} ${rem(20)} rgba(20, 20, 20, 0.27);
@@ -89,35 +82,20 @@ export const StyledError = styled(LiveError)`
8982
white-space: pre;
9083
`;
9184

92-
const LiveEdit = ({ noInline, code, scope = {} }) => {
93-
const [mounted, setMounted] = useState(false);
94-
95-
useEffect(() => setMounted(true), []);
96-
85+
const LiveEdit = ({ code, scope = {} }) => {
9786
return (
9887
<StyledProvider
9988
code={code}
100-
noInline={noInline}
101-
mountStylesheet={false}
10289
scope={{
90+
...baseScope,
10391
...scope,
104-
createGlobalStyle,
105-
css,
106-
keyframes,
107-
styled,
108-
ThemeProvider,
109-
StyleSheetManager,
110-
withTheme,
111-
stylisRTLPlugin,
11292
}}
11393
>
11494
<Row>
11595
<Code>
11696
<StyledEditor />
11797
</Code>
118-
119-
{/* because react-live uses a different babel compiler, the classnames it generates aren't stable and a remount is needed after SSR */}
120-
<StyledPreview className="notranslate" key={mounted ? 'preview-client' : 'preview-ssr'} />
98+
<StyledPreview className="notranslate" />
12199
</Row>
122100

123101
<StyledError />

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"react": "^17.0.2",
3939
"react-dom": "^17.0.2",
4040
"react-is": "^17.0.2",
41-
"react-live": "^2.3.0",
41+
"react-live-runner": "^1.0.0-rc.2",
4242
"react-transition-group": "^4.4.2",
4343
"styled-components": "^5.3.3",
4444
"styled-theming": "^2.2.0",

pages/_document.js

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import Document, { Head, Html, Main, NextScript } from 'next/document';
22
import { ServerStyleSheet } from 'styled-components';
33

44
import { bodyFont } from '../utils/fonts';
5+
import { reset } from '../utils/scope';
56

67
const resetStyles = `
78
*,::after,::before{background-repeat:no-repeat;box-sizing:inherit}::after,::before{text-decoration:inherit;vertical-align:inherit}html{box-sizing:border-box;cursor:default;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,footer,header,nav,section{display:block}body{margin:0}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}nav ol,nav ul{list-style:none}pre{font-family:monospace,monospace;font-size:1em}a{text-decoration:none;color:inherit;background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}button,input,optgroup,select,textarea{margin:0}button,input,select,textarea{background-color:transparent;color:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}[hidden]{display:none}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);display:inherit;position:absolute}[aria-disabled]{cursor:default}
@@ -78,6 +79,8 @@ export default class MyDocument extends Document {
7879

7980
render() {
8081
const { styleElements } = this.props;
82+
// reset counter for SSR
83+
reset();
8184

8285
return (
8386
<Html lang="en">

pages/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { PureComponent } from 'react';
22
import NextLink from '../components/Link';
33
import styled, { css } from 'styled-components';
4-
import { LiveProvider, LiveEditor, LivePreview } from 'react-live';
4+
import { LiveProvider, LiveEditor, LivePreview } from 'react-live-runner';
55

66
import rem from '../utils/rem';
77
import { blmGrey, blmMetal, blmBlack } from '../utils/colors';
@@ -16,6 +16,7 @@ import Nav from '../components/Nav';
1616
import { sortedCompanies, sortedProjects } from '../companies-manifest';
1717
import UsersLogos from '../components/UsersLogos';
1818
import SmallShowcase from '../components/SmallShowcase';
19+
import baseScope from '../utils/scope';
1920

2021
const Tagline = styled.h1`
2122
font-weight: 600;
@@ -190,7 +191,7 @@ class Index extends PureComponent {
190191

191192
<Wrapper>
192193
<Content hero>
193-
<LiveProvider code={headerCode} noInline mountStylesheet={false} scope={{ React, styled, css, rem, Link }}>
194+
<LiveProvider code={headerCode} scope={{ styled: baseScope.hijackedStyled, css, rem, Link }}>
194195
<Logo />
195196

196197
<Title>

0 commit comments

Comments
 (0)