Repository navigation
Releases: dkthecoder/list-vibes
Release list
0.14.0
0.14.0
Dragging to reorder now works on a phone and a tablet. It never really did. A
drag and a scroll are the same gesture on a touchscreen, and the browser chooses
between them on the first movement — long before a long press can expire. So the
press armed, the row lifted as though a drag had begun, and the drop did nothing.
Three pixels of finger drift were enough to lose it.
Every row, card, heading, picker entry and step now carries a grip at its trailing
edge, and a drag starts from there. The grip declares up front that it will not
scroll, which is the only thing the browser will listen to, so the gesture is
never in question. Swiping anywhere else on a row still scrolls the list.
On a desktop this means dragging by the grip rather than by the row. One way
to start a drag for a mouse, a trackpad, a pen and a finger — which is what let
the long press, its timer, its movement threshold, a touch-only early return and
a scroll guard that could never work all be deleted rather than added to.
Clicking a row still opens the task. Clicking a grip does not.
0.13.1
0.13.1
A ticked row now leaves the same way on a phone as on a desktop. The collapse
lowered the row's ceiling but not its floor, and min-height wins — so the row
stopped a third of the way down on a desktop and half way on a phone, then
snapped shut when it was removed. The floor is animated away with the rest now.
The row also held still for its whole wait on neither. A property named only in a
later keyframe interpolates from its base value across the entire animation, not
across the segment it appears in, so the row's padding started shrinking the
moment the task was ticked: a slow squeeze on a desktop, and invisible on a phone
where wrapped content dominates the row's height. The fade and the collapse have
a window of their own each now, so each property changes over the window it
belongs to.
0.13.0
0.13.0
Ticking a task no longer snatches the row away. A completed task keeps its
place, struck through, for about a second and a half, then fades and closes the
gap behind it — long enough that a mistaken tick can be taken back where it
happened rather than hunted for in the completed section. The file is still
written the moment the box is ticked; only the row waits.
And it no longer walks the list toward the top. A repaint replaces a pane
wholesale, so the scroll offset was carried across by hand — which is only right
when nothing above the viewport changed height, and completing a task always
changes it. The offset is kept against the row the reader was looking at
instead, so that row stays put whatever happens above it.
A row that changes place now travels to it. Starring a task lifts it into the
band at the top, and the row simply appeared there. Every row that moves is now
animated from where it was, on the same curve and duration a drag already uses
for rows getting out of the way. Sort changes and moves between groups slide for
the same reason.
A newly starred task holds still for half a second, so the star is seen to
light up where it was pressed, and an accidental one can be undone before the row
has gone anywhere.
Reduced motion means none of it: no confetti, no fade, no slide. The grace
periods stay, because time to notice a mistake is an affordance rather than
decoration.
Rows sit a little further apart. The gap was half a row's own inner padding;
now it matches.
0.12.0
0.12.0
The post-it wall is experimental, and off. It is finished on a desktop and
not on a tablet or a phone, and a feature that works properly on one of the
three is something to opt into rather than something to meet. Settings has an
Experimental section now, and the wall is the first thing in it.
Turned off, a list is rows whatever its frontmatter says — view: postit is
ignored rather than rewritten, so nothing on disk changes and turning the wall
back on gives every list the layout it had. The layout control and the "post-it
for new lists" menu item are absent while it is off rather than present and
inert, and "New lists start as" moves into the same section as the thing it
chooses between.
The ribbon icon opens the picker again. getLeavesOfType walks the main
area before either sidebar, so with a list open as a tab the first leaf it
returned was that tab: the icon focused it and the sidebar stayed shut. The
startup check read the same answer as "the picker is already open", so a vault
with tabs open and no picker never got one back. Both now ask which container a
leaf is in rather than whether one exists anywhere.
0.11.0
0.11.0
A description keeps what you put in it. Blank lines between paragraphs were
dropped before a note could claim them, a plain bullet was neither task nor note
so fell out of the model altogether, and a fenced block indented under a task
toggled the document's fence state and swallowed the rest of the note. None of
it was destroyed — files are still edited one line at a time — but it was
invisible, and the first edit of such a note wrote the model back without it.
Blank lines are now held until a later line proves the note continues, so the
gap between two paragraphs is part of the note while the gap before the next
task is still separation. A bullet under a task is description, because nothing
else could claim it. A fence is only a fence when it is unindented.
A checkbox typed into a description stays in the description. On disk an
indented - [ ] x beneath a task is a step — the same bytes whichever was
meant — so what the box was given came back as two subtasks and a missing line.
Writing one now escapes it with a backslash, which markdown renders away, and
the two are told apart. Only newly written descriptions escape; a checkbox
already sitting under a task stays the step it has always been, so nothing on
disk needs migrating.
The description is at the top of the panel, and its links are live. It sat
last, behind the steps and five metadata rows, because that is where Microsoft
To Do puts it — an order that suits a list of short errands more than one where
the description is the task. Todoist, Things, Reminders and every issue tracker
put it under the title, and so does this now.
It was also drawn as plain text, which made the description the one place a URL
went to be unreachable. The card now holds two views of one field: the rendered
view sits there at rest so its links can be clicked, and the textarea arrives on
click, the way Obsidian's own editor behaves. Both are styled from the same box
and type so the text does not shift as they swap, and the column harness
measures that rather than trusting it. Post-it cards and row previews render
their descriptions too.
Clicking into a description puts the caret where you clicked, when the
description renders to the characters it is written with. A labelled link draws
shorter than it is written, so for those the caret goes to the end instead —
unhelpful rather than wrong.
0.10.0
0.10.0
The group heading has no surface again. It was painted so it could sit a
level above the rows, and once the rows stopped being a level below it, the two
were the same material touching — a heading you could not tell from an item.
A heading sits on the pane; the rows under it are cards on a surface. That
difference of plane is what separates them, and no colour on the band could do
that job, because any band puts the heading on the rows' plane.
Tasks in no group get a band of their own, named and counted, drawn only
when something is in it. It is a band rather than a group: there is no ## line
in the file to rename, move or delete, so it carries a name and a count and
nothing else, the way the starred band does. A list whose every task is in a
group never sees it.
Adding to a list with groups defaults to no group. It defaulted to the last
heading — a destination nobody chose, and the furthest from the top of the list.
Two alignment bugs went with it. Completed's heading had drifted eight pixels
off the rail every other line starts on, and the new ungrouped band would have
done the same: with nothing to fold, nothing filled the leading column and the
name slid into it. Both are now covered by a check that measures every band
against the task titles, because this is a rendered fact rather than a readable
one — it is the difference between two declarations in different rules, and it
had broken twice without anything noticing.
0.9.2
0.9.2
A task could be drawn twice under a sorted group order. What makes a task
ungrouped is sitting above every heading in the file, and that was being read
off the sorted headings rather than the file's own. Under A–Z a task under an
earlier heading counted as ungrouped as well as being drawn in its own group —
the same task, on screen twice.
The shading between a group and the items in it is gone. A band and the
rows under it were a level apart and touching, which read as a colour clash
rather than as depth. They share one surface now, with a gap beneath the band
so it reads as a title over the rows rather than as part of them.
Nothing had ever drawn the ungrouped run with anything in it — no fixture had a
task above the first ##, and neither did any real list. One does now, and
three checks cover where it lands.
0.9.1
0.9.1
The sort menu's two headings were drawn as dead options. "Sort tasks" and
"Sort groups" used setDisabled, which renders a greyed-out item you cannot
pick — so the section that offers the group order read as something broken
rather than as a title over it.
They are labels now, which is the API for a heading and has been since 0.15.0.
The harness could not have caught it: its menu returned itself and drew nothing
until the check that now asserts this was written.
0.9.0
0.9.0
A list file opened anywhere is a list. The view was reachable through the
plugin's own picker or the file's context menu, so a file tapped in the explorer
was markdown and you had to go and find it again somewhere else.
- The explorer, a link, the quick switcher, a search result — all of them now
land on the list. - Only files in the lists folder. Registering the
mdextension would have
taken every note in the vault with it. - Open as markdown is on the file's menu and in the list's own, because the
icon,sort,viewandgroupskeys this reads live in the text and have
to stay reachable. It opens as text once; the next open is a list again. - Off in one setting, for anyone who would rather these files opened as text.
The view's "Open as note" is now "Open as markdown" and goes through the same
door — left as it was, it would have opened the file and been swapped straight
back, a menu item that visibly did nothing.
0.8.0
0.8.0
The groups carry an order of their own. Sorting a list ordered the tasks
inside each heading and left the headings themselves in file order, so there was
no way to say "alphabetically" and have it mean the groups too.
- A second order, chosen in the same menu: file order, A–Z or Z–A. Organise
within the groups, and organise the groups. - Neither sort stands in for the other. A group has no due date and no
importance of its own, so ordering groups by the task sort would mean
inventing an aggregate and calling it the group's. - Dragging a heading now follows the group order rather than the task sort.
Choosing "Due date" for the tasks had been quietly disabling it, which is a
question it has nothing to say about. - Both are view-only and stored per list, like the task sort. Nothing is written
to your markdown.
Tasks in no group sit below the groups, with Completed below that. They were
above, by the argument that it is where they are in the file — which only held
while the file's own order was the only order there was.
The Ungrouped tasks first setting goes with it: the position is now fixed, and
a setting whose reason has gone is a switch with nothing behind it.
Subtasks are unchanged, and deliberately so — they are never sorted and never
grouped, and stay under the task they belong to.