diff --git a/packages/react/.gitignore b/packages/react/.gitignore index 0b37e8f5..251ce6d2 100644 --- a/packages/react/.gitignore +++ b/packages/react/.gitignore @@ -11,8 +11,6 @@ node_modules dist-ssr *.local -!dist - # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/packages/react/dist/index.cjs.js b/packages/react/dist/index.cjs.js deleted file mode 100644 index 6837f4d8..00000000 --- a/packages/react/dist/index.cjs.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react"),de=require("@uiw/react-codemirror"),w=require("@codemirror/view"),V=require("@codemirror/state"),fe=require("@codemirror/lang-javascript"),d=require("@lezer/highlight"),ge=require("@uiw/codemirror-themes"),Z=require("@strudel.cycles/webaudio"),me=require("react-hook-inview"),T=require("@strudel.cycles/core"),he=require("@strudel.cycles/transpiler"),ee=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},f=ee(t),pe=ee(de),ve=ge.createTheme({theme:"dark",settings:{background:"#222",foreground:"#75baff",caret:"#ffcc00",selection:"rgba(128, 203, 196, 0.5)",selectionMatch:"#036dd626",lineHighlight:"#00000050",gutterBackground:"transparent",gutterForeground:"#8a919966"},styles:[{tag:d.tags.keyword,color:"#c792ea"},{tag:d.tags.operator,color:"#89ddff"},{tag:d.tags.special(d.tags.variableName),color:"#eeffff"},{tag:d.tags.typeName,color:"#c3e88d"},{tag:d.tags.atom,color:"#f78c6c"},{tag:d.tags.number,color:"#c3e88d"},{tag:d.tags.definition(d.tags.variableName),color:"#82aaff"},{tag:d.tags.string,color:"#c3e88d"},{tag:d.tags.special(d.tags.string),color:"#c3e88d"},{tag:d.tags.comment,color:"#7d8799"},{tag:d.tags.variableName,color:"#c792ea"},{tag:d.tags.tagName,color:"#c3e88d"},{tag:d.tags.bracket,color:"#525154"},{tag:d.tags.meta,color:"#ffcb6b"},{tag:d.tags.attributeName,color:"#c792ea"},{tag:d.tags.propertyName,color:"#c792ea"},{tag:d.tags.className,color:"#decb6b"},{tag:d.tags.invalid,color:"#ffffff"}]});const J=V.StateEffect.define(),be=V.StateField.define({create(){return w.Decoration.none},update(e,r){try{for(let o of r.effects)if(o.is(J))if(o.value){const n=w.Decoration.mark({attributes:{style:"background-color: #FFCA2880"}});e=w.Decoration.set([n.range(0,r.newDoc.length)])}else e=w.Decoration.set([]);return e}catch(o){return console.warn("flash error",o),e}},provide:e=>w.EditorView.decorations.from(e)}),te=e=>{e.dispatch({effects:J.of(!0)}),setTimeout(()=>{e.dispatch({effects:J.of(!1)})},200)},z=V.StateEffect.define(),Ee=V.StateField.define({create(){return w.Decoration.none},update(e,r){try{for(let o of r.effects)if(o.is(z)){const n=o.value.map(u=>(u.context.locations||[]).map(({start:m,end:g})=>{const s=u.context.color||"#FFCA28";let l=r.newDoc.line(m.line).from+m.column,p=r.newDoc.line(g.line).from+g.column;const E=r.newDoc.length;return l>E||p>E?void 0:w.Decoration.mark({attributes:{style:`outline: 1.5px solid ${s};`}}).range(l,p)})).flat().filter(Boolean)||[];e=w.Decoration.set(n,!0)}return e}catch{return w.Decoration.set([])}},provide:e=>w.EditorView.decorations.from(e)}),ye=[fe.javascript(),ve,Ee,be];function re({value:e,onChange:r,onViewChanged:o,onSelectionChange:n,options:u,editorDidMount:m}){const g=t.useCallback(p=>{r?.(p)},[r]),s=t.useCallback(p=>{o?.(p)},[o]),l=t.useCallback(p=>{p.selectionSet&&n&&n?.(p.state.selection)},[n]);return f.default.createElement(f.default.Fragment,null,f.default.createElement(pe.default,{value:e,onChange:g,onCreateEditor:s,onUpdate:l,extensions:ye}))}function G(...e){return e.filter(Boolean).join(" ")}function oe({view:e,pattern:r,active:o,getTime:n}){const u=t.useRef([]),m=t.useRef(0);t.useEffect(()=>{if(e)if(r&&o){m.current=0;let g=requestAnimationFrame(function s(){try{const l=n(),E=[Math.max(m.current??l,l-1/10,-.01),l+1/60];m.current=E[1],u.current=u.current.filter(h=>h.whole.end>l);const i=r.queryArc(...E).filter(h=>h.hasOnset());u.current=u.current.concat(i),e.dispatch({effects:z.of(u.current)})}catch{e.dispatch({effects:z.of([])})}g=requestAnimationFrame(s)});return()=>{cancelAnimationFrame(g)}}else u.current=[],e.dispatch({effects:z.of([])})},[r,o,e])}function we(e,r=!1){const o=t.useRef(),n=t.useRef(),u=s=>{if(n.current!==void 0){const l=s-n.current;e(s,l)}n.current=s,o.current=requestAnimationFrame(u)},m=()=>{o.current=requestAnimationFrame(u)},g=()=>{o.current&&cancelAnimationFrame(o.current),delete o.current};return t.useEffect(()=>{o.current&&(g(),m())},[e]),t.useEffect(()=>(r&&m(),g),[]),{start:m,stop:g}}function ke({pattern:e,started:r,getTime:o,onDraw:n,drawTime:u=[-2,2]}){let[m,g]=u;m=Math.abs(m);let s=t.useRef([]),l=t.useRef(null);t.useEffect(()=>{if(e&&r){const i=o(),h=e.queryArc(Math.max(i,0),i+g+.1);s.current=s.current.filter(v=>v.whole.begin{const i=o()+g;if(l.current===null){l.current=i;return}const h=e.queryArc(Math.max(l.current,i-1/10),i);l.current=i,s.current=(s.current||[]).filter(v=>v.whole.end>=i-m-g).concat(h.filter(v=>v.hasOnset())),n(e,i-g,s.current,u)},[e]));return t.useEffect(()=>{r?p():(s.current=[],E())},[r]),{clear:()=>{s.current=[]}}}function ne(e){return t.useEffect(()=>(window.addEventListener("message",e),()=>window.removeEventListener("message",e)),[e]),t.useCallback(r=>window.postMessage(r,"*"),[])}function ae({defaultOutput:e,interval:r,getTime:o,evalOnMount:n=!1,initialCode:u="",autolink:m=!1,beforeEval:g,afterEval:s,editPattern:l,onEvalError:p,onToggle:E,canvasId:i,drawContext:h,drawTime:v=[-2,2]}){const F=t.useMemo(()=>_e(),[]);i=i||`canvas-${F}`;const[S,D]=t.useState(),[N,x]=t.useState(),[y,L]=t.useState(u),[P,A]=t.useState(),[R,O]=t.useState(),[M,H]=t.useState(!1),j=y!==P,q=t.useCallback(c=>!!(c?.context?.onPaint&&h),[h]),{scheduler:C,evaluate:a,start:b,stop:B,pause:I}=t.useMemo(()=>T.repl({interval:r,defaultOutput:e,onSchedulerError:D,onEvalError:c=>{x(c),p?.(c)},getTime:o,drawContext:h,transpiler:he.transpiler,editPattern:l,beforeEval:({code:c})=>{L(c),g?.()},afterEval:({pattern:c,code:k})=>{A(k),O(c),x(),D(),m&&(window.location.hash="#"+encodeURIComponent(btoa(k))),s?.()},onToggle:c=>{H(c),E?.(c)}}),[e,r,o]),se=ne(({data:{from:c,type:k}})=>{k==="start"&&c!==F&&B()}),Q=t.useCallback(async(c=!0)=>{const k=await a(y,c);return se({type:"start",from:F}),k},[a,y]),K=t.useCallback((c,k,W,$)=>{const{onPaint:ie}=c.context||{},ue=typeof h=="function"?h(i):h;ie?.(ue,k,W,$)},[h,i]),U=t.useCallback(c=>{if(q(c)){const[k,W]=v,$=c.queryArc(0,W);K(c,-.001,$,v)}},[v,K,q]),X=t.useRef();t.useEffect(()=>{!X.current&&n&&y&&(X.current=!0,a(y,!1).then(c=>U(c)))},[n,y,a,U]),t.useEffect(()=>()=>{C.stop()},[C]);const ce=async()=>{M?(C.stop(),U(R)):await Q()},le=S||N;return ke({pattern:R,started:q(R)&&M,getTime:()=>C.now(),drawTime:v,onDraw:K}),{id:F,canvasId:i,code:y,setCode:L,error:le,schedulerError:S,scheduler:C,evalError:N,evaluate:a,activateCode:Q,activeCode:P,isDirty:j,pattern:R,started:M,start:b,stop:B,pause:I,togglePlay:ce}}function _e(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}function Y({type:e}){return f.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"sc-h-5 sc-w-5",viewBox:"0 0 20 20",fill:"currentColor"},{refresh:f.default.createElement("path",{fillRule:"evenodd",d:"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z",clipRule:"evenodd"}),play:f.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z",clipRule:"evenodd"}),pause:f.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"}),stop:f.default.createElement("path",{fillRule:"evenodd",d:"M2 10a8 8 0 1116 0 8 8 0 01-16 0zm5-2.25A.75.75 0 017.75 7h4.5a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-4.5a.75.75 0 01-.75-.75v-4.5z",clipRule:"evenodd"})}[e])}const Me="_container_3i85k_1",Ce="_header_3i85k_5",Fe="_buttons_3i85k_9",De="_button_3i85k_9",Re="_buttonDisabled_3i85k_17",qe="_error_3i85k_21",Se="_body_3i85k_25",_={container:Me,header:Ce,buttons:Fe,button:De,buttonDisabled:Re,error:qe,body:Se},Ae=()=>Z.getAudioContext().currentTime;function Ne({tune:e,hideOutsideView:r=!1,enableKeyboard:o,drawTime:n,punchcard:u,canvasHeight:m=200}){n=n||(u?[0,4]:void 0);const g=!!n,s=t.useCallback(n?a=>document.querySelector("#"+a)?.getContext("2d"):null,[n]),{code:l,setCode:p,evaluate:E,activateCode:i,error:h,isDirty:v,activeCode:F,pattern:S,started:D,scheduler:N,togglePlay:x,stop:y,canvasId:L,id:P}=ae({initialCode:e,defaultOutput:Z.webaudioOutput,editPattern:a=>u?a.punchcard():a,getTime:Ae,evalOnMount:g,drawContext:s,drawTime:n}),[A,R]=t.useState(),[O,M]=me.useInView({threshold:.01}),H=t.useRef(),j=t.useMemo(()=>((M||!r)&&(H.current=!0),M||H.current),[M,r]);oe({view:A,pattern:S,active:D&&!F?.includes("strudel disable-highlighting"),getTime:()=>N.now()}),t.useLayoutEffect(()=>{if(o){const a=async b=>{(b.ctrlKey||b.altKey)&&(b.code==="Enter"?(b.preventDefault(),te(A),await i()):b.code==="Period"&&(y(),b.preventDefault()))};return window.addEventListener("keydown",a,!0),()=>window.removeEventListener("keydown",a,!0)}},[o,S,l,E,y,A]);const[q,C]=t.useState([]);return xe(t.useCallback(a=>{const{data:b}=a.detail;b?.hap?.context?.id===P&&C(I=>I.concat([a.detail]).slice(-10))},[])),f.default.createElement("div",{className:_.container,ref:O},f.default.createElement("div",{className:_.header},f.default.createElement("div",{className:_.buttons},f.default.createElement("button",{className:G(_.button,D?"sc-animate-pulse":""),onClick:()=>x()},f.default.createElement(Y,{type:D?"stop":"play"})),f.default.createElement("button",{className:G(v?_.button:_.buttonDisabled),onClick:()=>i()},f.default.createElement(Y,{type:"refresh"}))),h&&f.default.createElement("div",{className:_.error},h.message)),f.default.createElement("div",{className:_.body},j&&f.default.createElement(re,{value:l,onChange:p,onViewChanged:R})),n&&f.default.createElement("canvas",{id:L,className:"w-full pointer-events-none",height:m,ref:a=>{a&&a.width!==a.clientWidth&&(a.width=a.clientWidth)}}),!!q.length&&f.default.createElement("div",{className:"sc-bg-gray-800 sc-rounded-md sc-p-2"},q.map(({message:a},b)=>f.default.createElement("div",{key:b},a))))}function xe(e){Le(T.logger.key,e)}function Le(e,r,o=!1){t.useEffect(()=>(document.addEventListener(e,r,o),()=>{document.removeEventListener(e,r,o)}),[r])}const Pe=e=>t.useLayoutEffect(()=>(window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)),[e]);exports.CodeMirror=re;exports.MiniRepl=Ne;exports.cx=G;exports.flash=te;exports.useHighlighting=oe;exports.useKeydown=Pe;exports.usePostMessage=ne;exports.useStrudel=ae; diff --git a/packages/react/dist/index.es.js b/packages/react/dist/index.es.js deleted file mode 100644 index 4aecb645..00000000 --- a/packages/react/dist/index.es.js +++ /dev/null @@ -1,442 +0,0 @@ -import d, { useCallback as E, useRef as A, useEffect as k, useMemo as Q, useState as _, useLayoutEffect as te } from "react"; -import ue from "@uiw/react-codemirror"; -import { Decoration as M, EditorView as re } from "@codemirror/view"; -import { StateEffect as ne, StateField as oe } from "@codemirror/state"; -import { javascript as de } from "@codemirror/lang-javascript"; -import { tags as u } from "@lezer/highlight"; -import { createTheme as fe } from "@uiw/codemirror-themes"; -import { webaudioOutput as me, getAudioContext as he } from "@strudel.cycles/webaudio"; -import { useInView as ge } from "react-hook-inview"; -import { repl as pe, logger as ve } from "@strudel.cycles/core"; -import { transpiler as be } from "@strudel.cycles/transpiler"; -const Ee = fe({ - theme: "dark", - settings: { - background: "#222", - foreground: "#75baff", - caret: "#ffcc00", - selection: "rgba(128, 203, 196, 0.5)", - selectionMatch: "#036dd626", - lineHighlight: "#00000050", - gutterBackground: "transparent", - gutterForeground: "#8a919966" - }, - styles: [ - { tag: u.keyword, color: "#c792ea" }, - { tag: u.operator, color: "#89ddff" }, - { tag: u.special(u.variableName), color: "#eeffff" }, - { tag: u.typeName, color: "#c3e88d" }, - { tag: u.atom, color: "#f78c6c" }, - { tag: u.number, color: "#c3e88d" }, - { tag: u.definition(u.variableName), color: "#82aaff" }, - { tag: u.string, color: "#c3e88d" }, - { tag: u.special(u.string), color: "#c3e88d" }, - { tag: u.comment, color: "#7d8799" }, - { tag: u.variableName, color: "#c792ea" }, - { tag: u.tagName, color: "#c3e88d" }, - { tag: u.bracket, color: "#525154" }, - { tag: u.meta, color: "#ffcb6b" }, - { tag: u.attributeName, color: "#c792ea" }, - { tag: u.propertyName, color: "#c792ea" }, - { tag: u.className, color: "#decb6b" }, - { tag: u.invalid, color: "#ffffff" } - ] -}); -const X = ne.define(), ye = oe.define({ - create() { - return M.none; - }, - update(e, t) { - try { - for (let r of t.effects) - if (r.is(X)) - if (r.value) { - const n = M.mark({ attributes: { style: "background-color: #FFCA2880" } }); - e = M.set([n.range(0, t.newDoc.length)]); - } else - e = M.set([]); - return e; - } catch (r) { - return console.warn("flash error", r), e; - } - }, - provide: (e) => re.decorations.from(e) -}), we = (e) => { - e.dispatch({ effects: X.of(!0) }), setTimeout(() => { - e.dispatch({ effects: X.of(!1) }); - }, 200); -}, B = ne.define(), ke = oe.define({ - create() { - return M.none; - }, - update(e, t) { - try { - for (let r of t.effects) - if (r.is(B)) { - const n = r.value.map( - (l) => (l.context.locations || []).map(({ start: m, end: f }) => { - const c = l.context.color || "#FFCA28"; - let s = t.newDoc.line(m.line).from + m.column, g = t.newDoc.line(f.line).from + f.column; - const b = t.newDoc.length; - return s > b || g > b ? void 0 : M.mark({ attributes: { style: `outline: 1.5px solid ${c};` } }).range(s, g); - }) - ).flat().filter(Boolean) || []; - e = M.set(n, !0); - } - return e; - } catch { - return M.set([]); - } - }, - provide: (e) => re.decorations.from(e) -}), Fe = [de(), Ee, ke, ye]; -function _e({ value: e, onChange: t, onViewChanged: r, onSelectionChange: n, options: l, editorDidMount: m }) { - const f = E( - (g) => { - t?.(g); - }, - [t] - ), c = E( - (g) => { - r?.(g); - }, - [r] - ), s = E( - (g) => { - g.selectionSet && n && n?.(g.state.selection); - }, - [n] - ); - return /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement(ue, { - value: e, - onChange: f, - onCreateEditor: c, - onUpdate: s, - extensions: Fe - })); -} -function T(...e) { - return e.filter(Boolean).join(" "); -} -function Me({ view: e, pattern: t, active: r, getTime: n }) { - const l = A([]), m = A(0); - k(() => { - if (e) - if (t && r) { - m.current = 0; - let f = requestAnimationFrame(function c() { - try { - const s = n(), b = [Math.max(m.current ?? s, s - 1 / 10, -0.01), s + 1 / 60]; - m.current = b[1], l.current = l.current.filter((h) => h.whole.end > s); - const i = t.queryArc(...b).filter((h) => h.hasOnset()); - l.current = l.current.concat(i), e.dispatch({ effects: B.of(l.current) }); - } catch { - e.dispatch({ effects: B.of([]) }); - } - f = requestAnimationFrame(c); - }); - return () => { - cancelAnimationFrame(f); - }; - } else - l.current = [], e.dispatch({ effects: B.of([]) }); - }, [t, r, e]); -} -function Ae(e, t = !1) { - const r = A(), n = A(), l = (c) => { - if (n.current !== void 0) { - const s = c - n.current; - e(c, s); - } - n.current = c, r.current = requestAnimationFrame(l); - }, m = () => { - r.current = requestAnimationFrame(l); - }, f = () => { - r.current && cancelAnimationFrame(r.current), delete r.current; - }; - return k(() => { - r.current && (f(), m()); - }, [e]), k(() => (t && m(), f), []), { - start: m, - stop: f - }; -} -function Ne({ pattern: e, started: t, getTime: r, onDraw: n, drawTime: l = [-2, 2] }) { - let [m, f] = l; - m = Math.abs(m); - let c = A([]), s = A(null); - k(() => { - if (e && t) { - const i = r(), h = e.queryArc(Math.max(i, 0), i + f + 0.1); - c.current = c.current.filter((p) => p.whole.begin < i), c.current = c.current.concat(h); - } - }, [e, t]); - const { start: g, stop: b } = Ae( - E(() => { - const i = r() + f; - if (s.current === null) { - s.current = i; - return; - } - const h = e.queryArc(Math.max(s.current, i - 1 / 10), i); - s.current = i, c.current = (c.current || []).filter((p) => p.whole.end >= i - m - f).concat(h.filter((p) => p.hasOnset())), n(e, i - f, c.current, l); - }, [e]) - ); - return k(() => { - t ? g() : (c.current = [], b()); - }, [t]), { - clear: () => { - c.current = []; - } - }; -} -function Ce(e) { - return k(() => (window.addEventListener("message", e), () => window.removeEventListener("message", e)), [e]), E((t) => window.postMessage(t, "*"), []); -} -function De({ - defaultOutput: e, - interval: t, - getTime: r, - evalOnMount: n = !1, - initialCode: l = "", - autolink: m = !1, - beforeEval: f, - afterEval: c, - editPattern: s, - onEvalError: g, - onToggle: b, - canvasId: i, - drawContext: h, - drawTime: p = [-2, 2] -}) { - const D = Q(() => Re(), []); - i = i || `canvas-${D}`; - const [P, R] = _(), [z, H] = _(), [y, S] = _(l), [V, q] = _(), [x, I] = _(), [N, O] = _(!1), K = y !== V, L = E((a) => !!(a?.context?.onPaint && h), [h]), { scheduler: C, evaluate: o, start: v, stop: j, pause: U } = Q( - () => pe({ - interval: t, - defaultOutput: e, - onSchedulerError: R, - onEvalError: (a) => { - H(a), g?.(a); - }, - getTime: r, - drawContext: h, - transpiler: be, - editPattern: s, - beforeEval: ({ code: a }) => { - S(a), f?.(); - }, - afterEval: ({ pattern: a, code: w }) => { - q(w), I(a), H(), R(), m && (window.location.hash = "#" + encodeURIComponent(btoa(w))), c?.(); - }, - onToggle: (a) => { - O(a), b?.(a); - } - }), - [e, t, r] - ), ce = Ce(({ data: { from: a, type: w } }) => { - w === "start" && a !== D && j(); - }), Y = E( - async (a = !0) => { - const w = await o(y, a); - return ce({ type: "start", from: D }), w; - }, - [o, y] - ), W = E( - (a, w, G, J) => { - const { onPaint: ie } = a.context || {}, le = typeof h == "function" ? h(i) : h; - ie?.(le, w, G, J); - }, - [h, i] - ), $ = E( - (a) => { - if (L(a)) { - const [w, G] = p, J = a.queryArc(0, G); - W(a, -1e-3, J, p); - } - }, - [p, W, L] - ), Z = A(); - k(() => { - !Z.current && n && y && (Z.current = !0, o(y, !1).then((a) => $(a))); - }, [n, y, o, $]), k(() => () => { - C.stop(); - }, [C]); - const ae = async () => { - N ? (C.stop(), $(x)) : await Y(); - }, se = P || z; - return Ne({ - pattern: x, - started: L(x) && N, - getTime: () => C.now(), - drawTime: p, - onDraw: W - }), { - id: D, - canvasId: i, - code: y, - setCode: S, - error: se, - schedulerError: P, - scheduler: C, - evalError: z, - evaluate: o, - activateCode: Y, - activeCode: V, - isDirty: K, - pattern: x, - started: N, - start: v, - stop: j, - pause: U, - togglePlay: ae - }; -} -function Re() { - return Math.floor((1 + Math.random()) * 65536).toString(16).substring(1); -} -function ee({ type: e }) { - return /* @__PURE__ */ d.createElement("svg", { - xmlns: "http://www.w3.org/2000/svg", - className: "sc-h-5 sc-w-5", - viewBox: "0 0 20 20", - fill: "currentColor" - }, { - refresh: /* @__PURE__ */ d.createElement("path", { - fillRule: "evenodd", - d: "M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z", - clipRule: "evenodd" - }), - play: /* @__PURE__ */ d.createElement("path", { - fillRule: "evenodd", - d: "M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z", - clipRule: "evenodd" - }), - pause: /* @__PURE__ */ d.createElement("path", { - fillRule: "evenodd", - d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z", - clipRule: "evenodd" - }), - stop: /* @__PURE__ */ d.createElement("path", { - fillRule: "evenodd", - d: "M2 10a8 8 0 1116 0 8 8 0 01-16 0zm5-2.25A.75.75 0 017.75 7h4.5a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-4.5a.75.75 0 01-.75-.75v-4.5z", - clipRule: "evenodd" - }) - }[e]); -} -const xe = "_container_3i85k_1", Le = "_header_3i85k_5", Pe = "_buttons_3i85k_9", qe = "_button_3i85k_9", ze = "_buttonDisabled_3i85k_17", He = "_error_3i85k_21", Se = "_body_3i85k_25", F = { - container: xe, - header: Le, - buttons: Pe, - button: qe, - buttonDisabled: ze, - error: He, - body: Se -}, Ve = () => he().currentTime; -function Ze({ tune: e, hideOutsideView: t = !1, enableKeyboard: r, drawTime: n, punchcard: l, canvasHeight: m = 200 }) { - n = n || (l ? [0, 4] : void 0); - const f = !!n, c = E( - n ? (o) => document.querySelector("#" + o)?.getContext("2d") : null, - [n] - ), { - code: s, - setCode: g, - evaluate: b, - activateCode: i, - error: h, - isDirty: p, - activeCode: D, - pattern: P, - started: R, - scheduler: z, - togglePlay: H, - stop: y, - canvasId: S, - id: V - } = De({ - initialCode: e, - defaultOutput: me, - editPattern: (o) => l ? o.punchcard() : o, - getTime: Ve, - evalOnMount: f, - drawContext: c, - drawTime: n - }), [q, x] = _(), [I, N] = ge({ - threshold: 0.01 - }), O = A(), K = Q(() => ((N || !t) && (O.current = !0), N || O.current), [N, t]); - Me({ - view: q, - pattern: P, - active: R && !D?.includes("strudel disable-highlighting"), - getTime: () => z.now() - }), te(() => { - if (r) { - const o = async (v) => { - (v.ctrlKey || v.altKey) && (v.code === "Enter" ? (v.preventDefault(), we(q), await i()) : v.code === "Period" && (y(), v.preventDefault())); - }; - return window.addEventListener("keydown", o, !0), () => window.removeEventListener("keydown", o, !0); - } - }, [r, P, s, b, y, q]); - const [L, C] = _([]); - return Oe( - E((o) => { - const { data: v } = o.detail; - v?.hap?.context?.id === V && C((U) => U.concat([o.detail]).slice(-10)); - }, []) - ), /* @__PURE__ */ d.createElement("div", { - className: F.container, - ref: I - }, /* @__PURE__ */ d.createElement("div", { - className: F.header - }, /* @__PURE__ */ d.createElement("div", { - className: F.buttons - }, /* @__PURE__ */ d.createElement("button", { - className: T(F.button, R ? "sc-animate-pulse" : ""), - onClick: () => H() - }, /* @__PURE__ */ d.createElement(ee, { - type: R ? "stop" : "play" - })), /* @__PURE__ */ d.createElement("button", { - className: T(p ? F.button : F.buttonDisabled), - onClick: () => i() - }, /* @__PURE__ */ d.createElement(ee, { - type: "refresh" - }))), h && /* @__PURE__ */ d.createElement("div", { - className: F.error - }, h.message)), /* @__PURE__ */ d.createElement("div", { - className: F.body - }, K && /* @__PURE__ */ d.createElement(_e, { - value: s, - onChange: g, - onViewChanged: x - })), n && /* @__PURE__ */ d.createElement("canvas", { - id: S, - className: "w-full pointer-events-none", - height: m, - ref: (o) => { - o && o.width !== o.clientWidth && (o.width = o.clientWidth); - } - }), !!L.length && /* @__PURE__ */ d.createElement("div", { - className: "sc-bg-gray-800 sc-rounded-md sc-p-2" - }, L.map(({ message: o }, v) => /* @__PURE__ */ d.createElement("div", { - key: v - }, o)))); -} -function Oe(e) { - Be(ve.key, e); -} -function Be(e, t, r = !1) { - k(() => (document.addEventListener(e, t, r), () => { - document.removeEventListener(e, t, r); - }), [t]); -} -const Te = (e) => te(() => (window.addEventListener("keydown", e, !0), () => window.removeEventListener("keydown", e, !0)), [e]); -export { - _e as CodeMirror, - Ze as MiniRepl, - T as cx, - we as flash, - Me as useHighlighting, - Te as useKeydown, - Ce as usePostMessage, - De as useStrudel -}; diff --git a/packages/react/dist/style.css b/packages/react/dist/style.css deleted file mode 100644 index 6e937139..00000000 --- a/packages/react/dist/style.css +++ /dev/null @@ -1 +0,0 @@ -.cm-editor{background-color:transparent!important;height:100%;z-index:11;font-size:18px}.cm-theme-light{width:100%}.cm-line>*{background:#00000095}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sc-h-5{height:1.25rem}.sc-w-5{width:1.25rem}@keyframes sc-pulse{50%{opacity:.5}}.sc-animate-pulse{animation:sc-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.sc-rounded-md{border-radius:.375rem}.sc-bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.sc-p-2{padding:.5rem}._container_3i85k_1{overflow:hidden;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity))}._header_3i85k_5{display:flex;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}._buttons_3i85k_9{display:flex}._button_3i85k_9{display:flex;width:4rem;cursor:pointer;align-items:center;justify-content:center;border-right-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._button_3i85k_9:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}._buttonDisabled_3i85k_17{display:flex;width:4rem;cursor:pointer;cursor:not-allowed;align-items:center;justify-content:center;--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}._error_3i85k_21{padding:.25rem;text-align:right;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}._body_3i85k_25{position:relative;overflow:auto}