aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/app-core.js
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-18 22:17:55 -0500
committerCraig Jennings <c@cjennings.net>2026-06-18 22:17:55 -0500
commit8c032ca51e9cb8bca87b97cd778596a1abe75b8b (patch)
tree8e400ba30d2e29a97bb0f733cb1c4552b4cced1b /scripts/theme-studio/app-core.js
parente110f7afac89322a2af4f3c4ebafe303be044cc2 (diff)
downloaddotemacs-8c032ca51e9cb8bca87b97cd778596a1abe75b8b.tar.gz
dotemacs-8c032ca51e9cb8bca87b97cd778596a1abe75b8b.zip
feat(theme-studio): replace the style toggles with weight/slant/underline/strike controls
The B/I/U/S toggle buttons in the syntax, UI, and package tables become a weight selector (light/normal/medium/semibold/bold/heavy), a slant selector (normal/italic/oblique), and box-like underline and strike controls. The underline control sets line or wave plus a color, and the strike control sets a color. A face can now reach the full weight range and a wavy or colored underline, not just bold and italic on-off. All four controls come from one mkStyleControls helper shared across the three tables, and underline and strike share mkLineStyleControl (the box-control pattern, parameterized for a styled line vs a plain toggle). With the real controls in place I dropped the transitional legacyStyleOn/toggleLegacyStyle shim and its tests. The overflow attributes (distant-fg, family, overline, inverse, extend, and inherit/height for ui and syntax) move into a per-row expander next. Verified by screenshot and the browser style gate, which now drives a weight-select change and an underline-wave click through the model. Full suite green: Python 59, Node 198, ERT 41, plus the browser hash gates.
Diffstat (limited to 'scripts/theme-studio/app-core.js')
-rw-r--r--scripts/theme-studio/app-core.js18
1 files changed, 1 insertions, 17 deletions
diff --git a/scripts/theme-studio/app-core.js b/scripts/theme-studio/app-core.js
index f9c752bd0..81a667bd1 100644
--- a/scripts/theme-studio/app-core.js
+++ b/scripts/theme-studio/app-core.js
@@ -34,22 +34,6 @@ function normalizePkgFace(d,source,palette){
return {fg:resolve(d.fg)??null,bg:resolve(d.bg)??null,'distant-fg':resolve(d['distant-fg'])??null,family:d.family??null,weight:d.weight??null,slant:d.slant??null,underline:d.underline??null,strike:d.strike??null,overline:d.overline??null,inherit:d.inherit??null,height:d.height||1,box:d.box??null,inverse:!!d.inverse,extend:!!d.extend,source:source||d.source||'user'};
}
-// Transitional bridge for the legacy B/I/U/S toggle buttons (mkStyleButtons),
-// which the weight/slant dropdowns and underline/strike controls replace next.
-// The button reads on/off and flips a single attribute on the new-shape face.
-function legacyStyleOn(f,attr){
- if(attr==='bold')return f.weight==='bold';
- if(attr==='italic')return f.slant==='italic';
- if(attr==='underline')return !!f.underline;
- if(attr==='strike')return !!f.strike;
- return false;
-}
-function toggleLegacyStyle(f,attr){
- if(attr==='bold')f.weight=f.weight==='bold'?null:'bold';
- else if(attr==='italic')f.slant=f.slant==='italic'?null:'italic';
- else if(attr==='underline')f.underline=f.underline?null:{style:'line',color:null};
- else if(attr==='strike')f.strike=f.strike?null:{color:null};
-}
// Seed the package-face map from the app inventory's per-face defaults.
function buildPkgmap(apps,palette){const m={};for(const app in apps){m[app]={};for(const row of apps[app].faces){m[app][row[0]]=normalizePkgFace(row[2],'default',palette);}}return m;}
@@ -474,4 +458,4 @@ function faceBoxNonDefaults(cur,def){
};
}
-export { nameToHex, migrateLegacyFace, legacyStyleOn, toggleLegacyStyle, normalizePkgFace, buildPkgmap, packagesForExport, mergePackagesInto, effResolve, resolveSyntaxFg, resolveUiAttr, dropdownRowTextColor, paletteOptionList, galleryModel, appViewKeysSorted, faceBoxNonDefaults, stepViewIndex, spanNeighborHex, slugify, fgSetFor, floor, lMax, COVERED_FACES, columnsFromPalette, usedPaletteHexes, paletteUsages, regenColumn, rankByLightness, stepRepointPlan, sortColumns, sortColumnMembers, groundRoleOfEntry, groundColumnMembersFromPalette, clearPalettePlan, deletePaletteColumnPlan, areAllLocked, lockToggleLabel, toggleLockSet };
+export { nameToHex, migrateLegacyFace, normalizePkgFace, buildPkgmap, packagesForExport, mergePackagesInto, effResolve, resolveSyntaxFg, resolveUiAttr, dropdownRowTextColor, paletteOptionList, galleryModel, appViewKeysSorted, faceBoxNonDefaults, stepViewIndex, spanNeighborHex, slugify, fgSetFor, floor, lMax, COVERED_FACES, columnsFromPalette, usedPaletteHexes, paletteUsages, regenColumn, rankByLightness, stepRepointPlan, sortColumns, sortColumnMembers, groundRoleOfEntry, groundColumnMembersFromPalette, clearPalettePlan, deletePaletteColumnPlan, areAllLocked, lockToggleLabel, toggleLockSet };