From 3d9ac37efe220e9a2524caf5f481b4da1eccd97f Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 19 Mar 2023 22:08:43 +0100 Subject: [PATCH] add basic slides app --- iclc2023/slides/.gitignore | 24 ++ iclc2023/slides/index.html | 13 + iclc2023/slides/package.json | 34 +++ iclc2023/slides/postcss.config.cjs | 6 + iclc2023/slides/src/SlideRepl.jsx | 39 +++ iclc2023/slides/src/Slides.jsx | 78 +++++ iclc2023/slides/src/index.css | 17 ++ iclc2023/slides/src/main.jsx | 10 + iclc2023/slides/src/prebake.mjs | 35 +++ iclc2023/slides/src/slides/01.mdx | 1 + iclc2023/slides/src/slides/02.mdx | 5 + iclc2023/slides/src/useEvent.jsx | 12 + iclc2023/slides/tailwind.config.cjs | 26 ++ iclc2023/slides/vite.config.js | 8 + pnpm-lock.yaml | 432 +++++++++++++++++++++++++++- pnpm-workspace.yaml | 1 + 16 files changed, 738 insertions(+), 3 deletions(-) create mode 100644 iclc2023/slides/.gitignore create mode 100644 iclc2023/slides/index.html create mode 100644 iclc2023/slides/package.json create mode 100644 iclc2023/slides/postcss.config.cjs create mode 100644 iclc2023/slides/src/SlideRepl.jsx create mode 100644 iclc2023/slides/src/Slides.jsx create mode 100644 iclc2023/slides/src/index.css create mode 100644 iclc2023/slides/src/main.jsx create mode 100644 iclc2023/slides/src/prebake.mjs create mode 100644 iclc2023/slides/src/slides/01.mdx create mode 100644 iclc2023/slides/src/slides/02.mdx create mode 100644 iclc2023/slides/src/useEvent.jsx create mode 100644 iclc2023/slides/tailwind.config.cjs create mode 100644 iclc2023/slides/vite.config.js diff --git a/iclc2023/slides/.gitignore b/iclc2023/slides/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/iclc2023/slides/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/iclc2023/slides/index.html b/iclc2023/slides/index.html new file mode 100644 index 000000000..7fe7c4886 --- /dev/null +++ b/iclc2023/slides/index.html @@ -0,0 +1,13 @@ + + + + + + + Slides + + +
+ + + diff --git a/iclc2023/slides/package.json b/iclc2023/slides/package.json new file mode 100644 index 000000000..d377696ff --- /dev/null +++ b/iclc2023/slides/package.json @@ -0,0 +1,34 @@ +{ + "name": "slides", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@mdx-js/rollup": "^2.3.0", + "@nanostores/persistent": "^0.7.0", + "@nanostores/react": "^0.4.1", + "nanostores": "^0.7.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "@strudel.cycles/react": "workspace:*", + "@strudel.cycles/core": "workspace:*", + "@strudel.cycles/tonal": "workspace:*", + "@strudel.cycles/webaudio": "workspace:*", + "@strudel.cycles/soundfonts": "workspace:*" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.8", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^3.1.0", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.7", + "vite": "^4.2.0" + } +} diff --git a/iclc2023/slides/postcss.config.cjs b/iclc2023/slides/postcss.config.cjs new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/iclc2023/slides/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/iclc2023/slides/src/SlideRepl.jsx b/iclc2023/slides/src/SlideRepl.jsx new file mode 100644 index 000000000..167bf26ca --- /dev/null +++ b/iclc2023/slides/src/SlideRepl.jsx @@ -0,0 +1,39 @@ +import { evalScope, controls } from '@strudel.cycles/core'; +import { initAudioOnFirstClick } from '@strudel.cycles/webaudio'; +import { MiniRepl as _MiniRepl } from '@strudel.cycles/react'; +import { prebake } from './prebake'; +//import { themes } from '../repl/themes.mjs'; +// import { useSettings } from '../settings.mjs'; + +if (typeof window !== 'undefined') { + await evalScope( + controls, + import('@strudel.cycles/core'), + import('@strudel.cycles/tonal'), + import('@strudel.cycles/mini'), + import('@strudel.cycles/webaudio'), + import('@strudel.cycles/soundfonts'), + ); +} + +if (typeof window !== 'undefined') { + initAudioOnFirstClick(); + prebake(); +} + +export function SlideRepl({ tune, drawTime, punchcard, canvasHeight = 100 }) { + // const { theme } = useSettings(); + return ( +
+ <_MiniRepl + tune={tune} + hideOutsideView={true} + drawTime={drawTime} + punchcard={punchcard} + canvasHeight={canvasHeight} + fontSize={32} + // theme={themes[theme]} + /> +
+ ); +} diff --git a/iclc2023/slides/src/Slides.jsx b/iclc2023/slides/src/Slides.jsx new file mode 100644 index 000000000..9cfbaf0ba --- /dev/null +++ b/iclc2023/slides/src/Slides.jsx @@ -0,0 +1,78 @@ +import { persistentAtom } from '@nanostores/persistent'; +import { useStore } from '@nanostores/react'; // or '@nanostores/preact' +import useEvent from './useEvent'; + +function cx(...classes) { + return classes.filter(Boolean).join(' '); +} +// https://vitejs.dev/guide/features.html#glob-import +const slideImports = import.meta.glob('./slides/*.mdx'); + +const loadedMDXFiles = await Promise.all( + Object.entries(slideImports).map(async ([path, load]) => { + const segments = path.split('/'); + const filename = segments[segments.length - 1].slice(0, -4); // expects .mdx at the end + return [filename, (await load()).default]; + }), +); + +const order = ['01', '02']; + +const slideEntries = order.map((name) => loadedMDXFiles.find(([file]) => file === name)); + +// current slide index is persisted, so it's safe to refresh the browser +export const slideIndex = persistentAtom('slideIndex', '0'); + +function Slides() { + const activeIndex = parseInt(useStore(slideIndex)); + const prev = () => slideIndex.set((activeIndex - 1 + slideEntries.length) % slideEntries.length); + const next = () => slideIndex.set((activeIndex + 1) % slideEntries.length); + + useEvent('click', (e) => { + if (!e.ctrlKey) { + return; + } + const leftHalf = e.clientX / document.body.clientWidth < 0.5; + if (leftHalf) { + prev(); + } else { + next(); + } + }); + useEvent('keydown', (e) => { + if (e.key === 'Home') { + prev(); + } else if (e.key === 'End') { + next(); + } + }); + + return ( +
+ {slideEntries.map(([path, Slide], i) => ( +
activeIndex && 'translate-x-full', + )} + > +
+ +
+
+ ))} +
+
+
+
+
+
+ ); +} + +export default Slides; diff --git a/iclc2023/slides/src/index.css b/iclc2023/slides/src/index.css new file mode 100644 index 000000000..186b54d4e --- /dev/null +++ b/iclc2023/slides/src/index.css @@ -0,0 +1,17 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.cm-activeLine { + background-color: transparent !important; +} + +.cm-theme { + background-color: var(--background); + border: 1px solid var(--lineHighlight); + padding: 2px; +} + +.cm-gutters { + display: none !important; +} diff --git a/iclc2023/slides/src/main.jsx b/iclc2023/slides/src/main.jsx new file mode 100644 index 000000000..4a0d65e41 --- /dev/null +++ b/iclc2023/slides/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import Slides from './Slides'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +); diff --git a/iclc2023/slides/src/prebake.mjs b/iclc2023/slides/src/prebake.mjs new file mode 100644 index 000000000..ecbd9e4b7 --- /dev/null +++ b/iclc2023/slides/src/prebake.mjs @@ -0,0 +1,35 @@ +import { Pattern, toMidi, valueToMidi } from '@strudel.cycles/core'; +import { registerSynthSounds, samples } from '@strudel.cycles/webaudio'; + +export async function prebake() { + // https://archive.org/details/SalamanderGrandPianoV3 + // License: CC-by http://creativecommons.org/licenses/by/3.0/ Author: Alexander Holm + registerSynthSounds(); + //registerSoundfonts(); + await Promise.all([ + /* samples(`./piano.json`, `./piano/`, { prebake: true }), + samples(`./vcsl.json`, 'github:sgossner/VCSL/master/', { prebake: true }), + samples(`./tidal-drum-machines.json`, 'github:ritchse/tidal-drum-machines/main/machines/', { + prebake: true, + tag: 'drum-machines', + }), + samples(`./EmuSP12.json`, `./EmuSP12/`, { prebake: true, tag: 'drum-machines' }), */ + // samples('github:tidalcycles/Dirt-Samples/master'), + ]); +} +/* +const maxPan = toMidi('C8'); +const panwidth = (pan, width) => pan * width + (1 - width) / 2; + +Pattern.prototype.piano = function () { + return this.clip(1) + .s('piano') + .release(0.1) + .fmap((value) => { + const midi = valueToMidi(value); + // pan by pitch + const pan = panwidth(Math.min(Math.round(midi) / maxPan, 1), 0.5); + return { ...value, pan: (value.pan || 1) * pan }; + }); +}; +*/ diff --git a/iclc2023/slides/src/slides/01.mdx b/iclc2023/slides/src/slides/01.mdx new file mode 100644 index 000000000..63879d49b --- /dev/null +++ b/iclc2023/slides/src/slides/01.mdx @@ -0,0 +1 @@ +# Strudel diff --git a/iclc2023/slides/src/slides/02.mdx b/iclc2023/slides/src/slides/02.mdx new file mode 100644 index 000000000..637164d6a --- /dev/null +++ b/iclc2023/slides/src/slides/02.mdx @@ -0,0 +1,5 @@ +import { SlideRepl } from '../SlideRepl.jsx'; + +# What is Strudel + + diff --git a/iclc2023/slides/src/useEvent.jsx b/iclc2023/slides/src/useEvent.jsx new file mode 100644 index 000000000..f349c6e70 --- /dev/null +++ b/iclc2023/slides/src/useEvent.jsx @@ -0,0 +1,12 @@ +import { useEffect } from 'react'; + +function useEvent(name, onTrigger, useCapture = false) { + useEffect(() => { + document.addEventListener(name, onTrigger, useCapture); + return () => { + document.removeEventListener(name, onTrigger, useCapture); + }; + }, [onTrigger]); +} + +export default useEvent; diff --git a/iclc2023/slides/tailwind.config.cjs b/iclc2023/slides/tailwind.config.cjs new file mode 100644 index 000000000..85394d9c5 --- /dev/null +++ b/iclc2023/slides/tailwind.config.cjs @@ -0,0 +1,26 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './index.html', + './src/**/*.{js,ts,jsx,tsx,mdx}', + '../../packages/react/src/**/*.{html,js,jsx,md,mdx,ts,tsx}', + ], + theme: { + extend: { + colors: { + // codemirror-theme settings + background: 'var(--background)', + lineBackground: 'var(--lineBackground)', + foreground: 'var(--foreground)', + caret: 'var(--caret)', + selection: 'var(--selection)', + selectionMatch: 'var(--selectionMatch)', + gutterBackground: 'var(--gutterBackground)', + gutterForeground: 'var(--gutterForeground)', + gutterBorder: 'var(--gutterBorder)', + lineHighlight: 'var(--lineHighlight)', + }, + }, + }, + plugins: [require('@tailwindcss/typography')], +}; diff --git a/iclc2023/slides/vite.config.js b/iclc2023/slides/vite.config.js new file mode 100644 index 000000000..9c27be08c --- /dev/null +++ b/iclc2023/slides/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import mdx from '@mdx-js/rollup'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react(), mdx()], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b325c96cc..7d8bb2af5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,49 @@ importers: prettier: 2.8.3 rollup-plugin-visualizer: 5.9.0 + iclc2023/slides: + specifiers: + '@mdx-js/rollup': ^2.3.0 + '@nanostores/persistent': ^0.7.0 + '@nanostores/react': ^0.4.1 + '@strudel.cycles/core': workspace:* + '@strudel.cycles/react': workspace:* + '@strudel.cycles/soundfonts': workspace:* + '@strudel.cycles/tonal': workspace:* + '@strudel.cycles/webaudio': workspace:* + '@tailwindcss/typography': ^0.5.8 + '@types/react': ^18.0.28 + '@types/react-dom': ^18.0.11 + '@vitejs/plugin-react': ^3.1.0 + autoprefixer: ^10.4.14 + nanostores: ^0.7.4 + postcss: ^8.4.21 + react: ^18.2.0 + react-dom: ^18.2.0 + tailwindcss: ^3.2.7 + vite: ^4.2.0 + dependencies: + '@mdx-js/rollup': 2.3.0 + '@nanostores/persistent': 0.7.0_nanostores@0.7.4 + '@nanostores/react': 0.4.1_nkfnbc2tpc77iht7asm3uqwau4 + '@strudel.cycles/core': link:../../packages/core + '@strudel.cycles/react': link:../../packages/react + '@strudel.cycles/soundfonts': link:../../packages/soundfonts + '@strudel.cycles/tonal': link:../../packages/tonal + '@strudel.cycles/webaudio': link:../../packages/webaudio + nanostores: 0.7.4 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + devDependencies: + '@tailwindcss/typography': 0.5.9_tailwindcss@3.2.7 + '@types/react': 18.0.28 + '@types/react-dom': 18.0.11 + '@vitejs/plugin-react': 3.1.0_vite@4.2.0 + autoprefixer: 10.4.14_postcss@8.4.21 + postcss: 8.4.21 + tailwindcss: 3.2.7_postcss@8.4.21 + vite: 4.2.0 + packages/core: specifiers: fraction.js: ^4.2.0 @@ -2113,6 +2156,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm/0.17.12: + resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64/0.16.17: resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} @@ -2121,6 +2173,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64/0.17.12: + resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64/0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -2129,6 +2190,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64/0.17.12: + resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64/0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -2137,6 +2207,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64/0.17.12: + resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64/0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -2145,6 +2224,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64/0.17.12: + resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64/0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -2153,6 +2241,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64/0.17.12: + resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64/0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -2161,6 +2258,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64/0.17.12: + resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm/0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -2169,6 +2275,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm/0.17.12: + resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64/0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -2177,6 +2292,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64/0.17.12: + resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32/0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -2185,6 +2309,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32/0.17.12: + resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64/0.15.18: resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -2201,6 +2334,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64/0.17.12: + resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el/0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -2209,6 +2351,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el/0.17.12: + resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64/0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -2217,6 +2368,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64/0.17.12: + resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64/0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -2225,6 +2385,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64/0.17.12: + resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x/0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -2233,6 +2402,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x/0.17.12: + resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64/0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} @@ -2241,6 +2419,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64/0.17.12: + resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64/0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -2249,6 +2436,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64/0.17.12: + resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64/0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -2257,6 +2453,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64/0.17.12: + resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64/0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -2265,6 +2470,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64/0.17.12: + resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64/0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -2273,6 +2487,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64/0.17.12: + resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32/0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -2281,6 +2504,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32/0.17.12: + resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64/0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -2289,6 +2521,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64/0.17.12: + resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3180,6 +3421,19 @@ packages: - supports-color dev: false + /@mdx-js/rollup/2.3.0: + resolution: {integrity: sha512-wLvRfJS/M4UmdqTd+WoaySEE7q4BIejYf1xAHXYvtT1du/1Tl/z2450Gg2+Hu7fh05KwRRiehiTP9Yc/Dtn0fA==} + peerDependencies: + rollup: '>=2' + dependencies: + '@mdx-js/mdx': 2.2.1 + '@rollup/pluginutils': 5.0.2 + source-map: 0.7.4 + vfile: 5.3.6 + transitivePeerDependencies: + - supports-color + dev: false + /@nanostores/persistent/0.7.0_nanostores@0.7.4: resolution: {integrity: sha512-4PAInL/T1hbftZUJ0cmgdFHBMalUoq7BUXFBy7QfyMv/8X3LPTYNh/yxspL7+J+XM3UNvVI7IFRMMs6FBasjhQ==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} @@ -3645,6 +3899,18 @@ packages: tailwindcss: 3.2.4 dev: false + /@tailwindcss/typography/0.5.9_tailwindcss@3.2.7: + resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.2.7_postcss@8.4.21 + dev: true + /@tonaljs/abc-notation/4.8.0: resolution: {integrity: sha512-JggT/DW4rMxu+q1WkeACrg52is3acp9zaW4LJmCheFi3CmLa63sy7/6mgKnlScTOvcpAyTcSytu0VbQHRXyBDA==} dependencies: @@ -4302,6 +4568,22 @@ packages: - supports-color dev: true + /@vitejs/plugin-react/3.1.0_vite@4.2.0: + resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.1.0-beta.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.12 + magic-string: 0.27.0 + react-refresh: 0.14.0 + vite: 4.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /@vitest/ui/0.25.8: resolution: {integrity: sha512-wfuhghldD5QHLYpS46GK8Ru8P3XcMrWvFjRQD21KNzc9Y/qtJsqoC8KmT6xWVkMNw4oHYixpo3a4ZySRJdserw==} dependencies: @@ -4798,6 +5080,22 @@ packages: postcss: 8.4.21 postcss-value-parser: 4.2.0 + /autoprefixer/10.4.14_postcss@8.4.21: + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001468 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -4948,6 +5246,17 @@ packages: node-releases: 2.0.8 update-browserslist-db: 1.0.10_browserslist@4.21.4 + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001468 + electron-to-chromium: 1.4.284 + node-releases: 2.0.8 + update-browserslist-db: 1.0.10_browserslist@4.21.5 + dev: true + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -5091,6 +5400,10 @@ packages: /caniuse-lite/1.0.30001449: resolution: {integrity: sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==} + /caniuse-lite/1.0.30001468: + resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==} + dev: true + /canvas/2.11.0: resolution: {integrity: sha512-bdTjFexjKJEwtIo0oRx8eD4G2yWoUOXP9lj279jmQ2zMnTQhT8C3512OKz3s+ZOaQlLbE7TuVvRDYDB3Llyy5g==} engines: {node: '>=6'} @@ -6403,6 +6716,36 @@ packages: '@esbuild/win32-ia32': 0.16.17 '@esbuild/win32-x64': 0.16.17 + /esbuild/0.17.12: + resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.12 + '@esbuild/android-arm64': 0.17.12 + '@esbuild/android-x64': 0.17.12 + '@esbuild/darwin-arm64': 0.17.12 + '@esbuild/darwin-x64': 0.17.12 + '@esbuild/freebsd-arm64': 0.17.12 + '@esbuild/freebsd-x64': 0.17.12 + '@esbuild/linux-arm': 0.17.12 + '@esbuild/linux-arm64': 0.17.12 + '@esbuild/linux-ia32': 0.17.12 + '@esbuild/linux-loong64': 0.17.12 + '@esbuild/linux-mips64el': 0.17.12 + '@esbuild/linux-ppc64': 0.17.12 + '@esbuild/linux-riscv64': 0.17.12 + '@esbuild/linux-s390x': 0.17.12 + '@esbuild/linux-x64': 0.17.12 + '@esbuild/netbsd-x64': 0.17.12 + '@esbuild/openbsd-x64': 0.17.12 + '@esbuild/sunos-x64': 0.17.12 + '@esbuild/win32-arm64': 0.17.12 + '@esbuild/win32-ia32': 0.17.12 + '@esbuild/win32-x64': 0.17.12 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -8599,7 +8942,6 @@ packages: /lodash.castarray/4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - dev: false /lodash.debounce/4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -8611,7 +8953,6 @@ packages: /lodash.isplainobject/4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: false /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -10594,7 +10935,6 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: false /postcss-selector-parser/6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} @@ -11493,6 +11833,14 @@ packages: optionalDependencies: fsevents: 2.3.2 + /rollup/3.19.1: + resolution: {integrity: sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -12247,6 +12595,40 @@ packages: - ts-node dev: true + /tailwindcss/3.2.7_postcss@8.4.21: + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.6 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-import: 14.1.0_postcss@8.4.21 + postcss-js: 4.0.0_postcss@8.4.21 + postcss-load-config: 3.1.4_postcss@8.4.21 + postcss-nested: 6.0.0_postcss@8.4.21 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: true + /tapable/2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -12904,6 +13286,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db/1.0.10_browserslist@4.21.5: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.5 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -13142,6 +13535,39 @@ packages: optionalDependencies: fsevents: 2.3.2 + /vite/4.2.0: + resolution: {integrity: sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.17.12 + postcss: 8.4.21 + resolve: 1.22.1 + rollup: 3.19.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vitefu/0.2.4_vite@3.2.5: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3b068aa60..4221e3ee2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,5 +2,6 @@ packages: # all packages in direct subdirs of packages/ - "packages/*" - "website/" + - "iclc2023/slides/" - "packages/core/examples/vite-vanilla-repl" - "packages/react/examples/nano-repl" \ No newline at end of file