Skip to content

Commit

Permalink
feat: create custom runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
envilion s. committed Feb 4, 2024
1 parent dec6ee6 commit 46181e3
Show file tree
Hide file tree
Showing 16 changed files with 191 additions and 22 deletions.
9 changes: 8 additions & 1 deletion app/docs/fisika/energi-kinetik/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Energi Kinetik

Rumus:
Expand Down Expand Up @@ -26,4 +28,9 @@ print(fisika.energi_kinetik(masa_benda, kecepatan_benda))

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/EnergiKinetik?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.fisika as fisika
masa_benda = 14
kecepatan_benda = 23.4
print(fisika.energi_kinetik(masa_benda, kecepatan_benda))
`} />
10 changes: 9 additions & 1 deletion app/docs/fisika/energi-potensial/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Energi Potensial

Rumus:
Expand Down Expand Up @@ -27,4 +29,10 @@ print(fisika.energi_potensial(massa_benda_potensial, gravitasi_bumi, ketinggian_

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/EnergiPotensial?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.fisika as fisika
massa_benda_potensial = 12
gravitasi_bumi = 9.78
ketinggian_benda = 400
print(fisika.energi_potensial(massa_benda_potensial, gravitasi_bumi, ketinggian_benda))
`} />
9 changes: 8 additions & 1 deletion app/docs/fisika/hukum-ohm/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Hukum Ohm

Rumus:
Expand All @@ -24,4 +26,9 @@ print(fisika.hukum_ohm(kuat_arus, hambatan))

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/HukumOhm?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.fisika as fisika
kuat_arus = 30
hambatan = 3
print(fisika.hukum_ohm(kuat_arus, hambatan))
`} />
9 changes: 8 additions & 1 deletion app/docs/fisika/kecepatan/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Kecepatan

Kecepatan adalah perpindahan yang ditempuh oleh manusia maupun massa benda yang di dalam jangka waktu tertentu yang ditanyakan dalam satuan meter per sekon (`m/s`) yaitu satuan ukuran panjang per satuan ukuran waktu.
Expand Down Expand Up @@ -37,4 +39,9 @@ print(fisika.kecepatan(jarak, waktu))

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/Kecepatan?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.fisika as fisika
waktu = 2.3
jarak = 4
print(fisika.kecepatan(jarak, waktu))
`} />
9 changes: 8 additions & 1 deletion app/docs/fisika/masa-jenis/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Masa Jenis

Rumus:
Expand Down Expand Up @@ -26,4 +28,9 @@ print(fisika.masa_jenis(massa_benda, volume_benda))

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/MasaJenis?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.fisika as fisika
massa_benda = 14
volume_benda = 8
print(fisika.masa_jenis(massa_benda, volume_benda))
`} />
8 changes: 6 additions & 2 deletions app/docs/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,24 @@
import Sidebar from "@/components/Sidebar";
import { useNavStyle } from "@/hooks/useNavStyle";
import { useEffect } from "react";
import { PythonProvider } from "react-py";

export default function MdxLayout({ children }: { children: React.ReactNode }) {
const { setDocsStyle } = useNavStyle();
const packages = {
micropip: ["OpenSeriesBellshade"]
};

useEffect(() => {
setDocsStyle();
}, [setDocsStyle]);

return (
<>
<PythonProvider packages={packages}>
<Sidebar />
<main className="prose prose-indigo max-w-none overflow-y-auto rounded-xl p-8 dark:prose-invert prose-pre:border prose-img:w-full prose-img:rounded-xl dark:prose-h1:bg-clip-text dark:prose-h1:font-bold dark:prose-pre:border-zinc-700 lg:pl-80">
{children}
</main>
</>
</PythonProvider>
);
}
9 changes: 7 additions & 2 deletions app/docs/matematika/diameter-lingkaran/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Diameter Lingkaran

Rumus:
Expand All @@ -19,9 +21,12 @@ import OpenSeries.matematika as matematika

jari = 10
print(matematika.diameter_lingkaran(jari))
# 20
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/DiameterLingkaran?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.matematika as matematika
jari = 10
print(matematika.diameter_lingkaran(jari))
`} />
9 changes: 7 additions & 2 deletions app/docs/matematika/keliling-lingkaran/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Keliling Lingkaran

Rumus:
Expand All @@ -19,9 +21,12 @@ import OpenSeries.matematika as matematika

jari = 10
print(matematika.keliling_lingkaran(jari))
# 62,8
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/KelilingLingkaran?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.matematika as matematika
jari = 10
print(matematika.keliling_lingkaran(jari))
`} />
9 changes: 7 additions & 2 deletions app/docs/matematika/luas-lingkaran/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Luas Lingkaran

Rumus:
Expand All @@ -19,9 +21,12 @@ import OpenSeries.matematika as matematika

jari = 10
print(matematika.luas_lingkaran(jari))
# 314
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/LuasLingkaran?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.matematika as matematika
jari = 10
print(matematika.luas_lingkaran(jari))
`} />
8 changes: 6 additions & 2 deletions app/docs/matematika/persamaan-kuadrat/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Persamaan Kuadrat

Rumus:
Expand All @@ -20,9 +22,11 @@ Contoh Kode
import OpenSeries.matematika as matematika

print(matematika.persamaan_kuadrat(1, -3, 2))
# 2,0
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/PersamaanKuadrat?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.matematika as matematika
print(matematika.persamaan_kuadrat(1, -3, 2))
`} />
9 changes: 7 additions & 2 deletions app/docs/matematika/radian-ke-derajat/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Radian ke Derajat

Rumus:
Expand All @@ -19,9 +21,12 @@ import OpenSeries.matematika as matematika

radian = 1
print(matematika.radian_ke_derajat(radian))
# 57,296
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/RadianKeDerajat?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import OpenSeries.matematika as matematika
radian = 1
print(matematika.radian_ke_derajat(radian))
`} />
10 changes: 8 additions & 2 deletions app/docs/statistika/entropy/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Entropy

