in sim/visuals/ltc.ts [353:410]
private updatePin(pin: Pin, index: number) {
if (!pin) return;
let text = this.pinTexts[index];
let v = "";
if (pin.mode & PinFlags.Analog) {
v = Math.floor(100 - (pin.value || 0) / 255 * 100) + "%";
if (text) text.textContent = (pin.period ? "~" : "") + Math.floor((pin.value || 0) / 255 * 100) + "%";
const svgled = this.leds[index];
if (svgled) {
if (pin.value > 0) {
let pinVal = Math.floor(pin.value / 255 * 60) + 40;
svgled.style.stroke = `rgb(235,235,235)`;
svgled.style.strokeWidth = `${pinVal / 100 * 2}`;
svg.fill(svgled, `hsl(72, 100%, ${pinVal}%)`);
svg.filter(svgled, `url(#ledglow)`);
} else {
svg.filter(svgled, null);
svgled.style.fill = "#EEFF44";
svgled.style.strokeWidth = "0.2835173";
}
}
}
else if (pin.mode & PinFlags.Digital) {
v = pin.value > 0 ? "0%" : "100%";
if (text) text.textContent = pin.value > 0 ? "ON" : "OFF";
const svgled = this.leds[index];
if (svgled) {
if (pin.value > 0) {
svgled.style.stroke = `rgb(235,235,235)`;
svgled.style.strokeWidth = "1.5";
svg.fill(svgled, `rgb(255,255,255)`)
svg.filter(svgled, `url(#ledglow)`);
} else {
svg.filter(svgled, null);
svgled.style.fill = "#EEFF44";
svgled.style.strokeWidth = "0.2835173";
}
}
}
else if (pin.mode & PinFlags.Touch) {
v = pin.touched ? "0%" : "100%";
if (text) text.textContent = "";
} else {
v = "100%";
if (text) text.textContent = "";
}
if (v) svg.setGradientValue(this.pinGradients[index], v);
if (pin.mode !== PinFlags.Unused) {
accessibility.makeFocusable(this.pins[index]);
accessibility.setAria(this.pins[index], "slider", this.pins[index].firstChild.textContent);
this.pins[index].setAttribute("aria-valuemin", "0");
this.pins[index].setAttribute("aria-valuemax", pin.mode & PinFlags.Analog ? "100" : "1");
this.pins[index].setAttribute("aria-orientation", "vertical");
this.pins[index].setAttribute("aria-valuenow", text ? text.textContent : v);
accessibility.setLiveContent(text ? text.textContent : v);
}
}