aboutsummaryrefslogtreecommitdiff
path: root/docs/prototypes
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-12 01:10:45 -0500
committerCraig Jennings <c@cjennings.net>2026-07-12 01:10:45 -0500
commit1b208de3b5fd3267ffb75b3c5c36905946f5ca8f (patch)
treeb913b60ac60e2abf92e95e993ee874645a92bd58 /docs/prototypes
parentdc47c020948dbdc8cf2ebd5f1f1df2230179639a (diff)
downloadarchsetup-1b208de3b5fd3267ffb75b3c5c36905946f5ca8f.tar.gz
archsetup-1b208de3b5fd3267ffb75b3c5c36905946f5ca8f.zip
feat(gallery): add R28 rotary disc switch
The heavy master-power selector after a marine battery switch (reference filed in the catalogue's working directory): the whole red disc turns with a molded grip bar and a cream index notch, stepping OFF, ON, COMBINE with the active legend lit. A disc that is itself the handle was the one heavy-switch form the kit lacked. I verified it in headless Chrome: clicks cycle all three positions and wrap, the disc rotates with its settle transition, no console exceptions.
Diffstat (limited to 'docs/prototypes')
-rw-r--r--docs/prototypes/panel-widget-gallery.html31
1 files changed, 31 insertions, 0 deletions
diff --git a/docs/prototypes/panel-widget-gallery.html b/docs/prototypes/panel-widget-gallery.html
index c4f1520..dc62d7d 100644
--- a/docs/prototypes/panel-widget-gallery.html
+++ b/docs/prototypes/panel-widget-gallery.html
@@ -739,6 +739,9 @@ card(C,'R24','Stomp switch + jewel',
card(C,'R27','Winged gain selector',
`<svg id="wingk" class="rsvg drag" viewBox="0 0 110 110" width="110" height="110"></svg>`,
'<b>the red T-bar, stepped.</b> A bar-grip handle over a dot ring, snapping between labeled gain detents. Drag up/down to step it. After a classic mic-preamp gain switch.');
+card(C,'R28','Rotary disc switch',
+ `<svg id="discsw" class="rsvg press" viewBox="0 0 110 116" width="110" height="116"></svg>`,
+ '<b>the master power disc.</b> The whole red disc turns, grip bar molded in — a heavy three-position selector for OFF, ON, and COMBINE. Click to step. After a marine battery switch.');
/* ============ METERS & GAUGES ============ */
const M=$('meters');
@@ -1920,6 +1923,34 @@ function setWing(v){const i=Math.max(0,Math.min(WINGK_STEPS.length-1,Math.round(
setRd('R27',(db>0?'+':'')+db+' dB');}
dragDelta($('wingk'),()=>wingI,setWing,{min:0,max:WINGK_STEPS.length-1,sens:.05});setWing(7);
+/* R28 rotary disc switch: the whole disc turns between heavy positions */
+const DISCSW_POS=[['OFF',-45],['ON',45],['COMBINE',135]];
+let discI=1,discGrp=null,discLbls=[];
+(function(){const s=$('discsw'),cx=55,cy=58;
+ const defs=svgEl(s,'defs',{});
+ const rr=svgEl(defs,'radialGradient',{id:'discRed',cx:'42%',cy:'34%',r:'85%'});
+ svgEl(rr,'stop',{offset:'0','stop-color':'#d98a6f'});
+ svgEl(rr,'stop',{offset:'.65','stop-color':'var(--fail)'});
+ svgEl(rr,'stop',{offset:'1','stop-color':'#7a2a1a'});
+ svgEl(s,'circle',{cx,cy,r:48,fill:'#1a1714',stroke:'#060505','stroke-width':1.5});
+ for(let k=0;k<4;k++){const [x,y]=polar(cx,cy,44,45+k*90);
+ svgEl(s,'circle',{cx:x,cy:y,r:2.6,fill:'url(#sfScrew)',stroke:'#0a0908','stroke-width':.5});}
+ DISCSW_POS.forEach(([lbl,a],i)=>{const [tx,ty]=polar(cx,cy,42,a);
+ const t=svgEl(s,'text',{x:tx,y:ty+2.4,'text-anchor':'middle','font-size':5.8,'letter-spacing':'.06em',
+ 'font-family':'var(--mono)',fill:'var(--dim)'});t.textContent=lbl;discLbls.push(t);});
+ svgEl(s,'circle',{cx,cy,r:36,fill:'url(#discRed)',stroke:'#4e150a','stroke-width':1});
+ discGrp=svgEl(s,'g',{});discGrp.style.transition='transform .15s';discGrp.style.transformOrigin=`${cx}px ${cy}px`;
+ svgEl(discGrp,'rect',{x:cx-27,y:cy-8,width:54,height:16,rx:8,fill:'url(#discRed)',stroke:'#8f3520','stroke-width':1});
+ svgEl(discGrp,'rect',{x:cx-25,y:cy-6.5,width:50,height:4,rx:2,fill:'rgba(255,255,255,.16)'});
+ svgEl(discGrp,'line',{x1:cx+20,y1:cy,x2:cx+26,y2:cy,stroke:'var(--cream)','stroke-width':2.5,'stroke-linecap':'round'});
+ svgEl(s,'ellipse',{cx:cx-12,cy:cy-14,rx:12,ry:6,fill:'rgba(255,255,255,.10)',transform:`rotate(-28,${cx-12},${cy-14})`});
+ $('discsw').onclick=()=>setDisc((discI+1)%DISCSW_POS.length);})();
+function setDisc(i){discI=i;
+ discGrp.style.transform=`rotate(${DISCSW_POS[i][1]}deg)`;
+ discLbls.forEach((t,k)=>t.setAttribute('fill',k===i?'var(--gold-hi)':'var(--dim)'));
+ setRd('R28',DISCSW_POS[i][0]);}
+setDisc(1);
+
/* R25 fourteen-segment display: the starburst that spells */
const SEG14_WORDS=['ZOOM','ECHO','TAPE','MOOD','HALL','COMP'];
const SEG14_MAP={A:['a','b','c','e','f','g1','g2'],C:['a','d','e','f'],