This is an extension of #13, where the ranking/probability of a word suggestion depends on the current words in the crossword. This could be done using e.g. word vector similarity.
The matching words are now shown in alphabetical order, and if there are too many matches there's a random selection. One could instead sort the words according to frequency, or some other ranking (e.g. similarity to a given theme). And let the ranking decide the random distribution.
This is probably difficult, but we could perhaps learn a model that suggests words (and selections) according to how easy it will be to complete the construction of the crossword. Perhaps this can be done by autogenerating millions of crosswords and learning which words made it easier to complete construction.
In most non-Scandinavian countries, a reference to a clue is given as a small number in the corner of a cell, and then the actual clues are listed below the crossword.
Sometimes the constructor wants to add a word that's not in the lexicon. We can do this e.g. by letting the user write the new word in the search filter. When the filter contains the exact amount of letters, an "override" button appears.
If we have a (horizontal) selection that ends in a (vertical) word, then it's also possible to let the selection continue downwards until the end of the (vertical) word. This can be a good alternative if there is no good word matching a selection.
There are two kinds of turns: ⤵︎ and ⤷, and the corresponding arrows have to be shown in the crossing cell.
We have to also take care if the user later extends the original selection horizontally, because then the turn should be removed.
When there are too many matching words, it currently shows a random selection of them. If you want to update the random selection, you can write a letter in the filter and then delete it again. Instead we can have a dedicated "update" button that shows a new random list.