From 3174b90d6ad56d65a110ae7fae121c3a41975f86 Mon Sep 17 00:00:00 2001 From: bh0fer Date: Sun, 11 Jan 2026 18:30:45 +0100 Subject: [PATCH 01/46] POC Pyodide --- packages/tdev/pyodide-script/README.mdx | 18 ++++++++ .../pyodide-script/components/PyodScript.tsx | 29 +++++++++++++ .../components/SimpleScript.tsx | 40 ++++++++++++++++++ .../tdev/pyodide-script/components/Square.tsx | 28 +++++++++++++ .../components/styles.module.scss | 0 .../tdev/pyodide-script/hooks/usePyodide.ts | 39 ++++++++++++++++++ packages/tdev/pyodide-script/index.ts | 15 +++++++ packages/tdev/pyodide-script/package.json | 23 +++++++++++ packages/tdev/pyodide-script/register.ts | 13 ++++++ .../pyodide-script/stores/PyodideStore.ts | 34 +++++++++++++++ packages/tdev/pyodide-script/tsconfig.json | 3 ++ .../pyodide-script/workers/pyodide.worker.ts | 41 +++++++++++++++++++ .../pyodide-script/workers/square.worker.ts | 13 ++++++ src/api/document.ts | 9 ++++ src/stores/ViewStores/index.ts | 20 +++++++++ src/stores/rootStore.ts | 3 ++ tdev-website/siteConfig.ts | 3 +- yarn.lock | 22 +++++++++- 18 files changed, 350 insertions(+), 3 deletions(-) create mode 100644 packages/tdev/pyodide-script/README.mdx create mode 100644 packages/tdev/pyodide-script/components/PyodScript.tsx create mode 100644 packages/tdev/pyodide-script/components/SimpleScript.tsx create mode 100644 packages/tdev/pyodide-script/components/Square.tsx create mode 100644 packages/tdev/pyodide-script/components/styles.module.scss create mode 100644 packages/tdev/pyodide-script/hooks/usePyodide.ts create mode 100644 packages/tdev/pyodide-script/index.ts create mode 100644 packages/tdev/pyodide-script/package.json create mode 100644 packages/tdev/pyodide-script/register.ts create mode 100644 packages/tdev/pyodide-script/stores/PyodideStore.ts create mode 100644 packages/tdev/pyodide-script/tsconfig.json create mode 100644 packages/tdev/pyodide-script/workers/pyodide.worker.ts create mode 100644 packages/tdev/pyodide-script/workers/square.worker.ts create mode 100644 src/stores/ViewStores/index.ts diff --git a/packages/tdev/pyodide-script/README.mdx b/packages/tdev/pyodide-script/README.mdx new file mode 100644 index 000000000..629de8b0e --- /dev/null +++ b/packages/tdev/pyodide-script/README.mdx @@ -0,0 +1,18 @@ +--- +page_id: e7bde0ab-c0fe-4225-8325-e4ebc22d414b +tags: + - '@tdev/' + - python +--- + +import PyodScript from '@tdev/pyodide-script/components/PyodScript'; +import Square from '@tdev/pyodide-script/components/Square'; +import SimpleScript from '@tdev/pyodide-script/components/SimpleScript'; + +# pyodide-script + + + + + + \ No newline at end of file diff --git a/packages/tdev/pyodide-script/components/PyodScript.tsx b/packages/tdev/pyodide-script/components/PyodScript.tsx new file mode 100644 index 000000000..3a0854f27 --- /dev/null +++ b/packages/tdev/pyodide-script/components/PyodScript.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.scss'; +import { observer } from 'mobx-react-lite'; + +interface Props {} +import { usePyodideLib } from '../hooks/usePyodide'; +import Button from '@tdev-components/shared/Button'; + +const PyodScript = observer((props: Props) => { + const pyodide = usePyodideLib(); + if (!pyodide) { + return
Loading Pyodide...
; + } + + return ( +
+
+ ); +}); + +export default PyodScript; diff --git a/packages/tdev/pyodide-script/components/SimpleScript.tsx b/packages/tdev/pyodide-script/components/SimpleScript.tsx new file mode 100644 index 000000000..ba3255d8e --- /dev/null +++ b/packages/tdev/pyodide-script/components/SimpleScript.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import Button from '@tdev-components/shared/Button'; +import TextAreaInput from '@tdev-components/shared/TextAreaInput'; +import { useStore } from '@tdev-hooks/useStore'; +import { mdiLoading, mdiPlay } from '@mdi/js'; +import Card from '@tdev-components/shared/Card'; +import { observer } from 'mobx-react-lite'; +import CodeBlock from '@theme-original/CodeBlock'; +const SimpleScript = observer(() => { + const [code, setCode] = React.useState('print("Hello from Pyodide")'); + const [error, setError] = React.useState(''); + const [result, setResult] = React.useState(''); + const viewStore = useStore('viewStore'); + const pyodideStore = viewStore.useStore('pyodideStore'); + + return ( + + setCode(t)} monospace /> +