Files
beaver-calendar/README.md
T

56 lines
2.8 KiB
Markdown

# beaver-calendar
[![AI Slop Inside](https://sladge.net/badge.svg)](https://sladge.net)
A calendar and a task list for Obsidian on top of Kanban boards and the Tasks plugin. A sphere is a board file, a project is an h2 inside it; every task keeps living in its board, the plugin only shows them together - by deadline, by sphere, or on a month grid - and lets you drag, edit and close them without opening the board.
![The Calendar tab: a month with tasks by day, the undated ones below](docs/calendar.webp)
![The List tab: tasks grouped by deadline, the rail with spheres and projects on the left](docs/list.webp)
## 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
```bash
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:
```bash
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/#cal' # screenshot + console
```