Release 2.15.0 (amended): file-explorer registry look + Creator Settings

Fold two further changes into the 2.15.0 release:

File explorer: replace the two v2.14.0 toggles (bu-folder-stamps,
bu-file-chip) with a single bu-registry master toggle plus two dependent
controls, a Tree font select (bu-registry-font) and a Stamp back colour
picker (bu-registry-back) whose ink auto-derives via an oklch lightness
flip so it stays legible on any chosen colour. When on: uppercase rows,
folders and the open note as inverted stamps, a blinking accent registry
dot and an accent here-line on the open file, bold accent indent guides,
and a hover that inks to high contrast in both appearances. Bars are
painted as content-box-clipped background layers so they track each row's
indent at any depth. Default off.

Creator Settings: a new info-text block at the top of the panel carries
the author's live Bureau config as an importable JSON blob; release.py
gains a sync_creator step that refreshes it from the vault's Style
Settings data.json on each release (best-effort, skipped when absent).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sonophage 2026-07-15 12:30:53 -07:00
parent d52ea8f7c6
commit 9f9bbd44ef
3 changed files with 148 additions and 87 deletions

View file

@ -220,6 +220,8 @@ paragraph**, newest first — `release.py` reads it from here (see [Releasing](#
### 2.15.0
- **Style Settings colour picker fixed.** The colour fields (Custom accent, per-mode text and black/white level, daily-note accents) rendered a raw, unstyled colour picker: the saturation palette and hue slider collapsed to black squares and the hex field spilled out at the top level. Neither the Style Settings plugin nor any theme ships the picker's own stylesheet, so it fell back to naked markup. Bureau now carries the pickr "nano" stylesheet itself, skinned to its tokens: one swatch button opens a single floating card holding the palette, the hue slider, and the hex input with its HEX/RGB/HSL and save/cancel row, all inside that one box.
- **Effects mode: removed the redundant "High" preset.** High applied no CSS at all: it was mechanically identical to Custom and could not force-enable an effect you had switched off, so its "everything on" label was misleading. The selector is now Low / Medium / Custom, with Custom as the full look driven by the individual toggles.
- **File explorer: the registry look is now one controllable feature.** The two earlier File-explorer toggles are replaced by a single *Registry look* master toggle plus two dependent controls: a *Tree font* select (Label / Body / Monospace) and a *Stamp back* colour picker whose ink auto-derives (oklch lightness flip) to stay legible on any chosen colour. When on: rows uppercase and a touch larger, folders and the open note stamped as inverted bars, a blinking accent registry dot and an accent here-line on the open file, bold accent indent guides, and a hover that flips to high-contrast ink in both appearances. Off leaves the plain tree untouched. Bars are painted as content-box-clipped background layers, so they track each row's indent at any depth.
- **Creator Settings.** A new block at the top of the panel carries the author's own live Bureau config as an importable JSON blob; paste it into Style Settings' Import to run Bureau exactly as it's run here. `release.py` refreshes it from the vault on every release (best-effort: skipped cleanly when the vault isn't present).
### 2.14.0
- **File explorer: the case-file registry look.** A new *File explorer* section adds two toggles that turn the file tree into the Bureau index. *Registry list* rules every entry as a ledger row, stamps folders as accent uppercase section bands, and recolours the indent guides to an accent ledger line; *Active file as inverted bar* renders the open note as a solid inverted stamp (light fill, dark ink, the redaction mark flipped) with an accent registry dot, auto-inverting per appearance. Obsidian indents nested rows with inline `!important` styles a theme can't override, so the bands and rules are painted as `background-clip: content-box` layers instead of borders plus fills: that way they begin at each row's own indent and subfolders visibly step in, with no depth-counting. A reduced-motion-safe hover wash, plus an accent ink for hovering the active bar, make the register feel tactile. Both toggles default off.

View file

@ -23,7 +23,8 @@ WHAT IT DOES (aborts on any failure; nothing is pushed until the confirm)
preflight -> repo sane, on main, gh authed, X.Y.Z semver, tag is new, README entry exists
stamp -> manifest.json version + the theme.css header version
sync -> regenerates the in-panel "What's new" note, prepends the entry to
"Release history" (both inside the @settings block)
"Release history", and refreshes the "Creator Settings" import blob from
the author's live vault config (all inside the @settings block)
validate -> theme.css braces balanced + the @settings YAML still parses
ship -> commit "Release X.Y.Z", tag X.Y.Z, push main + tag,
gh release create X.Y.Z theme.css manifest.json (notes = the README entry)
@ -52,6 +53,18 @@ WHATSNEW_FOOTER = (
SEMVER = re.compile(r"^\d+\.\d+\.\d+$")
# Creator Settings: the author's live Bureau config, embedded as an importable JSON blob in the
# bu-creator-note info-text (users paste it into Style Settings → Import). Read from the vault's
# Style Settings data.json; override the path with BUREAU_VAULT_SS_DATA. Best-effort: if the file
# isn't present (a fresh clone, CI, another machine) the sync is skipped and the last-synced blob
# is left untouched, so the release never fails on account of it.
VAULT_SS_DATA = os.environ.get(
"BUREAU_VAULT_SS_DATA",
os.path.expanduser(
"~/Documents/01-09-Obsidian-Vaults/Harker/.obsidian/plugins/obsidian-style-settings/data.json"
),
)
def die(msg):
print(f"\n{msg}\n", file=sys.stderr)
@ -149,6 +162,35 @@ def sync_settings(theme, version, bullets):
return theme
# ── Creator Settings blob ─────────────────────────────────────────────────────
def sync_creator(theme):
"""Refresh bu-creator-note's importable blob from the author's live vault config."""
if not os.path.exists(VAULT_SS_DATA):
step("Creator Settings: vault data.json absent, keeping the last-synced blob")
return theme
try:
data = json.loads(read(VAULT_SS_DATA))
except Exception as e:
die(f"Creator Settings: could not parse {VAULT_SS_DATA}: {e}")
bureau = {k: v for k, v in data.items() if k.startswith("bureau@@")}
if not bureau:
step("Creator Settings: no bureau@@ keys in the vault, keeping the last-synced blob")
return theme
blob = json.dumps(bureau, indent=2, ensure_ascii=False)
desc = (
"**Bureau, as its author runs it.** A snapshot of my own live setup, refreshed each "
"release. To adopt it: copy the block below, open Style Settings' **Import** control "
"(the import icon at the top of the Style Settings pane), and paste; it overwrites only "
"your Bureau settings, nothing else.\n\n```json\n" + blob + "\n```"
)
s, e = block_bounds(theme, "bu-creator-note")
block = theme[s:e]
block = set_line(block, "description", yaml_dquote(desc))
theme = theme[:s] + block + theme[e:]
step(f"synced Creator Settings from vault ({len(bureau)} keys)")
return theme
# ── validation ───────────────────────────────────────────────────────────────
def validate(theme):
pre = theme.split("/* @settings")[0]
@ -210,6 +252,7 @@ def main():
# sync + validate
theme = sync_settings(theme, version, bullets)
theme = sync_creator(theme)
validate(theme)
if dry:

188
theme.css

File diff suppressed because one or more lines are too long