diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 00000000..e4ec3136 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,23 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "ignorePatterns": [ + "package-lock.json", + "pnpm-lock.yaml", + "yarn.lock", + "bun.lock", + "bun.lockb", + "**/.svelte-kit", + "**/dist", + "**/.turbo", + "**/node_modules", + "**/src/vendor/**", + "**/vendor/**", + "**/public/**", + "**/gleamstd/**", + "**/*.gen.*" + ] +} diff --git a/apps/ppp/.oxfmtrc.json b/apps/ppp/.oxfmtrc.json new file mode 100644 index 00000000..63c44ff6 --- /dev/null +++ b/apps/ppp/.oxfmtrc.json @@ -0,0 +1,26 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "svelte": {}, + "sortTailwindcss": { + "stylesheet": "./src/app.css" + }, + "ignorePatterns": [ + "package-lock.json", + "pnpm-lock.yaml", + "yarn.lock", + "bun.lock", + "bun.lockb", + "**/.svelte-kit", + "**/dist", + "**/.turbo", + "**/node_modules", + "messages/", + "project.inlang/", + "src/lib/paraglide/", + "src/lib/assets/" + ] +} diff --git a/apps/ppp/.prettierignore b/apps/ppp/.prettierignore deleted file mode 100644 index 7d74fe24..00000000 --- a/apps/ppp/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -# Package Managers -package-lock.json -pnpm-lock.yaml -yarn.lock -bun.lock -bun.lockb - -# Miscellaneous -/static/ diff --git a/apps/ppp/.prettierrc b/apps/ppp/.prettierrc deleted file mode 100644 index 8103a0b5..00000000 --- a/apps/ppp/.prettierrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], - "overrides": [ - { - "files": "*.svelte", - "options": { - "parser": "svelte" - } - } - ], - "tailwindStylesheet": "./src/app.css" -} diff --git a/apps/ppp/eslint.config.js b/apps/ppp/eslint.config.js index 28b00d37..e24f4f97 100644 --- a/apps/ppp/eslint.config.js +++ b/apps/ppp/eslint.config.js @@ -6,11 +6,24 @@ import svelte from 'eslint-plugin-svelte'; import { defineConfig } from 'eslint/config'; import globals from 'globals'; import ts from 'typescript-eslint'; -import svelteConfig from './svelte.config.js'; const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); export default defineConfig( + { + ignores: [ + 'dist/**', + 'node_modules/**', + '.svelte-kit/**', + 'messages/**', + 'project.inlang/**', + 'src/lib/paraglide/**', + // vendored third-party code + 'src/lib/assets/**', + // problem statement example code, intentionally non-idiomatic + 'src/routes/(app)/problems/**/runtimes/*/code.*' + ] + }, includeIgnoreFile(gitignorePath), js.configs.recommended, ...ts.configs.recommended, @@ -39,14 +52,28 @@ export default defineConfig( ] } }, + { + files: ['**/*.svelte'], + rules: { + // bare reads of reactive variables inside $effect are the idiomatic + // Svelte 5 way of declaring dependencies + '@typescript-eslint/no-unused-expressions': 'off' + } + }, + { + // renders trusted problem-statement markdown + files: ['**/problem/content.svelte'], + rules: { + 'svelte/no-at-html-tags': 'off' + } + }, { files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], languageOptions: { parserOptions: { projectService: true, extraFileExtensions: ['.svelte'], - parser: ts.parser, - svelteConfig + parser: ts.parser } } } diff --git a/apps/ppp/messages/en.json b/apps/ppp/messages/en.json index 33c2d552..22576ce3 100644 --- a/apps/ppp/messages/en.json +++ b/apps/ppp/messages/en.json @@ -1,19 +1,19 @@ { - "$schema": "https://inlang.com/schema/inlang-message-format", - "problems": "problems", - "editor": "editor", - "design_patterns": "design patterns", - "tests": "tests", - "output": "output", - "settings": "settings", - "vim_mode": "Vim mode", - "run": "run", - "stop": "stop", - "force_stop": "force stop", - "execution_timeout": "execution timeout (ms)", - "execution_timeout_description": "use zero to disable", - "untranslated_content": "this content has not yet been translated into your language.", - "input_mode": "input mode", - "problem_name_not_found": "Problem \"{name}\" not found", - "back_to_problems": "Back to problems" + "$schema": "https://inlang.com/schema/inlang-message-format", + "problems": "problems", + "editor": "editor", + "design_patterns": "design patterns", + "tests": "tests", + "output": "output", + "settings": "settings", + "vim_mode": "Vim mode", + "run": "run", + "stop": "stop", + "force_stop": "force stop", + "execution_timeout": "execution timeout (ms)", + "execution_timeout_description": "use zero to disable", + "untranslated_content": "this content has not yet been translated into your language.", + "input_mode": "input mode", + "problem_name_not_found": "Problem \"{name}\" not found", + "back_to_problems": "Back to problems" } diff --git a/apps/ppp/messages/ru.json b/apps/ppp/messages/ru.json index b53c9d30..ddff5cfa 100644 --- a/apps/ppp/messages/ru.json +++ b/apps/ppp/messages/ru.json @@ -1,28 +1,28 @@ { - "$schema": "https://inlang.com/schema/inlang-message-format", - "problems": "проблемы", - "editor": "редактор", - "design_patterns": "паттерны проектирования", - "tests": "Тесты", - "output": "Вывод", - "settings": "Настройки", - "vim_mode": "режим Vim", - "run": "Запустить", - "stop": "Остановить", - "force_stop": "остановить принудительно", - "execution_timeout": "таймаут выполнения (мс)", - "execution_timeout_description": "используйте ноль для отключения", - "untranslated_content": "этот контент пока не переведен на ваш язык", - "hello_world": "Hello, {name} from ru!", - "problemsPageTitle": "Проблемы", - "editorPageTitle": "Редактор", - "designPatterns": "Паттерны проектирования", - "vimMode": "Режим Vim", - "forceStop": "Остановить принудительно", - "executionTimeout": "Таймаут выполнения (мс)", - "executionTimeoutDescription": "Используйте ноль для отключения", - "currently_untranslated_problem": "Данная проблема пока не переведена для вашего языка", - "input_mode": "режим ввода", - "problem_name_not_found": "Проблема \"{name}\" не найдена", - "back_to_problems": "Назад к проблемам" -} \ No newline at end of file + "$schema": "https://inlang.com/schema/inlang-message-format", + "problems": "проблемы", + "editor": "редактор", + "design_patterns": "паттерны проектирования", + "tests": "Тесты", + "output": "Вывод", + "settings": "Настройки", + "vim_mode": "режим Vim", + "run": "Запустить", + "stop": "Остановить", + "force_stop": "остановить принудительно", + "execution_timeout": "таймаут выполнения (мс)", + "execution_timeout_description": "используйте ноль для отключения", + "untranslated_content": "этот контент пока не переведен на ваш язык", + "hello_world": "Hello, {name} from ru!", + "problemsPageTitle": "Проблемы", + "editorPageTitle": "Редактор", + "designPatterns": "Паттерны проектирования", + "vimMode": "Режим Vim", + "forceStop": "Остановить принудительно", + "executionTimeout": "Таймаут выполнения (мс)", + "executionTimeoutDescription": "Используйте ноль для отключения", + "currently_untranslated_problem": "Данная проблема пока не переведена для вашего языка", + "input_mode": "режим ввода", + "problem_name_not_found": "Проблема \"{name}\" не найдена", + "back_to_problems": "Назад к проблемам" +} diff --git a/apps/ppp/package.json b/apps/ppp/package.json index 024277f9..2cc5d312 100644 --- a/apps/ppp/package.json +++ b/apps/ppp/package.json @@ -1,7 +1,7 @@ { "name": "ppp", - "private": true, "version": "0.0.1", + "private": true, "type": "module", "scripts": { "paraglide-compile": "paraglide-js compile --strategy url --project ./project.inlang --outdir ./src/lib/paraglide", @@ -12,13 +12,14 @@ "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "format": "prettier --write .", - "lint": "prettier --check . && eslint .", + "format": "oxfmt", + "lint": "eslint .", "test:unit": "vitest", - "test": "npm run test:unit -- --run" + "test": "npm run test:unit -- --run", + "format:check": "oxfmt --check ." }, "dependencies": { - "@andrewbranch/untar.js": "^1.0.3", + "@andrewbranch/untar.js": "^1.0.4", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "dotnet-runtime": "workspace:*", @@ -28,8 +29,8 @@ "java-runtime": "workspace:*", "javascript-runtime": "workspace:*", "libs": "workspace:*", - "marked": "^18.0.2", - "monaco-editor": "^0.55.1", + "marked": "^18.0.10", + "monaco-editor": "^0.56.0", "monaco-editor-textmate": "^4.0.0", "monaco-textmate": "^3.0.1", "monaco-vim": "^0.4.4", @@ -42,38 +43,36 @@ "zig-runtime": "workspace:*" }, "devDependencies": { - "@eslint/compat": "^2.0.5", + "@eslint/compat": "^2.1.0", "@eslint/js": "^10.0.1", - "@iconify-json/lucide": "^1.2.103", - "@iconify-json/vscode-icons": "^1.2.46", - "@inlang/paraglide-js": "^2.16.1", - "@sveltejs/adapter-static": "^3.0.10", - "@sveltejs/kit": "^2.58.0", - "@sveltejs/vite-plugin-svelte": "^7.0.0", - "@tailwindcss/typography": "^0.5.19", - "@tailwindcss/vite": "^4.2.4", + "@iconify-json/lucide": "^1.2.124", + "@iconify-json/vscode-icons": "^1.2.74", + "@inlang/paraglide-js": "^2.24.1", + "@sveltejs/adapter-static": "4.0.0-next.4", + "@sveltejs/kit": "3.0.0-next.25", + "@sveltejs/vite-plugin-svelte": "^7.3.0", + "@tailwindcss/typography": "^0.5.20", + "@tailwindcss/vite": "^4.3.3", "@types/color": "^4.2.1", - "@types/node": "^24.12.2", - "@vitest/browser-playwright": "^4.1.5", - "daisyui": "^5.5.19", - "eslint": "^10.2.1", + "@types/node": "^26.2.0", + "@vitest/browser-playwright": "^4.1.11", + "daisyui": "^5.7.20", + "eslint": "^10.9.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-svelte": "^3.17.1", - "globals": "^17.5.0", - "playwright": "^1.59.1", - "prettier": "^3.8.3", - "prettier-plugin-svelte": "^3.5.1", - "prettier-plugin-tailwindcss": "^0.7.3", - "svelte": "^5.55.5", - "svelte-check": "^4.4.6", - "tailwindcss": "^4.2.4", - "typescript": "^5.9.3", - "typescript-eslint": "^8.59.0", + "eslint-plugin-svelte": "^3.23.0", + "globals": "^17.11.0", + "oxfmt": "^0.64.0", + "playwright": "^1.62.1", + "svelte": "^5.56.10", + "svelte-check": "^4.7.6", + "tailwindcss": "^4.3.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.67.0", "unplugin-icons": "^23.0.1", "vite": "catalog:", - "vite-plugin-devtools-json": "^1.0.0", - "vite-plugin-static-copy": "catalog:", + "vite-plugin-devtools-json": "^1.1.0", + "vite-plugin-static-copy": "4.1.1", "vitest": "catalog:", - "vitest-browser-svelte": "^2.1.1" + "vitest-browser-svelte": "^3.0.0" } -} \ No newline at end of file +} diff --git a/apps/ppp/src/app.d.ts b/apps/ppp/src/app.d.ts index a900936a..b87d0fba 100644 --- a/apps/ppp/src/app.d.ts +++ b/apps/ppp/src/app.d.ts @@ -1,6 +1,6 @@ // See https://svelte.dev/docs/kit/types#app.d.ts // for information about these interfaces -import 'unplugin-icons/types/svelte' +import 'unplugin-icons/types/svelte'; declare global { namespace App { diff --git a/apps/ppp/src/hooks.server.ts b/apps/ppp/src/hooks.server.ts index 2d48a207..82e749df 100644 --- a/apps/ppp/src/hooks.server.ts +++ b/apps/ppp/src/hooks.server.ts @@ -1,11 +1,13 @@ -import type { Handle } from '@sveltejs/kit'; +import type { Handle } from '@sveltejs/kit/hooks'; import { paraglideMiddleware } from '$lib/paraglide/server'; import { getTextDirection } from '$lib/paraglide/runtime'; import { sequence } from '@sveltejs/kit/hooks'; const paraglideHandle: Handle = ({ event, resolve }) => paraglideMiddleware(event.request, ({ request: localizedRequest, locale }) => { - event.request = localizedRequest; + // Kit 3 made RequestEvent.request read-only, but paraglide's middleware + // is built around replacing it. + (event as { request: Request }).request = localizedRequest; return resolve(event, { transformPageChunk: ({ html }) => { return html.replace('%lang%', locale).replace('%dir%', getTextDirection(locale)); diff --git a/apps/ppp/src/hooks.ts b/apps/ppp/src/hooks.ts index e75600b3..08593618 100644 --- a/apps/ppp/src/hooks.ts +++ b/apps/ppp/src/hooks.ts @@ -1,3 +1,4 @@ +import type { Reroute } from '@sveltejs/kit/hooks'; import { deLocalizeUrl } from '$lib/paraglide/runtime'; -export const reroute = (request) => deLocalizeUrl(request.url).pathname; +export const reroute: Reroute = (request): string => deLocalizeUrl(request.url).pathname; diff --git a/apps/ppp/src/lib/assets/enable-threads.js b/apps/ppp/src/lib/assets/enable-threads.js index f3cf211c..5df2ad7b 100644 --- a/apps/ppp/src/lib/assets/enable-threads.js +++ b/apps/ppp/src/lib/assets/enable-threads.js @@ -1,146 +1,147 @@ /*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */ let coepCredentialless = false; if (typeof window === 'undefined') { - self.addEventListener("install", () => self.skipWaiting()); - self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim())); - - self.addEventListener("message", (ev) => { - if (!ev.data) { - return; - } else if (ev.data.type === "deregister") { - self.registration - .unregister() - .then(() => { - return self.clients.matchAll(); - }) - .then(clients => { - clients.forEach((client) => client.navigate(client.url)); - }); - } else if (ev.data.type === "coepCredentialless") { - coepCredentialless = ev.data.value; - } - }); - - self.addEventListener("fetch", function (event) { - const r = event.request; - if (r.cache === "only-if-cached" && r.mode !== "same-origin") { - return; - } - - const request = (coepCredentialless && r.mode === "no-cors") - ? new Request(r, { - credentials: "omit", - }) - : r; - event.respondWith( - fetch(request) - .then((response) => { - if (response.status === 0) { - return response; - } - - const newHeaders = new Headers(response.headers); - newHeaders.set("Cross-Origin-Embedder-Policy", - coepCredentialless ? "credentialless" : "require-corp" - ); - if (!coepCredentialless) { - newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin"); - } - newHeaders.set("Cross-Origin-Opener-Policy", "same-origin"); - - return new Response(response.body, { - status: response.status, - statusText: response.statusText, - headers: newHeaders, - }); - }) - .catch((e) => console.error(e)) - ); - }); - + self.addEventListener('install', () => self.skipWaiting()); + self.addEventListener('activate', (event) => event.waitUntil(self.clients.claim())); + + self.addEventListener('message', (ev) => { + if (!ev.data) { + return; + } else if (ev.data.type === 'deregister') { + self.registration + .unregister() + .then(() => { + return self.clients.matchAll(); + }) + .then((clients) => { + clients.forEach((client) => client.navigate(client.url)); + }); + } else if (ev.data.type === 'coepCredentialless') { + coepCredentialless = ev.data.value; + } + }); + + self.addEventListener('fetch', function (event) { + const r = event.request; + if (r.cache === 'only-if-cached' && r.mode !== 'same-origin') { + return; + } + + const request = + coepCredentialless && r.mode === 'no-cors' + ? new Request(r, { + credentials: 'omit' + }) + : r; + event.respondWith( + fetch(request) + .then((response) => { + if (response.status === 0) { + return response; + } + + const newHeaders = new Headers(response.headers); + newHeaders.set( + 'Cross-Origin-Embedder-Policy', + coepCredentialless ? 'credentialless' : 'require-corp' + ); + if (!coepCredentialless) { + newHeaders.set('Cross-Origin-Resource-Policy', 'cross-origin'); + } + newHeaders.set('Cross-Origin-Opener-Policy', 'same-origin'); + + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: newHeaders + }); + }) + .catch((e) => console.error(e)) + ); + }); } else { - (() => { - const reloadedBySelf = window.sessionStorage.getItem("coiReloadedBySelf"); - window.sessionStorage.removeItem("coiReloadedBySelf"); - const coepDegrading = (reloadedBySelf == "coepdegrade"); - - // You can customize the behavior of this script through a global `coi` variable. - const coi = { - shouldRegister: () => !reloadedBySelf, - shouldDeregister: () => false, - coepCredentialless: () => true, - coepDegrade: () => true, - doReload: () => window.location.reload(), - quiet: false, - ...window.coi - }; - - const n = navigator; - const controlling = n.serviceWorker && n.serviceWorker.controller; - - // Record the failure if the page is served by serviceWorker. - if (controlling && !window.crossOriginIsolated) { - window.sessionStorage.setItem("coiCoepHasFailed", "true"); - } - const coepHasFailed = window.sessionStorage.getItem("coiCoepHasFailed"); - - if (controlling) { - // Reload only on the first failure. - const reloadToDegrade = coi.coepDegrade() && !( - coepDegrading || window.crossOriginIsolated - ); - n.serviceWorker.controller.postMessage({ - type: "coepCredentialless", - value: (reloadToDegrade || coepHasFailed && coi.coepDegrade()) - ? false - : coi.coepCredentialless(), - }); - if (reloadToDegrade) { - !coi.quiet && console.log("Reloading page to degrade COEP."); - window.sessionStorage.setItem("coiReloadedBySelf", "coepdegrade"); - coi.doReload("coepdegrade"); - } - - if (coi.shouldDeregister()) { - n.serviceWorker.controller.postMessage({ type: "deregister" }); - } - } - - // If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are - // already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here. - if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return; - - if (!window.isSecureContext) { - !coi.quiet && console.log("COOP/COEP Service Worker not registered, a secure context is required."); - return; - } - - // In some environments (e.g. Firefox private mode) this won't be available - if (!n.serviceWorker) { - !coi.quiet && console.error("COOP/COEP Service Worker not registered, perhaps due to private mode."); - return; - } - - n.serviceWorker.register(window.document.currentScript.src).then( - (registration) => { - !coi.quiet && console.log("COOP/COEP Service Worker registered", registration.scope); - - registration.addEventListener("updatefound", () => { - !coi.quiet && console.log("Reloading page to make use of updated COOP/COEP Service Worker."); - window.sessionStorage.setItem("coiReloadedBySelf", "updatefound"); - coi.doReload(); - }); - - // If the registration is active, but it's not controlling the page - if (registration.active && !n.serviceWorker.controller) { - !coi.quiet && console.log("Reloading page to make use of COOP/COEP Service Worker."); - window.sessionStorage.setItem("coiReloadedBySelf", "notcontrolling"); - coi.doReload(); - } - }, - (err) => { - !coi.quiet && console.error("COOP/COEP Service Worker failed to register:", err); - } - ); - })(); -} \ No newline at end of file + (() => { + const reloadedBySelf = window.sessionStorage.getItem('coiReloadedBySelf'); + window.sessionStorage.removeItem('coiReloadedBySelf'); + const coepDegrading = reloadedBySelf == 'coepdegrade'; + + // You can customize the behavior of this script through a global `coi` variable. + const coi = { + shouldRegister: () => !reloadedBySelf, + shouldDeregister: () => false, + coepCredentialless: () => true, + coepDegrade: () => true, + doReload: () => window.location.reload(), + quiet: false, + ...window.coi + }; + + const n = navigator; + const controlling = n.serviceWorker && n.serviceWorker.controller; + + // Record the failure if the page is served by serviceWorker. + if (controlling && !window.crossOriginIsolated) { + window.sessionStorage.setItem('coiCoepHasFailed', 'true'); + } + const coepHasFailed = window.sessionStorage.getItem('coiCoepHasFailed'); + + if (controlling) { + // Reload only on the first failure. + const reloadToDegrade = coi.coepDegrade() && !(coepDegrading || window.crossOriginIsolated); + n.serviceWorker.controller.postMessage({ + type: 'coepCredentialless', + value: + reloadToDegrade || (coepHasFailed && coi.coepDegrade()) ? false : coi.coepCredentialless() + }); + if (reloadToDegrade) { + !coi.quiet && console.log('Reloading page to degrade COEP.'); + window.sessionStorage.setItem('coiReloadedBySelf', 'coepdegrade'); + coi.doReload('coepdegrade'); + } + + if (coi.shouldDeregister()) { + n.serviceWorker.controller.postMessage({ type: 'deregister' }); + } + } + + // If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are + // already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here. + if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return; + + if (!window.isSecureContext) { + !coi.quiet && + console.log('COOP/COEP Service Worker not registered, a secure context is required.'); + return; + } + + // In some environments (e.g. Firefox private mode) this won't be available + if (!n.serviceWorker) { + !coi.quiet && + console.error('COOP/COEP Service Worker not registered, perhaps due to private mode.'); + return; + } + + n.serviceWorker.register(window.document.currentScript.src).then( + (registration) => { + !coi.quiet && console.log('COOP/COEP Service Worker registered', registration.scope); + + registration.addEventListener('updatefound', () => { + !coi.quiet && + console.log('Reloading page to make use of updated COOP/COEP Service Worker.'); + window.sessionStorage.setItem('coiReloadedBySelf', 'updatefound'); + coi.doReload(); + }); + + // If the registration is active, but it's not controlling the page + if (registration.active && !n.serviceWorker.controller) { + !coi.quiet && console.log('Reloading page to make use of COOP/COEP Service Worker.'); + window.sessionStorage.setItem('coiReloadedBySelf', 'notcontrolling'); + coi.doReload(); + } + }, + (err) => { + !coi.quiet && console.error('COOP/COEP Service Worker failed to register:', err); + } + ); + })(); +} diff --git a/apps/ppp/src/lib/components/dropdown.svelte b/apps/ppp/src/lib/components/dropdown.svelte index c445719e..d5711cae 100644 --- a/apps/ppp/src/lib/components/dropdown.svelte +++ b/apps/ppp/src/lib/components/dropdown.svelte @@ -1,89 +1,82 @@ - diff --git a/apps/ppp/src/lib/components/editor/context.svelte.ts b/apps/ppp/src/lib/components/editor/context.svelte.ts index 27c7a00e..7a2bd60c 100644 --- a/apps/ppp/src/lib/components/editor/context.svelte.ts +++ b/apps/ppp/src/lib/components/editor/context.svelte.ts @@ -1,23 +1,23 @@ -import { getContext, setContext } from "svelte"; -import type { editor } from "monaco-editor"; -import type { Terminal } from "@xterm/xterm"; +import { getContext, setContext } from 'svelte'; +import type { editor } from 'monaco-editor'; +import type { Terminal } from '@xterm/xterm'; import type { FitAddon } from '@xterm/addon-fit'; export class EditorContext { - editor = $state(); - constructor( - public model: editor.ITextModel, - public terminal: Terminal, - public terminalFitAddon: FitAddon - ) {} + editor = $state(); + constructor( + public model: editor.ITextModel, + public terminal: Terminal, + public terminalFitAddon: FitAddon + ) {} } -const EDITOR_CONTEXT = Symbol("editor-context"); +const EDITOR_CONTEXT = Symbol('editor-context'); export function setEditorContext(ctx: EditorContext) { - setContext(EDITOR_CONTEXT, ctx); + setContext(EDITOR_CONTEXT, ctx); } export function getEditorContext() { - return getContext(EDITOR_CONTEXT); + return getContext(EDITOR_CONTEXT); } diff --git a/apps/ppp/src/lib/components/editor/controls/checkbox.svelte b/apps/ppp/src/lib/components/editor/controls/checkbox.svelte index c9b260ab..af7e96ed 100644 --- a/apps/ppp/src/lib/components/editor/controls/checkbox.svelte +++ b/apps/ppp/src/lib/components/editor/controls/checkbox.svelte @@ -1,13 +1,13 @@ diff --git a/apps/ppp/src/lib/components/editor/controls/index.ts b/apps/ppp/src/lib/components/editor/controls/index.ts index 8eb88a54..086aa3c2 100644 --- a/apps/ppp/src/lib/components/editor/controls/index.ts +++ b/apps/ppp/src/lib/components/editor/controls/index.ts @@ -1,3 +1,3 @@ -export { default as CheckBox } from "./checkbox.svelte"; -export { default as Number } from "./number.svelte"; +export { default as CheckBox } from './checkbox.svelte'; +export { default as Number } from './number.svelte'; export { default as Select } from './select.svelte'; diff --git a/apps/ppp/src/lib/components/editor/controls/number.svelte b/apps/ppp/src/lib/components/editor/controls/number.svelte index d13d452d..cc957f23 100644 --- a/apps/ppp/src/lib/components/editor/controls/number.svelte +++ b/apps/ppp/src/lib/components/editor/controls/number.svelte @@ -1,17 +1,17 @@
- {title} - - {#if alt} -

{alt}

- {/if} + {title} + + {#if alt} +

{alt}

+ {/if}
diff --git a/apps/ppp/src/lib/components/editor/controls/select.svelte b/apps/ppp/src/lib/components/editor/controls/select.svelte index af3bbccf..c6156775 100644 --- a/apps/ppp/src/lib/components/editor/controls/select.svelte +++ b/apps/ppp/src/lib/components/editor/controls/select.svelte @@ -1,31 +1,31 @@
- {title} - - {#if alt} - {alt} - {/if} + {title} + + {#if alt} + {alt} + {/if}
diff --git a/apps/ppp/src/lib/components/editor/editor.svelte b/apps/ppp/src/lib/components/editor/editor.svelte index 0bb198e7..71eec1af 100644 --- a/apps/ppp/src/lib/components/editor/editor.svelte +++ b/apps/ppp/src/lib/components/editor/editor.svelte @@ -1,51 +1,51 @@
diff --git a/apps/ppp/src/lib/components/editor/index.ts b/apps/ppp/src/lib/components/editor/index.ts index 950e3b22..c8411610 100644 --- a/apps/ppp/src/lib/components/editor/index.ts +++ b/apps/ppp/src/lib/components/editor/index.ts @@ -1,6 +1,6 @@ export * from './process'; -export * from "./terminal"; -export * from "./context.svelte"; -export { default as Editor } from "./editor.svelte"; -export { default as VimStatus } from "./vim-status.svelte"; -export { default as RunButton } from "./run-button.svelte"; +export * from './terminal'; +export * from './context.svelte'; +export { default as Editor } from './editor.svelte'; +export { default as VimStatus } from './vim-status.svelte'; +export { default as RunButton } from './run-button.svelte'; diff --git a/apps/ppp/src/lib/components/editor/panel/context.svelte.ts b/apps/ppp/src/lib/components/editor/panel/context.svelte.ts index 7283945b..29848553 100644 --- a/apps/ppp/src/lib/components/editor/panel/context.svelte.ts +++ b/apps/ppp/src/lib/components/editor/panel/context.svelte.ts @@ -1,21 +1,21 @@ -import { getContext, setContext } from "svelte"; +import { getContext, setContext } from 'svelte'; -import { EditorPanelTab } from "$lib/editor-panel-tab"; +import { EditorPanelTab } from '$lib/editor-panel-tab'; export class EditorPanelContext { - selectedTab = $state(); + selectedTab = $state(); - constructor(selectedTab: EditorPanelTab) { - this.selectedTab = selectedTab; - } + constructor(selectedTab: EditorPanelTab) { + this.selectedTab = selectedTab; + } } -const EDITOR_PANEL_CONTEXT = Symbol("editor-panel-context"); +const EDITOR_PANEL_CONTEXT = Symbol('editor-panel-context'); export function setEditorPanelContext(ctx: EditorPanelContext) { - setContext(EDITOR_PANEL_CONTEXT, ctx); + setContext(EDITOR_PANEL_CONTEXT, ctx); } export function getEditorPanelContext() { - return getContext(EDITOR_PANEL_CONTEXT); + return getContext(EDITOR_PANEL_CONTEXT); } diff --git a/apps/ppp/src/lib/components/editor/panel/index.ts b/apps/ppp/src/lib/components/editor/panel/index.ts index 22cc38da..b2143d2e 100644 --- a/apps/ppp/src/lib/components/editor/panel/index.ts +++ b/apps/ppp/src/lib/components/editor/panel/index.ts @@ -1,7 +1,7 @@ -export * from "./model"; -export { default as Panel } from "./panel.svelte"; -export { default as Tab } from "./tab.svelte"; -export { default as Tabs } from "./tabs.svelte"; -export { default as TerminalTab } from "./terminal-tab.svelte"; -export { default as TabContent } from "./tab-content.svelte"; -export { default as PanelToggle } from "./panel-toggle.svelte"; +export * from './model'; +export { default as Panel } from './panel.svelte'; +export { default as Tab } from './tab.svelte'; +export { default as Tabs } from './tabs.svelte'; +export { default as TerminalTab } from './terminal-tab.svelte'; +export { default as TabContent } from './tab-content.svelte'; +export { default as PanelToggle } from './panel-toggle.svelte'; diff --git a/apps/ppp/src/lib/components/editor/panel/model.ts b/apps/ppp/src/lib/components/editor/panel/model.ts index 29b95688..694eed72 100644 --- a/apps/ppp/src/lib/components/editor/panel/model.ts +++ b/apps/ppp/src/lib/components/editor/panel/model.ts @@ -1,6 +1,3 @@ export const PANEL_BORDER_HEIGHT = 1; export const PANEL_HEADER_VERTICAL_PADDING = 4 * 2; -export const MIN_PANEL_HEIGHT = - 36 /* ??? */ + - PANEL_HEADER_VERTICAL_PADDING + - PANEL_BORDER_HEIGHT; +export const MIN_PANEL_HEIGHT = 36 /* ??? */ + PANEL_HEADER_VERTICAL_PADDING + PANEL_BORDER_HEIGHT; diff --git a/apps/ppp/src/lib/components/editor/panel/panel-toggle.svelte b/apps/ppp/src/lib/components/editor/panel/panel-toggle.svelte index 3915dbd1..871c5f22 100644 --- a/apps/ppp/src/lib/components/editor/panel/panel-toggle.svelte +++ b/apps/ppp/src/lib/components/editor/panel/panel-toggle.svelte @@ -1,68 +1,68 @@ - diff --git a/apps/ppp/src/lib/components/editor/panel/panel.svelte b/apps/ppp/src/lib/components/editor/panel/panel.svelte index 8012ca51..175089e7 100644 --- a/apps/ppp/src/lib/components/editor/panel/panel.svelte +++ b/apps/ppp/src/lib/components/editor/panel/panel.svelte @@ -1,36 +1,32 @@ - {@render children()} + {@render children()} diff --git a/apps/ppp/src/lib/components/editor/panel/tab-content.svelte b/apps/ppp/src/lib/components/editor/panel/tab-content.svelte index 6652381e..9fd1729b 100644 --- a/apps/ppp/src/lib/components/editor/panel/tab-content.svelte +++ b/apps/ppp/src/lib/components/editor/panel/tab-content.svelte @@ -1,20 +1,20 @@ {#if ctx.selectedTab === tab} - {@render children()} + {@render children()} {/if} diff --git a/apps/ppp/src/lib/components/editor/panel/tab.svelte b/apps/ppp/src/lib/components/editor/panel/tab.svelte index 293d562d..5cdea254 100644 --- a/apps/ppp/src/lib/components/editor/panel/tab.svelte +++ b/apps/ppp/src/lib/components/editor/panel/tab.svelte @@ -1,44 +1,40 @@ { - ctx.selectedTab = tab - }} + role="tab" + class={['tab', append && 'tab-with-badge', isSelected && 'tab-active']} + onclick={() => { + ctx.selectedTab = tab; + }} > - {EDITOR_PANEL_TAB_TO_LABEL[tab]()} - {#if append} - {@render append()} - {/if} + {EDITOR_PANEL_TAB_TO_LABEL[tab]()} + {#if append} + {@render append()} + {/if} diff --git a/apps/ppp/src/lib/components/editor/panel/tabs.svelte b/apps/ppp/src/lib/components/editor/panel/tabs.svelte index 3127af75..53c8aaef 100644 --- a/apps/ppp/src/lib/components/editor/panel/tabs.svelte +++ b/apps/ppp/src/lib/components/editor/panel/tabs.svelte @@ -1,22 +1,22 @@ -
- {@render children()} +
+ {@render children()}
diff --git a/apps/ppp/src/lib/components/editor/panel/terminal-tab.svelte b/apps/ppp/src/lib/components/editor/panel/terminal-tab.svelte index ec3ef054..0d9d6a41 100644 --- a/apps/ppp/src/lib/components/editor/panel/terminal-tab.svelte +++ b/apps/ppp/src/lib/components/editor/panel/terminal-tab.svelte @@ -1,51 +1,45 @@ -
+
diff --git a/apps/ppp/src/lib/components/editor/process.ts b/apps/ppp/src/lib/components/editor/process.ts index 1395bec4..8194cb51 100644 --- a/apps/ppp/src/lib/components/editor/process.ts +++ b/apps/ppp/src/lib/components/editor/process.ts @@ -1 +1 @@ -export type ProcessStatus = 'stopped' | 'stopping' | 'running' \ No newline at end of file +export type ProcessStatus = 'stopped' | 'stopping' | 'running'; diff --git a/apps/ppp/src/lib/components/editor/run-button.svelte b/apps/ppp/src/lib/components/editor/run-button.svelte index 5a3907d0..93992ec9 100644 --- a/apps/ppp/src/lib/components/editor/run-button.svelte +++ b/apps/ppp/src/lib/components/editor/run-button.svelte @@ -1,26 +1,26 @@ - diff --git a/apps/ppp/src/lib/components/editor/terminal.ts b/apps/ppp/src/lib/components/editor/terminal.ts index 383e4c68..4f50ca57 100644 --- a/apps/ppp/src/lib/components/editor/terminal.ts +++ b/apps/ppp/src/lib/components/editor/terminal.ts @@ -16,7 +16,7 @@ export enum InputMode { Raw = 'raw' } -export const INPUT_MODS = Object.values(InputMode) +export const INPUT_MODS = Object.values(InputMode); export function createTerminal({ theme = makeTerminalTheme() }: TerminalConfig = {}) { const terminal = new Terminal({ @@ -39,7 +39,7 @@ export function createReadableStream(terminal: Terminal) { }); }, cancel() { - console.log("CANCEL") + console.log('CANCEL'); disposable.dispose(); } }); diff --git a/apps/ppp/src/lib/components/editor/vim-status.svelte b/apps/ppp/src/lib/components/editor/vim-status.svelte index 665942af..cb6a242c 100644 --- a/apps/ppp/src/lib/components/editor/vim-status.svelte +++ b/apps/ppp/src/lib/components/editor/vim-status.svelte @@ -1,28 +1,28 @@
diff --git a/apps/ppp/src/lib/components/logo.svelte b/apps/ppp/src/lib/components/logo.svelte index 4ce05cf0..c981cd4a 100644 --- a/apps/ppp/src/lib/components/logo.svelte +++ b/apps/ppp/src/lib/components/logo.svelte @@ -1,10 +1,10 @@ -
- 3P -
+
+ 3P +
diff --git a/apps/ppp/src/lib/components/resizable-panel.svelte b/apps/ppp/src/lib/components/resizable-panel.svelte index 02bead73..caec1c57 100644 --- a/apps/ppp/src/lib/components/resizable-panel.svelte +++ b/apps/ppp/src/lib/components/resizable-panel.svelte @@ -1,79 +1,80 @@ -
- { - start = { x: size, y: e[coord] }; - }} - onMove={(e) => { - size = normalizeSize(op(start.y, e[coord], start.x), size); - }} - /> - {@render children()} +
+ { + start = { x: size, y: e[coord] }; + }} + onMove={(e) => { + size = normalizeSize(op(start.y, e[coord], start.x), size); + }} + /> + {@render children()}
diff --git a/apps/ppp/src/lib/components/resizer/index.ts b/apps/ppp/src/lib/components/resizer/index.ts index f12e0d38..0db7e5c6 100644 --- a/apps/ppp/src/lib/components/resizer/index.ts +++ b/apps/ppp/src/lib/components/resizer/index.ts @@ -1,2 +1,2 @@ -export * from './model' -export { default as Resizer } from './resizer.svelte' +export * from './model'; +export { default as Resizer } from './resizer.svelte'; diff --git a/apps/ppp/src/lib/components/resizer/model.ts b/apps/ppp/src/lib/components/resizer/model.ts index 1d2710d1..27785064 100644 --- a/apps/ppp/src/lib/components/resizer/model.ts +++ b/apps/ppp/src/lib/components/resizer/model.ts @@ -1,9 +1,9 @@ export enum Orientation { - Vertical = "vertical", - Horizontal = "horizontal", + Vertical = 'vertical', + Horizontal = 'horizontal' } export enum Alignment { - Start = "start", - End = "end", + Start = 'start', + End = 'end' } diff --git a/apps/ppp/src/lib/components/resizer/resizer.svelte b/apps/ppp/src/lib/components/resizer/resizer.svelte index 0ca1155f..0769ec3c 100644 --- a/apps/ppp/src/lib/components/resizer/resizer.svelte +++ b/apps/ppp/src/lib/components/resizer/resizer.svelte @@ -1,61 +1,59 @@
diff --git a/apps/ppp/src/lib/components/select.svelte b/apps/ppp/src/lib/components/select.svelte index 99783e3a..dba389af 100644 --- a/apps/ppp/src/lib/components/select.svelte +++ b/apps/ppp/src/lib/components/select.svelte @@ -1,16 +1,16 @@ - - + {#each options as option (option)} + + {/each} diff --git a/apps/ppp/src/lib/editor-panel-tab.ts b/apps/ppp/src/lib/editor-panel-tab.ts index 88286ab0..ef4f9303 100644 --- a/apps/ppp/src/lib/editor-panel-tab.ts +++ b/apps/ppp/src/lib/editor-panel-tab.ts @@ -1,14 +1,13 @@ import { m } from '$lib/paraglide/messages'; export enum EditorPanelTab { - Tests = "tests", - Output = "output", - Settings = "settings", + Tests = 'tests', + Output = 'output', + Settings = 'settings' } export const EDITOR_PANEL_TAB_TO_LABEL: Record string> = { - [EditorPanelTab.Tests]: m.tests, - [EditorPanelTab.Output]: m.output, - [EditorPanelTab.Settings]: m.settings, + [EditorPanelTab.Tests]: m.tests, + [EditorPanelTab.Output]: m.output, + [EditorPanelTab.Settings]: m.settings }; - diff --git a/apps/ppp/src/lib/editor-provider.svelte b/apps/ppp/src/lib/editor-provider.svelte index 7ba47470..78056afd 100644 --- a/apps/ppp/src/lib/editor-provider.svelte +++ b/apps/ppp/src/lib/editor-provider.svelte @@ -2,8 +2,8 @@ import type { Snippet } from 'svelte'; import 'monaco-editor'; - import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; - import TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; + import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker'; + import TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'; import { loadTmGrammars } from '$lib/monaco'; diff --git a/apps/ppp/src/lib/gleam/gleam.tmLanguage.json b/apps/ppp/src/lib/gleam/gleam.tmLanguage.json index c5ab3755..837a3bbc 100644 --- a/apps/ppp/src/lib/gleam/gleam.tmLanguage.json +++ b/apps/ppp/src/lib/gleam/gleam.tmLanguage.json @@ -1,176 +1,176 @@ { - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Gleam", - "patterns": [ - { - "include": "#comments" - }, - { - "include": "#keywords" - }, - { - "include": "#strings" - }, - { - "include": "#constant" - }, - { - "include": "#entity" - }, - { - "include": "#discards" - } - ], - "repository": { - "keywords": { - "patterns": [ - { - "name": "keyword.control.gleam", - "match": "\\b(as|use|case|if|fn|import|let|assert|pub|type|opaque|const|todo|panic)\\b" - }, - { - "name": "keyword.operator.arrow.gleam", - "match": "(<\\-|\\->)" - }, - { - "name": "keyword.operator.pipe.gleam", - "match": "\\|>" - }, - { - "name": "keyword.operator.splat.gleam", - "match": "\\.\\." - }, - { - "name": "keyword.operator.comparison.float.gleam", - "match": "(<=\\.|>=\\.|==\\.|!=\\.|<\\.|>\\.)" - }, - { - "name": "keyword.operator.comparison.int.gleam", - "match": "(<=|>=|==|!=|<|>)" - }, - { - "name": "keyword.operator.logical.gleam", - "match": "(&&|\\|\\|)" - }, - { - "name": "keyword.operator.string.gleam", - "match": "<>" - }, - { - "name": "keyword.operator.other.gleam", - "match": "\\|" - }, - { - "name": "keyword.operator.arithmetic.float.gleam", - "match": "(\\+\\.|\\-\\.|/\\.|\\*\\.|%\\.)" - }, - { - "name": "keyword.operator.arithmetic.int.gleam", - "match": "(\\+|\\-|/|\\*|%)" - }, - { - "name": "keyword.operator.assignment.gleam", - "match": "=" - } - ] - }, - "strings": { - "name": "string.quoted.double.gleam", - "begin": "\"", - "end": "\"", - "patterns": [ - { - "name": "constant.character.escape.gleam", - "match": "\\\\." - } - ] - }, - "comments": { - "patterns": [ - { - "name": "comment.line.gleam", - "match": "\/\/.*" - } - ] - }, - "constant": { - "patterns": [ - { - "include": "#binary_number" - }, - { - "include": "#octal_number" - }, - { - "include": "#hexadecimal_number" - }, - { - "include": "#decimal_number" - }, - { - "include": "#boolean" - }, - { - "name": "entity.name.type.gleam", - "match": "[[:upper:]][[:word:]]*" - } - ] - }, - "binary_number": { - "name": "constant.numeric.binary.gleam", - "match": "\\b0[bB](_?[01])+\\b", - "patterns": [] - }, - "octal_number": { - "name": "constant.numeric.octal.gleam", - "match": "\\b0[oO](_?[0-7])+\\b", - "patterns": [] - }, - "decimal_number": { - "name": "constant.numeric.decimal.gleam", - "match": "\\b[[:digit:]]+(_?[[:digit:]])*(\\.[[:digit:]]*)?(e-?[[:digit:]]*)?\\b", - "patterns": [] - }, - "hexadecimal_number": { - "name": "constant.numeric.hexadecimal.gleam", - "match": "\\b0[xX](_?[[:xdigit:]])+\\b", - "patterns": [] - }, - "boolean": { - "name": "constant.language.boolean.gleam", - "match": "\\b(True|False)\\b", - "patterns": [] - }, - "entity": { - "patterns": [ - { - "begin": "\\b([[:lower:]][[:word:]]*)([[:space:]]*)?\\(", - "end": "\\)", - "patterns": [ - { - "include": "$self" - } - ], - "captures": { - "1": { - "name": "entity.name.function.gleam" - } - } - }, - { - "name": "variable.parameter.gleam", - "match": "\\b([[:lower:]][[:word:]]*):\\s" - }, - { - "name": "entity.name.namespace.gleam", - "match": "\\b([[:lower:]][[:word:]]*):" - } - ] - }, - "discards": { - "name": "comment.unused.gleam", - "match": "\\b_(?:[[:word:]]+)?\\b" - } - }, - "scopeName": "source.gleam" -} \ No newline at end of file + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Gleam", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#keywords" + }, + { + "include": "#strings" + }, + { + "include": "#constant" + }, + { + "include": "#entity" + }, + { + "include": "#discards" + } + ], + "repository": { + "keywords": { + "patterns": [ + { + "name": "keyword.control.gleam", + "match": "\\b(as|use|case|if|fn|import|let|assert|pub|type|opaque|const|todo|panic)\\b" + }, + { + "name": "keyword.operator.arrow.gleam", + "match": "(<\\-|\\->)" + }, + { + "name": "keyword.operator.pipe.gleam", + "match": "\\|>" + }, + { + "name": "keyword.operator.splat.gleam", + "match": "\\.\\." + }, + { + "name": "keyword.operator.comparison.float.gleam", + "match": "(<=\\.|>=\\.|==\\.|!=\\.|<\\.|>\\.)" + }, + { + "name": "keyword.operator.comparison.int.gleam", + "match": "(<=|>=|==|!=|<|>)" + }, + { + "name": "keyword.operator.logical.gleam", + "match": "(&&|\\|\\|)" + }, + { + "name": "keyword.operator.string.gleam", + "match": "<>" + }, + { + "name": "keyword.operator.other.gleam", + "match": "\\|" + }, + { + "name": "keyword.operator.arithmetic.float.gleam", + "match": "(\\+\\.|\\-\\.|/\\.|\\*\\.|%\\.)" + }, + { + "name": "keyword.operator.arithmetic.int.gleam", + "match": "(\\+|\\-|/|\\*|%)" + }, + { + "name": "keyword.operator.assignment.gleam", + "match": "=" + } + ] + }, + "strings": { + "name": "string.quoted.double.gleam", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "name": "constant.character.escape.gleam", + "match": "\\\\." + } + ] + }, + "comments": { + "patterns": [ + { + "name": "comment.line.gleam", + "match": "\/\/.*" + } + ] + }, + "constant": { + "patterns": [ + { + "include": "#binary_number" + }, + { + "include": "#octal_number" + }, + { + "include": "#hexadecimal_number" + }, + { + "include": "#decimal_number" + }, + { + "include": "#boolean" + }, + { + "name": "entity.name.type.gleam", + "match": "[[:upper:]][[:word:]]*" + } + ] + }, + "binary_number": { + "name": "constant.numeric.binary.gleam", + "match": "\\b0[bB](_?[01])+\\b", + "patterns": [] + }, + "octal_number": { + "name": "constant.numeric.octal.gleam", + "match": "\\b0[oO](_?[0-7])+\\b", + "patterns": [] + }, + "decimal_number": { + "name": "constant.numeric.decimal.gleam", + "match": "\\b[[:digit:]]+(_?[[:digit:]])*(\\.[[:digit:]]*)?(e-?[[:digit:]]*)?\\b", + "patterns": [] + }, + "hexadecimal_number": { + "name": "constant.numeric.hexadecimal.gleam", + "match": "\\b0[xX](_?[[:xdigit:]])+\\b", + "patterns": [] + }, + "boolean": { + "name": "constant.language.boolean.gleam", + "match": "\\b(True|False)\\b", + "patterns": [] + }, + "entity": { + "patterns": [ + { + "begin": "\\b([[:lower:]][[:word:]]*)([[:space:]]*)?\\(", + "end": "\\)", + "patterns": [ + { + "include": "$self" + } + ], + "captures": { + "1": { + "name": "entity.name.function.gleam" + } + } + }, + { + "name": "variable.parameter.gleam", + "match": "\\b([[:lower:]][[:word:]]*):\\s" + }, + { + "name": "entity.name.namespace.gleam", + "match": "\\b([[:lower:]][[:word:]]*):" + } + ] + }, + "discards": { + "name": "comment.unused.gleam", + "match": "\\b_(?:[[:word:]]+)?\\b" + } + }, + "scopeName": "source.gleam" +} diff --git a/apps/ppp/src/lib/gleam/language-configuration.ts b/apps/ppp/src/lib/gleam/language-configuration.ts index b4ca0c1a..49de9973 100644 --- a/apps/ppp/src/lib/gleam/language-configuration.ts +++ b/apps/ppp/src/lib/gleam/language-configuration.ts @@ -1,26 +1,26 @@ -import type { languages } from "monaco-editor"; +import type { languages } from 'monaco-editor'; export default { - comments: { - lineComment: "//", - }, - brackets: [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ], - autoClosingPairs: [ - { open:"{", close:"}" }, - { open:"[", close:"]" }, - { open:"(", close:")" }, - { open:'"', close:'"' }, - { open:"'", close:"'" }, - ], - surroundingPairs: [ - { open:"{", close: "}"}, - { open:"[", close: "]"}, - { open:"(", close: ")"}, - { open:'"', close: '"'}, - { open:"'", close: "'"}, - ], + comments: { + lineComment: '//' + }, + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'] + ], + autoClosingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"' }, + { open: "'", close: "'" } + ], + surroundingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"' }, + { open: "'", close: "'" } + ] } satisfies languages.LanguageConfiguration; diff --git a/apps/ppp/src/lib/math.ts b/apps/ppp/src/lib/math.ts index 48ea69a9..5315bb23 100644 --- a/apps/ppp/src/lib/math.ts +++ b/apps/ppp/src/lib/math.ts @@ -1,4 +1,4 @@ export interface Vec2 { - x: number; - y: number; + x: number; + y: number; } diff --git a/apps/ppp/src/lib/problem/content.svelte b/apps/ppp/src/lib/problem/content.svelte index ebe25d45..91b79c38 100644 --- a/apps/ppp/src/lib/problem/content.svelte +++ b/apps/ppp/src/lib/problem/content.svelte @@ -31,4 +31,5 @@

{meta.titles[lang]}

+ {@html marked.parse(content)} diff --git a/apps/ppp/src/lib/problem/editor.svelte b/apps/ppp/src/lib/problem/editor.svelte index 4c5e6094..12f59670 100644 --- a/apps/ppp/src/lib/problem/editor.svelte +++ b/apps/ppp/src/lib/problem/editor.svelte @@ -37,7 +37,7 @@ createLineInputMode, INPUT_MODS, InputMode, - createRawInputMode, + createRawInputMode } from '$lib/components/editor'; import { Panel, @@ -176,18 +176,22 @@ let executionTimeout = $state(executionTimeoutStorage.load()); debouncedSave(executionTimeoutStorage, () => executionTimeout, 100); - const inputModeStorage = createSyncStorage(localStorage, "test-editor-input-mode", InputMode.Line) - let inputMode = $state(inputModeStorage.load()) - immediateSave(inputModeStorage, () => inputMode) + const inputModeStorage = createSyncStorage( + localStorage, + 'test-editor-input-mode', + InputMode.Line + ); + let inputMode = $state(inputModeStorage.load()); + immediateSave(inputModeStorage, () => inputMode); const { terminal, fitAddon } = createTerminal(); - let lastInput: ReadableStreamOfBytes | undefined + let lastInput: ReadableStreamOfBytes | undefined; const input = $derived.by(() => { - lastInput?.cancel() - return lastInput = createReadableStream(terminal).pipeThrough( + lastInput?.cancel(); + return (lastInput = createReadableStream(terminal).pipeThrough( (inputMode === InputMode.Line ? createLineInputMode : createRawInputMode)(terminal) - ) - }) + )); + }); const terminalLogger = createLogger(terminal); const editorContext = new EditorContext(model, terminal, fitAddon); @@ -258,13 +262,13 @@ -
+
@@ -334,7 +338,7 @@
- {#each testCases as testCase, i} + {#each testCases as testCase, i (i)}
{#if lastTestId === i} @@ -369,8 +373,6 @@
- - e.stopPropagation()}> @@ -229,8 +227,6 @@
- - e.stopPropagation()}>