From 6bbecb75f7d6ecd5c1012c8975013b853f27df03 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Tue, 25 Aug 2026 02:50:33 +0000 Subject: [PATCH 1/3] chore: bump LaTeX2JS packages to 4.4.0 --- package.json | 4 ++-- pnpm-lock.yaml | 56 +++++++++++++++++++-------------------------- pnpm-workspace.yaml | 4 ++-- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 226a9da..f7c7bce 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ }, "dependencies": { "jsonldjs": "^0.1.2", - "latex2js": "4.3.1", - "latex2react": "4.3.1", + "latex2js": "4.4.0", + "latex2react": "4.4.0", "next": "16.1.6", "next-seo": "^6.8.0", "react": "19.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17be1ed..eaace3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,11 +16,11 @@ importers: specifier: ^0.1.2 version: 0.1.2 latex2js: - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.0 + version: 4.4.0 latex2react: - specifier: 4.3.1 - version: 4.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 4.4.0 + version: 4.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.7(supports-color@8.1.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -869,8 +869,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.11.14: - resolution: {integrity: sha512-JyJ954WzuIR8/FFzX0o5krdSTrBAkcCSRfWSleRsIHSWV+cZe2FI1PKggVkFke1hBldRs+LRxUczzE9iPmgZww==} + baseline-browser-mapping@2.11.18: + resolution: {integrity: sha512-1iEmLEYSiE1SeBoAfPo/Mnx3PzfzHUkDK61ASkCpuk3YXugYLH5DYK1SzqV55F8FMI6s0F+/tCP7Polz1QRjxw==} engines: {node: '>=6.0.0'} hasBin: true @@ -1029,8 +1029,8 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - electron-to-chromium@1.5.408: - resolution: {integrity: sha512-SLoprcYpJ/OH2v2ps0+N5biv9H4/KBT3+YmmDew64TwK5y9j2wv7pMOFY7IorVkyMtEyLSCRlXKLsNlakeAlPw==} + electron-to-chromium@1.5.412: + resolution: {integrity: sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -1423,11 +1423,11 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - latex2js@4.3.1: - resolution: {integrity: sha512-C66+ZFw9rslP6QYgp702Dzut8s3x/wqc2uDGUkVkl7gzKg0qa8j0e4WKPKT43NgEMl0vN5c7CwlO7QNSOccraA==} + latex2js@4.4.0: + resolution: {integrity: sha512-YNDhNEDgtuqpS8t1JJdO25DQ6L1+RZNdKaI1EnAJXfyyVJUWB+AWT1MljRsSCNNCk9f9yKhSI2AdLfXbdSgi4g==} - latex2react@4.3.1: - resolution: {integrity: sha512-VbX2g3SGRCCnUoW6fnunwNFt/C9gOIYE1UtGcWmrgKRFyu9H2/+X7vHMwqXzaVE74MNwQrNBsxaB7q20itUaNQ==} + latex2react@4.4.0: + resolution: {integrity: sha512-ns1Gb4jAcEUlY3GxIoxVYaOr2i6vp3W2tnU+CEtrBTKJQHG0xCSG1co/cKsAVmbT29lw0jlpq55JZVO/NpS11g==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1637,10 +1637,6 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -1726,8 +1722,8 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.2: + resolution: {integrity: sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==} readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -2809,7 +2805,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.11.14: {} + baseline-browser-mapping@2.11.18: {} binary-extensions@2.3.0: {} @@ -2828,9 +2824,9 @@ snapshots: browserslist@4.28.8: dependencies: - baseline-browser-mapping: 2.11.14 + baseline-browser-mapping: 2.11.18 caniuse-lite: 1.0.30001809 - electron-to-chromium: 1.5.408 + electron-to-chromium: 1.5.412 node-releases: 2.0.53 update-browserslist-db: 1.3.1(browserslist@4.28.8) @@ -2947,7 +2943,7 @@ snapshots: dlv@1.1.3: {} - electron-to-chromium@1.5.408: {} + electron-to-chromium@1.5.412: {} emittery@0.13.1: {} @@ -3528,18 +3524,18 @@ snapshots: kleur@3.0.3: {} - latex2js@4.3.1: + latex2js@4.4.0: dependencies: '@latex2js/pstricks': 4.2.0 '@latex2js/settings': 4.2.0 '@latex2js/utils': 4.2.0 - latex2react@4.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + latex2react@4.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@latex2js/macros': 3.2.0 '@latex2js/pstricks': 4.2.0 '@latex2js/utils': 4.2.0 - latex2js: 4.3.1 + latex2js: 4.4.0 mathjaxjs: 4.2.0 mathjaxjs-react: 4.2.0(react@19.2.4) react: 19.2.4 @@ -3629,7 +3625,7 @@ snapshots: dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.11.14 + baseline-browser-mapping: 2.11.18 caniuse-lite: 1.0.30001809 postcss: 8.4.31 react: 19.2.4 @@ -3713,8 +3709,6 @@ snapshots: picomatch@4.0.5: {} - pify@2.3.0: {} - pirates@4.0.7: {} pkg-dir@4.2.0: @@ -3725,7 +3719,7 @@ snapshots: dependencies: postcss: 8.5.26 postcss-value-parser: 4.2.0 - read-cache: 1.0.0 + read-cache: 1.0.2 resolve: 1.22.12 postcss-js@4.1.0(postcss@8.5.26): @@ -3789,9 +3783,7 @@ snapshots: react@19.2.4: {} - read-cache@1.0.0: - dependencies: - pify: 2.3.0 + read-cache@1.0.2: {} readdirp@3.6.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 928405d..0a9f037 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,8 +8,8 @@ minimumReleaseAgeExclude: - '@latex2js/pstricks@4.2.0' - '@latex2js/settings@4.2.0' - '@latex2js/utils@4.2.0' - - latex2js@4.3.1 - - latex2react@4.3.1 + - latex2js@4.4.0 + - latex2react@4.4.0 - mathjaxjs-react@4.2.0 - mathjaxjs@4.2.0 overrides: From f9457c66efac6089d2e2e329177da7d9893d0fc6 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Tue, 25 Aug 2026 03:02:38 +0000 Subject: [PATCH 2/3] feat: add CodeMirror sandbox editor --- package.json | 3 + pnpm-lock.yaml | 199 +++++++++++++++++++++++++++ src/components/common/layout.tsx | 15 +- src/components/tex-editor-client.tsx | 32 +++++ src/components/tex-editor.tsx | 25 ++++ src/pages/examples/[exampleId].tsx | 14 +- src/pages/sandbox.tsx | 82 ++++++++--- 7 files changed, 341 insertions(+), 29 deletions(-) create mode 100644 src/components/tex-editor-client.tsx create mode 100644 src/components/tex-editor.tsx diff --git a/package.json b/package.json index f7c7bce..d0f71f6 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,9 @@ "pnpm": ">=10" }, "dependencies": { + "@codemirror/language": "6.12.4", + "@codemirror/legacy-modes": "6.5.3", + "@uiw/react-codemirror": "4.25.11", "jsonldjs": "^0.1.2", "latex2js": "4.4.0", "latex2react": "4.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eaace3b..ef1584c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,15 @@ importers: .: dependencies: + '@codemirror/language': + specifier: 6.12.4 + version: 6.12.4 + '@codemirror/legacy-modes': + specifier: 6.5.3 + version: 6.5.3 + '@uiw/react-codemirror': + specifier: 4.25.11 + version: 4.25.11(@babel/runtime@8.0.0)(@codemirror/autocomplete@6.20.3)(@codemirror/language@6.12.4)(@codemirror/lint@6.9.7)(@codemirror/search@6.7.1)(@codemirror/state@6.7.1)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.43.9)(codemirror@6.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) jsonldjs: specifier: ^0.1.2 version: 0.1.2 @@ -236,6 +245,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@8.0.0': + resolution: {integrity: sha512-sL6cvO2IfkSu/iU+zs2S/w01B7A8V7suXSIKEN4hPFFdZoiPGxrj5pAG0lCaqLWiEIrjKzdznIWuaLcxPR53qw==} + '@babel/template@7.29.7': resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} @@ -251,6 +263,33 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@codemirror/autocomplete@6.20.3': + resolution: {integrity: sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==} + + '@codemirror/commands@6.11.0': + resolution: {integrity: sha512-/K4Rl5BN0OtTiPWmJCdqODu38XnDMsDxKY5rgrPnCkutPTJf2wVbkoixLfealF5Kwse/s8P8M5jAiURiwSwnFA==} + + '@codemirror/language@6.12.4': + resolution: {integrity: sha512-1q4PaT+o6PbgpkJt4Q8Fv5XJxTy4FUZ4MWETtyiDw3J0Pyr9E2vqcKL+k9wcvjNTIsauxvE7OfmWj3FRPHQ76A==} + + '@codemirror/legacy-modes@6.5.3': + resolution: {integrity: sha512-xCsmIzH78MyWkib9jlPaaun57XNkfbMIhagfaZVd0iLTqlpw3jXaIcbZm72MTmmn64eTZpBVNjbyYh+QXnxRsg==} + + '@codemirror/lint@6.9.7': + resolution: {integrity: sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==} + + '@codemirror/search@6.7.1': + resolution: {integrity: sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA==} + + '@codemirror/state@6.7.1': + resolution: {integrity: sha512-9QzNDgE4EYDnAHfrTlR2lwiPciiOymLtwKK+8yHQzCc7GXhAP9xdEbEJFy2IWB1j9UGUl9BsgMmTo/ImA02T7A==} + + '@codemirror/theme-one-dark@6.1.3': + resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==} + + '@codemirror/view@6.43.9': + resolution: {integrity: sha512-sTuUzTpPMFebRhg6dawChoKKgndIwfjmJgKVxBefPElcU2NwQ6AFroupk0SFqEerQyZOGRfDNnSN8Dw/lMAsXw==} + '@emnapi/runtime@1.11.3': resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} @@ -669,6 +708,18 @@ packages: '@latex2js/utils@4.2.0': resolution: {integrity: sha512-Rlniv0qwnF7e15MnQMnAN0jeOQCmIwwJxgZ57V3bOqZePGkCnIw4VG2TviRlrA76QsggPAe+G2xPNbe4U1xrDg==} + '@lezer/common@1.5.2': + resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} + + '@lezer/highlight@1.2.3': + resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} + + '@lezer/lr@1.4.10': + resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} + + '@marijn/find-cluster-break@1.0.4': + resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} + '@next/env@16.1.6': resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} @@ -801,6 +852,28 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@uiw/codemirror-extensions-basic-setup@4.25.11': + resolution: {integrity: sha512-otyFa+n9IOYtEjaKOxPedHkj15fTPUF21wdR9pv0GpZPfuGl27cvmcv6+tognbRu9VvEcsHKE+ESoszeo3KfTw==} + peerDependencies: + '@codemirror/autocomplete': '>=6.0.0' + '@codemirror/commands': '>=6.0.0' + '@codemirror/language': '>=6.0.0' + '@codemirror/lint': '>=6.0.0' + '@codemirror/search': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + + '@uiw/react-codemirror@4.25.11': + resolution: {integrity: sha512-DYVFAKLX+F/4JS9N/7xexh+TICrlncwkX9HKKInrP1bwO0tSfc3k0GB6oawTYhelVKh20cX3TuRx+NJSkVXuMw==} + peerDependencies: + '@babel/runtime': '>=7.11.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/theme-one-dark': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + codemirror: '>=6.0.0' + react: '>=17.0.0' + react-dom: '>=17.0.0' + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -953,6 +1026,9 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + codemirror@6.0.2: + resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} + collect-v8-coverage@1.0.3: resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} @@ -978,6 +1054,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + crelt@1.0.7: + resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1840,6 +1919,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -1973,6 +2055,9 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -2182,6 +2267,8 @@ snapshots: '@babel/core': 7.29.7(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.29.7 + '@babel/runtime@8.0.0': {} + '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 @@ -2207,6 +2294,63 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@codemirror/autocomplete@6.20.3': + dependencies: + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + '@lezer/common': 1.5.2 + + '@codemirror/commands@6.11.0': + dependencies: + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + '@lezer/common': 1.5.2 + + '@codemirror/language@6.12.4': + dependencies: + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + style-mod: 4.1.3 + + '@codemirror/legacy-modes@6.5.3': + dependencies: + '@codemirror/language': 6.12.4 + + '@codemirror/lint@6.9.7': + dependencies: + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + crelt: 1.0.7 + + '@codemirror/search@6.7.1': + dependencies: + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + crelt: 1.0.7 + + '@codemirror/state@6.7.1': + dependencies: + '@marijn/find-cluster-break': 1.0.4 + + '@codemirror/theme-one-dark@6.1.3': + dependencies: + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + '@lezer/highlight': 1.2.3 + + '@codemirror/view@6.43.9': + dependencies: + '@codemirror/state': 6.7.1 + crelt: 1.0.7 + style-mod: 4.1.3 + w3c-keyname: 2.2.8 + '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 @@ -2593,6 +2737,18 @@ snapshots: '@latex2js/utils@4.2.0': {} + '@lezer/common@1.5.2': {} + + '@lezer/highlight@1.2.3': + dependencies: + '@lezer/common': 1.5.2 + + '@lezer/lr@1.4.10': + dependencies: + '@lezer/common': 1.5.2 + + '@marijn/find-cluster-break@1.0.4': {} + '@next/env@16.1.6': {} '@next/swc-darwin-arm64@16.1.6': @@ -2712,6 +2868,33 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@uiw/codemirror-extensions-basic-setup@4.25.11(@codemirror/autocomplete@6.20.3)(@codemirror/commands@6.11.0)(@codemirror/language@6.12.4)(@codemirror/lint@6.9.7)(@codemirror/search@6.7.1)(@codemirror/state@6.7.1)(@codemirror/view@6.43.9)': + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/commands': 6.11.0 + '@codemirror/language': 6.12.4 + '@codemirror/lint': 6.9.7 + '@codemirror/search': 6.7.1 + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + + '@uiw/react-codemirror@4.25.11(@babel/runtime@8.0.0)(@codemirror/autocomplete@6.20.3)(@codemirror/language@6.12.4)(@codemirror/lint@6.9.7)(@codemirror/search@6.7.1)(@codemirror/state@6.7.1)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.43.9)(codemirror@6.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 8.0.0 + '@codemirror/commands': 6.11.0 + '@codemirror/state': 6.7.1 + '@codemirror/theme-one-dark': 6.1.3 + '@codemirror/view': 6.43.9 + '@uiw/codemirror-extensions-basic-setup': 4.25.11(@codemirror/autocomplete@6.20.3)(@codemirror/commands@6.11.0)(@codemirror/language@6.12.4)(@codemirror/lint@6.9.7)(@codemirror/search@6.7.1)(@codemirror/state@6.7.1)(@codemirror/view@6.43.9) + codemirror: 6.0.2 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + transitivePeerDependencies: + - '@codemirror/autocomplete' + - '@codemirror/language' + - '@codemirror/lint' + - '@codemirror/search' + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -2883,6 +3066,16 @@ snapshots: co@4.6.0: {} + codemirror@6.0.2: + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/commands': 6.11.0 + '@codemirror/language': 6.12.4 + '@codemirror/lint': 6.9.7 + '@codemirror/search': 6.7.1 + '@codemirror/state': 6.7.1 + '@codemirror/view': 6.43.9 + collect-v8-coverage@1.0.3: {} color-convert@2.0.1: @@ -2912,6 +3105,8 @@ snapshots: - supports-color - ts-node + crelt@1.0.7: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -3902,6 +4097,8 @@ snapshots: strip-json-comments@3.1.1: {} + style-mod@4.1.3: {} + styled-jsx@5.1.6(@babel/core@7.29.7(supports-color@8.1.1))(react@19.2.4): dependencies: client-only: 0.0.1 @@ -4040,6 +4237,8 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + w3c-keyname@2.2.8: {} + walker@1.0.8: dependencies: makeerror: 1.0.12 diff --git a/src/components/common/layout.tsx b/src/components/common/layout.tsx index d230cba..e3c55be 100644 --- a/src/components/common/layout.tsx +++ b/src/components/common/layout.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import { useRouter } from 'next/router'; import { ReactNode } from 'react'; import { routes } from '@/routes'; @@ -11,6 +12,10 @@ const navLinks = [ ]; export function Layout({ children }: { children: ReactNode }) { + // The sandbox is a workspace rather than a page of prose, so let it fill + // the viewport for the editor and render pane. + const isWorkspace = useRouter().pathname === routes.sandbox; + return (
@@ -30,7 +35,15 @@ export function Layout({ children }: { children: ReactNode }) {
-
{children}
+
+ {children} +