hh b70331f7bd fix(ui): panels stay above the keyboard, the day two offers share is listed once
The date field would not open at all on some days: on a Friday "Friday" and
"In a week" resolve to the same day, and the option list was keyed by the day
it writes, so Svelte tore it down with each_key_duplicate. On a desktop this
took the whole view with it - the same bug, not two. Duplicate offers are
dropped (the more specific name wins) and the list is keyed by position, so
no caller can tear it down that way again.

Panels are placed against the visual viewport rather than the window, which
a phone's keyboard shrinks without resizing anything: they scroll inside what
is left, re-place as the keyboard animates in, and come back into view when
the keyboard covers the very row they hang off - visible beats staying next
to the anchor. The quick look centres the same way.

Its actions are thumb-sized where the pointer is coarse, with the keycaps
hidden - there is no keyboard to press them on - and it gains "no date" and a
close button, since a phone has no Escape. Both menus gain a plain "Edit"
beside "Edit in Tasks"; it was only ever reachable by pressing e.
2026-09-05 00:22:07 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00
2026-08-08 16:30:22 +02:00

beaver-calendar

AI Slop Inside

Calendar and task list for Obsidian Kanban+Tasks

Sphere - md-file in Kanban boards directory. Project - h2 inside the file.

Archiving

"Archive completed tasks" empties every board of what is finished with it, into a mirror of the boards folder: Boards/work.md archives into Boards/archive/work.md, itself a Kanban board with the same lanes, so the history opens normally and the board stays short. The same pass lifts a board's old native archive - everything below the *** separator - into that mirror, headings and all, so nothing is left behind in two places.

Set "Archive folder" before the first run: renaming it later leaves the mirrors already written behind, where they read as ordinary boards.

Archived tasks render alongside live ones when both "Include the archive" and "Show completed" are on - from the mirror files and from any *** section still sitting in a board. They carry an Archive badge instead of a project chip, ride with the sphere they came from in the rail, and are not drop targets.

Build and install

npm install
npm run dev                                        # esbuild watch
npm run build                                      # typecheck + bundle + css
npm test                                           # round-trip, smoke
npm run preview                                    # UI in browser, no Obsidian
make install VAULT=/path/to/vault                  # build and copy to vault
make zip                                           # distributable

After make install turn on plugin in settings.

styles.css is Tailwind output run through scripts/scope-css.mjs: every selector is prefixed with :is(.bcal-root, .bcal-root *). Other plugins built with Tailwind put their utilities into the same utilities cascade layer, and without the extra specificity whichever plugin loaded last would win (their .hidden over our @container variants, for one).

Preview knobs, all optional:

VAULT=/path/to/vault npm run preview               # the vault's theme
BOARDS=/path/to/vault/Boards npm run preview       # real boards, not fixtures
EXTRA_CSS=/path/to/other-plugin/styles.css …       # another plugin's css, loaded after ours
open 'http://localhost:4173/?groupBy=due&railCollapsed=1#edit-date'   # prefs + scene
node preview/shot.mjs out.png 'http://localhost:4173/#date'           # screenshot + console
S
Description
The only real way for human to interact with tasks plugin in Obsidian
Readme
531 KiB
0 Stars 2 Watchers 0 Forks
Languages
TypeScript 55.3%
Svelte 29.8%
JavaScript 11.7%
CSS 2.7%
HTML 0.3%
Other 0.2%