mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-26 13:08:28 +00:00
Merge remote-tracking branch 'origin/main' into soft-errors
This commit is contained in:
commit
684bab99a9
807
package-lock.json
generated
807
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
4
packages/react/dist/index.cjs.js
vendored
4
packages/react/dist/index.cjs.js
vendored
File diff suppressed because one or more lines are too long
224
packages/react/dist/index.es.js
vendored
224
packages/react/dist/index.es.js
vendored
@ -1,9 +1,10 @@
|
|||||||
import React, { useState, useEffect, useCallback, useMemo, useRef, useLayoutEffect } from 'react';
|
import React, { useState, useEffect, useCallback, useMemo, useRef, useLayoutEffect } from 'react';
|
||||||
import { CodeMirror as CodeMirror$1 } from 'react-codemirror6';
|
import _CodeMirror from '@uiw/react-codemirror';
|
||||||
import { EditorView, Decoration } from '@codemirror/view';
|
import { Decoration, EditorView } from '@codemirror/view';
|
||||||
import { StateEffect, StateField } from '@codemirror/state';
|
import { StateEffect, StateField } from '@codemirror/state';
|
||||||
import { javascript } from '@codemirror/lang-javascript';
|
import { javascript } from '@codemirror/lang-javascript';
|
||||||
import { HighlightStyle, tags } from '@codemirror/highlight';
|
import { tags } from '@lezer/highlight';
|
||||||
|
import { createTheme } from '@uiw/codemirror-themes';
|
||||||
import { useInView } from 'react-hook-inview';
|
import { useInView } from 'react-hook-inview';
|
||||||
import { evaluate } from '@strudel.cycles/eval';
|
import { evaluate } from '@strudel.cycles/eval';
|
||||||
import { getPlayableNoteValue } from '@strudel.cycles/core/util.mjs';
|
import { getPlayableNoteValue } from '@strudel.cycles/core/util.mjs';
|
||||||
@ -11,146 +12,42 @@ import { Tone } from '@strudel.cycles/tone';
|
|||||||
import { TimeSpan, State } from '@strudel.cycles/core';
|
import { TimeSpan, State } from '@strudel.cycles/core';
|
||||||
import { WebMidi, enableWebMidi } from '@strudel.cycles/midi';
|
import { WebMidi, enableWebMidi } from '@strudel.cycles/midi';
|
||||||
|
|
||||||
/*
|
var strudelTheme = createTheme({
|
||||||
Credits for color palette:
|
theme: 'dark',
|
||||||
|
settings: {
|
||||||
Author: Mattia Astorino (http://github.com/equinusocio)
|
background: '#222',
|
||||||
Website: https://material-theme.site/
|
foreground: '#75baff', // whats that?
|
||||||
*/
|
caret: '#ffcc00',
|
||||||
|
selection: 'rgba(128, 203, 196, 0.5)',
|
||||||
const ivory = '#abb2bf',
|
selectionMatch: '#036dd626',
|
||||||
stone = '#7d8799', // Brightened compared to original to increase contrast
|
lineHighlight: '#8a91991a',
|
||||||
invalid = '#ffffff',
|
gutterBackground: 'transparent',
|
||||||
darkBackground = '#21252b',
|
// gutterForeground: '#8a919966',
|
||||||
highlightBackground = 'rgba(0, 0, 0, 0.5)',
|
gutterForeground: '#676e95',
|
||||||
// background = '#292d3e',
|
|
||||||
background = 'transparent',
|
|
||||||
tooltipBackground = '#353a42',
|
|
||||||
selection = 'rgba(128, 203, 196, 0.5)',
|
|
||||||
cursor = '#ffcc00';
|
|
||||||
|
|
||||||
/// The editor theme styles for Material Palenight.
|
|
||||||
const materialPalenightTheme = EditorView.theme(
|
|
||||||
{
|
|
||||||
// done
|
|
||||||
'&': {
|
|
||||||
color: '#ffffff',
|
|
||||||
backgroundColor: background,
|
|
||||||
fontSize: '15px',
|
|
||||||
'z-index': 11,
|
|
||||||
},
|
|
||||||
|
|
||||||
// done
|
|
||||||
'.cm-content': {
|
|
||||||
caretColor: cursor,
|
|
||||||
lineHeight: '22px',
|
|
||||||
},
|
|
||||||
'.cm-line': {
|
|
||||||
// background: '#2C323699',
|
|
||||||
background: 'transparent',
|
|
||||||
},
|
|
||||||
'.cm-line > *': {
|
|
||||||
// background: '#2C323699',
|
|
||||||
background: '#00000090',
|
|
||||||
// background: 'transparent',
|
|
||||||
},
|
|
||||||
// done
|
|
||||||
'&.cm-focused .cm-cursor': {
|
|
||||||
backgroundColor: cursor,
|
|
||||||
width: '3px',
|
|
||||||
},
|
|
||||||
|
|
||||||
'&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
|
|
||||||
backgroundColor: selection,
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-panels': { backgroundColor: darkBackground, color: '#ffffff' },
|
|
||||||
'.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
|
|
||||||
'.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
|
|
||||||
|
|
||||||
// done, use onedarktheme
|
|
||||||
'.cm-searchMatch': {
|
|
||||||
backgroundColor: '#72a1ff59',
|
|
||||||
outline: '1px solid #457dff',
|
|
||||||
},
|
|
||||||
'.cm-searchMatch.cm-searchMatch-selected': {
|
|
||||||
backgroundColor: '#6199ff2f',
|
|
||||||
},
|
|
||||||
|
|
||||||
// commented out because it looks bad in mini repl one liners
|
|
||||||
//'.cm-activeLine': { backgroundColor: cursor + '50' },
|
|
||||||
'.cm-selectionMatch': { backgroundColor: '#aafe661a' },
|
|
||||||
|
|
||||||
'&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {
|
|
||||||
backgroundColor: '#bad0f847',
|
|
||||||
outline: '1px solid #515a6b',
|
|
||||||
},
|
|
||||||
|
|
||||||
// done
|
|
||||||
'.cm-gutters': {
|
|
||||||
background: 'transparent',
|
|
||||||
color: '#676e95',
|
|
||||||
border: 'none',
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-activeLineGutter': {
|
|
||||||
backgroundColor: highlightBackground,
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-foldPlaceholder': {
|
|
||||||
backgroundColor: 'transparent',
|
|
||||||
border: 'none',
|
|
||||||
color: '#ddd',
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-tooltip': {
|
|
||||||
border: 'none',
|
|
||||||
backgroundColor: tooltipBackground,
|
|
||||||
},
|
|
||||||
'.cm-tooltip .cm-tooltip-arrow:before': {
|
|
||||||
borderTopColor: 'transparent',
|
|
||||||
borderBottomColor: 'transparent',
|
|
||||||
},
|
|
||||||
'.cm-tooltip .cm-tooltip-arrow:after': {
|
|
||||||
borderTopColor: tooltipBackground,
|
|
||||||
borderBottomColor: tooltipBackground,
|
|
||||||
},
|
|
||||||
'.cm-tooltip-autocomplete': {
|
|
||||||
'& > ul > li[aria-selected]': {
|
|
||||||
backgroundColor: highlightBackground,
|
|
||||||
color: ivory,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{ dark: true },
|
styles: [
|
||||||
);
|
{ tag: tags.keyword, color: '#c792ea' },
|
||||||
|
{ tag: tags.operator, color: '#89ddff' },
|
||||||
|
{ tag: tags.special(tags.variableName), color: '#eeffff' },
|
||||||
|
{ tag: tags.typeName, color: '#f07178' },
|
||||||
|
{ tag: tags.atom, color: '#f78c6c' },
|
||||||
|
{ tag: tags.number, color: '#ff5370' },
|
||||||
|
{ tag: tags.definition(tags.variableName), color: '#82aaff' },
|
||||||
|
{ tag: tags.string, color: '#c3e88d' },
|
||||||
|
{ tag: tags.special(tags.string), color: '#f07178' },
|
||||||
|
{ tag: tags.comment, color: '#7d8799' },
|
||||||
|
{ tag: tags.variableName, color: '#f07178' },
|
||||||
|
{ tag: tags.tagName, color: '#ff5370' },
|
||||||
|
{ tag: tags.bracket, color: '#a2a1a4' },
|
||||||
|
{ tag: tags.meta, color: '#ffcb6b' },
|
||||||
|
{ tag: tags.attributeName, color: '#c792ea' },
|
||||||
|
{ tag: tags.propertyName, color: '#c792ea' },
|
||||||
|
{ tag: tags.className, color: '#decb6b' },
|
||||||
|
{ tag: tags.invalid, color: '#ffffff' },
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
/// The highlighting style for code in the Material Palenight theme.
|
var style = '';
|
||||||
const materialPalenightHighlightStyle = HighlightStyle.define([
|
|
||||||
{ tag: tags.keyword, color: '#c792ea' },
|
|
||||||
{ tag: tags.operator, color: '#89ddff' },
|
|
||||||
{ tag: tags.special(tags.variableName), color: '#eeffff' },
|
|
||||||
{ tag: tags.typeName, color: '#f07178' },
|
|
||||||
{ tag: tags.atom, color: '#f78c6c' },
|
|
||||||
{ tag: tags.number, color: '#ff5370' },
|
|
||||||
{ tag: tags.definition(tags.variableName), color: '#82aaff' },
|
|
||||||
{ tag: tags.string, color: '#c3e88d' },
|
|
||||||
{ tag: tags.special(tags.string), color: '#f07178' },
|
|
||||||
{ tag: tags.comment, color: stone },
|
|
||||||
{ tag: tags.variableName, color: '#f07178' },
|
|
||||||
{ tag: tags.tagName, color: '#ff5370' },
|
|
||||||
{ tag: tags.bracket, color: '#a2a1a4' },
|
|
||||||
{ tag: tags.meta, color: '#ffcb6b' },
|
|
||||||
{ tag: tags.attributeName, color: '#c792ea' },
|
|
||||||
{ tag: tags.propertyName, color: '#c792ea' },
|
|
||||||
{ tag: tags.className, color: '#decb6b' },
|
|
||||||
{ tag: tags.invalid, color: invalid },
|
|
||||||
]);
|
|
||||||
|
|
||||||
/// Extension to enable the Material Palenight theme (both the editor theme and
|
|
||||||
/// the highlight style).
|
|
||||||
// : Extension
|
|
||||||
const materialPalenight = [materialPalenightTheme, materialPalenightHighlightStyle];
|
|
||||||
|
|
||||||
const setFlash = StateEffect.define();
|
const setFlash = StateEffect.define();
|
||||||
const flashField = StateField.define({
|
const flashField = StateField.define({
|
||||||
@ -212,22 +109,21 @@ const highlightField = StateField.define({
|
|||||||
},
|
},
|
||||||
provide: (f) => EditorView.decorations.from(f)
|
provide: (f) => EditorView.decorations.from(f)
|
||||||
});
|
});
|
||||||
function CodeMirror({ value, onChange, onViewChanged, onCursor, options, editorDidMount }) {
|
function CodeMirror({ value, onChange, onViewChanged, onSelectionChange, options, editorDidMount }) {
|
||||||
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CodeMirror$1, {
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(_CodeMirror, {
|
||||||
onViewChange: onViewChanged,
|
|
||||||
style: {
|
|
||||||
display: "flex",
|
|
||||||
flexDirection: "column",
|
|
||||||
flex: "1 0 auto"
|
|
||||||
},
|
|
||||||
value,
|
value,
|
||||||
onChange,
|
onChange: (value2) => {
|
||||||
extensions: [
|
onChange(value2);
|
||||||
javascript(),
|
},
|
||||||
materialPalenight,
|
onCreateEditor: (view) => {
|
||||||
highlightField,
|
onViewChanged(view);
|
||||||
flashField
|
},
|
||||||
]
|
onUpdate: (viewUpdate) => {
|
||||||
|
if (viewUpdate.selectionSet && onSelectionChange) {
|
||||||
|
onSelectionChange(viewUpdate.state.selection);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
extensions: [javascript(), strudelTheme, highlightField, flashField]
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,15 +426,13 @@ function useHighlighting({ view, pattern, active }) {
|
|||||||
|
|
||||||
var tailwind = '';
|
var tailwind = '';
|
||||||
|
|
||||||
var style = '';
|
const container = "_container_3i85k_1";
|
||||||
|
const header = "_header_3i85k_5";
|
||||||
const container = "_container_xpa19_1";
|
const buttons = "_buttons_3i85k_9";
|
||||||
const header = "_header_xpa19_5";
|
const button = "_button_3i85k_9";
|
||||||
const buttons = "_buttons_xpa19_9";
|
const buttonDisabled = "_buttonDisabled_3i85k_17";
|
||||||
const button = "_button_xpa19_9";
|
const error = "_error_3i85k_21";
|
||||||
const buttonDisabled = "_buttonDisabled_xpa19_17";
|
const body = "_body_3i85k_25";
|
||||||
const error = "_error_xpa19_21";
|
|
||||||
const body = "_body_xpa19_25";
|
|
||||||
var styles = {
|
var styles = {
|
||||||
container: container,
|
container: container,
|
||||||
header: header,
|
header: header,
|
||||||
|
|||||||
2
packages/react/dist/style.css
vendored
2
packages/react/dist/style.css
vendored
@ -1 +1 @@
|
|||||||
*,:before,:after{--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}.cm-editor{background-color:transparent!important}._container_xpa19_1{overflow:hidden;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(17 17 17 / var(--tw-bg-opacity))}._header_xpa19_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_xpa19_9{display:flex}._button_xpa19_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_xpa19_9:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}._buttonDisabled_xpa19_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_xpa19_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_xpa19_25{position:relative;overflow:auto}
|
.cm-editor{background-color:transparent!important;height:100%;z-index:11;font-size:16px}.cm-theme-light{width:100%}.cm-line>*{background:#00000095}*,:before,:after{--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}._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}
|
||||||
|
|||||||
3984
packages/react/package-lock.json
generated
3984
packages/react/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -37,11 +37,12 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/tidalcycles/strudel#readme",
|
"homepage": "https://github.com/tidalcycles/strudel#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/lang-javascript": "^0.19.0",
|
"@codemirror/lang-javascript": "^6.0.2",
|
||||||
"@strudel.cycles/core": "^0.1.2",
|
"@strudel.cycles/core": "^0.1.2",
|
||||||
"@strudel.cycles/eval": "^0.1.3",
|
"@strudel.cycles/eval": "^0.1.3",
|
||||||
"@strudel.cycles/tone": "^0.1.3",
|
"@strudel.cycles/tone": "^0.1.3",
|
||||||
"react-codemirror6": "^1.1.0",
|
"@uiw/codemirror-themes": "^4.11.4",
|
||||||
|
"@uiw/react-codemirror": "^4.11.4",
|
||||||
"react-hook-inview": "^4.5.0"
|
"react-hook-inview": "^4.5.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { CodeMirror as _CodeMirror } from 'react-codemirror6';
|
import _CodeMirror from '@uiw/react-codemirror';
|
||||||
// import { CodeMirrorLite as _CodeMirror } from 'react-codemirror6/dist/lite';
|
|
||||||
import { EditorView, Decoration } from '@codemirror/view';
|
import { EditorView, Decoration } from '@codemirror/view';
|
||||||
import { StateField, StateEffect } from '@codemirror/state';
|
import { StateField, StateEffect } from '@codemirror/state';
|
||||||
import { javascript } from '@codemirror/lang-javascript';
|
import { javascript } from '@codemirror/lang-javascript';
|
||||||
// import { materialPalenight } from 'codemirror6-themes';
|
import strudelTheme from '../themes/strudel-theme';
|
||||||
import { materialPalenight } from '../themes/material-palenight';
|
import './style.css';
|
||||||
|
|
||||||
export const setFlash = StateEffect.define();
|
export const setFlash = StateEffect.define();
|
||||||
const flashField = StateField.define({
|
const flashField = StateField.define({
|
||||||
@ -79,25 +78,23 @@ const highlightField = StateField.define({
|
|||||||
provide: (f) => EditorView.decorations.from(f),
|
provide: (f) => EditorView.decorations.from(f),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default function CodeMirror({ value, onChange, onViewChanged, onCursor, options, editorDidMount }) {
|
export default function CodeMirror({ value, onChange, onViewChanged, onSelectionChange, options, editorDidMount }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<_CodeMirror
|
<_CodeMirror
|
||||||
onViewChange={onViewChanged}
|
|
||||||
style={{
|
|
||||||
display: 'flex',
|
|
||||||
flexDirection: 'column',
|
|
||||||
flex: '1 0 auto',
|
|
||||||
}}
|
|
||||||
value={value}
|
value={value}
|
||||||
onChange={onChange}
|
onChange={(value) => {
|
||||||
extensions={[
|
onChange(value);
|
||||||
javascript(),
|
}}
|
||||||
materialPalenight,
|
onCreateEditor={(view) => {
|
||||||
highlightField,
|
onViewChanged(view);
|
||||||
flashField,
|
}}
|
||||||
// theme, language, ...
|
onUpdate={(viewUpdate) => {
|
||||||
]}
|
if (viewUpdate.selectionSet && onSelectionChange) {
|
||||||
|
onSelectionChange(viewUpdate.state.selection);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
extensions={[javascript(), strudelTheme, highlightField, flashField]}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
.container {
|
.container {
|
||||||
@apply sc-rounded-md sc-overflow-hidden sc-bg-[#111111];
|
@apply sc-rounded-md sc-overflow-hidden sc-bg-[#222222];
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
|
|||||||
@ -1,3 +1,14 @@
|
|||||||
.cm-editor {
|
.cm-editor {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 11;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-theme-light {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-line > * {
|
||||||
|
background: #00000095;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,143 +0,0 @@
|
|||||||
import { EditorView } from '@codemirror/view';
|
|
||||||
import { HighlightStyle, tags as t } from '@codemirror/highlight';
|
|
||||||
|
|
||||||
/*
|
|
||||||
Credits for color palette:
|
|
||||||
|
|
||||||
Author: Mattia Astorino (http://github.com/equinusocio)
|
|
||||||
Website: https://material-theme.site/
|
|
||||||
*/
|
|
||||||
|
|
||||||
const ivory = '#abb2bf',
|
|
||||||
stone = '#7d8799', // Brightened compared to original to increase contrast
|
|
||||||
invalid = '#ffffff',
|
|
||||||
darkBackground = '#21252b',
|
|
||||||
highlightBackground = 'rgba(0, 0, 0, 0.5)',
|
|
||||||
// background = '#292d3e',
|
|
||||||
background = 'transparent',
|
|
||||||
tooltipBackground = '#353a42',
|
|
||||||
selection = 'rgba(128, 203, 196, 0.5)',
|
|
||||||
cursor = '#ffcc00';
|
|
||||||
|
|
||||||
/// The editor theme styles for Material Palenight.
|
|
||||||
export const materialPalenightTheme = EditorView.theme(
|
|
||||||
{
|
|
||||||
// done
|
|
||||||
'&': {
|
|
||||||
color: '#ffffff',
|
|
||||||
backgroundColor: background,
|
|
||||||
fontSize: '15px',
|
|
||||||
'z-index': 11,
|
|
||||||
},
|
|
||||||
|
|
||||||
// done
|
|
||||||
'.cm-content': {
|
|
||||||
caretColor: cursor,
|
|
||||||
lineHeight: '22px',
|
|
||||||
},
|
|
||||||
'.cm-line': {
|
|
||||||
// background: '#2C323699',
|
|
||||||
background: 'transparent',
|
|
||||||
},
|
|
||||||
'.cm-line > *': {
|
|
||||||
// background: '#2C323699',
|
|
||||||
background: '#00000090',
|
|
||||||
// background: 'transparent',
|
|
||||||
},
|
|
||||||
// done
|
|
||||||
'&.cm-focused .cm-cursor': {
|
|
||||||
backgroundColor: cursor,
|
|
||||||
width: '3px',
|
|
||||||
},
|
|
||||||
|
|
||||||
'&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
|
|
||||||
backgroundColor: selection,
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-panels': { backgroundColor: darkBackground, color: '#ffffff' },
|
|
||||||
'.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
|
|
||||||
'.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
|
|
||||||
|
|
||||||
// done, use onedarktheme
|
|
||||||
'.cm-searchMatch': {
|
|
||||||
backgroundColor: '#72a1ff59',
|
|
||||||
outline: '1px solid #457dff',
|
|
||||||
},
|
|
||||||
'.cm-searchMatch.cm-searchMatch-selected': {
|
|
||||||
backgroundColor: '#6199ff2f',
|
|
||||||
},
|
|
||||||
|
|
||||||
// commented out because it looks bad in mini repl one liners
|
|
||||||
//'.cm-activeLine': { backgroundColor: cursor + '50' },
|
|
||||||
'.cm-selectionMatch': { backgroundColor: '#aafe661a' },
|
|
||||||
|
|
||||||
'&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {
|
|
||||||
backgroundColor: '#bad0f847',
|
|
||||||
outline: '1px solid #515a6b',
|
|
||||||
},
|
|
||||||
|
|
||||||
// done
|
|
||||||
'.cm-gutters': {
|
|
||||||
background: 'transparent',
|
|
||||||
color: '#676e95',
|
|
||||||
border: 'none',
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-activeLineGutter': {
|
|
||||||
backgroundColor: highlightBackground,
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-foldPlaceholder': {
|
|
||||||
backgroundColor: 'transparent',
|
|
||||||
border: 'none',
|
|
||||||
color: '#ddd',
|
|
||||||
},
|
|
||||||
|
|
||||||
'.cm-tooltip': {
|
|
||||||
border: 'none',
|
|
||||||
backgroundColor: tooltipBackground,
|
|
||||||
},
|
|
||||||
'.cm-tooltip .cm-tooltip-arrow:before': {
|
|
||||||
borderTopColor: 'transparent',
|
|
||||||
borderBottomColor: 'transparent',
|
|
||||||
},
|
|
||||||
'.cm-tooltip .cm-tooltip-arrow:after': {
|
|
||||||
borderTopColor: tooltipBackground,
|
|
||||||
borderBottomColor: tooltipBackground,
|
|
||||||
},
|
|
||||||
'.cm-tooltip-autocomplete': {
|
|
||||||
'& > ul > li[aria-selected]': {
|
|
||||||
backgroundColor: highlightBackground,
|
|
||||||
color: ivory,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ dark: true },
|
|
||||||
);
|
|
||||||
|
|
||||||
/// The highlighting style for code in the Material Palenight theme.
|
|
||||||
export const materialPalenightHighlightStyle = HighlightStyle.define([
|
|
||||||
{ tag: t.keyword, color: '#c792ea' },
|
|
||||||
{ tag: t.operator, color: '#89ddff' },
|
|
||||||
{ tag: t.special(t.variableName), color: '#eeffff' },
|
|
||||||
{ tag: t.typeName, color: '#f07178' },
|
|
||||||
{ tag: t.atom, color: '#f78c6c' },
|
|
||||||
{ tag: t.number, color: '#ff5370' },
|
|
||||||
{ tag: t.definition(t.variableName), color: '#82aaff' },
|
|
||||||
{ tag: t.string, color: '#c3e88d' },
|
|
||||||
{ tag: t.special(t.string), color: '#f07178' },
|
|
||||||
{ tag: t.comment, color: stone },
|
|
||||||
{ tag: t.variableName, color: '#f07178' },
|
|
||||||
{ tag: t.tagName, color: '#ff5370' },
|
|
||||||
{ tag: t.bracket, color: '#a2a1a4' },
|
|
||||||
{ tag: t.meta, color: '#ffcb6b' },
|
|
||||||
{ tag: t.attributeName, color: '#c792ea' },
|
|
||||||
{ tag: t.propertyName, color: '#c792ea' },
|
|
||||||
{ tag: t.className, color: '#decb6b' },
|
|
||||||
{ tag: t.invalid, color: invalid },
|
|
||||||
]);
|
|
||||||
|
|
||||||
/// Extension to enable the Material Palenight theme (both the editor theme and
|
|
||||||
/// the highlight style).
|
|
||||||
// : Extension
|
|
||||||
export const materialPalenight = [materialPalenightTheme, materialPalenightHighlightStyle];
|
|
||||||
36
packages/react/src/themes/strudel-theme.js
Normal file
36
packages/react/src/themes/strudel-theme.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import { tags as t } from '@lezer/highlight';
|
||||||
|
import { createTheme } from '@uiw/codemirror-themes';
|
||||||
|
export default createTheme({
|
||||||
|
theme: 'dark',
|
||||||
|
settings: {
|
||||||
|
background: '#222',
|
||||||
|
foreground: '#75baff', // whats that?
|
||||||
|
caret: '#ffcc00',
|
||||||
|
selection: 'rgba(128, 203, 196, 0.5)',
|
||||||
|
selectionMatch: '#036dd626',
|
||||||
|
lineHighlight: '#8a91991a',
|
||||||
|
gutterBackground: 'transparent',
|
||||||
|
// gutterForeground: '#8a919966',
|
||||||
|
gutterForeground: '#676e95',
|
||||||
|
},
|
||||||
|
styles: [
|
||||||
|
{ tag: t.keyword, color: '#c792ea' },
|
||||||
|
{ tag: t.operator, color: '#89ddff' },
|
||||||
|
{ tag: t.special(t.variableName), color: '#eeffff' },
|
||||||
|
{ tag: t.typeName, color: '#f07178' },
|
||||||
|
{ tag: t.atom, color: '#f78c6c' },
|
||||||
|
{ tag: t.number, color: '#ff5370' },
|
||||||
|
{ tag: t.definition(t.variableName), color: '#82aaff' },
|
||||||
|
{ tag: t.string, color: '#c3e88d' },
|
||||||
|
{ tag: t.special(t.string), color: '#f07178' },
|
||||||
|
{ tag: t.comment, color: '#7d8799' },
|
||||||
|
{ tag: t.variableName, color: '#f07178' },
|
||||||
|
{ tag: t.tagName, color: '#ff5370' },
|
||||||
|
{ tag: t.bracket, color: '#a2a1a4' },
|
||||||
|
{ tag: t.meta, color: '#ffcb6b' },
|
||||||
|
{ tag: t.attributeName, color: '#c792ea' },
|
||||||
|
{ tag: t.propertyName, color: '#c792ea' },
|
||||||
|
{ tag: t.className, color: '#decb6b' },
|
||||||
|
{ tag: t.invalid, color: '#ffffff' },
|
||||||
|
],
|
||||||
|
});
|
||||||
@ -33,8 +33,12 @@ export default defineConfig({
|
|||||||
'@strudel.cycles/serial',
|
'@strudel.cycles/serial',
|
||||||
'@strudel.cycles/webaudio',
|
'@strudel.cycles/webaudio',
|
||||||
'@codemirror/view',
|
'@codemirror/view',
|
||||||
'@codemirror/highlight',
|
'@codemirror/lang-javascript',
|
||||||
'@codemirror/state'
|
'@codemirror/state',
|
||||||
|
'@codemirror/commands',
|
||||||
|
'@lezer/highlight',
|
||||||
|
'@codemirror/language',
|
||||||
|
'@uiw/codemirror-themes'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
target: 'esnext',
|
target: 'esnext',
|
||||||
|
|||||||
@ -1,21 +1,10 @@
|
|||||||
|
@import '@strudel.cycles/react/dist/style.css';
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: #111;
|
background-color: #222;
|
||||||
}
|
|
||||||
|
|
||||||
.react-codemirror2,
|
|
||||||
.CodeMirror {
|
|
||||||
height: 100% !important;
|
|
||||||
background-color: transparent !important;
|
|
||||||
font-size: 15px;
|
|
||||||
z-index:20
|
|
||||||
}
|
|
||||||
|
|
||||||
.CodeMirror-line > span {
|
|
||||||
background-color: #11111190;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.darken::before {
|
.darken::before {
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
@import '@strudel.cycles/react/dist/style.css';
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user