private updatePin()

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);
            }
        }