aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/theme-studio.html
Commit message (Collapse)AuthorAgeFilesLines
* refactor(theme-studio): drop the too-similar-colors warning boxCraig Jennings7 hours1-28/+3
| | | | The warning box under the palette wasn't useful there; the same ΔE info is reachable per-chip via the nearest-ΔE tooltip and inline contrast. Remove renderPaletteWarnings, the #palwarn element, its CSS, and the #deltatest gate. paletteWarnings still runs for the per-chip nearest distance.
* refactor(theme-studio): extract a groundPair() helperCraig Jennings9 hours1-34/+38
| | | | The literal {bg:MAP['bg'],fg:MAP['p']} repeated 32 times across app.js, palette-actions.js, and the browser gates. Replace it with a groundPair() helper. Named groundPair, not ground, to avoid colliding with the local ground bindings destructured from columnsFromPalette. No behavior change; node tests and browser gates are the safety net.
* feat(theme-studio): 2D gallery color picker for the assignment dropdownsCraig Jennings10 hours1-16/+91
| | | | | | | | | | - The color dropdown opens a grid, not a long list. - The grid mirrors the palette: ground strip, then a row per family. - Members run dark to light, with the current color outlined. - A default chip clears the assignment. - A (gone) cell shows a color no longer in the palette. - The trigger and step buttons stay the same. - All three tiers share the one dropdown.
* feat(theme-studio): show view-area > element usages on palette tile hoverCraig Jennings11 hours1-3/+44
| | | | I added paletteUsages, which enumerates every place a color is assigned, grouped by view area (the view dropdown's names: color/code assignments, ui faces, each package app) and the element within it. renderPalette builds the per-area scopes once and appends the list to each used tile's hover title, under the existing name/hex/nearest-deltaE line. Node tests and a #usagetest gate cover it.
* style(theme-studio): thin the barber-pole flag borderCraig Jennings11 hours1-3/+3
|
* style(theme-studio): make the unused and gone flags a two-color barber-pole ↵Craig Jennings11 hours1-3/+10
| | | | | | border The single-color dashed outline blended in. I replaced it with a ring of two alternating contrasting colors, drawn as a masked repeating gradient so it overlays without shifting layout. Unused tiles and columns use gold and black; gone assignments use red and white, keeping the two states distinct at a glance.
* feat(theme-studio): flag gone color assignments with a borderCraig Jennings11 hours1-1/+19
| | | | An assignment pointing at a color no longer in the palette showed only as "(gone)" on hover. I added a distinct solid border to the swatch whenever its current value resolves to "(gone)", so a broken assignment reads at a glance. The solid red outline is set apart from the dashed unused-tile flag, keeping the two palette-state cues distinguishable. A #gonetest gate covers the flagged and unflagged cases.
* feat(theme-studio): flag unused palette tiles and columnsCraig Jennings11 hours1-3/+44
| | | | | | I added usedPaletteHexes, a reverse lookup over the syntax, ui, and package assignments (plus the ground endpoints) that resolves each reference to a hex. renderPalette outlines a tile whose color is referenced nowhere and outlines a whole column when none of its colors are used, so dead colors stand out for pruning before a theme ships. The check is biased safe: an unresolvable reference marks nothing, so a color that is actually used is never flagged. Node tests cover the lookup. A #unusedtest gate covers the tile and column flags.
* feat(theme-studio): add a palette display toggle for base colors vs full spansCraig Jennings12 hours1-2/+31
| | | | I added an arrow control to the palette that collapses every column to its base color (right arrow) or expands to the full spans (down arrow), to conserve vertical space. Ground steps collapse too, leaving bg and fg. A #paltoggletest gate covers the collapse and the expand.
* refactor(theme-studio): rename preview samples and match cluster button sizesCraig Jennings12 hours1-7/+7
| | | | | | I renamed the preview personas to Christine (was Alice) and Evan (was Eve), trimming the mu4e header spacing so those rows stay aligned. I shrank the style cluster buttons from 26x24 to the 17x15 box-button size, so the two clusters match and the assignment row returns to roughly its pre-cluster height.
* fix(theme-studio): clamp generated palette spans to the bg/fg boundsCraig Jennings12 hours1-10/+23
| | | | | | Spanning a color generated steps toward pure black and white, so a column could produce colors darker than bg or lighter than fg. I changed regenColumn to ramp the dark side toward the darker ground endpoint and the light side toward the lighter one, bounded by bg and fg. Pure black/white duplicates are still skipped, and callers that pass no ground fall back to the old black/white ramp. Node tests cover the bounded span and the no-ground fallback. The #counttest gate asserts the regenerated column stays within the bg/fg bounds.
* refactor(theme-studio): drop dead bindings and CSS left by the cluster workCraig Jennings12 hours1-4/+3
|
* feat(theme-studio): reflow the B/I/U/S style buttons into a 2x2 clusterCraig Jennings13 hours1-3/+15
| | | | | | The four style buttons sat in a horizontal row, the widest part of the style column. I wrapped them in the same 2x2 grid the box control uses, so they form a square (still multi-toggle, since bold and italic combine). The column narrows to roughly half its width across all three tiers. A #styletest gate confirms the four buttons live in a .stylecluster.
* feat(theme-studio): compact the box control into a 2x2 button clusterCraig Jennings13 hours1-11/+46
| | | | | | | | The box control was a wide select plus a color swatch, pinning the box column at 166px. I replaced the select with a 2x2 cluster of radio buttons for the four styles: blank (no box), □ (line), ▼ (pressed), ▲ (raised). The color swatch now shows only while a box style is active, so the no-box case stays narrow. The column drops to 76px across all three tiers. A #boxtest gate covers the cluster: four buttons, radio selection, and the swatch hiding when no box is set. #beveltest now drives the style through the cluster button instead of the removed select. The same cluster shape sets up the B/I/U/S style column next.
* refactor(theme-studio): drop the per-row reset column from package facesCraig Jennings13 hours1-5/+5
| | | | | | Package faces was the only tier with a per-row reset button, in its own column. The syntax and ui tiers rely on the bulk reset alone, and the column cost horizontal space the table needs. I removed the per-row cell and its header, so the bulk reset (next to "lock all") is the single reset path now, matching the other tiers. A #viewtest assertion confirms the package rows carry no per-row reset button. The two weren't equivalent: the per-row button reset one face to its default, the bulk reset clears every unlocked face in the app. Losing single-face reset is the accepted tradeoff.
* refactor(theme-studio): collapse assignment views into one dropdown panelCraig Jennings13 hours1-7/+52
| | | | | | The assignment area was three stacked sections (color/code, ui faces, package faces), and package faces carried its own application selector. I merged them into one panel driven by a single dropdown: color/code assignments, ui faces, then a non-selectable "package faces" optgroup holding every app in order. Picking an entry swaps the left table and right preview, so only one view shows at a time. curApp now reads the selected app from that dropdown, and the old appsel is gone. A #viewtest browser gate locks in the dropdown order, the optgroup, and the one-view-at-a-time switching.
* chore(theme-studio): label highlighted preview line (process highlights)Craig Jennings14 hours1-1/+1
|
* feat(theme-studio): add org-faces app for agenda keyword and priority colorsCraig Jennings28 hours1-2/+29
| | | | Surface the org-faces-config.el header-row faces as their own theme-studio app, placed beside elfeed and mu4e so it reads as a custom layer rather than built-in org. The seed mirrors the module defaults exactly across all 28 faces (10 keywords, 4 priorities, and their dim variants), so the editor opens on the live colors. The preview shows a focused agenda block and an auto-dim block covering every face.
* refactor(theme-studio): extract the shared package-preview wrapperCraig Jennings33 hours1-20/+23
| | | | The 20 line-based renderXxxPreview functions each ended with a byte-identical monospace-pre wrapper. They now build their L array and return previewLines(L), so the wrapper lives in one place and can't drift across the family.
* chore(theme-studio): remove dead code and clear a type warningCraig Jennings33 hours1-37/+1
| | | | | | | | | - ramp (app-core.js) and its test-ramp.mjs: superseded by regenColumn, no production caller. - optList (app-core.js) and its tests: superseded by paletteOptionList. - ITALIC in generate.py: computed, never read (ITALIC_MAP is the live one). - a stray empty string in MU4E_FACES that .split() silently dropped. - the dead #familytest alias in the columntest gate, which HASHES never listed. - widen face_rows to Sequence[str], clearing the list-invariance warnings on the APPS calls.
* fix(theme-studio): make broken browser gates fail instead of silently passingCraig Jennings33 hours1-4/+8
| | | | | | run-tests.sh scored each browser gate by grepping the dumped DOM for the gate name and taking the first match. A gate that throws before setting its verdict left its own inlined source as the first match, and that source, "GATENAME '+(ok?'PASS':'FAIL')", contains the literal PASS, so the run reported green for a gate that never produced a verdict. The matcher now requires a resolved "GATENAME PASS" or "GATENAME FAIL". That exposed two gates that had been throwing unnoticed. baseedittest still referenced fam after the variable was renamed to column, so it ReferenceError'd. columntest read getComputedStyle on a palette chip captured before a re-render detached it, so the match returned null and threw. baseedittest now uses column, and columntest re-queries the live chip by its selection index.
* fix(theme-studio): hold the package preview heightCraig Jennings33 hours1-1/+1
| | | | Selecting a compact package (auto-dim, with a 2-row face table and a short preview) collapsed the package section and shortened the page. A 60vh floor on the preview keeps the section sized to the largest of the columns, the preview, or that floor, so switching packages no longer shrinks the page.
* feat(theme-studio): auto-dim split previewCraig Jennings36 hours1-3/+73
| | | | | | | | 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.
* feat(theme-studio): palette generator and preview fidelityCraig Jennings36 hours1-43/+666
| | | | | | | | | | 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 Jennings2 days1-110/+194
|
* Add theme studio box color controlsCraig Jennings2 days1-15/+36
|
* Shorten theme studio reset erase labelsCraig Jennings2 days1-12/+12
|
* Clarify theme studio reset and erase actionsCraig Jennings2 days1-16/+36
|
* Add theme studio face color step arrowsCraig Jennings2 days1-14/+61
|
* Preview selected theme studio chip while pickingCraig Jennings3 days1-6/+20
|
* Change theme studio spans to endpoint divisionsCraig Jennings3 days1-14/+26
|
* Remove theme studio save buttonCraig Jennings3 days1-13/+4
|
* Fix theme studio span endpoint tilesCraig Jennings3 days1-10/+20
|
* Sort theme studio dropdown colors by lightnessCraig Jennings3 days1-4/+6
|
* Fix theme studio ground endpoint editCraig Jennings3 days1-3/+14
|
* Fix theme studio fg endpoint selectionCraig Jennings3 days1-3/+15
|
* Refine theme studio tile name editingCraig Jennings3 days1-4/+20
|
* Make theme studio column delete saferCraig Jennings3 days1-3/+13
|
* Add theme studio Rust and Zig samplesCraig Jennings3 days1-1/+1
|
* Add theme studio column deleteCraig Jennings3 days1-5/+37
|
* Refactor theme studio palette testsCraig Jennings3 days1-29/+60
|
* Add theme studio palette clear and lock togglesCraig Jennings3 days1-5/+56
|
* Fix theme studio ground column orderCraig Jennings3 days1-6/+17
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings3 days1-6/+9
|
* Fix theme studio style button stateCraig Jennings3 days1-1/+13
|
* Fix theme studio bg-like imported colorsCraig Jennings3 days1-21/+43
|
* Add theme studio column selection and reorder controlsCraig Jennings3 days1-5/+60
|
* Set theme studio default picker colorCraig Jennings3 days1-6/+7
|
* Group numeric color names by stemCraig Jennings3 days1-2/+2
|
* Treat legacy color names as base columnsCraig Jennings3 days1-2/+2
|