Skip to content

Commit 3d0493f

Browse files
docs: add typescript examples
1 parent 0a980b3 commit 3d0493f

File tree

229 files changed

+4073
-633
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

229 files changed

+4073
-633
lines changed

docs-site/package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,26 @@
1616
},
1717
"scripts": {
1818
"start": "vite",
19-
"build": "vite build",
19+
"build": "tsc && vite build",
2020
"lint": "eslint .",
21-
"preview": "vite preview"
21+
"preview": "vite preview",
22+
"type-check": "tsc --noEmit"
2223
},
2324
"devDependencies": {
2425
"@eslint/js": "^9.24.0",
26+
"@types/lodash": "^4.17.11",
2527
"@types/react": "^19.1.0",
2628
"@types/react-dom": "^19.1.2",
29+
"@typescript-eslint/eslint-plugin": "^7.0.0",
30+
"@typescript-eslint/parser": "^7.0.0",
2731
"@vitejs/plugin-react": "^4.3.4",
2832
"eslint": "^9.23.0",
2933
"eslint-plugin-react": "^7.37.5",
3034
"eslint-plugin-react-hooks": "^5.2.0",
3135
"eslint-plugin-react-refresh": "^0.4.19",
3236
"globals": "^16.0.0",
3337
"sass": "^1.86.3",
38+
"typescript": "^5.3.3",
3439
"vite": "^6.2.5"
3540
},
3641
"packageManager": "[email protected]"

docs-site/src/components/Example/index.jsx renamed to docs-site/src/components/Example/index.tsx

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,70 @@ import slugify from "slugify";
1212
import range from "lodash/range";
1313
import { themes } from "prism-react-renderer";
1414
import editIcon from "./edit-regular.svg";
15+
import { IExampleConfig } from "../../types";
16+
17+
type TState = {
18+
activeTab: "js" | "ts";
19+
};
20+
21+
type TProps = {
22+
example: IExampleConfig;
23+
};
24+
25+
export default class CodeExampleComponent extends React.Component<
26+
TProps,
27+
TState
28+
> {
29+
state: TState = {
30+
activeTab: "js",
31+
};
1532

16-
export default class CodeExampleComponent extends React.Component {
1733
componentDidMount() {
1834
registerLocale("fi", fi);
1935
registerLocale("pt-BR", ptBR);
2036
registerLocale("en-GB", enGB);
2137
}
2238

39+
handleTabChange = (tab: TState["activeTab"]) => {
40+
this.setState({ activeTab: tab });
41+
};
42+
2343
render() {
24-
const { title, description, component } = this.props.example;
44+
const { title, description, component, componentTS } = this.props.example;
45+
const { activeTab } = this.state;
46+
47+
const jsCode = component.trim();
48+
const tsCode = componentTS?.trim();
49+
50+
const code = activeTab === "js" ? jsCode : tsCode;
51+
const isTS = activeTab === "ts";
52+
2553
return (
2654
<div
2755
id={`example-${slugify(title, { lower: true })}`}
2856
className="example"
2957
>
3058
<h2 className="example__heading">{title}</h2>
3159
{description && <p>{description}</p>}
60+
<div className="example__tabs">
61+
<button
62+
className={`example__tab ${activeTab === "js" ? "active" : ""}`}
63+
onClick={() => this.handleTabChange("js")}
64+
>
65+
JavaScript
66+
</button>
67+
{tsCode && (
68+
<button
69+
className={`example__tab ${activeTab === "ts" ? "active" : ""}`}
70+
onClick={() => this.handleTabChange("ts")}
71+
>
72+
TypeScript
73+
</button>
74+
)}
75+
</div>
3276
<div className="row">
3377
<LiveProvider
34-
code={component.trim()}
78+
code={code}
3579
scope={{
3680
// NB any globals added here should also be referenced in ../../examples/.eslintrc
3781
useState,
@@ -43,6 +87,8 @@ export default class CodeExampleComponent extends React.Component {
4387
forwardRef,
4488
}}
4589
theme={themes.github}
90+
noInline={isTS}
91+
language={isTS ? "tsx" : "jsx"}
4692
>
4793
<pre className="example__code">
4894
<img

0 commit comments

Comments
 (0)