aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/app-core.js
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-16 06:27:08 -0500
committerCraig Jennings <c@cjennings.net>2026-06-16 06:27:08 -0500
commit84de4c57148d49a26f01f36357416692671daea8 (patch)
treee9d5b2413fba9c94b393189919ef94b6a13494ab /scripts/theme-studio/app-core.js
parented9ff2bcb4ac763d6ebac8e7d24578c4a0c01178 (diff)
downloaddotemacs-84de4c57148d49a26f01f36357416692671daea8.tar.gz
dotemacs-84de4c57148d49a26f01f36357416692671daea8.zip
feat(theme-studio): prev/next arrows to step the view dropdown
I added left and right arrow buttons flanking the view dropdown. They step the selection to the previous or next item and re-render the faces table and preview, so you can walk the list without reopening the dropdown. A pure stepViewIndex helper clamps the index to the option range, no wrap. stepView sets the selection and calls onViewChange.
Diffstat (limited to 'scripts/theme-studio/app-core.js')
-rw-r--r--scripts/theme-studio/app-core.js9
1 files changed, 8 insertions, 1 deletions
diff --git a/scripts/theme-studio/app-core.js b/scripts/theme-studio/app-core.js
index df99a0d37..74b441b96 100644
--- a/scripts/theme-studio/app-core.js
+++ b/scripts/theme-studio/app-core.js
@@ -417,6 +417,13 @@ function appViewKeysSorted(apps){
String((apps[b]&&apps[b].label)||b), undefined, {sensitivity:'base'}));
}
+// The prev/next arrows step the view-dropdown selection by DIR (-1/+1), clamped
+// to [0, LEN-1] with no wrap. An empty list (LEN<=0) keeps CUR.
+function stepViewIndex(cur,len,dir){
+ if(!(len>0)) return cur;
+ return Math.max(0, Math.min(len-1, cur+dir));
+}
+
// Which of the six per-face setting boxes (fg, bg, style, inherit, height, box)
// differ from the face's seed default, so the table can mark a non-default box.
// A non-default height looks identical to the default in the number input, so the
@@ -436,4 +443,4 @@ function faceBoxNonDefaults(cur,def){
};
}
-export { nameToHex, normalizePkgFace, buildPkgmap, packagesForExport, mergePackagesInto, effResolve, resolveSyntaxFg, resolveUiAttr, dropdownRowTextColor, paletteOptionList, galleryModel, appViewKeysSorted, faceBoxNonDefaults, spanNeighborHex, slugify, fgSetFor, floor, lMax, COVERED_FACES, columnsFromPalette, usedPaletteHexes, paletteUsages, regenColumn, rankByLightness, stepRepointPlan, sortColumns, sortColumnMembers, groundRoleOfEntry, groundColumnMembersFromPalette, clearPalettePlan, deletePaletteColumnPlan, areAllLocked, lockToggleLabel, toggleLockSet };
+export { nameToHex, 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 };