github ulsklyc/yuvomi v2.42.0

2 hours ago

Added

  • Task notes get the formatting toolbar the notes module has always had (#731). Task notes have
    rendered as Markdown since v2.7.0, through the same renderer the notes module uses - but there was
    no way to write it except by typing the syntax. On a phone, - [ ] is a detour nobody should have
    to know about.

    The toolbar is not a copy: it moved out of the notes module into a shared component both now draw
    from, along with its insertion rules. Two versions of thirteen buttons would only have drifted, and
    the checklist button in particular had to behave identically on both sides - a checkbox written in
    a task should be the same characters as one written in a note.

    Its labels moved with it, from notes.format* to markdown.*, because they no longer belong to
    one module.

    Both new pieces are ordinary browser libraries under /utils/, so a third-party module can import
    them the same way it imports /api.js: markdown-toolbar.js for the toolbar and its insertion
    rules, markdown-checklist.js for the one definition of what a checklist line is - the same file
    the server validates against.

  • A rendered checkbox can be ticked by tapping it (#704). Notes drew - [ ] as a styled box that
    was deliberately inert. To tick something off you opened the note, changed [ ] into [x] in the
    text and saved - three steps for what looks like a one-tap control, and on a wall tablet with a
    shopping list that is the whole feature. The box is now a real control on the card and in the
    reader.

    Ticking rewrites exactly one line of the stored text and leaves the rest byte for byte alone,
    through a route of its own (PATCH /api/v1/notes/:id/check) rather than through the full-body
    save. That is not tidiness: notes are shared, and two members ticking different items in the same
    minute would otherwise have had the later save drop the earlier tick without a word.

    Which line is meant comes from the source line number the renderer leaves on the box, never from
    the item's text - two entries reading "Milk" are otherwise indistinguishable. The client sends the
    line it saw along with the tick, and if somebody has edited the note in between, the tick is
    refused rather than landing in the wrong row.

    Boxes stay decorative wherever a tick could not be written back honestly: on the dashboard, which
    shows a truncated excerpt whose line numbers are not the note's, in task notes, and in the reader
    while the editor holds unsaved text.

Fixed

  • Two buttons had no icon at all. "Remove tags" in the task bulk bar and "Find logo" in the
    subscription form asked for tag-off and image-search, neither of which is in the bundled Lucide
    build. createIcons() leaves an unknown name alone rather than failing, so both buttons simply
    stood there empty, with the only trace a browser console warning. They now use icons that exist,
    and a guard checks every icon name against the bundle - which is also the net under the next
    Lucide update, since it drops renamed aliases and the app still uses some of them.

  • The formatting toolbar wrote German into every language (#731). Clicking "Link" inserted
    [Linktext](url) and clicking "Bold" without a selection inserted Text - both fixed in the
    source rather than translated. That text lands in the note itself, so it is interface text like
    any other, and 23 of 24 languages got the German word. It now comes from the translation.

Don't miss a new yuvomi release

NewReleases is sending notifications on new releases.