Commit graph

11989 commits

Author SHA1 Message Date
Christian Fehmer
d6ae7cf7c4
fix: compatability check header shown if client is using cached responses (@fehmer) (#6602)
If frontend and backend are deployed with a new COMPATABILITY_CHECK
header frontend might show the backend version is lower because of the
http header of a cached response.

Adding the COMPATABILITY_CHECK version as part of the etag fixes this.
2025-05-27 16:59:49 +02:00
Christian Fehmer
093a17b15a
chore: remove log (@fehmer) (#6601)
oops
2025-05-27 16:32:22 +02:00
Christian Fehmer
47de0c8a40
refactor: cleanup schema and types for CustomText (@fehmer) (#6605) 2025-05-27 16:30:49 +02:00
Christian Fehmer
1cada77ea8
fix: sanitize result filters before storing in LS (@fehmer) (#6583) 2025-05-26 16:06:17 +02:00
Christian Fehmer
19930a9079
docs: update PR template (@fehmer) (#6600) 2025-05-26 16:05:09 +02:00
Omar Abdelrahman Abbas
07c581f5b3
feat(profile): add Open Graph meta tags for social sharing (@TryOmar) (#6598)
Add Open Graph meta tags to user profile pages to improve how they
appear when shared on social media platforms. This includes title,
description and URL meta tags.

Closes #6597

### Description

This PR adds Open Graph Protocol (OGP) meta tags to user profile pages
to fix the issue with LinkedIn and other social media platforms
incorrectly redirecting profile links to the homepage. The
implementation:

- Adds dynamic Open Graph meta tags for title, description and URL
- Updates tags whenever a profile page is loaded
- Uses the user's name in the title tag for better personalization

### Checks

- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

Closes #6597

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
2025-05-26 16:04:43 +02:00
siilyg
1826948886
feat(layout): add Tarmak layouts (@siily-g) (#6574)
### Description

The tarmak layout(s) is a set of transition layouts for qwerty user
switching to colemak, it changes only about 3-4 keys for every stage.

[More about tarmak](https://dreymar.colemak.org/tarmak-intro.html)

### Checks

- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
  - [ ] Add language to `packages/contracts/src/schemas/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [ ] Add language json file to `frontend/static/languages` 
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
  - [ ] Add theme to `packages/contracts/src/schemas/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes` 
- [x] Adding a layout?
- [x] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [x] Add layout to `packages/contracts/src/schemas/layouts.ts`
  - [x] Add layout json file to `frontend/static/layouts` 
  
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
2025-05-26 16:03:25 +02:00
Christian Fehmer
4fe11aceee
fix(theme): dark note and reduced-motion not replacing letters with circles (@fehmer) (#6589) 2025-05-26 16:02:15 +02:00
Christian Fehmer
a9fb72de7c
perf(test): optimize test-timer checkIfTimeIsUp (@fehmer) (#6588)
During e.g. time 60 tests the CustomText.getLimitValue was called each
second which is not needed.

Refactor the checkIfTimeIsUp to only use the correct limit, either
Config.time if mode is time or CustomText.getLimitValue if mode is
custom and limited by time.
2025-05-26 16:01:44 +02:00
Pavel Ivashkov
ea144996f3
fix(language): update Ukrainian Latin to national standard (@paiv) (#6584)
### Description

In short, this PR is based on Ukraine's national standard [DSTU
9112:2021 (A)](https://en.wikipedia.org/wiki/DSTU_9112:2021), and
replaces non-standard transliteration originally submitted.

- Updates #3855

### Context

Unfortunately, this topic has been a bit toxic in Ukraine, I am sorry to
bring this on the developers of this popular tool. I am trying to stay
neutral [¹](https://paiv.github.io/blog/2024/11/26/ukrainian-latin.html
"The state of Ukrainian Latin"), with Ukraine's ultimate benefits in
mind.

At the moment, there is no definite Ukrainian Latin script. The state
standard (KMU 55) is a lossy transliteration, not useable for general
writing, only applied to personal names and places.

Practitioners of Latin script for the Ukrainian language is still only a
marginal group, without a unifying movement. Until 2021 basically
everyone had their own transliteration method, derived from two dozen
historical schemes.

In 2021 comes Ukraine's national standard DSTU 9112:2021, and
objectively is good enough for general writing among alternatives. It
does not prescribe transition from Cyrillic. Its future is in
integration with European languages, gradually replacing legacy KMU 55.

Thus my argument for the practitioners of Ukrainian Latin script is to
adopt DSTU standard, given its perspective and unifying power, and phase
out non-standard schemes, of which #3855 is only one.

I hope @tymof1j as the original contributor could critically review
these notes, with the two year perspective.

The script used for conversion from Cyrillic:
https://gist.github.com/paiv/df2f38ed86a103471a49cfa8064d0d2e

----
To reiterate, Ukrainian Latin script is not established, and people are
coming here to not only train keyboard but also to get used to the
concept of Ukrainian Latin. Hosting one of dozens unofficial
alternatives of Ukrainian Latin without giving wider context is not
appropriate. People should start with Ukraine's national standard, then
learn of alternatives, if interested.

The problem of the national standard is that it is young, and has little
adoption and tooling. Those will come in time. I have posted examples of
possible keyboard setups here: https://paiv.github.io/latynka-keyboard/

I used system A of the national standard, with diacritics. An
alternative would be to use system B, which only needs basic Latin. It
is more verbose, but is more accessible to type. I believe system A is
preferable for general text.

If this is too much for this project, I would rather remove Ukrainian
Latin than host one non-standard variant, until it is established in
Ukraine. But it is nice to keep this platform to teach the concept of
Ukrainian Latin script.
2025-05-26 15:57:13 +02:00
Seif Soliman
16eda17eb6
fix(language): incorrect and non-standard words in kazakh_1K wordlist (@byseif21) (#6570)
### Description

update & review kazakh_1K language wordlist based on feedback from
[#6569](https://github.com/monkeytypegame/monkeytype/discussions/6569)
about several issues in the list
2025-05-26 15:45:32 +02:00
Nginearing
e28aa97285
feat(language): add viossa (@nginearing) (#6571)
### Description

This adds Viosssa as a language to Monkeytype. 
Viossa is a constructed language and has even been added to Minecraft
Java Edition, and has also been assigned an ISO-639-3 Code by the
ConLang Code Registry (https://www.kreativekorp.com/clcr/)

### Checks

- [X] Adding a language
  - [X] Added language to `packages/contracts/src/schemas/languages.ts`
- [X] Added language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [X] Added language json file to `frontend/static/languages` 
  
- [X] Checked if there are any open issues are related to this PR.
- [X] PR title follows Conventional Commits standard.
- [X] Included GitHub username prefixed with @ inside parentheses at the
end of the PR title.
2025-05-26 15:44:57 +02:00
Miodec
8f6e961b2d chore: remove anniversary elements 2025-05-22 14:05:25 +02:00
Miodec
fc2d85a9e5 chore: disable rule 2025-05-17 13:32:26 +02:00
Miodec
53bf826f08 chore: ls with schema debug logs 2025-05-17 13:30:41 +02:00
Jack
ea90e0a99e
refactor: dont allow nullable numbers (@miodec) (#6564)
Enables strict boolean expressions rule for nullable numbers
2025-05-16 16:04:19 +02:00
Miodec
cde852cf2a chore: merch banner, anniversary 2025-05-16 13:41:08 +02:00
Christian Fehmer
d3fa7c9be2
fix(commandline): cannot use mouse to select first element (@fehmer) (#6563) 2025-05-15 13:32:42 +02:00
Miodec
485eb222dd impr(account graph): round accuracy to nearest multiple of 5 instead of 10 for those accuracy freaks 2025-05-15 00:27:12 +02:00
Christian Fehmer
bfb06a22ed
impr(config): handle invalid config values (@fehmer) (#6555) 2025-05-13 16:43:45 +02:00
Seif Soliman
b34c179114
fix: smooth transition for theme palette icon in chaos_theory theme (@byseif21) (#6560)
### Description

fix the transition animation for the theme palette icon in the
chaos_theory theme.

hovering over the current theme button would trigger a smooth 180° flip
of the palette icon. However, when quickly moving the cursor away, the
icon would abruptly snap back to its original position instead of
transitioning smoothly.
### Before: 


https://github.com/user-attachments/assets/55b6683a-c83b-4f93-806b-bf289bf30c5f

-------------


### Now:



https://github.com/user-attachments/assets/59d08d45-ba2d-4921-9cc4-ee84455a0571
2025-05-13 16:42:55 +02:00
Jack
90b3d7362c
chore: update privacy policy to mention sentry (@miodec) (#6558)
Also refactors cookie modal and cokie local storage a little bit.

closes #6557
2025-05-13 16:41:48 +02:00
Christian Fehmer
98f1273398
impr(commandline): improve performance (@fehmer) (#6559)
!nuf
2025-05-13 16:41:16 +02:00
Joel Tony
e42e90b873
impr(quotes): add english quotes (@jay-tau) (#6515)
### Description

<!-- Please describe the change(s) made in your PR -->

### Checks

- [x] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
  - [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [ ] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->

Closes #

<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->

---------

Co-authored-by: Lavanya Ananthan <lavanya.ananthan.763@gmail.com>
2025-05-12 16:52:42 +02:00
Christian Fehmer
d47272b636
chore: add eslint compat plugin (@fehmer) (#6542) 2025-05-12 16:52:01 +02:00
Nad Alaba
3aaf2f65d6
fix(wordsInput): adjust #wordsInput position to be on the active word for chinese (@NadAlaba) (#6545)
fix part of #6447
2025-05-12 14:11:46 +02:00
Seif Soliman
b402c3a1a7
fix: remove some misspellings in english_450k (@byseif21) (#6546)
### Description

<!-- Please describe the change(s) made in your PR -->

Remove & correct  some common misspelled words, mainly in english_450k
2025-05-12 14:08:53 +02:00
Christian Fehmer
48ed096ac1
impr(settings): prevent customLayoutFluid and customPolyglot to be empty (@fehmer) (#6548)
Prevent user from deselecting all layouts/languages in customLayoutfluid
and customPolyglot selects.

Fixes FRONTEND-MW and FRONTEND-MS
2025-05-12 14:03:58 +02:00
Christian Fehmer
f1f4d17932
impr(profile): validate inputs for twitter, github and website (@fehmer) (#6544)
fixes #6543
2025-05-12 14:02:28 +02:00
Miodec
8370de1fa4 impr: add function to clearstreakhouroffset
!nuf
2025-05-12 13:52:37 +02:00
Miodec
98f2b9ceca fix: typo in malagasy 2025-05-12 13:41:20 +02:00
Miodec
00525a0870 fix: burst heatmap not being useful in words 10 mode 2025-05-12 11:35:26 +02:00
Christian Fehmer
71fc96d6b5
fix(settings): handle boolean values for indicateTypos (@fehmer) (#6554)
Handle legacy values for indicateTypos.

Fixes FRONTEND-MJ
2025-05-11 11:30:01 +02:00
torturado
44a67db9fc
feat(commandline): add download screenshot command (@torturado) (#6532)
### Description

This Pull Request introduces the functionality to download the result
screenshot directly as a PNG file, in addition to the existing option to
copy it to the clipboard.

This is achieved by:
1.  Refactoring the screenshot logic in `test-ui.ts`.
2. Adding a new `Download screenshot` command to the result screen
command list.

**Changes Made:**

*   **`frontend/src/ts/test/test-ui.ts`**:
* Created an internal function `generateScreenshotCanvas` that
encapsulates UI preparation, canvas generation with `html2canvas`, and
UI restoration.
* Modified the exported `screenshot` function to use
`generateScreenshotCanvas` and **only** handle copying the resulting
Blob to the clipboard (with the fallback of opening in a new tab).
* Added a new exported function `getScreenshotBlob` that uses
`generateScreenshotCanvas` and returns the resulting image Blob.
*   **`frontend/src/ts/commandline/lists/result-screen.ts`**:
* Renamed the `saveScreenshot` command to `copyScreenshot` (updating
`id`, `icon`, and `alias`) to more accurately reflect its action. It
still uses `TestUI.screenshot()`.
* Added a new `downloadScreenshot` command (`id`, `display`, `icon`,
`alias`) that:
        *   Calls `TestUI.getScreenshotBlob()` to get the image data.
        *   If a Blob is obtained, creates a temporary object URL.
* Creates a temporary `<a>` element, sets the `href` to the object URL,
and the `download` attribute with a filename (e.g.,
`monkeytype-result-TIMESTAMP.png`).
        *   Simulates a click on the link to initiate the file download.
        *   Revokes the object URL.
        *   Displays success or error notifications.

### Checks

- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
  - [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title. <!-- Remember to add your
username here! -->

---------

Co-authored-by: fehmer <3728838+fehmer@users.noreply.github.com>
Co-authored-by: Miodec <jack@monkeytype.com>
2025-05-07 16:21:30 +02:00
Christian Fehmer
be62681c32
docs: update pull request template (@fehmer) (#6538) 2025-05-07 15:48:13 +02:00
siilyg
6e4dd9ddb8
impr(quotes): add Indonesian quotes (@siily-g) (#6522) 2025-05-07 15:47:09 +02:00
Danial
c29bc57040
impr(quotes): add Kazakh quotes (@w0ikid) (#6512) 2025-05-07 15:44:30 +02:00
JN03
98ca811989
feat(font): add Kanit and Sarabun (@jnx03) (#6500)
### Description

<!-- Please describe the change(s) made in your PR -->

- Imported `Kanit-Regular.woff2` and `Sarabun-Bold.woff` into the
project’s webfonts directory.
- Updated `frontend/static/fonts/_list.json` to register the new fonts
under “availableFonts.”
- Modified `frontend/src/styles/fonts.scss` to include `@font-face`
declarations for both Kanit Regular and Sarabun Bold, with appropriate
`font-family`, `font-weight`, and `font-style` settings.

---

### Checks

- [ ] Adding quotes?  
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?  
- [ ] If it’s a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
  - [ ] If it’s a theme, did you add the theme.css?  
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org/ for more info)
- [x] Make sure to include your GitHub username prefixed with `@` inside
parentheses at the end of the PR title.

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-05-07 15:42:18 +02:00
JN03
69d9b3814f
feat(language): add Thai 1K, 5K, 10K, 50K, and 60K (@jnx03) (#6498) 2025-05-07 15:30:26 +02:00
sobczaktm
7bcad31d03
impr(quotes): 50 new quotes for polish language from books (@sobczaktm) (#6496)
### Description

Added 50 quotes from books in polish

### Checks

Translations:
And believe me, although you will see many wonders while wandering
around the world, you will not find a river like the Vistula or a city
like Warsaw anywhere. - "id":151

Above all, however, one must be able to win people's hearts.
Understanding and tolerance are the best way to do this. - "id":152

Don't laugh, my friend, at someone else's downfall, because then no one
will regret you either! - "id":153

In a distant and wild land you will find what others will search for in
vain. When you do, you will gain a best friend who will never say a
word... - "id":154

He does not deserve pity who has no pity himself. - "id":155

However, you must understand that obedience does not mean limiting your
independence. - "id":156

The mind needs books just as a sword needs a whetstone if it is to
remain sharp. - "id":157

Treason… is just a word. When two princes fight over a chair that only
one of them can sit in, both the great lords and the common folk must
choose. After the battle, the victors are hailed as faithful and loyal
men. Those who lose will henceforth be known as rebels and traitors. -
"id":158

He who dances with dragons must expect to burn. - "id":159

Aerion is a real monster. You know, he thinks he's a dragon in human
form. That's why he's so mad at the show. It's a shame he wasn't born a
Fossoway. Then he'd think he was an apple, and we'd all be a lot safer.
-"id":160

Words are wind, Egg. Let them flow past you. - "id":161

I fought for Prince Rhaegar, though he didn't even know my name. I can't
tell you why for him. The lord I served served a lord who served a lord
who chose to support a dragon over a stag. If he had chosen differently,
I might have found myself on the other side of the river. - "id":162

Men are such awful fools. Even those who are born once in a thousand
years. - "id":163

Never forget who you are, because the world will certainly not forget
it. Make it your strength, and then it will no longer be your weakness.
Make it your armor, and no one will use it against you. - "id":164

Girls get coats of arms, but no swords. Bastards get swords, but no
coats of arms. That's just the way it is, little sister, but I didn't
make up those rules.- "id":165

The left believes that the crew is more important, the right that the
ship is more important.- "id":166

If you want to know what the dominant ideology is, don't read
philosophers or political scientists. Watch commercials.-"id":167

The problem is not the lust for power of a few people, but the
willingness of the broad masses to submit.-"id":168

An Inuit gave a hungry European explorer some seal meat on a frosty
night. The explorer reflexively thanked him. The Inuit was outraged. He
said, "I did it because you are a human being." We must aspire to such
ethics.-"id":169

In times of the cult of the "Self" the only true individualists are
anti-individualists.-"id":170

I know that you are almost forty, you look almost thirty, you imagine
that you are a little over twenty, and you act as if you were not even
ten.-"id":171

Evil is evil, Stregobor. Smaller, greater, average, it doesn't matter,
proportions are conventional and boundaries are blurred. I am not a
pious hermit, I have not done only good in my life. But if I have to
choose between one evil and another, I prefer not to choose at
all."-"id":172

Dragon, you dirty dragon! Listen to what the herald will tell you! I
mean me! The first to honorably take on you will be the mad knight Eyck
of Denesle! And he will thrust a lance into your belly, according to
holy custom, to your ruin, and to the joy of poor maidens and King
Niedamir! The fight must be honorable and according to the law, not to
breathe fire, but only to confessionally rob one another, until the
other gives up the ghost or dies! What do we wish you from our souls,
from our hearts! Do you understand, dragon?-"id":173

Verily, I say unto you, behold, the age of the sword and the axe is
coming, the age of the wolf's blizzard. The time of the White Cold and
the White Light is coming, the time of Madness and the time of
Contempt... the time of the End.- "id":174

I've got a company... Brothers in arms! A team of heroes! Nothing but
wring your hands. A rhymer with a lute. A wild and sassy half-dryad,
half-woman. A vampire who's about to get his fiftieth cross. And a
bloody Nilfgaardian who insists he's not Nilfgaardian.-"id":175

Lord Witcher, horses are like fish. I offer you pikes like they're big
pikes, and you choose a roach. What are you laughing at? Did I say
something funny?- "id":176

We are proper thieves, not some political ones. We did not attempt to
take power. We only stole.- "id":177

Adventures! That means: unpleasantness, disturbed peace, lack of
comfort. Things like that can make you late for dinner. -"id":178

It cannot be seen or touched with fingers, It cannot be smelled or heard
with ears; It is under the mountains, it is above the stars, It does not
avoid the empty cave, It will remain after us, it was before us, Life
extinguishes and laughter kills.-"id":179

Let's break glasses, saucers, bowls, Long live our host! And though
Bilbo is close to tears, Let splinters fly from the bottles!-"id":180

Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords
in their halls of stone, Nine for mortals doomed to death, One for the
Dark Lord on his dark throne.-"id":181

Many of those who live deserve death. And many of those who die deserve
life. Can you give it to them? So do not be so hasty in pronouncing
death sentences, for even the wisest do not know everything.-"id":182

What do you mean by that? Are you wishing me a good morning, or are you
saying that it is a good day, regardless of what I think of it; are you
feeling good this morning, or do you think that today is the time to be
good? All of them. And, in addition, that it is good to smoke a pipe in
the open air on such a beautiful day.-"id":183

A wizard is never late, nor is he too early, he arrives when he feels
like it.-"id":184

Don't regret, never regret that you could have done something in life,
but you didn't. You didn't do it because you couldn't.-"id":185

We do not want to conquer space at all, we only want to expand the Earth
to its limits. Some planets are to be desert like the Sahara, others icy
like the poles or tropical like the Brazilian jungle. We are
humanitarian and noble, we do not want to conquer other races, we only
want to pass on our values ​​to them and in return take over their
heritage. We consider ourselves knights of the holy Contact. This is the
second falsehood. We are not looking for anyone but people. We do not
need other worlds. We need mirrors. We do not know what to do with other
worlds. This one is enough and we are already choking on it.-"id":186

It can be assumed that all people have consciousness, but generally not
all are aware of it.-"id":187

Dreams always triumph over reality when they are allowed to.- "id":188

He was undoubtedly an educated man, but his intelligence was like a
Japanese garden - a small bridge, paths, everything beautiful, but very
limited and good for nothing.-"id":189

Society, or at least civilized society, is not inclined to believe
anything bad about rich and delightful people. People instinctively feel
that forms are more important than morals, and in their opinion the
utmost honesty is worth less than having a good cook.-"id":190

The sickle may imagine that it is cutting the grain, and the hammer that
it is driving the nail. But both are just tools.- "id":191

It is a disgrace to submit to evil, to bow your head before it, to fall
on your knees, hiding behind an aversion to violence. Because the evil
that you do not oppose will grow, become more powerful and go out into
the world to harm others. And their harm will be your fault.- "id":192

Hope does not die last, after it come madness and desperation.-"id":193

The Rat said this in the smooth, sincere tone with which people always
lie to others.- "id":194

You see, Harry, it's our choices that show who we really are, far more
than our abilities.- "id":195

It takes a lot of courage to stand up to your enemies, but it takes just
as much courage to be loyal to your friends.- "id":196

The one with the power to vanquish the Dark Lord approaches... Born of
those who have thrice defied him. And he will be born as the seventh
month draws to a close... And though the Dark Lord marks him as his
equal, he will have power the Dark Lord knows not... And one must die at
the hand of the other, for neither can live while the other survives...
The one with the power to vanquish the Dark Lord will be born as the
seventh month draws to a close...- "id":197

We will be as strong as we are united and as weak as we are divided.
Lord Voldemort has a great talent for sowing discord and hostility. We
can only oppose him with equally strong bonds of friendship and trust.-
"id":198

Deep in the human subconscious lies an overwhelming need for a logical,
meaningful universe. But the real universe is always one step beyond
logic.-"id":199

When religion and politics are in the same car, the drivers believe that
nothing can stand in their way. They start to rush headlong... and they
don't remember that the man rushing headlong only sees the abyss when
it's too late.-"id": 200

---------

Co-authored-by: sobczaktm <sobczakt@G02PLXN06023.g02.fujitsu.local>
Co-authored-by: fehmer <3728838+fehmer@users.noreply.github.com>
2025-05-07 15:17:00 +02:00
Christian Fehmer
eb092cea1c
refactor: move languages to contracts (@fehmer) (#6497) 2025-05-07 14:02:27 +02:00
Miodec
ed24f7f45b fix: slow commandline when searching 2025-05-07 10:02:04 +02:00
Miodec
75dd791575 chore: fix alignment 2025-05-07 09:57:12 +02:00
Christian Fehmer
b4dcb2cad9
fix(settings): fix error when setting keymap layout (@fehmer) (#6537)
Closes #6536

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-05-07 09:56:56 +02:00
Miodec
baf7844ddb chore: capture config setting errors in sentry 2025-05-07 09:27:04 +02:00
Miodec
7952acc4c6 chore: show compatibility headers when shift clicking version 2025-05-05 15:19:57 +02:00
Christian Fehmer
a8bec90cda
fix(theme-picker): don't use .toSorted (@fehmer) (#6531) 2025-05-05 15:04:04 +02:00
Miodec
752d273145 chore: release v25.19.0 2025-05-05 14:34:02 +02:00
Christian Fehmer
5ab7bfb438
refactor: move themes list to typescript (@fehmer) (#6489)
Co-authored-by: fehmer <3728838+fehmer@users.noreply.github.com>
2025-05-05 13:30:09 +02:00
Miodec
dc6d4518a9 chore: block typing when test is not initialised correctly, show message 2025-05-05 13:22:14 +02:00