diff --git a/.github/workflows/ghcjs.yml b/.github/workflows/ghcjs.yml index 12369d05c..9bdf67935 100644 --- a/.github/workflows/ghcjs.yml +++ b/.github/workflows/ghcjs.yml @@ -75,7 +75,7 @@ jobs: - name: 🔨 Build Playground env: - BASEPATH: /${{ github.event.repository.name }}/${{ github.ref_name }}/playground + ASSET_URL: /${{ github.event.repository.name }}/${{ github.ref_name }}/playground run: | nix run .#release-rzk-playground diff --git a/CITATION.cff b/CITATION.cff index 3518f0999..2b8940092 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,8 +1,8 @@ cff-version: 1.2.0 authors: -- family-names: Kudasov - given-names: Nikolai - orcid: "https://orcid.org/0000-0001-6572-7292" + - family-names: Kudasov + given-names: Nikolai + orcid: "https://orcid.org/0000-0001-6572-7292" title: "Rzk: a proof assistant for synthetic $\\infty$-categories" -version: 0.6.6 +version: 0.6.7 url: "https://github.com/rzk-lang/rzk" diff --git a/README.md b/README.md index 5a0ce5a32..40623508a 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![MkDocs](https://shields.io/badge/MkDocs-documentation-informational)](https://rzk-lang.github.io/rzk/) [![Haddock](https://shields.io/badge/Haddock-documentation-informational)](https://rzk-lang.github.io/rzk/haddock/index.html) [![GHCJS build](https://github.com/rzk-lang/rzk/actions/workflows/ghcjs.yml/badge.svg?branch=main)](https://github.com/rzk-lang/rzk/actions/workflows/ghcjs.yml) +[![Rzk Zulip chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://rzk-lang.zulipchat.com) An experimental proof assistant for synthetic ∞-categories. @@ -19,6 +20,11 @@ An important part of `rzk` is a tope layer solver, which is essentially a theore See the list of contributors at [docs/docs/CONTRIBUTORS.md](docs/docs/CONTRIBUTORS.md). +## Discussing Rzk and getting help + +A Zulip chat is available for all to join and chat about Rzk, including formalization projects, development of Rzk, and related projects: + + ## How to use `rzk` For relatively small single-file formalisations, you can use the online playground at @@ -28,6 +34,7 @@ However, for larger and multi-file formalisations you should install a version o - You can install the latest "stable" version of `rzk` from Hackage: ```sh + cabal update cabal install rzk ``` diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md index 39a65be92..58a024af4 100644 --- a/docs/docs/CHANGELOG.md +++ b/docs/docs/CHANGELOG.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## v0.6.7 — 2023-10-07 + +- Fix build on some systems (fix `BNFC:bnfc` executable dependency, see [#125](https://github.com/rzk-lang/rzk/pull/125)) +- Improve Rzk Playground (see [#124](https://github.com/rzk-lang/rzk/pull/124) by @deemp): + - Add `snippet_url` parameter + - Migrated from NextJS to Vite + - Use `setText` on `params` attribute +- Slightly improve documentation: + - Add links to Rzk Zulip (see [#131](https://github.com/rzk-lang/rzk/pull/131)) + - Add `cabal update` to instructions (see [`3aa8fd3`](https://github.com/rzk-lang/rzk/commit/3aa8fd38902fc8cbb29f86122410d24398a15b0b)) + ## v0.6.6 — 2023-10-02 - Fix builds on Windows (and macOS) (see [#121](https://github.com/rzk-lang/rzk/pull/121)) diff --git a/docs/docs/community.md b/docs/docs/community.md new file mode 100644 index 000000000..46ab96599 --- /dev/null +++ b/docs/docs/community.md @@ -0,0 +1,7 @@ +# Rzk Community + +## Chat + +A Zulip chat is available for all to join and chat about Rzk, including formalization projects, development of Rzk, and related projects: + +[Join Rzk Zulip](https://rzk-lang.zulipchat.com/register/){ .md-button .md-button--primary } diff --git a/docs/docs/getting-started/install.md b/docs/docs/getting-started/install.md index 11fa583c7..2f0276ab2 100644 --- a/docs/docs/getting-started/install.md +++ b/docs/docs/getting-started/install.md @@ -7,26 +7,26 @@ These instructions will walk you through setting up Rzk using the "basic" setup 1. Install [VS Code](https://code.visualstudio.com/). 2. Launch VS Code and install the [`rzk` extension](https://marketplace.visualstudio.com/items?itemName=NikolaiKudasovfizruk.rzk-1-experimental-highlighting). 3. Create a new file using "File > New Text File" (Ctrl+N). Click the `Select a language` prompt, type in `rzk`, and select "Literate Rzk Markdown". - ![VS Code rzk language selector.](../../assets/images/vscode-rzk-select-language.png) + ![VS Code rzk language selector.](../../assets/images/vscode-rzk-select-language.png) 4. You should see the following popup: - ![VS Code rzk install prompt.](../../assets/images/vscode-rzk-install-prompt.png) + ![VS Code rzk install prompt.](../../assets/images/vscode-rzk-install-prompt.png) 5. Click "Yes" button. 6. While it is installing, you can paste the following literate Rzk program into the new file: - ````markdown - # Sample literate Rzk markdown + ````markdown + # Sample literate Rzk markdown - ```rzk - #lang rzk-1 - - #define id (A : U) - : A -> A - := \ x -> x - ``` - ```` + ```rzk + #lang rzk-1 + + #define id (A : U) + : A -> A + := \ x -> x + ``` + ```` 7. When the installation is done you should see the following popup: - ![VS Code rzk reload prompt.](../../assets/images/vscode-rzk-install-success-reload-prompt.png) + ![VS Code rzk reload prompt.](../../assets/images/vscode-rzk-install-success-reload-prompt.png) 8. Click "Reload button". 9. Save your file as `example.rzk.md`. 10. Open local Terminal (Ctrl+`). @@ -84,6 +84,7 @@ stack build && stack install To build and install with `cabal-install` from Hackage: ```sh +cabal v2-update cabal v2-install rzk ``` @@ -99,4 +100,5 @@ cabal v2-build && cabal v2-install ### Nix !!! warning "Work-in-progress" + To be done. diff --git a/docs/docs/index.md b/docs/docs/index.md index a6a8b1340..0ec6e3a0b 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -15,3 +15,9 @@ Using such representation is motivated by automatic handling of binders and easi An important part of `rzk` is a tope layer solver, which is essentially a theorem prover for a part of the type theory. A related project, dedicated just to that part is available at . `simple-topes` supports used-defined cubes, topes, and tope layer axioms. Once stable, `simple-topes` will be merged into `rzk`, expanding the proof assistant to the type theory with shapes, allowing formalisations for (variants of) cubical, globular, and other geometric versions of HoTT. See the list of contributors at [CONTRIBUTORS.md](CONTRIBUTORS.md). + +## Discussing Rzk and getting help + +A Zulip chat is available for all to join and chat about Rzk, including formalization projects, development of Rzk, and related projects: + +[Join Rzk Zulip](https://rzk-lang.zulipchat.com/register/){ .md-button .md-button--primary } diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 0860dfe4a..2792c41d2 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -33,6 +33,7 @@ nav: - Rendering Diagrams: reference/render.rzk.md - Examples: - Weak tope disjunction elimination: examples/recId.rzk.md + - Community: community.md - Tools: - Syntax Highlighting: tools/highlight.md - IDE support: tools/ide.md diff --git a/nix/scripts.nix b/nix/scripts.nix index 8687cd2a4..a4248f020 100644 --- a/nix/scripts.nix +++ b/nix/scripts.nix @@ -49,14 +49,11 @@ let scripts = release-rzk-playground = pkgs.writeShellApplication { name = "release-rzk-playground"; - runtimeInputs = [ pkgs.nodejs_18 packages.build-rzk-js ]; + runtimeInputs = [ pkgs.nodejs_18 ]; text = let playground = "rzk-playground"; playground-rzk-js = "${playground}/public/rzk.js"; - config = "next.config.js"; - configTmp = "${config}.tmp"; - configBackup = "${config}.bk"; release = "rzk-playground-release"; in '' @@ -67,26 +64,11 @@ let scripts = ( cd ${playground} npm i - - # empty string by default - - : "''${BASEPATH:=""}" - - # substitute basepath in config - - < ${config} sed "s|'''|'$BASEPATH'|" > ${configTmp} - mv ${config} ${configBackup} - mv ${configTmp} ${config} - - # restore backup anyway - - npm run build || true - mv ${configBackup} ${config} ) rm -rf ${release} mkdir ${release} - cp -r ${playground}/out/* ${release} + cp -r ${playground}/dist/* ${release} printf "Wrote release files to '${release}'\n" ''; diff --git a/rzk-playground/.eslintrc.cjs b/rzk-playground/.eslintrc.cjs new file mode 100644 index 000000000..d6c953795 --- /dev/null +++ b/rzk-playground/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/rzk-playground/.eslintrc.json b/rzk-playground/.eslintrc.json deleted file mode 100644 index 73601b742..000000000 --- a/rzk-playground/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "next" - ] -} \ No newline at end of file diff --git a/rzk-playground/app/layout.tsx b/rzk-playground/app/layout.tsx deleted file mode 100644 index 3df54bf87..000000000 --- a/rzk-playground/app/layout.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import './globals.css' -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' - -const inter = Inter({ subsets: ['latin'] }) - -export const metadata: Metadata = { - title: 'Try Rzk proof assistant!' -} - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - - {children} - - ) -} diff --git a/rzk-playground/app/page.tsx b/rzk-playground/app/page.tsx deleted file mode 100644 index ef07d4f6f..000000000 --- a/rzk-playground/app/page.tsx +++ /dev/null @@ -1,136 +0,0 @@ -'use client'; - -import { useCallback, useEffect, useState } from 'react'; -import Editor from '../components/editor/Editor'; -import Script from 'next/script'; -import { Resizable } from 're-resizable'; -import React from 'react'; -import * as rzk from '../src/rzk'; -import { KeyBindProvider, ShortcutType } from 'react-keybinds'; -import dynamic from 'next/dynamic'; - -var typecheckedOnStart = false - -declare var window: Window & typeof globalThis; - -function HomeNoSSR() { - const [message, setMessage] = useState("Starting..."); - - const [windowHeight, setWindowHeight] = useState(window.innerHeight) - const [needTypecheck, setNeedTypecheck] = useState(false) - - useEffect(() => { - const handleWindowResize = () => { - setWindowHeight(window.innerHeight) - }; - - window.addEventListener('resize', handleWindowResize); - - return () => { - window.removeEventListener('resize', handleWindowResize); - }; - }, []); - - const [text, setText] = useState("") - - const typecheck = useCallback(() => { - const result = rzk.typecheck(text) - if (result.status == 'ok') { - setMessage(`Everything is OK!`) - } else { - setMessage(result.result) - } - }, [text]) - - useEffect(() => { - function checkFlag() { - if ((!((window as any).rzkTypecheck_) || (text === "")) && !typecheckedOnStart) { - console.warn("something bad") - console.warn((window as any).rzkTypecheck_) - window.setTimeout(checkFlag, 100); /* this checks the flag every 100 milliseconds*/ - } else if (!typecheckedOnStart) { - typecheck() - typecheckedOnStart = true - } - } - - if (!typecheckedOnStart) { - checkFlag(); - } - }, [typecheck, text]) - - useEffect(() => { - if (needTypecheck) { - typecheck() - setNeedTypecheck(false) - } - }, [setNeedTypecheck, needTypecheck, typecheck]) - - const KEYBINDINGS: ShortcutType[] = - [ - { - keys: { - Mac: ['Shift', 'Enter'], - Windows: ['Shift', 'Enter'], - Linux: ['Shift', 'Enter'], - }, - label: 'Test command', - callback: () => { - setNeedTypecheck(true) - }, - }, - ] - ; - - const [outputHeight, setOutputHeight] = useState(windowHeight * 30 / 100) - const [editorHeight, setEditorHeight] = useState(windowHeight * 70 / 100) - - return ( -
-
- +
+ + + + \ No newline at end of file diff --git a/rzk-playground/next.config.js b/rzk-playground/next.config.js deleted file mode 100644 index ba0d39df6..000000000 --- a/rzk-playground/next.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - output: 'export', - basePath: '' -} - -module.exports = nextConfig diff --git a/rzk-playground/package-lock.json b/rzk-playground/package-lock.json index a36eadfdb..b1e36441c 100644 --- a/rzk-playground/package-lock.json +++ b/rzk-playground/package-lock.json @@ -8,11 +8,7 @@ "name": "rzk-playground", "version": "0.1.0", "dependencies": { - "@types/node": "^20.6.3", - "@types/react": "^18.2.22", - "@types/react-dom": "^18.2.7", "@uiw/react-codemirror": "^4.21.18", - "next": "^13.5.2", "re-resizable": "^6.9.11", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -21,11 +17,20 @@ "rzk-lezer": "./rzk-lezer" }, "devDependencies": { + "@types/node": "^20.6.3", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", "@types/react-resizable": "^3.0.4", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react-swc": "^3.3.2", "eslint": "^8.49.0", "eslint-config-next": "^13.5.2", "eslint-config-prettier": "^9.0.0", - "typescript": "^5.2.2" + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "typescript": "^5.2.2", + "vite": "^4.4.5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -621,11 +626,6 @@ "@lezer/common": "^1.0.0" } }, - "node_modules/@next/env": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.2.tgz", - "integrity": "sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==" - }, "node_modules/@next/eslint-plugin-next": { "version": "13.5.2", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.2.tgz", @@ -635,190 +635,274 @@ "glob": "7.1.7" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.2.tgz", - "integrity": "sha512-7eAyunAWq6yFwdSQliWMmGhObPpHTesiKxMw4DWVxhm5yLotBj8FCR4PXGkpRP2tf8QhaWuVba+/fyAYggqfQg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "dev": true + }, + "node_modules/@swc/core": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.91.tgz", + "integrity": "sha512-r950d0fdlZ8qbSDyvApn3HyCojiZE8xpgJzQvypeMi32dalYwugdJKWyLB55JIGMRGJ8+lmVvY4MPGkSR3kXgA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.91", + "@swc/core-darwin-x64": "1.3.91", + "@swc/core-linux-arm-gnueabihf": "1.3.91", + "@swc/core-linux-arm64-gnu": "1.3.91", + "@swc/core-linux-arm64-musl": "1.3.91", + "@swc/core-linux-x64-gnu": "1.3.91", + "@swc/core-linux-x64-musl": "1.3.91", + "@swc/core-win32-arm64-msvc": "1.3.91", + "@swc/core-win32-ia32-msvc": "1.3.91", + "@swc/core-win32-x64-msvc": "1.3.91" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.91.tgz", + "integrity": "sha512-7kHGiQ1he5khcEeJuHDmLZPM3rRL/ith5OTmV6bOPsoHi46kLeixORW+ts1opC3tC9vu6xbk16xgX0QAJchc1w==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.2.tgz", - "integrity": "sha512-WxXYWE7zF1ch8rrNh5xbIWzhMVas6Vbw+9BCSyZvu7gZC5EEiyZNJsafsC89qlaSA7BnmsDXVWQmc+s1feSYbQ==", + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.91.tgz", + "integrity": "sha512-8SpU18FbFpZDVzsHsAwdI1thF/picQGxq9UFxa8W+T9SDnbsqwFJv/6RqKJeJoDV6qFdl2OLjuO0OL7xrp0qnQ==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.2.tgz", - "integrity": "sha512-URSwhRYrbj/4MSBjLlefPTK3/tvg95TTm6mRaiZWBB6Za3hpHKi8vSdnCMw5D2aP6k0sQQIEG6Pzcfwm+C5vrg==", + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.91.tgz", + "integrity": "sha512-fOq4Cy8UbwX1yf0WB0d8hWZaIKCnPtPGguRqdXGLfwvhjZ9SIErT6PnmGTGRbQCNCIkOZWHKyTU0r8t2dN3haQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.91.tgz", + "integrity": "sha512-fki4ioRP/Esy4vdp8T34RCV+V9dqkRmOt763pf74pdiyFV2dPLXa5lnw/XvR1RTfPGknrYgjEQLCfZlReTryRw==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.2.tgz", - "integrity": "sha512-HefiwAdIygFyNmyVsQeiJp+j8vPKpIRYDlmTlF9/tLdcd3qEL/UEBswa1M7cvO8nHcr27ZTKXz5m7dkd56/Esg==", + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.91.tgz", + "integrity": "sha512-XrG+DUUqNtfVLcJ20imby7fpBwQNG5VsEQBzQndSonPyUOa2YkTbBb60YDondfQGDABopuHH8gHN8o2H2/VCnQ==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.2.tgz", - "integrity": "sha512-htGVVroW0tdHgMYwKWkxWvVoG2RlAdDXRO1RQxYDvOBQsaV0nZsgKkw0EJJJ3urTYnwKskn/MXm305cOgRxD2w==", + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.91.tgz", + "integrity": "sha512-d11bYhX+YPBr/Frcjc6eVn3C0LuS/9U1Li9EmQ+6s9EpYtYRl2ygSlC8eueLbaiazBnCVYFnc8bU4o0kc5B9sw==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.2.tgz", - "integrity": "sha512-UBD333GxbHVGi7VDJPPDD1bKnx30gn2clifNJbla7vo5nmBV+x5adyARg05RiT9amIpda6yzAEEUu+s774ldkw==", + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.91.tgz", + "integrity": "sha512-2SRp5Dke2P4jCQePkDx9trkkTstnRpZJVw5r3jvYdk0zeO6iC4+ZPvvoWXJLigqQv/fZnIiSUfJ6ssOoaEqTzQ==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.2.tgz", - "integrity": "sha512-Em9ApaSFIQnWXRT3K6iFnr9uBXymixLc65Xw4eNt7glgH0eiXpg+QhjmgI2BFyc7k4ZIjglfukt9saNpEyolWA==", + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.91.tgz", + "integrity": "sha512-l9qKXikOxj42UIjbeZpz9xtBmr736jOMqInNP8mVF2/U+ws5sI8zJjcOFFtfis4ru7vWCXhB1wtltdlJYO2vGA==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.2.tgz", - "integrity": "sha512-TBACBvvNYU+87X0yklSuAseqdpua8m/P79P0SG1fWUvWDDA14jASIg7kr86AuY5qix47nZLEJ5WWS0L20jAUNw==", + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.91.tgz", + "integrity": "sha512-+s+52O0QVPmzOgjEe/rcb0AK6q/J7EHKwAyJCu/FaYO9df5ovE0HJjSKP6HAF0dGPO5hkENrXuNGujofUH9vtQ==", "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.2.tgz", - "integrity": "sha512-LfTHt+hTL8w7F9hnB3H4nRasCzLD/fP+h4/GUVBTxrkMJOnh/7OZ0XbYDKO/uuWwryJS9kZjhxcruBiYwc5UDw==", + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.91", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.91.tgz", + "integrity": "sha512-7u9HDQhjUC3Gv43EFW84dZtduWCSa4MgltK+Sp9zEGti6WXqDPu/ESjvDsQEVYTBEMEvZs/xVAXPgLVHorV5nQ==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", "dev": true }, "node_modules/@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -828,17 +912,20 @@ "node_modules/@types/node": { "version": "20.6.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==" + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.6", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz", - "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==" + "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.22", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -849,6 +936,7 @@ "version": "18.2.7", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, "dependencies": { "@types/react": "*" } @@ -865,7 +953,96 @@ "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", + "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/type-utils": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", + "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, "node_modules/@typescript-eslint/parser": { "version": "6.7.2", @@ -912,6 +1089,90 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", + "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", + "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/types": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", @@ -952,6 +1213,105 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", + "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", + "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", + "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", @@ -1014,6 +1374,18 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.4.0.tgz", + "integrity": "sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.85" + }, + "peerDependencies": { + "vite": "^4" + } + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1299,17 +1671,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1332,25 +1693,6 @@ "node": ">=6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1367,11 +1709,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -1440,7 +1777,8 @@ "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -2023,6 +2361,15 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", + "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2400,11 +2747,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/globals": { "version": "13.22.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", @@ -2470,7 +2812,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -3158,6 +3501,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, "funding": [ { "type": "github", @@ -3177,52 +3521,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/next": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.2.tgz", - "integrity": "sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==", - "dependencies": { - "@next/env": "13.5.2", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.14.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.2", - "@next/swc-darwin-x64": "13.5.2", - "@next/swc-linux-arm64-gnu": "13.5.2", - "@next/swc-linux-arm64-musl": "13.5.2", - "@next/swc-linux-x64-gnu": "13.5.2", - "@next/swc-linux-x64-musl": "13.5.2", - "@next/swc-win32-arm64-msvc": "13.5.2", - "@next/swc-win32-ia32-msvc": "13.5.2", - "@next/swc-win32-x64-msvc": "13.5.2" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3453,7 +3751,8 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -3467,29 +3766,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3716,6 +3992,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3869,6 +4161,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3883,14 +4176,6 @@ "source-map": "^0.6.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", @@ -3994,28 +4279,6 @@ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==" }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4094,7 +4357,10 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/tsx": { "version": "3.13.0", @@ -4250,23 +4516,94 @@ "react": ">=16.8.0" } }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "node_modules/vite/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14" } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4382,14 +4719,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "rzk-lezer": { "version": "0.1.0", "dependencies": { diff --git a/rzk-playground/package.json b/rzk-playground/package.json index 8f15166e0..755c2ba35 100644 --- a/rzk-playground/package.json +++ b/rzk-playground/package.json @@ -3,17 +3,14 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", + "prepare": "tsc && vite build" }, "dependencies": { - "@types/node": "^20.6.3", - "@types/react": "^18.2.22", - "@types/react-dom": "^18.2.7", "@uiw/react-codemirror": "^4.21.18", - "next": "^13.5.2", "re-resizable": "^6.9.11", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -22,6 +19,15 @@ "rzk-lezer": "./rzk-lezer" }, "devDependencies": { + "@types/node": "^20.6.3", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react-swc": "^3.3.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "vite": "^4.4.5", "eslint": "^8.49.0", "eslint-config-next": "^13.5.2", "typescript": "^5.2.2", diff --git a/rzk-playground/src/App.tsx b/rzk-playground/src/App.tsx new file mode 100644 index 000000000..c52d3d88d --- /dev/null +++ b/rzk-playground/src/App.tsx @@ -0,0 +1,160 @@ +import { useCallback, useEffect, useState } from 'react'; +import { Editor } from './editor/Editor'; +import { Resizable } from 're-resizable'; +import * as rzk from './rzk'; +import { KeyBindProvider, ShortcutType } from 'react-keybinds'; + +declare let window: Window & typeof globalThis & { + rzkTypecheck_: (input: { input: string }) => void +}; + +function Root({ typecheckedOnStartState }: + { + typecheckedOnStartState: [boolean, React.Dispatch>] + }) { + const [typecheckedOnStart, setTypecheckedOnStart] = typecheckedOnStartState + const [windowHeight, setWindowHeight] = useState(window.innerHeight) + + useEffect(() => { + const handleWindowResize = () => { + setWindowHeight(window.innerHeight) + }; + + window.addEventListener('resize', handleWindowResize); + + return () => { + window.removeEventListener('resize', handleWindowResize); + }; + }, []); + + const [text, setText] = useState("") + + const [output, setOutput] = useState("Starting..."); + + const typecheck = useCallback(() => { + const result = rzk.typecheck(text) + if (result.status == 'ok') { + setOutput(`Everything is OK!`) + } else { + setOutput(result.result) + } + }, [text]) + + const [rzkTypeCheckAvailable, setRzkTypeCheckAvailable] = useState(false) + + useEffect(() => { + function checkRzkTypecheckAvailable() { + if (!window.rzkTypecheck_) { + window.setTimeout(checkRzkTypecheckAvailable, 100) + } else { + setRzkTypeCheckAvailable(true) + } + } + + checkRzkTypecheckAvailable() + }, [text]) + + // Typecheck when function and text are ready + useEffect(() => { + function checkFlag() { + if (!typecheckedOnStart && (!rzkTypeCheckAvailable || text === '')) { + console.warn("Can't typecheck!") + } else if (!typecheckedOnStart) { + typecheck() + setTypecheckedOnStart(true) + } + } + + if (!typecheckedOnStart) { + checkFlag(); + } + }, [typecheck, rzkTypeCheckAvailable, text, setTypecheckedOnStart, typecheckedOnStart]) + + const [needTypecheck, setNeedTypecheck] = useState(false) + + useEffect(() => { + if (needTypecheck) { + typecheck() + setNeedTypecheck(false) + } + }, [setNeedTypecheck, needTypecheck, typecheck]) + + const KEYBINDINGS: ShortcutType[] = + [ + { + keys: { + Mac: ['Shift', 'Enter'], + Windows: ['Shift', 'Enter'], + Linux: ['Shift', 'Enter'], + }, + label: 'Test command', + callback: () => { + setNeedTypecheck(true) + }, + }, + ] + ; + + + // height of the output panel + const [outputPanelHeight, setOutputHeight] = useState(windowHeight * 30 / 100) + + // visible height of the editor + const [editorHeight, setEditorHeight] = useState(windowHeight * 70 / 100) + + const + minHeight = 100, + maxHeight = windowHeight - 100, + width = '100vw', + height = '100vh', + backgroundColor = '#202028' + + return ( +
+
+ +
+ +
+
+ { + setOutputHeight(outputPanelHeight + delta.height) + }} + onResize={(_event, _direction, _elementRef, delta) => { + setEditorHeight(window.innerHeight - (outputPanelHeight + delta.height)) + }} + style={{ padding: '20px' }} + > + +
{output}
+
+
+
+
+ ) +} + + +function App() { + return +} + +export default App \ No newline at end of file diff --git a/rzk-playground/components/editor/Editor.tsx b/rzk-playground/src/editor/Editor.tsx similarity index 66% rename from rzk-playground/components/editor/Editor.tsx rename to rzk-playground/src/editor/Editor.tsx index 4a797983d..c3c78783d 100644 --- a/rzk-playground/components/editor/Editor.tsx +++ b/rzk-playground/src/editor/Editor.tsx @@ -1,5 +1,3 @@ -'use client'; - import CodeMirror from '@uiw/react-codemirror'; import { EditorView, keymap } from '@codemirror/view' import { scrollPastEnd } from '@codemirror/view'; @@ -9,35 +7,56 @@ import { Dispatch, SetStateAction, useState } from 'react'; import { centerCursor } from './cursor-height'; import { language } from './parser'; -export default function Editor({ - setText, +async function setInitialText(setText: Dispatch>) { + const params = new URLSearchParams(window.location.search); + if (params.has("snippet")) { + setText(params.get("snippet")!); + } else if (params.has("code")) { + setText(params.get("code")!); + } else if (params.has("snippet_url")) { + const url = params.get("snippet_url")!; + const response = await fetch(url, { + method: 'GET', + headers: { + Accept: 'text/plain;charset=UTF-8' + } + }) + + if (!response.ok) { + console.error(`Could not get code from ${url}`) + } + + setText(await response.text()) + } + else { + setText(example) + } +} + +export function Editor({ + textState, setNeedTypecheck, editorHeight }: { - setText: Dispatch>, + textState: [string, Dispatch>], setNeedTypecheck: React.Dispatch>, editorHeight: number }) { const [existsSelection, setExistsSelection] = useState(false) - const params = new URLSearchParams(window.location.search); + const [text, setText] = textState - var snippet = example - if (params.has("snippet")) { - snippet = params.get("snippet")!; - } else if (params.has("code")) { - snippet = params.get("code")!; - } return { - setText(snippet) + onCreateEditor={async (view) => { + await setInitialText(setText) + view.dispatch({ effects: EditorView.scrollIntoView(0) }) }} onUpdate={(update) => { if (update.selectionSet) { - let ranges = update.state.selection.ranges.filter(v => { return v.from != v.to }) + const ranges = update.state.selection.ranges.filter(v => { return v.from != v.to }) setExistsSelection(ranges.length > 0) } }} diff --git a/rzk-playground/components/editor/cursor-height.ts b/rzk-playground/src/editor/cursor-height.ts similarity index 84% rename from rzk-playground/components/editor/cursor-height.ts rename to rzk-playground/src/editor/cursor-height.ts index a61641b5d..d0743446a 100644 --- a/rzk-playground/components/editor/cursor-height.ts +++ b/rzk-playground/src/editor/cursor-height.ts @@ -5,7 +5,7 @@ import { ViewPlugin, ViewUpdate } from "@uiw/react-codemirror" export const centerCursor = (editorHeight: number) => ViewPlugin.fromClass(class { update(update: ViewUpdate) { if (update.transactions.some(tr => tr.scrollIntoView)) { - let view = update.view + const view = update.view // (Sync with other DOM read/write phases for efficiency) view.requestMeasure({ read() { @@ -15,8 +15,8 @@ export const centerCursor = (editorHeight: number) => ViewPlugin.fromClass(class }, write({ cursor }) { if (cursor) { - let cursorHeight = cursor.bottom - cursor.top - let outputTop = editorHeight + const cursorHeight = cursor.bottom - cursor.top + const outputTop = editorHeight if (cursor.bottom + cursorHeight + 5 > outputTop) view.scrollDOM.scrollTop += ((cursor.bottom + 5) - outputTop) } diff --git a/rzk-playground/components/editor/example.ts b/rzk-playground/src/editor/example.ts similarity index 100% rename from rzk-playground/components/editor/example.ts rename to rzk-playground/src/editor/example.ts diff --git a/rzk-playground/components/editor/parser.ts b/rzk-playground/src/editor/parser.ts similarity index 96% rename from rzk-playground/components/editor/parser.ts rename to rzk-playground/src/editor/parser.ts index e3fca9984..ed0aa622a 100644 --- a/rzk-playground/components/editor/parser.ts +++ b/rzk-playground/src/editor/parser.ts @@ -2,7 +2,7 @@ import { parser } from 'rzk-lezer/src/parser' import { styleTags, tags as t } from '@lezer/highlight' import { LRLanguage } from '@codemirror/language' -let parserWithMetadata = parser.configure({ +const parserWithMetadata = parser.configure({ props: [ styleTags({ "LineComment!": t.lineComment, diff --git a/rzk-playground/components/editor/theme.ts b/rzk-playground/src/editor/theme.ts similarity index 100% rename from rzk-playground/components/editor/theme.ts rename to rzk-playground/src/editor/theme.ts diff --git a/rzk-playground/app/globals.css b/rzk-playground/src/index.css similarity index 98% rename from rzk-playground/app/globals.css rename to rzk-playground/src/index.css index 681e443e2..4b28f4e5b 100644 --- a/rzk-playground/app/globals.css +++ b/rzk-playground/src/index.css @@ -80,12 +80,12 @@ body { background: #A46BF5; } -#message { +#output { background-color: #1e1f1c; color: #ffffff; overflow: scroll; } -#message pre { +#output pre { font-family: Inconsolata, monospace; } \ No newline at end of file diff --git a/rzk-playground/src/main.tsx b/rzk-playground/src/main.tsx new file mode 100644 index 000000000..3d7150da8 --- /dev/null +++ b/rzk-playground/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/rzk-playground/src/rzk-wrapper.js b/rzk-playground/src/rzk-wrapper.js deleted file mode 100644 index f0e692711..000000000 --- a/rzk-playground/src/rzk-wrapper.js +++ /dev/null @@ -1,5 +0,0 @@ -export function rzkTypecheck(input) { - var tmp = { input } - rzkTypecheck_(tmp) - return tmp -} \ No newline at end of file diff --git a/rzk-playground/src/rzk.ts b/rzk-playground/src/rzk.ts index 809afc6da..6c34cb772 100644 --- a/rzk-playground/src/rzk.ts +++ b/rzk-playground/src/rzk.ts @@ -1,8 +1,10 @@ -import * as wrapper from "./rzk-wrapper" - export type Result = { status: string, result: string } +declare function rzkTypecheck_(tmp: { input: string }): void; + export function typecheck(input: string) { - let result: Result = wrapper.rzkTypecheck(input) as any + const tmp = { input } + rzkTypecheck_(tmp) + const result: Result = tmp as unknown as Result return result } \ No newline at end of file diff --git a/rzk-playground/tsconfig.json b/rzk-playground/tsconfig.json index e59724b28..aa29fe5ef 100644 --- a/rzk-playground/tsconfig.json +++ b/rzk-playground/tsconfig.json @@ -1,27 +1,25 @@ { "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", + + /* Bundler mode */ "moduleResolution": "bundler", + "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": ["src", "public/rzk.js"], + "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/rzk-playground/tsconfig.node.json b/rzk-playground/tsconfig.node.json new file mode 100644 index 000000000..42872c59f --- /dev/null +++ b/rzk-playground/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/rzk-playground/vite.config.ts b/rzk-playground/vite.config.ts new file mode 100644 index 000000000..8e22e98e3 --- /dev/null +++ b/rzk-playground/vite.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +const ASSET_URL = process.env.ASSET_URL || '/'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + base: ASSET_URL +}) diff --git a/rzk/ChangeLog.md b/rzk/ChangeLog.md index 39a65be92..58a024af4 100644 --- a/rzk/ChangeLog.md +++ b/rzk/ChangeLog.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## v0.6.7 — 2023-10-07 + +- Fix build on some systems (fix `BNFC:bnfc` executable dependency, see [#125](https://github.com/rzk-lang/rzk/pull/125)) +- Improve Rzk Playground (see [#124](https://github.com/rzk-lang/rzk/pull/124) by @deemp): + - Add `snippet_url` parameter + - Migrated from NextJS to Vite + - Use `setText` on `params` attribute +- Slightly improve documentation: + - Add links to Rzk Zulip (see [#131](https://github.com/rzk-lang/rzk/pull/131)) + - Add `cabal update` to instructions (see [`3aa8fd3`](https://github.com/rzk-lang/rzk/commit/3aa8fd38902fc8cbb29f86122410d24398a15b0b)) + ## v0.6.6 — 2023-10-02 - Fix builds on Windows (and macOS) (see [#121](https://github.com/rzk-lang/rzk/pull/121)) diff --git a/rzk/package.yaml b/rzk/package.yaml index a76e7f9f2..1a92ad2a3 100644 --- a/rzk/package.yaml +++ b/rzk/package.yaml @@ -1,10 +1,10 @@ name: rzk -version: 0.6.6 -github: 'rzk-lang/rzk' +version: 0.6.7 +github: "rzk-lang/rzk" license: BSD3 -author: 'Nikolai Kudasov' -maintainer: 'nickolay.kudasov@gmail.com' -copyright: '2023 Nikolai Kudasov' +author: "Nikolai Kudasov" +maintainer: "nickolay.kudasov@gmail.com" +copyright: "2023 Nikolai Kudasov" extra-source-files: - README.md @@ -28,14 +28,14 @@ flags: custom-setup: dependencies: - base: ">= 4.11.0.0 && < 5.0" - Cabal: ">= 2.4.0.1 && < 4.0" + base: ">= 4.11.0.0 && < 5.0" + Cabal: ">= 2.4.0.1 && < 4.0" process: ">= 1.6.3.0" build-tools: - alex: ">= 3.2.4" - happy: ">= 1.19.9" - BNFC: ">= 2.9.4.1" + alex: ">= 3.2.4" + happy: ">= 1.19.9" + BNFC:bnfc: ">= 2.9.4.1" dependencies: array: ">= 0.5.3.0" diff --git a/rzk/rzk.cabal b/rzk/rzk.cabal index 7a39c812c..e5a48f94f 100644 --- a/rzk/rzk.cabal +++ b/rzk/rzk.cabal @@ -5,7 +5,7 @@ cabal-version: 1.24 -- see: https://github.com/sol/hpack name: rzk -version: 0.6.6 +version: 0.6.7 synopsis: An experimental proof assistant for synthetic ∞-categories description: Please see the README on GitHub at category: Dependent Types @@ -61,7 +61,7 @@ library alex >=3.2.4 , happy >=1.19.9 build-tool-depends: - BNFC:BNFC >=2.9.4.1 + BNFC:bnfc >=2.9.4.1 build-depends: Glob >=0.9.3 , array >=0.5.3.0 @@ -104,7 +104,7 @@ executable rzk alex >=3.2.4 , happy >=1.19.9 build-tool-depends: - BNFC:BNFC >=2.9.4.1 + BNFC:bnfc >=2.9.4.1 build-depends: Glob >=0.9.3 , array >=0.5.3.0 @@ -133,7 +133,7 @@ test-suite doctests alex >=3.2.4 , happy >=1.19.9 build-tool-depends: - BNFC:BNFC >=2.9.4.1 + BNFC:bnfc >=2.9.4.1 build-depends: Glob , QuickCheck @@ -162,7 +162,7 @@ test-suite rzk-test alex >=3.2.4 , happy >=1.19.9 build-tool-depends: - BNFC:BNFC >=2.9.4.1 + BNFC:bnfc >=2.9.4.1 build-depends: Glob >=0.9.3 , array >=0.5.3.0