aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio
Commit message (Collapse)AuthorAgeFilesLines
* feat(theme-studio): auto-dim split previewCraig Jennings3 days8-5/+142
| | | | | | | | auto-dim-other-buffers is a package face, not a theme face, so build-inventory.el (it scans only elpa/straight packages) never listed it and the studio couldn't theme it. This adds it as a bespoke app. The preview is a vertical split: the focused window on the left in real syntax colors, the same code on the right collapsed to the single auto-dim-other-buffers face, the way Emacs renders a non-selected window. Both panes follow the language selector. A trailing row shows auto-dim-other-buffers-hide, whose foreground matches the background so it vanishes when dimmed. A #autodimtest gate covers the split, the uniform recolor, and language sync.
* fix(theme-studio): keep dropdown color names legibleCraig Jennings3 days3-3/+32
| | | | | | The color-picker popup colored each row's name and hex for contrast against the swatch, but the rows sit on the popup's fixed dark background. A mid or dark swatch (the blues past blue-1) got near-black text that vanished on the dark popup. The text now inherits the popup foreground for every real palette color. Only the solid "default" row, whose background is the color itself, still contrasts against its own fill. I moved the decision into dropdownRowTextColor with unit coverage, including a dark-swatch regression case.
* chore(theme-studio): drop scratch theme JSONs, ignore working artifactsCraig Jennings3 days5-43430/+0
| | | | Remove the distinguished-revised, distinguished-test, dupre-rebuild, dupre-revised, and sterling2 experiment snapshots, and ignore WIP.json and themes/theme-theme.el so working scratch stays out of the tree.
* feat(theme-studio): make targets for the build-theme converterCraig Jennings3 days1-1/+34
| | | | theme-studio-theme converts a Theme Studio JSON export to themes/<name>-theme.el. theme-studio-theme-load disables the custom themes and loads one in the running Emacs. theme-studio-theme-reload chains the two. Each delegates to the scripts/theme-studio/Makefile and errors clearly when its required JSON or THEME argument is missing.
* feat(theme-studio): palette generator and preview fidelityCraig Jennings3 days15-503/+2953
| | | | | | | | | | Two strands land together because the generated theme-studio.html bundles every source file into one page and can't be split cleanly. The palette generator is a preview-first panel: palette-generator-core.js plans the palette and palette-generator-ui.js draws it. Generated colors stay inspectable and tunable through the existing selector, and committing one creates a normal base column. It adds source-mode and scheme controls, a configurable accent count, and color names from color-names.json. For preview fidelity, syntax and UI colors now resolve through the real Emacs inherit chains, so the preview matches how Emacs renders the theme. resolveSyntaxFg pins dec to ty (Emacs has no decorator face) and otherwise follows comment-delimiter to comment, doc to string, property to variable, function-call to function-name. resolveUiAttr walks mode-line-inactive to mode-line and line-number-current-line to line-number. The decorator label now reads "decorator to type" to match the type face Emacs uses for it. Design recorded in the two theme-studio specs under docs/.
* Update theme studio palette workflowCraig Jennings3 days28-1792/+51998
|
* Add theme studio box color controlsCraig Jennings4 days5-32/+75
|
* Shorten theme studio reset erase labelsCraig Jennings4 days5-33/+32
|
* Clarify theme studio reset and erase actionsCraig Jennings4 days5-38/+83
|
* Add theme studio face color step arrowsCraig Jennings4 days7-30/+158
|
* Preview selected theme studio chip while pickingCraig Jennings4 days4-12/+40
|
* Change theme studio spans to endpoint divisionsCraig Jennings4 days6-35/+72
|
* Remove theme studio save buttonCraig Jennings4 days4-29/+10
|
* Fix theme studio span endpoint tilesCraig Jennings4 days7-31/+57
|
* Sort theme studio dropdown colors by lightnessCraig Jennings4 days4-8/+38
|
* Fix theme studio ground endpoint editCraig Jennings4 days3-6/+28
|
* Fix theme studio fg endpoint selectionCraig Jennings4 days3-6/+30
|
* Refine theme studio tile name editingCraig Jennings4 days5-8/+43
|
* Make theme studio column delete saferCraig Jennings4 days5-10/+31
|
* Add theme studio Rust and Zig samplesCraig Jennings4 days5-4/+95
|
* Add theme studio column deleteCraig Jennings4 days7-12/+103
|
* Refactor theme studio palette testsCraig Jennings4 days9-679/+835
|
* Add theme studio palette clear and lock togglesCraig Jennings4 days3-10/+112
|
* Fix theme studio ground column orderCraig Jennings4 days2-12/+34
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings4 days4-12/+26
|
* Fix theme studio style button stateCraig Jennings4 days2-2/+26
|
* Fix theme studio bg-like imported colorsCraig Jennings4 days5-44/+111
|
* Add theme studio column selection and reorder controlsCraig Jennings4 days3-10/+120
|
* Set theme studio default picker colorCraig Jennings4 days3-12/+14
|
* Group numeric color names by stemCraig Jennings4 days5-4/+16
|
* Treat legacy color names as base columnsCraig Jennings4 days5-4/+28
|
* Split theme studio generator data and templateCraig Jennings4 days4-384/+394
|
* Add theme studio default face drift summaryCraig Jennings4 days3-1/+102
|
* Pin theme studio preview links and column exportsCraig Jennings4 days4-10/+58
|
* Add theme studio generated file checkCraig Jennings4 days2-1/+12
|
* Rename theme studio column browser gateCraig Jennings4 days4-10/+10
|
* Pin theme studio generated defaultsCraig Jennings4 days1-0/+32
|
* Refactor theme studio face assemblyCraig Jennings4 days8-61/+205
|
* Rename theme studio color model to columnsCraig Jennings4 days5-187/+187
|
* Guard theme studio package face coverageCraig Jennings4 days1-0/+35
|
* Extract theme studio default face adapterCraig Jennings4 days3-81/+203
|
* Update theme studio color columns and defaultsCraig Jennings4 days10-460/+30503
|
* chore(theme-studio): record verification passes, file preview-fix tasksCraig Jennings5 days1-415/+584
| | | | Five manual checks verified, closing the contrast-cell and preview-bg bugs. An audit of the bespoke previews found three face mislinks (org headline-todo, erc input/default swap, flycheck delimiter swap) — filed with picker-visibility and Rust+Zig sample tasks. WIP theme picks up the revised steel selections.
* chore(theme-studio): snapshot WIP palette filesCraig Jennings6 days6-431/+31817
|
* fix(theme-studio): derive box bevel colors from the face backgroundCraig Jennings7 days5-16/+150
| | | | The released/pressed bevel was a flat translucent white/black overlay, which reads weaker than the box Emacs draws. reliefColors in colormath.js now ports Emacs 30's x_alloc_lighter_color: highlight = bg x1.2, shadow = bg x0.6, an additive boost for dark backgrounds, and the same-color fallback for pure black and white. boxCss takes the face's effective bg and derives both edges from it. Pressed swaps the pair, and the translucent pair remains only when no bg is known. Width stays 1px because dupre's :line-width -1 draws 1px lines in Emacs too. The gap was color strength, not width. Five node tests pin hand-computed fixtures from the C source, and a new #beveltest gate pins the wiring.
* fix(theme-studio): re-rate fallback contrast cells on default-fg changeCraig Jennings7 days2-2/+30
| | | | A default-fg (p) change only re-rated the covered overlay faces. UI-face and package ratios that fall back to the default fg kept their old number until something else rebuilt the tables. The p branch now runs the same repaint as a ground-bg change. The new #contrasttest assertion drives the real syntax dropdown (unlocking a locked p row for the test) so the handler wiring is pinned, not just the repaint helper.
* fix(theme-studio): scope applyGround and repaint faces on ground changeCraig Jennings7 days2-6/+56
| | | | The contrast cells already rated a two-color face's own fg-on-bg. They read wrong because applyGround blanketed every .ex cell (the per-face preview cells included) with the ground bg, and a ground-bg change never repainted the UI or package tables. The preview showed fg on the ground bg next to a correct fg-on-face-bg ratio, and ground-dependent ratios went stale. applyGround now blankets only the code panes and syntax example cells and repaints UI faces through paintUI. The ground-bg handler also rebuilds the package table and preview. New #contrasttest assertions pin the two-color pair in both tables, preview-bg survival, and ground-change re-rating.
* fix(theme-studio): guard Chrome profile dir and bound headless rendersCraig Jennings7 days1-2/+5
| | | | A headless render with an empty --user-data-dir falls back to the real Chrome profile and takes its SingletonLock. A hung render held that lock for 18 hours on 2026-06-09, blocking every interactive Chrome launch. The runner now refuses to run the browser gates when mktemp fails, and each render runs under timeout --kill-after so a wedged Chrome dies in seconds.
* feat(theme-studio): group families by lightness-conditioned complete linkageCraig Jennings7 days4-46/+146
| | | | | | | | | | Replace the hue-anchor bucketing and the tent neutral threshold with the model two independent reviews of color-sorting.org converged on (Codex and Fable, with Fable's harness measuring pairwise F1 0.63 → 0.96 on the real palette). Chromatic colors now cluster by complete-linkage agglomeration on a lightness-conditioned hue distance: hue must match tightly at equal lightness and may drift across a lightness gap, because a tonal ramp drifts in hue with lightness by design. A low-chroma noise term widens the tolerance where hue is ill-defined, and a chroma clause keeps a vivid accent out of a soft same-hue family. Complete linkage makes single-linkage chaining structurally impossible. The neutral threshold is floored at both ends instead of tapering to zero, which fixes two real defects: pale warm grays (gray+1, gray+2) that leaked into a color column, and pure white (C=0 at L=1) that evaded a zero threshold. On the sterling/distinguished palette this separates the gold and olive ramps (the green/yellow complaint), keeps the red and blue ramps whole including drifted tints, isolates intense-red, and consolidates every gray and steel into the neutral column. The one residual — pale yellow+2 lands on the olive ramp — is geometrically irreducible from the hex (it sits on the olive trajectory by nearest-neighbor, ramp-line fit, and eye); only its name says gold. That needs the deferred per-hex family-hint override. New node tests cover the gold/olive split, blue pale-tint cohesion, gray/white neutrality, intense-red isolation, and palette-order independence. The count gate now asserts the count action adds all ramp colors to the palette rather than that they all display in one family, since a chroma-eased extreme can sit at the neutral boundary.
* feat(theme-studio): color-families export round-trip and README close-outCraig Jennings7 days4-28/+72
| | | | | | | | Export stays a flat palette and import needs no reconstruction, because families are derived from the hex every render rather than stored. A #roundtriptest gate confirms export to import to export is byte-identical, and that the exported palette is still a flat [hex, name] list. Package seeding is unaffected since it reads the same flat palette. The spec's planned ramp-step warning exemption is dropped after analysis: a generated ramp's steps are a stepL apart, well above the too-similar ΔE threshold, so they never trigger the warning, and exempting same-family pairs would hide genuine near-duplicates that should be flagged (the case #deltatest checks). So the warning stays on the full palette. README documents color families: the hue grouping and its limitation, the ground strip, the per-column count control and regenerate, removed-step references reading "(gone)", and the removal of the standalone ramp panel. Phase 6, the last phase; the color-families v1 build is code-complete.