aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/app-core.js
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-13 19:04:17 -0500
committerCraig Jennings <c@cjennings.net>2026-06-13 19:04:17 -0500
commit009cbf08da23ac5ac7ea00ba0cc49db07e589d83 (patch)
treef69cc3c5d9955abf15888521b44e3b531739ef56 /scripts/theme-studio/app-core.js
parent0958a3d92e1059e2d86a73edb9ba990260c8dcd0 (diff)
downloaddotemacs-009cbf08da23ac5ac7ea00ba0cc49db07e589d83.tar.gz
dotemacs-009cbf08da23ac5ac7ea00ba0cc49db07e589d83.zip
Add theme studio face color step arrows
Diffstat (limited to 'scripts/theme-studio/app-core.js')
-rw-r--r--scripts/theme-studio/app-core.js20
1 files changed, 19 insertions, 1 deletions
diff --git a/scripts/theme-studio/app-core.js b/scripts/theme-studio/app-core.js
index 4f1eee16..af90f13a 100644
--- a/scripts/theme-studio/app-core.js
+++ b/scripts/theme-studio/app-core.js
@@ -303,5 +303,23 @@ function paletteOptionList(cur,palette,ground){
sortColumns(grouped.columns).forEach(f=>lightestFirstMembers(f.members).forEach(m=>add(m.hex,m.name)));
return out;
}
+function spanNeighborHex(cur,palette,ground,dir){
+ if(!cur)return null;
+ const wanted=(cur||'').toLowerCase(),groups=[],byLight=(a,b)=>oklchOf(a.hex).L-oklchOf(b.hex).L;
+ const addGroup=members=>{
+ const seen=new Set(),g=[];
+ members.filter(m=>m&&m.hex).sort(byLight).forEach(m=>{const h=m.hex.toLowerCase();if(!seen.has(h)){seen.add(h);g.push(m);}});
+ if(g.length)groups.push(g);
+ };
+ addGroup(groundColumnMembersFromPalette(palette,ground||{}));
+ sortColumns(columnsFromPalette(palette,ground||{}).columns).forEach(f=>addGroup(f.members));
+ for(const g of groups){
+ const i=g.findIndex(m=>(m.hex||'').toLowerCase()===wanted);
+ if(i<0)continue;
+ const next=g[i+(dir>0?1:-1)];
+ return next?next.hex:null;
+ }
+ return null;
+}
-export { nameToHex, normalizePkgFace, buildPkgmap, packagesForExport, mergePackagesInto, effResolve, optList, paletteOptionList, slugify, ramp, fgSetFor, floor, lMax, COVERED_FACES, columnsFromPalette, regenColumn, rankByLightness, stepRepointPlan, sortColumns, sortColumnMembers, groundRoleOfEntry, groundColumnMembersFromPalette, clearPalettePlan, deletePaletteColumnPlan, areAllLocked, lockToggleLabel, toggleLockSet };
+export { nameToHex, normalizePkgFace, buildPkgmap, packagesForExport, mergePackagesInto, effResolve, optList, paletteOptionList, spanNeighborHex, slugify, ramp, fgSetFor, floor, lMax, COVERED_FACES, columnsFromPalette, regenColumn, rankByLightness, stepRepointPlan, sortColumns, sortColumnMembers, groundRoleOfEntry, groundColumnMembersFromPalette, clearPalettePlan, deletePaletteColumnPlan, areAllLocked, lockToggleLabel, toggleLockSet };