From 9a1c2b5bf6486bc1cd79e6a9a138719e9b76a18b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Wed, 28 Jan 2026 16:37:47 +0100 Subject: [PATCH] refactor: cleanup --- package.json | 1 - pnpm-lock.yaml | 147 ---- src/lib/chat/MatrixRoomMembers.svelte | 71 -- src/lib/chat/MatrixRooms.svelte | 73 -- src/lib/chat/MatrixSpace.svelte | 0 src/lib/chat/MatrixTimeline.svelte | 231 ------- src/lib/chat/chat-rx.ts | 109 --- src/lib/chat/chat.ts | 35 - src/lib/chat/events/MatrixEvent.svelte | 381 ---------- src/lib/chat/events/MatrixMessageEvent.svelte | 56 -- src/lib/chat/matrix-rx/client.ts | 71 -- src/lib/chat/matrix-rx/events.ts | 11 - src/lib/chat/matrix-rx/rooms.ts | 85 --- src/lib/chat/matrix-rx/timeline.ts | 19 - src/lib/components/Action.svelte | 10 +- src/lib/learn/chords.ts | 101 --- src/lib/learn/stats.ts | 11 - src/routes/(app)/ccos/+layout.server.ts | 1 + src/routes/(app)/chat-rx/+page.svelte | 92 --- src/routes/(app)/chat-rx/Login.svelte | 33 - src/routes/(app)/chat-rx/Space.svelte | 0 src/routes/(app)/chat/+page.svelte | 180 ----- .../will-my-compound-break/+page.svelte | 13 - src/routes/(app)/config/cv2/+page.svelte | 200 ------ src/routes/(app)/learn/+page.svelte | 24 - src/routes/(app)/learn/chords/+page.svelte | 232 ------- src/routes/(app)/learn/layout/+page.svelte | 124 ---- src/routes/(app)/learn/sentence/+page.svelte | 652 ------------------ .../(app)/learn/sentence/configuration.ts | 32 - src/routes/(app)/learn/sentence/constants.ts | 8 - src/routes/(app)/learn/sentence/types.ts | 0 .../learn/sentence/word-selector.spec.ts | 69 -- .../(app)/learn/sentence/word-selector.ts | 25 - src/routes/(app)/plugin/+page.svelte | 263 ------- src/routes/(app)/plugin/example-plugin.js | 32 - src/routes/(app)/plugin/plugin-types.ts | 30 - src/routes/(app)/stats/+page.svelte | 0 src/routes/(app)/test/+page.svelte | 20 - static/sandbox/index.html | 60 -- static/sentences/Modelfile | 10 - vite.config.ts | 1 - 41 files changed, 9 insertions(+), 3504 deletions(-) delete mode 100644 src/lib/chat/MatrixRoomMembers.svelte delete mode 100644 src/lib/chat/MatrixRooms.svelte delete mode 100644 src/lib/chat/MatrixSpace.svelte delete mode 100644 src/lib/chat/MatrixTimeline.svelte delete mode 100644 src/lib/chat/chat-rx.ts delete mode 100644 src/lib/chat/chat.ts delete mode 100644 src/lib/chat/events/MatrixEvent.svelte delete mode 100644 src/lib/chat/events/MatrixMessageEvent.svelte delete mode 100644 src/lib/chat/matrix-rx/client.ts delete mode 100644 src/lib/chat/matrix-rx/events.ts delete mode 100644 src/lib/chat/matrix-rx/rooms.ts delete mode 100644 src/lib/chat/matrix-rx/timeline.ts delete mode 100644 src/lib/learn/chords.ts delete mode 100644 src/lib/learn/stats.ts create mode 100644 src/routes/(app)/ccos/+layout.server.ts delete mode 100644 src/routes/(app)/chat-rx/+page.svelte delete mode 100644 src/routes/(app)/chat-rx/Login.svelte delete mode 100644 src/routes/(app)/chat-rx/Space.svelte delete mode 100644 src/routes/(app)/chat/+page.svelte delete mode 100644 src/routes/(app)/config/cv2/+page.svelte delete mode 100644 src/routes/(app)/learn/+page.svelte delete mode 100644 src/routes/(app)/learn/chords/+page.svelte delete mode 100644 src/routes/(app)/learn/layout/+page.svelte delete mode 100644 src/routes/(app)/learn/sentence/+page.svelte delete mode 100644 src/routes/(app)/learn/sentence/configuration.ts delete mode 100644 src/routes/(app)/learn/sentence/constants.ts delete mode 100644 src/routes/(app)/learn/sentence/types.ts delete mode 100644 src/routes/(app)/learn/sentence/word-selector.spec.ts delete mode 100644 src/routes/(app)/learn/sentence/word-selector.ts delete mode 100644 src/routes/(app)/plugin/+page.svelte delete mode 100644 src/routes/(app)/plugin/example-plugin.js delete mode 100644 src/routes/(app)/plugin/plugin-types.ts delete mode 100644 src/routes/(app)/stats/+page.svelte delete mode 100644 src/routes/(app)/test/+page.svelte delete mode 100644 static/sandbox/index.html delete mode 100644 static/sentences/Modelfile diff --git a/package.json b/package.json index 314ba348..e9884e4a 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,6 @@ "glob": "^11.0.3", "js-yaml": "^4.1.1", "jsdom": "^26.1.0", - "matrix-js-sdk": "^37.12.0", "npm-run-all": "^4.1.5", "prettier": "^3.7.4", "prettier-plugin-css-order": "^2.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b2cdb3c..d80b8606 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,9 +125,6 @@ importers: jsdom: specifier: ^26.1.0 version: 26.1.0 - matrix-js-sdk: - specifier: ^37.12.0 - version: 37.12.0 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -710,10 +707,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.4': resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} @@ -1075,10 +1068,6 @@ packages: '@material/material-color-utilities@0.3.0': resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==} - '@matrix-org/matrix-sdk-crypto-wasm@15.1.0': - resolution: {integrity: sha512-ZsDdjn46J3+VxsDLmaSODuS+qtGZB/i3Cg9tWL1QPNjvAWzNaTHQ7glleByI2PKVBm83aklfuhGKT2MqE1ZsEA==} - engines: {node: '>= 18'} - '@melt-ui/pp@0.3.2': resolution: {integrity: sha512-xKkPvaIAFinklLXcQOpwZ8YSpqAFxykjWf8Y/fSJQwsixV/0rcFs07hJ49hJjPy5vItvw5Qa0uOjzFUbXzBypQ==} peerDependencies: @@ -1499,9 +1488,6 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/events@3.0.3': - resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -1511,9 +1497,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -1601,9 +1584,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - another-json@0.2.0: - resolution: {integrity: sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==} - ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1738,9 +1718,6 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - base-x@5.0.0: - resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1775,9 +1752,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -1916,10 +1890,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2383,10 +2353,6 @@ packages: eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} @@ -3050,10 +3016,6 @@ packages: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} - jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - keyv@5.5.5: resolution: {integrity: sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==} @@ -3124,10 +3086,6 @@ packages: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3157,16 +3115,6 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - matrix-events-sdk@0.0.1: - resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - - matrix-js-sdk@37.12.0: - resolution: {integrity: sha512-2JSTMtvACE4egrBPp0ZQ7fSxBXcX6xuHcQSjcoBiBxFL7W0SZCl4qsNl30pBshDTe5wARAByzIHEMv6bGVKKNA==} - engines: {node: '>=22.0.0'} - - matrix-widget-api@1.13.1: - resolution: {integrity: sha512-mkOHUVzaN018TCbObfGOSaMW2GoUxOfcxNNlTVx5/HeMk3OSQPQM0C9oEME5Liiv/dBUoSrEB64V8wF7e/gb1w==} - mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} @@ -3297,10 +3245,6 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - oidc-client-ts@3.0.1: - resolution: {integrity: sha512-xX8unZNtmtw3sOz4FPSqDhkLFnxCDsdo2qhFEH2opgWnF/iXMFoYdBQzkwCxAZVgt3FT3DnuBY3k80EZHT0RYg==} - engines: {node: '>=18'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3319,10 +3263,6 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} @@ -3539,9 +3479,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -3592,10 +3529,6 @@ packages: restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3667,10 +3600,6 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - sdp-transform@2.14.2: - resolution: {integrity: sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==} - hasBin: true - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -4190,9 +4119,6 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - unhomoglyph@1.0.6: - resolution: {integrity: sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -4243,10 +4169,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -5222,10 +5144,6 @@ snapshots: '@babel/types': 7.28.5 esutils: 2.0.3 - '@babel/runtime@7.24.7': - dependencies: - regenerator-runtime: 0.14.1 - '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': @@ -5577,8 +5495,6 @@ snapshots: '@material/material-color-utilities@0.3.0': {} - '@matrix-org/matrix-sdk-crypto-wasm@15.1.0': {} - '@melt-ui/pp@0.3.2(@melt-ui/svelte@0.86.6(svelte@5.37.1))(svelte@5.37.1)': dependencies: '@melt-ui/svelte': 0.86.6(svelte@5.37.1) @@ -5932,8 +5848,6 @@ snapshots: '@types/estree@1.0.8': {} - '@types/events@3.0.3': {} - '@types/js-yaml@4.0.9': {} '@types/node@20.14.10': @@ -5943,8 +5857,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/retry@0.12.0': {} - '@types/semver@7.7.1': {} '@types/sinonjs__fake-timers@8.1.1': {} @@ -6040,8 +5952,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - another-json@0.2.0: {} - ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -6176,8 +6086,6 @@ snapshots: balanced-match@2.0.0: {} - base-x@5.0.0: {} - base64-js@1.5.1: {} baseline-browser-mapping@2.9.10: {} @@ -6215,10 +6123,6 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - bs58@6.0.0: - dependencies: - base-x: 5.0.0 - buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -6354,8 +6258,6 @@ snapshots: concat-map@0.0.1: {} - content-type@1.0.5: {} - convert-source-map@2.0.0: {} cookie@0.6.0: {} @@ -7001,8 +6903,6 @@ snapshots: eventemitter2@6.4.7: {} - events@3.3.0: {} - execa@4.1.0: dependencies: cross-spawn: 7.0.3 @@ -7696,8 +7596,6 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jwt-decode@4.0.0: {} - keyv@5.5.5: dependencies: '@keyv/serialize': 1.1.1 @@ -7762,8 +7660,6 @@ snapshots: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - loglevel@1.9.2: {} - lru-cache@10.4.3: {} lru-cache@11.0.0: {} @@ -7792,30 +7688,6 @@ snapshots: mathml-tag-names@2.1.3: {} - matrix-events-sdk@0.0.1: {} - - matrix-js-sdk@37.12.0: - dependencies: - '@babel/runtime': 7.24.7 - '@matrix-org/matrix-sdk-crypto-wasm': 15.1.0 - another-json: 0.2.0 - bs58: 6.0.0 - content-type: 1.0.5 - jwt-decode: 4.0.0 - loglevel: 1.9.2 - matrix-events-sdk: 0.0.1 - matrix-widget-api: 1.13.1 - oidc-client-ts: 3.0.1 - p-retry: 4.6.2 - sdp-transform: 2.14.2 - unhomoglyph: 1.0.6 - uuid: 11.1.0 - - matrix-widget-api@1.13.1: - dependencies: - '@types/events': 3.0.3 - events: 3.3.0 - mdn-data@2.12.2: {} mdn-data@2.23.0: {} @@ -7927,10 +7799,6 @@ snapshots: obug@2.1.1: {} - oidc-client-ts@3.0.1: - dependencies: - jwt-decode: 4.0.0 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -7951,11 +7819,6 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - package-json-from-dist@1.0.0: {} pako@0.2.9: {} @@ -8137,8 +8000,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -8199,8 +8060,6 @@ snapshots: restructure@3.0.2: {} - retry@0.13.1: {} - reusify@1.0.4: {} rfdc@1.4.1: {} @@ -8301,8 +8160,6 @@ snapshots: dependencies: xmlchars: 2.2.0 - sdp-transform@2.14.2: {} - semver@5.7.2: {} semver@6.3.1: {} @@ -8921,8 +8778,6 @@ snapshots: undici-types@5.26.5: optional: true - unhomoglyph@1.0.6: {} - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -8966,8 +8821,6 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.1.0: {} - uuid@8.3.2: {} validate-npm-package-license@3.0.4: diff --git a/src/lib/chat/MatrixRoomMembers.svelte b/src/lib/chat/MatrixRoomMembers.svelte deleted file mode 100644 index 86d2d76d..00000000 --- a/src/lib/chat/MatrixRoomMembers.svelte +++ /dev/null @@ -1,71 +0,0 @@ - - -
- {#each members as member (member.userId)} - {@const avatar = member.getMxcAvatarUrl()} -
- {#if avatar} - {member.name} - {:else} - {@const color = memberColor(member, $theme)} - {@const modeColor = $theme.mode === "dark" ? color.dark : color.light} -
- person -
- {/if} - {member.name} -
- {/each} -
- - diff --git a/src/lib/chat/MatrixRooms.svelte b/src/lib/chat/MatrixRooms.svelte deleted file mode 100644 index c99d237d..00000000 --- a/src/lib/chat/MatrixRooms.svelte +++ /dev/null @@ -1,73 +0,0 @@ - - -
- {#each $matrixClient.getRooms() as room} - {@const avatar = room.getMxcAvatarUrl()} - - {/each} - - {#await $matrixClient.publicRooms()} -
Loading...
- {:then rooms} - {#each rooms.chunk as room} - - {/each} - {:catch error} -
{error.message}
- {/await} -
- - diff --git a/src/lib/chat/MatrixSpace.svelte b/src/lib/chat/MatrixSpace.svelte deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/chat/MatrixTimeline.svelte b/src/lib/chat/MatrixTimeline.svelte deleted file mode 100644 index 3f85111b..00000000 --- a/src/lib/chat/MatrixTimeline.svelte +++ /dev/null @@ -1,231 +0,0 @@ - - -
-
- {#each live.entries() as [userId, recorder] (userId)} - {@const roomId = timeline.getRoomId()} - {#if roomId} - {@const room = $matrixClient.getRoom(roomId)} - {@const member = room?.getMember(userId)} - {#if member} - - {/if} - {/if} - {/each} - {#each events as event, i (event.event["event_id"])} - {@const prev = events[i + 1]} - - {/each} -
- -
-
-
- -
(showCursor = true)} - onfocusout={() => (showCursor = false)} - > - -
- -
-
-
- - diff --git a/src/lib/chat/chat-rx.ts b/src/lib/chat/chat-rx.ts deleted file mode 100644 index 34ee3526..00000000 --- a/src/lib/chat/chat-rx.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { derived, writable, type Writable } from "svelte/store"; -import type { - ClientEvent, - LoginResponse, - MatrixClient, - RoomMember, -} from "matrix-js-sdk"; -import { persistentWritable } from "$lib/storage"; -import { - themeFromSourceColor, - argbFromHex, - type CustomColorGroup, -} from "@material/material-color-utilities"; -import type { UserTheme } from "$lib/preferences"; -import { MatrixRx } from "./matrix-rx/client"; - -export const matrixClient: Writable = writable(); - -export const isLoggedIn: Writable = writable(false); - -export const matrix = derived( - [matrixClient, isLoggedIn], - ([matrixClient, isLoggedIn]) => - isLoggedIn ? new MatrixRx(matrixClient) : undefined, -); - -export const currentRoomId = persistentWritable( - "currentRoomId", - null, -); - -function getStoredLogin(): LoginResponse | undefined { - try { - return JSON.parse(localStorage.getItem("matrix-login")!); - } catch { - return undefined; - } -} - -export function storeLogin(response: LoginResponse) { - localStorage.setItem("matrix-login", JSON.stringify(response)); -} - -export async function initMatrixClient() { - const { createClient, IndexedDBStore, IndexedDBCryptoStore } = await import( - "matrix-js-sdk" - ); - - const storedLogin = getStoredLogin(); - - const store = new IndexedDBStore({ - dbName: "matrix", - indexedDB: window.indexedDB, - }); - const cryptoStore = new IndexedDBCryptoStore( - window.indexedDB, - "matrix-crypto", - ); - - const client = createClient({ - baseUrl: import.meta.env.VITE_MATRIX_URL, - userId: storedLogin?.user_id, - accessToken: storedLogin?.access_token, - timelineSupport: true, - store, - cryptoStore, - }); - - console.log("store"); - await store.startup(); - console.log("cryptoStore"); - await cryptoStore.startup(); - console.log("client"); - await client.startClient(); - client.once("sync" as ClientEvent.Sync, () => { - isLoggedIn.set(client.isLoggedIn()); - }); - - const loginToken = new URLSearchParams(window.location.search).get( - "loginToken", - ); - if (loginToken) { - storeLogin(await client.loginWithToken(loginToken)); - window.history.replaceState({}, document.title, window.location.pathname); - isLoggedIn.set(client.isLoggedIn()); - } - - matrixClient.set(client); - console.log("done"); -} - -export function memberColor( - member: RoomMember, - theme: UserTheme, -): CustomColorGroup { - let hash = 0; - member.userId.split("").forEach((char) => { - hash = char.charCodeAt(0) + ((hash << 5) - hash); - }); - let color = "#"; - for (let i = 0; i < 3; i++) { - const value = (hash >> (i * 8)) & 0xff; - color += value.toString(16).padStart(2, "0"); - } - - return themeFromSourceColor(argbFromHex(theme.color), [ - { value: argbFromHex(color), name: "member", blend: true }, - ]).customColors.find((c) => c.color.name === "member")!; -} diff --git a/src/lib/chat/chat.ts b/src/lib/chat/chat.ts deleted file mode 100644 index a2b07a6d..00000000 --- a/src/lib/chat/chat.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { writable, type Writable } from "svelte/store"; -import type { MatrixClient, RoomMember } from "matrix-js-sdk"; -import { persistentWritable } from "$lib/storage"; -import { - themeFromSourceColor, - argbFromHex, - type CustomColorGroup, -} from "@material/material-color-utilities"; -import type { UserTheme } from "$lib/preferences"; - -export const matrixClient: Writable = writable(); - -export const currentRoomId = persistentWritable( - "currentRoomId", - null, -); - -export function memberColor( - member: RoomMember, - theme: UserTheme, -): CustomColorGroup { - let hash = 0; - member.userId.split("").forEach((char) => { - hash = char.charCodeAt(0) + ((hash << 5) - hash); - }); - let color = "#"; - for (let i = 0; i < 3; i++) { - const value = (hash >> (i * 8)) & 0xff; - color += value.toString(16).padStart(2, "0"); - } - - return themeFromSourceColor(argbFromHex(theme.color), [ - { value: argbFromHex(color), name: "member", blend: true }, - ]).customColors.find((c) => c.color.name === "member")!; -} diff --git a/src/lib/chat/events/MatrixEvent.svelte b/src/lib/chat/events/MatrixEvent.svelte deleted file mode 100644 index 2e2f365a..00000000 --- a/src/lib/chat/events/MatrixEvent.svelte +++ /dev/null @@ -1,381 +0,0 @@ - - -
(mainHover = true)} - onfocus={() => (mainHover = true)} - onmouseout={() => (mainHover = false)} - onblur={() => (mainHover = false)} -> - {#if event && hover} -
- {/if} - - {#if sender && !(prev && prev?.getType() === event?.getType() && prev.sender?.userId === event.sender?.userId)} - {@const color = memberColor(sender, $theme)} - {@const avatarMxc = sender.getMxcAvatarUrl()} - {#if avatarMxc} - {@const avatar = $matrixClient.mxcUrlToHttp(avatarMxc, 32, 32)} - {sender.name} - {:else} -
- person -
- {/if} - -
- {sender.name} - {#if replay || replayPlayer} -
- {#each new Array(3) as _, i} -
- {/each} -
- {/if} -
- {/if} - -
- {#if event} - {#if event.getType() === "m.room.message"} - - {:else} -
- {event.getType()} -
{JSON.stringify(event.event, null, 2)}
-
- {/if} - {/if} - {#if replayPlayer} - - {/if} -
- - {#if event && hover} - - {/if} - - {#if $annotations && $annotations.length > 0} -
- {#each $annotations as [reaction, events]} - - {/each} -
- {/if} -
- - diff --git a/src/lib/chat/events/MatrixMessageEvent.svelte b/src/lib/chat/events/MatrixMessageEvent.svelte deleted file mode 100644 index 91518ee7..00000000 --- a/src/lib/chat/events/MatrixMessageEvent.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - -
- {#if event.event.content?.msgtype === "m.image"} - {event.event.content["body"]} - {:else} - {event.event.content?.["body"]} - {/if} - {#if replay} -
- (replay = undefined)} - /> -
- {/if} -
- - diff --git a/src/lib/chat/matrix-rx/client.ts b/src/lib/chat/matrix-rx/client.ts deleted file mode 100644 index fc098a53..00000000 --- a/src/lib/chat/matrix-rx/client.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { Direction, MatrixClient, Room } from "matrix-js-sdk"; -import { - filter, - map, - type Observable, - of, - distinctUntilChanged, - merge, -} from "rxjs"; -import { fromMatrixClientEvent } from "./events"; - -function roomListDistinct(prev: Room[], curr: Room[]) { - if (prev.length !== curr.length) return false; - for (let i = 0; i < prev.length; i++) { - if (prev[i]!.roomId !== curr[i]!.roomId) return false; - } - return true; -} - -export class MatrixRx { - topLevelRooms$: Observable; - - topLevelSpaces$: Observable; - - topLevelChats$: Observable; - - constructor(private client: MatrixClient) { - this.topLevelRooms$ = merge( - of([]), - fromMatrixClientEvent(client, "Room"), - fromMatrixClientEvent(client, "deleteRoom"), - fromMatrixClientEvent(client, "Room.myMembership"), - fromMatrixClientEvent(client, "Room.CurrentStateUpdated").pipe( - filter( - ([_room, prev, curr]) => - prev.getStateEvents("m.space.parent").length !== - curr.getStateEvents("m.space.parent").length, - ), - ), - ).pipe( - map(() => - this.client.getVisibleRooms().filter( - (room) => - room.getMyMembership() !== "leave" && - room - .getLiveTimeline() - .getState("f" as Direction.Forward) - ?.getStateEvents("m.space.parent").length === 0, - ), - ), - distinctUntilChanged(roomListDistinct), - ); - - this.topLevelSpaces$ = this.topLevelRooms$.pipe( - map((rooms) => rooms.filter((room) => room.isSpaceRoom())), - distinctUntilChanged(roomListDistinct), - ); - - this.topLevelChats$ = this.topLevelRooms$.pipe( - map((rooms) => rooms.filter((room) => !room.isSpaceRoom())), - distinctUntilChanged(roomListDistinct), - ); - } -} - -export class SpaceRx { - constructor( - private client: MatrixClient, - private space: Room, - ) {} -} diff --git a/src/lib/chat/matrix-rx/events.ts b/src/lib/chat/matrix-rx/events.ts deleted file mode 100644 index 57f6764e..00000000 --- a/src/lib/chat/matrix-rx/events.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { ClientEventHandlerMap, MatrixClient } from "matrix-js-sdk"; -import { fromEvent, type Observable } from "rxjs"; - -export function fromMatrixClientEvent( - client: MatrixClient, - eventName: `${T}`, // hack so we can use strings instead of enums -): Observable> { - return fromEvent(client, eventName) as Observable< - Parameters - >; -} diff --git a/src/lib/chat/matrix-rx/rooms.ts b/src/lib/chat/matrix-rx/rooms.ts deleted file mode 100644 index 986e4737..00000000 --- a/src/lib/chat/matrix-rx/rooms.ts +++ /dev/null @@ -1,85 +0,0 @@ -import type { - MatrixClient, - MatrixEvent, - Room, - Direction, - RoomState, - RoomStateEventHandlerMap, - EventType, -} from "matrix-js-sdk"; -import { fromMatrixClientEvent } from "./events"; -import { - map, - filter, - merge, - startWith, - Observable, - of, - fromEvent, - concat, - defer, -} from "rxjs"; - -export function matrixRoom$( - client: MatrixClient, - roomId: string | undefined, -): Observable { - return merge([ - fromMatrixClientEvent(client, "Room").pipe( - filter(([room]) => room.roomId === roomId), - ), - fromMatrixClientEvent(client, "deleteRoom").pipe( - filter(([id]) => id === roomId), - ), - ]).pipe( - startWith([]), - map(() => client.getRoom(roomId) ?? undefined), - ); -} - -export function roomTimeline$( - client: MatrixClient, - room: Room | undefined, -): Observable { - if (!room) return of(undefined); - const eventTimeline = room.getLiveTimeline(); - - return fromMatrixClientEvent(client, "Room.timeline").pipe( - filter( - ([, eventRoom]) => - eventRoom !== undefined && eventRoom.roomId === room.roomId, - ), - startWith([]), - map(() => eventTimeline.getEvents()), - ); -} - -export function roomCurrentStateEvents$( - client: MatrixClient, - room: Room, - eventType: EventType | string, -): Observable { - return concat( - defer(() => - of( - room - .getLiveTimeline() - .getState("f" as Direction.Forward) - ?.getStateEvents(eventType) ?? [], - ), - ), - fromMatrixClientEvent(client, "Room.CurrentStateUpdated").pipe( - filter(([room]) => room.roomId === room.roomId), - map(([_room, _prev, curr]) => curr.getStateEvents(eventType)), - ), - ); -} - -export function fromRoomStateEvent( - state: RoomState, - eventName: `${T}`, -): Observable> { - return fromEvent(state, eventName) as Observable< - Parameters - >; -} diff --git a/src/lib/chat/matrix-rx/timeline.ts b/src/lib/chat/matrix-rx/timeline.ts deleted file mode 100644 index 3cf9e743..00000000 --- a/src/lib/chat/matrix-rx/timeline.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { EventTimeline, MatrixClient, MatrixEvent } from "matrix-js-sdk"; -import { filter, map, of, startWith, type Observable } from "rxjs"; -import { fromMatrixClientEvent } from "./events"; - -export function roomTimeline( - client: MatrixClient, - roomId: string | undefined, -): Observable { - if (!roomId) return of([]); - const room = client.getRoom(roomId); - if (!room) return of([]); - const eventTimeline = room.getLiveTimeline(); - - return fromMatrixClientEvent(client, "Room.timeline").pipe( - filter(([, room]) => room?.roomId === roomId), - startWith([]), - map(() => eventTimeline.getEvents()), - ); -} diff --git a/src/lib/components/Action.svelte b/src/lib/components/Action.svelte index 3fa99fe3..6e7a4852 100644 --- a/src/lib/components/Action.svelte +++ b/src/lib/components/Action.svelte @@ -53,6 +53,12 @@
{info.description} {/if} + {#if info.breaking} +
 Prevents prepended autospaces + {/if} + {#if info.separator || info.breaking} +
 Stops autocorrect + {/if} {:else} Unknown Action
{#if info.code > 1023} @@ -200,13 +206,13 @@ display: -webkit-box; opacity: 0.9; max-width: 15ch; + -webkit-line-clamp: 2; /* number of lines to show */ + line-clamp: 2; overflow: hidden; font-style: italic; font-size: 12px; text-align: left; text-overflow: ellipsis; - -webkit-line-clamp: 2; /* number of lines to show */ - line-clamp: 2; -webkit-box-orient: vertical; } } diff --git a/src/lib/learn/chords.ts b/src/lib/learn/chords.ts deleted file mode 100644 index d191eb92..00000000 --- a/src/lib/learn/chords.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { osLayout } from "$lib/os-layout"; -import { KEYMAP_CODES } from "$lib/serial/keymap-codes"; -import { persistentWritable } from "$lib/storage"; -import { type ChordInfo, chords } from "$lib/undo-redo"; -import { derived } from "svelte/store"; - -export const words = derived( - [chords, osLayout, KEYMAP_CODES], - ([chords, layout, KEYMAP_CODES]) => - new Map( - chords - .map((chord) => ({ - chord, - output: chord.phrase.map((action) => - layout.get(KEYMAP_CODES.get(action)?.keyCode ?? ""), - ), - })) - .filter(({ output }) => output.every((it) => !!it)) - .map(({ chord, output }) => [output.join("").trim(), chord] as const), - ), -); - -interface Score { - lastTyped: number; - score: number; - total: number; -} - -export const scores = persistentWritable>("scores", {}); - -export const learnConfigDefault = { - maxScore: 3, - minScore: -3, - scoreBlend: 0.5, - weakRate: 0.8, - weakBoost: 0.5, - maxWeak: 3, - newRate: 0.3, - initialNewRate: 0.9, - initialCount: 10, -}; -export const learnConfigStored = persistentWritable< - Partial ->("learn-config", {}); -export const learnConfig = derived(learnConfigStored, (config) => ({ - ...learnConfigDefault, - ...config, -})); - -let lastWord: string | undefined; - -function shuffle(array: T[]): T[] { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j]!, array[i]!]; - } - return array; -} - -function randomLog2(array: T[], max = array.length): T | undefined { - return array[ - Math.floor(Math.pow(2, Math.log2(Math.random() * Math.log2(max)))) - ]; -} - -export const nextWord = derived( - [words, scores, learnConfig], - ([words, scores, config]) => { - const values = Object.entries(scores).filter(([it]) => it !== lastWord); - - values.sort(([, a], [, b]) => a.score - b.score); - const weakCount = - (values.findIndex(([, { score }]) => score > 0) + 1 || - values.length + 1) - 1; - const weak = randomLog2(values, weakCount); - if (weak && Math.random() / weakCount < config.weakRate) { - lastWord = weak[0]; - return weak[0]; - } - - values.sort(([, { lastTyped: a }], [, { lastTyped: b }]) => a - b); - const recent = randomLog2(values); - const newRate = - values.length < config.initialCount - ? config.initialNewRate - : config.newRate; - if ( - recent && - (Math.random() < Math.min(1, Math.max(0, weakCount / config.maxWeak)) || - Math.random() > newRate) - ) { - lastWord = recent[0]; - return recent[0]; - } - - const newWord = shuffle(Array.from(words.keys())).find((it) => !scores[it]); - const word = newWord || recent?.[0] || weak?.[0]; - lastWord = word; - return word; - }, -); diff --git a/src/lib/learn/stats.ts b/src/lib/learn/stats.ts deleted file mode 100644 index 05df68a2..00000000 --- a/src/lib/learn/stats.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { persistentWritable } from "$lib/storage"; - -interface ChordStats { - level: number; - lastUprank: number; -} - -export const chordStats = persistentWritable>( - "chord-stats", - {}, -); diff --git a/src/routes/(app)/ccos/+layout.server.ts b/src/routes/(app)/ccos/+layout.server.ts new file mode 100644 index 00000000..d43d0cd2 --- /dev/null +++ b/src/routes/(app)/ccos/+layout.server.ts @@ -0,0 +1 @@ +export const prerender = false; diff --git a/src/routes/(app)/chat-rx/+page.svelte b/src/routes/(app)/chat-rx/+page.svelte deleted file mode 100644 index f91ece57..00000000 --- a/src/routes/(app)/chat-rx/+page.svelte +++ /dev/null @@ -1,92 +0,0 @@ - - -{#if $isLoggedIn} -
- -
-{:else} - -{/if} - - diff --git a/src/routes/(app)/chat-rx/Login.svelte b/src/routes/(app)/chat-rx/Login.svelte deleted file mode 100644 index 5af64d54..00000000 --- a/src/routes/(app)/chat-rx/Login.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - -{#if $matrixClient} - {#await $matrixClient.loginFlows() then flows} - {#each flows.flows as flow} - {#if flow.type === "m.login.sso"} - - {#each flow.identity_providers as idp} - {#if idp.icon} - {idp.name} - {:else} - {idp.name} - {/if} - {/each} - - {:else if flow.type === "m.login.password"} -
- - - -
- {/if} - {/each} - {/await} -{/if} diff --git a/src/routes/(app)/chat-rx/Space.svelte b/src/routes/(app)/chat-rx/Space.svelte deleted file mode 100644 index e69de29b..00000000 diff --git a/src/routes/(app)/chat/+page.svelte b/src/routes/(app)/chat/+page.svelte deleted file mode 100644 index 0815cd58..00000000 --- a/src/routes/(app)/chat/+page.svelte +++ /dev/null @@ -1,180 +0,0 @@ - - -{#if $matrixClient && loggedIn} - {#if ready} -
-
- - -
- {#if $currentRoomId} - {@const room = $matrixClient.getRoom($currentRoomId)} - {#key room} - {#if room} -
- -
-
- -
- {/if} - {/key} - {/if} -
- {/if} -{:else if $matrixClient} - {#await $matrixClient.loginFlows() then flows} - {#each flows.flows as flow} - {#if flow.type === "m.login.sso"} - - {#each flow.identity_providers as idp} - {#if idp.icon} - {idp.name} - {:else} - {idp.name} - {/if} - {/each} - - {:else if flow.type === "m.login.password"} - - {/if} - {/each} - {/await} -{/if} - - diff --git a/src/routes/(app)/config/chords/will-my-compound-break/+page.svelte b/src/routes/(app)/config/chords/will-my-compound-break/+page.svelte index a7e5b4a7..a2a19f32 100644 --- a/src/routes/(app)/config/chords/will-my-compound-break/+page.svelte +++ b/src/routes/(app)/config/chords/will-my-compound-break/+page.svelte @@ -47,19 +47,6 @@ font-weight: bold; } - .chord { - display: flex; - gap: 0.5rem; - margin-bottom: 0.5rem; - } - - .compound { - display: flex; - flex-direction: column; - gap: 0.5rem; - margin-bottom: 1rem; - } - p { max-width: 600px; } diff --git a/src/routes/(app)/config/cv2/+page.svelte b/src/routes/(app)/config/cv2/+page.svelte deleted file mode 100644 index 9713d609..00000000 --- a/src/routes/(app)/config/cv2/+page.svelte +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -
- -
-
- - diff --git a/src/routes/(app)/learn/+page.svelte b/src/routes/(app)/learn/+page.svelte deleted file mode 100644 index 0ed68878..00000000 --- a/src/routes/(app)/learn/+page.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/src/routes/(app)/learn/chords/+page.svelte b/src/routes/(app)/learn/chords/+page.svelte deleted file mode 100644 index bb009fe2..00000000 --- a/src/routes/(app)/learn/chords/+page.svelte +++ /dev/null @@ -1,232 +0,0 @@ - - -

WIP

- - - -{#key $nextWord} -

- {$nextWord} - {#if $scores[$nextWord!] === undefined} - new - {:else if ($scores[$nextWord!]?.score ?? 0) < 0} - weak - {/if} -

- -
- - - -
-{/key} - -{#key $nextWord} -
- {}} /> -
-{/key} - - -
- - - - - - {#each Object.entries($scores) - .sort(([, a], [, b]) => a.score - b.score) - .splice(0, 10) as [word, score]} - - - - - {/each} - -
Weak
{word}{score.score.toFixed(2)}
- - - - - - - {#each Object.entries($scores) - .sort(([, a], [, b]) => b.score - a.score) - .splice(0, 10) as [word, score]} - - - - - {/each} - -
Strong
{word}{score.score.toFixed(2)}
- - - - - - - {#each Object.entries($scores) - .sort(([, a], [, b]) => b.lastTyped - a.lastTyped) - .splice(0, 10) as [word, _score]} - - - - {/each} - -
Rehearse
{word}
-
- -
- Settings - - - - {#each Object.entries(learnConfigDefault) as [key, value]} - - - - - - {/each} - -
{key} - ($learnConfigStored[key as keyof typeof $learnConfig] = ( - event.target as HTMLInputElement - ).value as any)} - /> - - -
-
- - diff --git a/src/routes/(app)/learn/layout/+page.svelte b/src/routes/(app)/learn/layout/+page.svelte deleted file mode 100644 index a495383d..00000000 --- a/src/routes/(app)/learn/layout/+page.svelte +++ /dev/null @@ -1,124 +0,0 @@ - - -
-
- -
- - -
- - diff --git a/src/routes/(app)/learn/sentence/+page.svelte b/src/routes/(app)/learn/sentence/+page.svelte deleted file mode 100644 index 629ed3ba..00000000 --- a/src/routes/(app)/learn/sentence/+page.svelte +++ /dev/null @@ -1,652 +0,0 @@ - - -
-

Sentence Trainer

- - -
- {#each masteryThresholds as [, , title], i} - - {/each} - - {#each masteryThresholds as _, i} -
- {/each} -
-
-
- {#each sentenceWords as _, i} - {#if i !== sentenceWords.length - 1} - {@const word = sentenceWords.slice(i, i + 2).join(" ")} - {@const mastery = wordMastery.get(word) ?? 0} -
- {/if} - {/each} - {#each sentenceWords as word, i} - {@const mastery = wordMastery.get(word)} -
- {word} -
- {/each} - {#each sentenceWords as _, i} - {#if i < sentenceWords.length - 2} - {@const word = sentenceWords.slice(i, i + 3).join(" ")} - {@const mastery = wordMastery.get(word) ?? 0} -
- {/if} - {/each} -
- {#if level === masteryThresholds.length} - {@const maxDigits = 4} - {@const indices = Array.from({ length: maxDigits }, (_, i) => i)} - {@const wpmString = Math.floor(bestWPM).toString().padStart(maxDigits, " ")} -
-
- {#each indices as i} - {@const char = wpmString[i]} - {#key char} -
- {char} -
- {/key} - {/each} -
- WPM -
-
-
- {#key wpm} -
- {Math.floor(wpm)} -
- {/key} -
WPM
-
-
- {/if} - -
-
- {#key recorder} -
- - - - -
- {/key} -
-
- {#if devTools} -
Dev Tools
- - - - - - - - - - - - - - - - - -
Total{Math.round(totalMs)}ms -
Char{Math.round(msPerChar)}ms -
Word{Math.round(msPerWord)}ms -
- - - {#each masteryThresholds as _, i} - - - - - - - {/each} - -
L{i + 1}
- - - {#each wordStats.entries() as [word, stats]} - {@const mastery = wordMastery.get(word) ?? 0} - - - - {#each stats as stat} - - {/each} - - {/each} - -
{word}{Math.round(mastery * 100)}% - {stat}
- {/if} -
- - diff --git a/src/routes/(app)/learn/sentence/configuration.ts b/src/routes/(app)/learn/sentence/configuration.ts deleted file mode 100644 index 2d932e90..00000000 --- a/src/routes/(app)/learn/sentence/configuration.ts +++ /dev/null @@ -1,32 +0,0 @@ -export interface PageParam { - key: string; - default: T; - parse?: (value: string) => T; -} - -export const SENTENCE_TRAINER_PAGE_PARAMS: { - sentence: PageParam; - wpm: PageParam; - showDevTools: PageParam; - textAreaDebounceInMillis: PageParam; -} = { - sentence: { - key: "sentence", - default: "This text has been typed at the speed of thought", - }, - wpm: { - key: "wpm", - default: 250, - parse: (value) => Number(value), - }, - showDevTools: { - key: "dev", - default: false, - parse: (value) => value === "true", - }, - textAreaDebounceInMillis: { - key: "debounceMillis", - default: 5000, - parse: (value) => Number(value), - }, -}; diff --git a/src/routes/(app)/learn/sentence/constants.ts b/src/routes/(app)/learn/sentence/constants.ts deleted file mode 100644 index faf41187..00000000 --- a/src/routes/(app)/learn/sentence/constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Domain constants -export const AVG_WORD_LENGTH = 5; -export const SECONDS_IN_MINUTE = 60; -export const MILLIS_IN_SECOND = 1000; - -// Error messages. -export const TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE = - "The sentence is too short to make N-Grams, please enter longer sentence"; diff --git a/src/routes/(app)/learn/sentence/types.ts b/src/routes/(app)/learn/sentence/types.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/routes/(app)/learn/sentence/word-selector.spec.ts b/src/routes/(app)/learn/sentence/word-selector.spec.ts deleted file mode 100644 index 2e46a9f0..00000000 --- a/src/routes/(app)/learn/sentence/word-selector.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { describe, it, beforeEach, expect, vi } from "vitest"; -import { pickNextWord } from "./word-selector"; -import { untrack } from "svelte"; -import { SvelteMap } from "svelte/reactivity"; -import { TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE } from "./constants"; - -// Mock untrack so it simply executes the callback, allowing us to spy on its usage. -vi.mock("svelte", () => ({ - untrack: vi.fn((fn: any) => fn()), -})); - -describe("pickNextWord", () => { - let words: string[]; - let wordMastery: SvelteMap; - let currentWord: string; - - beforeEach(() => { - vi.clearAllMocks(); - - // Set up sample words and mastery values. - words = ["alpha", "beta", "gamma"]; - wordMastery = new SvelteMap(); - // For this test, assume none of the words are mastered. - words.forEach((word) => wordMastery.set(word, 0)); - currentWord = "alpha"; - }); - - it("should return a word different from current", () => { - // Force Math.random() to return a predictable value. - vi.spyOn(Math, "random").mockReturnValueOnce(0.3); - - const nextWord = pickNextWord(words, wordMastery, currentWord); - - // Since currentWord ("alpha") should be skipped, we expect next word. - expect(nextWord).toBe("beta"); - }); - - it("should randomly skip words", () => { - // Force Math.random() to return a predictable value. - vi.spyOn(Math, "random").mockReturnValueOnce(0.6).mockReturnValueOnce(0.3); - - const nextWord = pickNextWord(words, wordMastery, currentWord); - - // Since currentWord ("alpha") should be skipped as current - // and "beta" should be randomly skipped we expect "gamma". - expect(nextWord).toBe("gamma"); - }); - - it("should return current word if all other words were randomly skipped", () => { - // Force Math.random() to return a predictable value. - vi.spyOn(Math, "random").mockReturnValueOnce(0.6).mockReturnValueOnce(0.6); - - const nextWord = pickNextWord(words, wordMastery, currentWord); - - // Since all other words have been randomly skipped, we expect - // current word to be returned. - expect(nextWord).toBe("alpha"); - }); - - it("current word should be passed untracked", () => { - pickNextWord(words, wordMastery, currentWord); - expect(untrack).toHaveBeenCalledTimes(0); - }); - - it("should return TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE if the words array is empty", () => { - const result = pickNextWord([], wordMastery, currentWord); - expect(result).toBe(TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE); - }); -}); diff --git a/src/routes/(app)/learn/sentence/word-selector.ts b/src/routes/(app)/learn/sentence/word-selector.ts deleted file mode 100644 index 21603af7..00000000 --- a/src/routes/(app)/learn/sentence/word-selector.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE } from "./constants"; -import { SvelteMap } from "svelte/reactivity"; - -export function pickNextWord( - words: string[], - wordMastery: SvelteMap, - untrackedCurrentWord: string, -) { - const unmasteredWords = words - .map((it) => [it, wordMastery.get(it) ?? 0] as const) - .filter(([, it]) => it !== 1); - unmasteredWords.sort(([, a], [, b]) => a - b); - let nextWord = - unmasteredWords[0]?.[0] ?? - words[0] ?? - TOO_SHORT_SENTENCE_FOR_NGRAMS_MESSAGE; - // This is important to break infinite loop created by - // reading and writing `currentWord` inside $effect rune - for (const [word] of unmasteredWords) { - if (word === untrackedCurrentWord || Math.random() > 0.5) continue; - nextWord = word; - break; - } - return nextWord; -} diff --git a/src/routes/(app)/plugin/+page.svelte b/src/routes/(app)/plugin/+page.svelte deleted file mode 100644 index 178f195d..00000000 --- a/src/routes/(app)/plugin/+page.svelte +++ /dev/null @@ -1,263 +0,0 @@ - - - -
-

Plugin

- -
-
- - - - diff --git a/src/routes/(app)/plugin/example-plugin.js b/src/routes/(app)/plugin/example-plugin.js deleted file mode 100644 index 97c70533..00000000 --- a/src/routes/(app)/plugin/example-plugin.js +++ /dev/null @@ -1,32 +0,0 @@ -// @ts-nocheck -/******************************* - * HOLD UP AND READ THIS FIRST * - ******************************* - * - * Chara devices have a LIMITED number of commits. - * calling `Chara.commit()` can be a dangerous operation, which is why a confirmation dialog will be shown. - * Devices are only rated for 10,000-25,000 commits, exceeding that limit may result in premature breakdowns. - * `Chara.setSetting` or `Chara.setLayoutKey` is not affected by this, they last however only until the next boot. - * - * Chord writing is more forgiving, but keep in mind that excessive large-scale writing can still damage the device. - * - */ - -const count = await Chara.getChordCount(); // => 499 -const chord = await Chara.getChord(2); // => {actions: [1, 2, 3], phrase: [4, 5, 6]} - -const setting = await Chara.getSetting(5); // => 0 - -// This, for example, would return all chords -const chords = []; -for (let i = 0; i < count; i++) { - chords.push(await Chara.getChord(i)); -} - -// You can also print values to the browser console (F12) -console.log("Chords:", chords); - -// You can access the actions by ID! -Actions.SPACE; // => {id: "SPACE", code: 32, icon: "space_bar", description: ...} -Actions[32]; // This also works -Actions[0x20]; // Or this! diff --git a/src/routes/(app)/plugin/plugin-types.ts b/src/routes/(app)/plugin/plugin-types.ts deleted file mode 100644 index 29e65fb1..00000000 --- a/src/routes/(app)/plugin/plugin-types.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { CharaDevice } from "$lib/serial/device"; -import type { KeyInfo } from "$lib/serial/keymap-codes"; - -export const charaMethods = [ - "reboot", - "bootloader", - "getRamBytesAvailable", - "getSetting", - "setSetting", - "getLayoutKey", - "setLayoutKey", - "deleteChord", - "setChord", - "getChordPhrase", - "getChordCount", - "getChord", - "send", -] as const satisfies Array; - -export interface ChannelResponseEventData { - response: unknown; -} - -export interface ChannelCharaEventData { - charaChannels: string[]; - script: string; - actionCodes: Map; -} - -export type ChannelEventData = ChannelResponseEventData | ChannelCharaEventData; diff --git a/src/routes/(app)/stats/+page.svelte b/src/routes/(app)/stats/+page.svelte deleted file mode 100644 index e69de29b..00000000 diff --git a/src/routes/(app)/test/+page.svelte b/src/routes/(app)/test/+page.svelte deleted file mode 100644 index 61b30974..00000000 --- a/src/routes/(app)/test/+page.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -

The number is

diff --git a/static/sandbox/index.html b/static/sandbox/index.html deleted file mode 100644 index 114bf606..00000000 --- a/static/sandbox/index.html +++ /dev/null @@ -1,60 +0,0 @@ - diff --git a/static/sentences/Modelfile b/static/sentences/Modelfile deleted file mode 100644 index a25237ae..00000000 --- a/static/sentences/Modelfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM llama3.1 - -TEMPLATE """ -<|system|> -Only output the sentence -<|user|> -Create a typical sentence with around 10 words that includes the word "{{ .Prompt }}". -<|assistant|> -Create a sentence that includes "{{ .Prompt }}". -""" diff --git a/vite.config.ts b/vite.config.ts index 07028412..b190339d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -62,7 +62,6 @@ export default defineConfig({ "client/**/*.{js,css,ico,woff2,csv,png,webp,svg,webmanifest}", "prerendered/**/*.html", ], - globIgnores: ["prerendered/pages/ccos/**/*"], ignoreURLParametersMatching: [/^import|redirectUrl|loginToken$/], maximumFileSizeToCacheInBytes: 10 * 1024 * 1024, },