From 1c77e7e5b380021ca0efd885cda2615a52162d58 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sat, 4 Jun 2022 15:02:04 +0200 Subject: [PATCH] more content + style --- talk/ImgTile.jsx | 6 ++++ talk/MaxiRepl.jsx | 18 ++++++------ talk/Slides.jsx | 54 +++++++++++++++++++++++++++-------- talk/deck.mdx | 71 ++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 117 insertions(+), 32 deletions(-) create mode 100644 talk/ImgTile.jsx diff --git a/talk/ImgTile.jsx b/talk/ImgTile.jsx new file mode 100644 index 000000000..4a22ca466 --- /dev/null +++ b/talk/ImgTile.jsx @@ -0,0 +1,6 @@ +function ImgTile({ src, width, height }) { + return ( +
+ ); +} +export default ImgTile; diff --git a/talk/MaxiRepl.jsx b/talk/MaxiRepl.jsx index 37354b457..164d81971 100644 --- a/talk/MaxiRepl.jsx +++ b/talk/MaxiRepl.jsx @@ -32,7 +32,7 @@ loadWebDirt({ sampleFolder: './EmuSP12', }); -export function MaxiRepl({ code, canvasHeight = 400 }) { +export function MaxiRepl({ code, canvasHeight = 500 }) { const [exampleIndex, setExampleIndex] = useState(0); const examples = Array.isArray(code) ? code : [code]; return ( @@ -48,13 +48,15 @@ export function MaxiRepl({ code, canvasHeight = 400 }) { ))}
)} - <_MiniRepl - key={exampleIndex} - tune={examples[exampleIndex]} - defaultSynth={defaultSynth} - hideOutsideView={true} - theme={materialPalenightLarge} - /> +
+ <_MiniRepl + key={exampleIndex} + tune={examples[exampleIndex]} + defaultSynth={defaultSynth} + hideOutsideView={true} + theme={materialPalenightLarge} + /> +
parseInt(window.location.hash.split('#')[1] || 0, 10); + export function Slides({ children }) { - const [slide, setSlide] = useState(0); + const [slide, setSlide] = useState(getUrlIndex() % children.length); + useEffect(() => { + window.location.hash = '#' + slide; + }, [slide]); + + const next = useCallback(() => setSlide((s) => (s + 1) % children.length), [children]); + const prev = useCallback(() => setSlide((s) => (s + children.length - 1) % children.length), [children]); + + useLayoutEffect(() => { + const handleKeyPress = async (e) => { + if (e.ctrlKey && e.altKey) { + if (e.code === 'ArrowRight') { + next(); + } else if (e.code === 'ArrowLeft') { + prev(); + } + e.preventDefault(); + } + }; + window.addEventListener('keydown', handleKeyPress, true); + return () => window.removeEventListener('keydown', handleKeyPress, true); + }, [slide]); return (
@@ -13,14 +36,26 @@ export function Slides({ children }) { exit={{ opacity: 0 }} className="w-screen h-screen" > -
-
+
+
{children[slide]}
- +
); } @@ -29,13 +64,10 @@ export function Slide({ children }) { return children; } -function SlideNav({ slide, setSlide, slides }) { +function SlideNav({ onNext, onPrev }) { return (
- -