Rumus:
Expand All @@ -19,12 +21,16 @@ Contoh Kode
```python
from OpenSeries import statistika as statistika

# contoh dari entropy
label = [1, 1, 2, 2, 3, 3]
hasil_base_2 = statistika.entropy(label, base=2)
print(hasil_base_2)
```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/Entropy?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`from OpenSeries import statistika as statistika
label = [1, 1, 2, 2, 3, 3]
hasil_base_2 = statistika.entropy(label, base=2)
print(hasil_base_2)
`} />
12 changes: 9 additions & 3 deletions app/docs/statistika/standar-deviasi/page.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Codeblock from "@/components/Codeblock";

# Standar Deviasi

Rumus:
Expand All @@ -20,13 +22,17 @@ Contoh Kode
import numpy as np
from OpenSeries import statistika as statistika

# contoh dari standar deviasi
vektor = np.array([1, 2, 3, 4, 5])
hasil = statistika.standar_deviasi(vektor)
print(hasil)

```

## Coba Sekarang

<iframe src="https://replit.com/@ItsArul/StandarDeviasi?embed=1&theme=light" className="aspect-video w-full" />
<Codeblock code={`import numpy as np
from OpenSeries import statistika as statistika
vektor = np.array([1, 2, 3, 4, 5])
hasil = statistika.standar_deviasi(vektor)
print(hasil)
`} />
Binary file modified bun.lockb
Binary file not shown.
88 changes: 88 additions & 0 deletions components/Codeblock.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
"use client";

import { useCallback, useState } from "react";
import { usePython } from "react-py";
import { python } from "@codemirror/lang-python";
import ReactCodeMirror from "@uiw/react-codemirror";
import { vscodeDark } from "@uiw/codemirror-theme-vscode";
import { useTheme } from "next-themes";
import { tomorrow } from "thememirror";

type Props = {
code: string;
};

const Codeblock = ({ code }: Props) => {
const [value, setValue] = useState(code);
const { systemTheme, theme } = useTheme();
const currentTheme = theme === "system" ? systemTheme : theme;

const onChange = useCallback((val: string) => {
setValue(val);
}, []);

const { runPython, stdout, stderr, isLoading, isRunning } = usePython();

return (
<div className="space-y-4">
<div className="relative flex max-w-max divide-x divide-indigo-500 overflow-hidden rounded-lg">
<div
className={`absolute inset-0 z-20 grid place-items-center border bg-white dark:bg-zinc-900 ${isLoading ? "opacity-100" : "pointer-events-none opacity-0"}`}
>
<span className="icon-[tabler--loader] animate-spin text-2xl"></span>
</div>
<button
className="grid h-12 w-12 place-items-center bg-indigo-600 font-medium text-white hover:bg-indigo-700"
onClick={() => runPython(value)}
>
{isRunning ? (
<span className="icon-[ri--loader-3-line] h-6 w-6 animate-spin"></span>
) : (
<span className="icon-[iconamoon--player-play] h-6 w-6"></span>
)}
</button>
<button
className="grid h-12 w-12 place-items-center bg-indigo-600 font-medium text-white hover:bg-indigo-700"
onClick={() => setValue(code)}
>
<span className="icon-[mdi--restart] h-6 w-6"></span>
</button>
<button
className="flex items-center gap-2 bg-indigo-600 px-5 py-2.5 font-medium text-white hover:bg-indigo-700"
onClick={() => alert("blm cuy")}
>
Buka di Playground
</button>
</div>
<div className="relative overflow-hidden rounded-xl border dark:border-zinc-700">
<div
className={`absolute inset-0 z-20 grid place-items-center bg-white dark:bg-zinc-900 ${isLoading ? "opacity-100" : "pointer-events-none opacity-0"}`}
>
<span className="flex items-center gap-2 text-xl font-bold text-zinc-600 dark:text-zinc-400">
<span className="icon-[tabler--loader] animate-spin text-2xl"></span>
Loading Environment
</span>
</div>
<div className="grid grid-cols-2 divide-x dark:divide-zinc-700">
<div>
<ReactCodeMirror
value={value}
theme={currentTheme === "dark" ? vscodeDark : tomorrow}
height="400px"
extensions={[python()]}
onChange={onChange}
/>
</div>
<div className="flex p-8">
{!stdout && !stderr && !isRunning ? <p>Jalankan kodenya untuk melihat output</p> : null}
{stdout}
{stderr}
{isRunning && <span className="icon-[ri--loader-3-line] m-auto animate-spin text-2xl"></span>}
</div>
</div>
</div>
</div>
);
};

export default Codeblock;
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,23 @@
"format": "prettier --write ."
},
"dependencies": {
"@codemirror/lang-python": "^6.1.4",
"@mdx-js/loader": "^3.0.0",
"@mdx-js/react": "^3.0.0",
"@next/mdx": "^14.0.4",
"@types/mdx": "^2.0.10",
"@uiw/codemirror-theme-vscode": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
"next": "14.0.4",
"next-themes": "^0.2.1",
"nextjs-toploader": "^1.6.4",
"react": "^18",
"react-dom": "^18",
"react-py": "^1.10.6",
"rehype-pretty-code": "^0.12.6",
"remark-gfm": "^4.0.0",
"shikiji": "^0.9.0",
"thememirror": "^2.0.1",
"zustand": "^4.5.0"
},
"devDependencies": {
Expand Down

0 comments on commit 46181e3

Please sign in to comment.