From 3c07178148ba57fa6bbf81fbf3ec83abee488de4 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 09:41:07 +1100 Subject: [PATCH 1/8] add keybinding settings --- package.json | 3 +- packages/codemirror/package.json | 5 +- packages/codemirror/src/codemirror.js | 31 ++++++++++--- packages/codemirror/src/keybindings.js | 33 +++++++++++++ pnpm-lock.yaml | 64 ++++++++++++++++++++++++++ website/src/components/Codemirror.jsx | 10 ++-- website/src/components/Reference.jsx | 18 ++++---- website/src/components/Repl.jsx | 21 +++++++-- website/src/components/Settings.jsx | 60 ++++++++++++++++++++++++ 9 files changed, 220 insertions(+), 25 deletions(-) create mode 100644 packages/codemirror/src/keybindings.js create mode 100644 website/src/components/Settings.jsx diff --git a/package.json b/package.json index c903882..658f027 100644 --- a/package.json +++ b/package.json @@ -19,5 +19,6 @@ }, "devDependencies": { "lerna": "8.1.4" - } + }, + "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" } diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 5bc420c..63a83dc 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -16,6 +16,9 @@ "@codemirror/view": "^6.28.4", "codemirror": "^6.0.1", "@lezer/highlight": "^1.2.0", - "@kabelsalat/transpiler": "workspace:*" + "@kabelsalat/transpiler": "workspace:*", + "@replit/codemirror-emacs": "^6.1.0", + "@replit/codemirror-vim": "^6.2.1", + "@replit/codemirror-vscode-keymap": "^6.0.2" } } diff --git a/packages/codemirror/src/codemirror.js b/packages/codemirror/src/codemirror.js index ad6099d..03e7d80 100644 --- a/packages/codemirror/src/codemirror.js +++ b/packages/codemirror/src/codemirror.js @@ -5,15 +5,25 @@ import { insertNewline } from "@codemirror/commands"; import { widgetPlugin } from "./widgets.js"; import { flashField } from "./flash.js"; import { - lineNumbers, - highlightActiveLineGutter, highlightActiveLine, + highlightActiveLineGutter, keymap, + lineNumbers, } from "@codemirror/view"; + import { bracketMatching } from "@codemirror/language"; -import { Prec } from "@codemirror/state"; +import { Compartment, Prec } from "@codemirror/state"; +import { keybindings } from "./keybindings.js"; -export function initEditor({ root, code, onChange, onEvaluate, onStop }) { +export function initEditor({ + root, + code, + settings, + onChange, + onEvaluate, + onStop, +}) { + const keybindingsCompartment = new Compartment(); let editor = new EditorView({ extensions: [ //basicSetup, @@ -26,6 +36,7 @@ export function initEditor({ root, code, onChange, onEvaluate, onStop }) { widgetPlugin, EditorView.lineWrapping, javascript(), + keybindingsCompartment.of(keybindings(settings.keybindings)), EditorView.updateListener.of((v) => { if (v.docChanged) { onChange?.(v.state.doc.toString()); @@ -59,11 +70,12 @@ export function initEditor({ root, code, onChange, onEvaluate, onStop }) { return true; }, }, - ]) + ]), ), ], parent: root, }); + const setCode = (code) => { const changes = { from: 0, @@ -72,9 +84,16 @@ export function initEditor({ root, code, onChange, onEvaluate, onStop }) { }; editor.dispatch({ changes }); }; + setCode(code); const getCode = () => editor.state.doc.toString(); - return { setCode, getCode, editor }; + const setKeybindings = (bindings) => { + editor.dispatch({ + effects: keybindingsCompartment.reconfigure(keybindings(bindings)), + }); + }; + + return { setCode, getCode, editor, setKeybindings }; } diff --git a/packages/codemirror/src/keybindings.js b/packages/codemirror/src/keybindings.js new file mode 100644 index 0000000..6e87d9c --- /dev/null +++ b/packages/codemirror/src/keybindings.js @@ -0,0 +1,33 @@ +import { Prec } from "@codemirror/state"; +import { keymap, ViewPlugin } from "@codemirror/view"; +import { emacs } from "@replit/codemirror-emacs"; +import { vim } from "@replit/codemirror-vim"; +import { vscodeKeymap } from "@replit/codemirror-vscode-keymap"; +import { defaultKeymap, historyKeymap } from "@codemirror/commands"; + +const vscodePlugin = ViewPlugin.fromClass( + class { + constructor() { } + }, + { + provide: () => { + return Prec.highest(keymap.of([...vscodeKeymap])); + }, + }, +); +const vscodeExtension = (options) => [vscodePlugin].concat(options ?? []); + +export const keymaps = { + vim, + emacs, + vscode: vscodeExtension, +}; + +export function keybindings(name) { + const active = keymaps[name]; + return [ + keymap.of(defaultKeymap), + keymap.of(historyKeymap), + active ? active() : [], + ]; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53f524a..6d5eecd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,15 @@ importers: '@lezer/highlight': specifier: ^1.2.0 version: 1.2.0 + '@replit/codemirror-emacs': + specifier: ^6.1.0 + version: 6.1.0(@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1))(@codemirror/commands@6.6.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4) + '@replit/codemirror-vim': + specifier: ^6.2.1 + version: 6.2.1(@codemirror/commands@6.6.0)(@codemirror/language@6.10.2)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4) + '@replit/codemirror-vscode-keymap': + specifier: ^6.0.2 + version: 6.0.2(@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1))(@codemirror/commands@6.6.0)(@codemirror/language@6.10.2)(@codemirror/lint@6.8.1)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4) codemirror: specifier: ^6.0.1 version: 6.0.1(@lezer/common@1.2.1) @@ -887,6 +896,35 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@replit/codemirror-emacs@6.1.0': + resolution: {integrity: sha512-74DITnht6Cs6sHg02PQ169IKb1XgtyhI9sLD0JeOFco6Ds18PT+dkD8+DgXBDokne9UIFKsBbKPnpFRAz60/Lw==} + peerDependencies: + '@codemirror/autocomplete': ^6.0.2 + '@codemirror/commands': ^6.0.0 + '@codemirror/search': ^6.0.0 + '@codemirror/state': ^6.0.1 + '@codemirror/view': ^6.3.0 + + '@replit/codemirror-vim@6.2.1': + resolution: {integrity: sha512-qDAcGSHBYU5RrdO//qCmD8K9t6vbP327iCj/iqrkVnjbrpFhrjOt92weGXGHmTNRh16cUtkUZ7Xq7rZf+8HVow==} + peerDependencies: + '@codemirror/commands': ^6.0.0 + '@codemirror/language': ^6.1.0 + '@codemirror/search': ^6.2.0 + '@codemirror/state': ^6.0.1 + '@codemirror/view': ^6.0.3 + + '@replit/codemirror-vscode-keymap@6.0.2': + resolution: {integrity: sha512-j45qTwGxzpsv82lMD/NreGDORFKSctMDVkGRopaP+OrzSzv+pXDQuU3LnFvKpasyjVT0lf+PKG1v2DSCn/vxxg==} + peerDependencies: + '@codemirror/autocomplete': ^6.0.0 + '@codemirror/commands': ^6.0.0 + '@codemirror/language': ^6.0.0 + '@codemirror/lint': ^6.0.0 + '@codemirror/search': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@rollup/rollup-android-arm-eabi@4.18.0': resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] @@ -5104,6 +5142,32 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@replit/codemirror-emacs@6.1.0(@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1))(@codemirror/commands@6.6.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)': + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/commands': 6.6.0 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + + '@replit/codemirror-vim@6.2.1(@codemirror/commands@6.6.0)(@codemirror/language@6.10.2)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)': + dependencies: + '@codemirror/commands': 6.6.0 + '@codemirror/language': 6.10.2 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + + '@replit/codemirror-vscode-keymap@6.0.2(@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1))(@codemirror/commands@6.6.0)(@codemirror/language@6.10.2)(@codemirror/lint@6.8.1)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)': + dependencies: + '@codemirror/autocomplete': 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) + '@codemirror/commands': 6.6.0 + '@codemirror/language': 6.10.2 + '@codemirror/lint': 6.8.1 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.28.4 + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true diff --git a/website/src/components/Codemirror.jsx b/website/src/components/Codemirror.jsx index fea568a..021c970 100644 --- a/website/src/components/Codemirror.jsx +++ b/website/src/components/Codemirror.jsx @@ -11,15 +11,17 @@ export function Codemirror(props) { cm.setCode(props.code); } }); + + createEffect(() => { + cm.setKeybindings(props.settings.keybindings); + }); + return (
{ - cm = initEditor({ - root: el, - ...props, - }); + cm = initEditor({ root: el, ...props }); setView(cm.editor); }} >
diff --git a/website/src/components/Reference.jsx b/website/src/components/Reference.jsx index 1ecbd08..7c71b61 100644 --- a/website/src/components/Reference.jsx +++ b/website/src/components/Reference.jsx @@ -1,4 +1,4 @@ -import { For, createSignal } from "solid-js"; +import { createSignal, For } from "solid-js"; import { nodeRegistry } from "@kabelsalat/core"; import { MiniRepl } from "./MiniRepl.jsx"; @@ -18,18 +18,19 @@ const items = Array.from(nodeRegistry.entries()) .filter(([_, schema]) => !schema.internal) .sort(([a], [b]) => a.localeCompare(b)); const tags = Array.from( - new Set(items.map((item) => item[1].tags).flat()) + new Set(items.map((item) => item[1].tags).flat()), ).filter(Boolean); const tagRefs = Object.fromEntries( tags.map((tag) => [ tag, items.filter(([_, schema]) => schema.tags?.includes(tag)).length, - ]) + ]), ); export function Reference() { const [selectedTags, setSelectedTags] = createSignal([]); + const toggleTag = (tag) => { let next; if (selectedTags().includes(tag)) { @@ -40,15 +41,16 @@ export function Reference() { } setSelectedTags(next); }; + const filtered = () => selectedTags().length === 0 ? items : items.filter((item) => - selectedTags().reduce( - (acc, tag) => acc && item[1].tags?.includes(tag), - true - ) - ); + selectedTags().reduce( + (acc, tag) => acc && item[1].tags?.includes(tag), + true, + ), + ); return (
diff --git a/website/src/components/Repl.jsx b/website/src/components/Repl.jsx index 881507d..9d92a93 100644 --- a/website/src/components/Repl.jsx +++ b/website/src/components/Repl.jsx @@ -1,14 +1,15 @@ -import { Show, createSignal, onCleanup, onMount } from "solid-js"; +import { createSignal, onCleanup, onMount, Show } from "solid-js"; import "@kabelsalat/graphviz"; import { SalatRepl } from "@kabelsalat/web"; import { Icon } from "./Icon"; import { Reference } from "./Reference"; +import { $settings, Settings } from "./Settings"; import { examples } from "../examples"; import { persistentAtom } from "@nanostores/persistent"; import { useStore } from "@nanostores/solid"; -import { History, addToHistory, $history } from "./History"; +import { $history, addToHistory, History } from "./History"; import { Codemirror, codemirrorView } from "./Codemirror"; -import { updateWidgets, flash } from "@kabelsalat/codemirror"; +import { flash, updateWidgets } from "@kabelsalat/codemirror"; import { transpiler } from "@kabelsalat/transpiler"; export const $hideWelcome = persistentAtom("hideWelcome", "false"); @@ -52,7 +53,9 @@ let vizSettings = { resolveModules: false }; let TAB_GRAPH = "graph"; let TAB_DOCS = "docs"; let TAB_PATCHES = "browse"; -const panels = [TAB_GRAPH, TAB_PATCHES, TAB_DOCS]; +let TAB_SETTINGS = "settings"; + +const panels = [TAB_GRAPH, TAB_PATCHES, TAB_DOCS, TAB_SETTINGS]; function getURLCode() { let url = new URL(window.location); @@ -80,6 +83,7 @@ function updateCode(code) { } export function Repl() { + const settings = useStore($settings); let [started, setStarted] = createSignal(false); let [recording, setRecording] = createSignal(false); const repl = new SalatRepl({ @@ -232,6 +236,7 @@ export function Repl() { }`} > run()} @@ -282,6 +287,12 @@ export function Repl() {
+ +
+

settings

+ +
+

examples

@@ -325,7 +336,7 @@ export function base64ToUnicode(base64String) { const utf8Bytes = new Uint8Array( atob(base64String) .split("") - .map((char) => char.charCodeAt(0)) + .map((char) => char.charCodeAt(0)), ); const decodedText = new TextDecoder().decode(utf8Bytes); return decodedText; diff --git a/website/src/components/Settings.jsx b/website/src/components/Settings.jsx new file mode 100644 index 0000000..8f45462 --- /dev/null +++ b/website/src/components/Settings.jsx @@ -0,0 +1,60 @@ +import { persistentAtom } from "@nanostores/persistent"; +import { useStore } from "@nanostores/solid"; + +const defaultSettings = { + keybindings: "codemirror", +}; + +export const $settings = persistentAtom( + "kabel-salat-settings", + defaultSettings, + { + encode: JSON.stringify, + decode: JSON.parse, + }, +); + +export const updateSettings = (key, value) => + $settings.set({ ...$settings.get(), [key]: value }); + +export function Settings() { + const settings = useStore($settings); + const keybindings = () => settings().keybindings; + return ( +
+ + { + updateSettings("keybindings", key); + }} + value={keybindings} + /> +
+ ); +} + +function ButtonGroup({ items, value, onChange }) { + return ( +
+ {Object.entries(items).map(([key, label]) => ( + + ))} +
+ ); +} From f553c5a75d0e75d08a5e53f68fecd81f1a8e8106 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 11:10:53 +1100 Subject: [PATCH 2/8] some clean up --- website/src/components/Repl.jsx | 16 ++++++---------- website/src/components/Settings.jsx | 15 +++++---------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/website/src/components/Repl.jsx b/website/src/components/Repl.jsx index 9d92a93..564e19e 100644 --- a/website/src/components/Repl.jsx +++ b/website/src/components/Repl.jsx @@ -198,9 +198,8 @@ export function Repl() {
setZen((z) => !z)} > @@ -231,9 +230,8 @@ export function Repl() {
)}
-

settings

@@ -299,11 +296,10 @@ export function Repl() { {(example) => (
run(example.code)} > {example.label} diff --git a/website/src/components/Settings.jsx b/website/src/components/Settings.jsx index 8f45462..df4bf11 100644 --- a/website/src/components/Settings.jsx +++ b/website/src/components/Settings.jsx @@ -14,7 +14,7 @@ export const $settings = persistentAtom( }, ); -export const updateSettings = (key, value) => +const updateSettings = (key, value) => $settings.set({ ...$settings.get(), [key]: value }); export function Settings() { @@ -22,7 +22,7 @@ export function Settings() { const keybindings = () => settings().keybindings; return (
- +

Keybindings

{ - updateSettings("keybindings", key); - }} value={keybindings} + onChange={(key) => updateSettings("keybindings", key)} />
); @@ -46,11 +44,8 @@ function ButtonGroup({ items, value, onChange }) { From e65245fff5476cb4dcbbc725818dc0267d6fe097 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:07:14 +1100 Subject: [PATCH 3/8] revert changes introduced by formatter --- packages/codemirror/src/codemirror.js | 19 ++++---- website/src/components/Repl.jsx | 67 ++++++++++++++------------- website/src/components/Settings.jsx | 13 +++--- 3 files changed, 49 insertions(+), 50 deletions(-) diff --git a/packages/codemirror/src/codemirror.js b/packages/codemirror/src/codemirror.js index 03e7d80..e7ec76c 100644 --- a/packages/codemirror/src/codemirror.js +++ b/packages/codemirror/src/codemirror.js @@ -5,10 +5,10 @@ import { insertNewline } from "@codemirror/commands"; import { widgetPlugin } from "./widgets.js"; import { flashField } from "./flash.js"; import { - highlightActiveLine, + lineNumbers, highlightActiveLineGutter, + highlightActiveLine, keymap, - lineNumbers, } from "@codemirror/view"; import { bracketMatching } from "@codemirror/language"; @@ -68,30 +68,29 @@ export function initEditor({ run: (view) => { insertNewline(view); return true; - }, - }, - ]), - ), + } + } + ]) + ) ], - parent: root, + parent: root }); const setCode = (code) => { const changes = { from: 0, to: editor.state.doc.length, - insert: code, + insert: code }; editor.dispatch({ changes }); }; setCode(code); - const getCode = () => editor.state.doc.toString(); const setKeybindings = (bindings) => { editor.dispatch({ - effects: keybindingsCompartment.reconfigure(keybindings(bindings)), + effects: keybindingsCompartment.reconfigure(keybindings(bindings)) }); }; diff --git a/website/src/components/Repl.jsx b/website/src/components/Repl.jsx index 564e19e..112c7ec 100644 --- a/website/src/components/Repl.jsx +++ b/website/src/components/Repl.jsx @@ -149,16 +149,16 @@ export function Repl() { class="items-center flex space-x-1 hover:opacity-50" > {!started() ? ( - <> - - - - ) : ( - <> - - - - )} + <> + + + + ) : ( + <> + + + + )}
setZen((z) => !z)} > @@ -230,8 +230,9 @@ export function Repl() {
)}
(
setActivePanel(panel)} - class={ - `select-none hover:opacity-50 cursor-pointer text-teal-600 py-1 ` + + class={`select-none hover:opacity-50 cursor-pointer text-teal-600 py-1 ` + (activePanel() === panel ? `border-b-2 border-teal-600` - : "") - } + : "")} > {panel}
@@ -277,7 +276,8 @@ export function Repl() { handleError(err); } }} - >
+ > +
@@ -296,10 +296,11 @@ export function Repl() { {(example) => (
run(example.code)} > {example.label} diff --git a/website/src/components/Settings.jsx b/website/src/components/Settings.jsx index df4bf11..947979c 100644 --- a/website/src/components/Settings.jsx +++ b/website/src/components/Settings.jsx @@ -8,10 +8,7 @@ const defaultSettings = { export const $settings = persistentAtom( "kabel-salat-settings", defaultSettings, - { - encode: JSON.stringify, - decode: JSON.parse, - }, + { encode: JSON.stringify, decode: JSON.parse } ); const updateSettings = (key, value) => @@ -39,13 +36,15 @@ export function Settings() { function ButtonGroup({ items, value, onChange }) { return ( -
+
{Object.entries(items).map(([key, label]) => ( From 0e78f70ef23ab9572bdfcee5223df3fd58b2c0f3 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:13:43 +1100 Subject: [PATCH 4/8] revert revert --- packages/codemirror/src/codemirror.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/codemirror/src/codemirror.js b/packages/codemirror/src/codemirror.js index e7ec76c..5d465b0 100644 --- a/packages/codemirror/src/codemirror.js +++ b/packages/codemirror/src/codemirror.js @@ -4,16 +4,15 @@ import { javascript } from "@codemirror/lang-javascript"; import { insertNewline } from "@codemirror/commands"; import { widgetPlugin } from "./widgets.js"; import { flashField } from "./flash.js"; +import { keybindings } from "./keybindings.js"; import { - lineNumbers, - highlightActiveLineGutter, highlightActiveLine, + highlightActiveLineGutter, keymap, + lineNumbers, } from "@codemirror/view"; - import { bracketMatching } from "@codemirror/language"; import { Compartment, Prec } from "@codemirror/state"; -import { keybindings } from "./keybindings.js"; export function initEditor({ root, @@ -24,6 +23,7 @@ export function initEditor({ onStop, }) { const keybindingsCompartment = new Compartment(); + let editor = new EditorView({ extensions: [ //basicSetup, @@ -68,19 +68,19 @@ export function initEditor({ run: (view) => { insertNewline(view); return true; - } - } - ]) - ) + }, + }, + ]), + ), ], - parent: root + parent: root, }); const setCode = (code) => { const changes = { from: 0, to: editor.state.doc.length, - insert: code + insert: code, }; editor.dispatch({ changes }); }; @@ -90,7 +90,7 @@ export function initEditor({ const setKeybindings = (bindings) => { editor.dispatch({ - effects: keybindingsCompartment.reconfigure(keybindings(bindings)) + effects: keybindingsCompartment.reconfigure(keybindings(bindings)), }); }; From 79789866b3d8de458d435b31314e401e44cf3369 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:43:07 +1100 Subject: [PATCH 5/8] some more clean up --- package.json | 3 +-- packages/codemirror/src/codemirror.js | 3 +-- packages/codemirror/src/keybindings.js | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 658f027..c903882 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,5 @@ }, "devDependencies": { "lerna": "8.1.4" - }, - "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" + } } diff --git a/packages/codemirror/src/codemirror.js b/packages/codemirror/src/codemirror.js index 5d465b0..ee06a1c 100644 --- a/packages/codemirror/src/codemirror.js +++ b/packages/codemirror/src/codemirror.js @@ -23,7 +23,6 @@ export function initEditor({ onStop, }) { const keybindingsCompartment = new Compartment(); - let editor = new EditorView({ extensions: [ //basicSetup, @@ -70,7 +69,7 @@ export function initEditor({ return true; }, }, - ]), + ]) ), ], parent: root, diff --git a/packages/codemirror/src/keybindings.js b/packages/codemirror/src/keybindings.js index 6e87d9c..04d7c53 100644 --- a/packages/codemirror/src/keybindings.js +++ b/packages/codemirror/src/keybindings.js @@ -7,13 +7,13 @@ import { defaultKeymap, historyKeymap } from "@codemirror/commands"; const vscodePlugin = ViewPlugin.fromClass( class { - constructor() { } + constructor() {} }, { provide: () => { return Prec.highest(keymap.of([...vscodeKeymap])); }, - }, + } ); const vscodeExtension = (options) => [vscodePlugin].concat(options ?? []); From 5e226bab196e3054bf7f077682e88be90c101682 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:47:33 +1100 Subject: [PATCH 6/8] clean up --- website/src/components/Reference.jsx | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/website/src/components/Reference.jsx b/website/src/components/Reference.jsx index 7c71b61..a091154 100644 --- a/website/src/components/Reference.jsx +++ b/website/src/components/Reference.jsx @@ -18,19 +18,18 @@ const items = Array.from(nodeRegistry.entries()) .filter(([_, schema]) => !schema.internal) .sort(([a], [b]) => a.localeCompare(b)); const tags = Array.from( - new Set(items.map((item) => item[1].tags).flat()), + new Set(items.map((item) => item[1].tags).flat()) ).filter(Boolean); const tagRefs = Object.fromEntries( tags.map((tag) => [ tag, items.filter(([_, schema]) => schema.tags?.includes(tag)).length, - ]), + ]) ); export function Reference() { const [selectedTags, setSelectedTags] = createSignal([]); - const toggleTag = (tag) => { let next; if (selectedTags().includes(tag)) { @@ -41,16 +40,15 @@ export function Reference() { } setSelectedTags(next); }; - const filtered = () => selectedTags().length === 0 ? items : items.filter((item) => - selectedTags().reduce( - (acc, tag) => acc && item[1].tags?.includes(tag), - true, - ), - ); + selectedTags().reduce( + (acc, tag) => acc && item[1].tags?.includes(tag), + true + ) + ); return (
@@ -65,8 +63,7 @@ export function Reference() { ? "bg-teal-700" : "bg-stone-700") } - onClick={() => toggleTag(tag)} - > + onClick={() => toggleTag(tag)}> {tag} ({tagRefs[tag]}) {" "} @@ -86,8 +83,7 @@ export function Reference() { const container = document.getElementById("scroll-container"); const pos = el.offsetTop - container.offsetTop - 10; container.scrollTo(0, pos); - }} - > + }}> {name} {" "} From 930b1c448a6361fdbb6d46be14488f10a348aca1 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:49:09 +1100 Subject: [PATCH 7/8] reverting more formatting --- website/src/components/Repl.jsx | 86 +++++++++++++++------------------ 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/website/src/components/Repl.jsx b/website/src/components/Repl.jsx index 112c7ec..b91875f 100644 --- a/website/src/components/Repl.jsx +++ b/website/src/components/Repl.jsx @@ -138,56 +138,52 @@ export function Repl() {
setZen((z) => !z)} - > + onClick={() => setZen((z) => !z)}> 🔌 kabelsalat
+ href="/learn"> @@ -201,8 +197,7 @@ export function Repl() { started() ? "animate-pulse" : "" } bg-gradient-to-r from-teal-400 to-fuchsia-300 inline-block text-transparent bg-clip-text cursor-pointer fixed top-2 right-4 z-10`} - onClick={() => setZen((z) => !z)} - > + onClick={() => setZen((z) => !z)}> 🔌
@@ -232,8 +227,7 @@ export function Repl() {
+ }`}>
+ class={`hidden sm:flex flex-col h-full overflow-hidden border-l border-stone-800`}>
+ class={`select-none bg-stone-900 overflow-auto text-gray-500 p-4 grow-0 h-full`}>
{ @@ -275,9 +268,7 @@ export function Repl() { } catch (err) { handleError(err); } - }} - > -
+ }}>
@@ -301,8 +292,7 @@ export function Repl() { ? " border-b border-teal-600" : "" }`} - onClick={() => run(example.code)} - > + onClick={() => run(example.code)}> {example.label}
@@ -333,7 +323,7 @@ export function base64ToUnicode(base64String) { const utf8Bytes = new Uint8Array( atob(base64String) .split("") - .map((char) => char.charCodeAt(0)), + .map((char) => char.charCodeAt(0)) ); const decodedText = new TextDecoder().decode(utf8Bytes); return decodedText; From dcc669b8e366001200deb2f032f5258f678b5ec2 Mon Sep 17 00:00:00 2001 From: munozu Date: Sun, 9 Feb 2025 13:56:31 +1100 Subject: [PATCH 8/8] fixing formatting issues --- website/src/components/Settings.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/website/src/components/Settings.jsx b/website/src/components/Settings.jsx index 947979c..0755d90 100644 --- a/website/src/components/Settings.jsx +++ b/website/src/components/Settings.jsx @@ -44,8 +44,7 @@ function ButtonGroup({ items, value, onChange }) { class={ "border-b h-8 whitespace-nowrap " + (value() === key ? "border-foreground" : "border-transparent") - } - > + }> {label.toLowerCase()} ))}