widget.jsx
1.0 kB · jsx · 28 lines
1import { useMemo, useState } from 'react';2import { ready } from '../../lib/mrly.js';3import { Row, Slider, Check } from '../../lib/app.jsx';4import { Pixels } from '../../lib/draw.jsx';5import { embed } from '../../lib/widget.jsx';67const m = await ready();89const SIDE = 720;1011export function window() {12 const [n, setN] = useState(100);13 const [layers, setLayers] = useState(true);14 const sheet = useMemo(() => m.visible_pixels(n, SIDE, layers), [n, layers]);15 const read = useMemo(() => JSON.parse(m.visible_read(n, 2)), [n]);16 return (17 <>18 <Pixels data={sheet} role="img" aria-label="The corner window of the grid, every visible point lit and every hidden one shaded by the divisor that hides it" />19 <Row>20 <Slider label="window n" value={n} min={8} max={300} onChange={setN} />21 <Check label="shade the layers" checked={layers} onChange={setLayers} />22 </Row>23 <p className="sub">{`${read.lit} visible of ${read.total} points, a share of ${read.density.toFixed(6)}`}</p>24 </>25 );26}2728embed('pi', { window });