/** * PowerElements.ts — Custom Web Components for power-supply parts. * * Includes: * wokwi-reg-7805 / -7812 / -7905 / -lm317 — linear voltage regulators * wokwi-battery-9v / -aa / -coin-cell — discrete battery cells * wokwi-signal-generator — benchtop AC / DC source * * Regulator pin layout (72 × 48 px): VIN(0, 24) GND(36, 48) VOUT(72, 24) * LM317: VIN(0, 24) ADJ(36, 48) VOUT(72, 24) * Battery (48 × 64 px): +(24, 0) −(24, 64) * SigGen (80 × 64 px): SIG(80, 32) GND(80, 48) */ const FILL = '#eaefea'; const STROKE = '#2a2a2a'; const LEAD = '#555555'; const LABEL = '#333333'; const RED = '#b03a2e'; const BLACK = '#1a1a1a'; const STYLE = ':host{display:inline-block;line-height:0}'; // ─── Linear regulator (TO-220 style) ────────────────────────────────────────── function regulatorSvg(label: string, middlePinLabel: string): string { return ` VIN VOUT ${middlePinLabel} ${label} `; } function makeRegulatorClass(label: string, middlePinName: 'GND' | 'ADJ') { return class extends HTMLElement { readonly pinInfo = [ { name: 'VIN', x: 0, y: 24, number: 1, signals: [] as string[] }, { name: middlePinName, x: 36, y: 56, number: 2, signals: [] as string[] }, { name: 'VOUT', x: 72, y: 24, number: 3, signals: [] as string[] }, ]; constructor() { super(); this.attachShadow({ mode: 'open' }).innerHTML = regulatorSvg(label, middlePinName); } }; } const Reg7805 = makeRegulatorClass('7805', 'GND'); const Reg7812 = makeRegulatorClass('7812', 'GND'); const Reg7905 = makeRegulatorClass('7905', 'GND'); const RegLM317 = makeRegulatorClass('LM317', 'ADJ'); // ─── Battery ────────────────────────────────────────────────────────────────── function batterySvg(label: string, color: string): string { return ` + − ${label} `; } function makeBatteryClass(label: string, color: string) { return class extends HTMLElement { readonly pinInfo = [ { name: '+', x: 24, y: 0, number: 1, signals: [] as string[] }, { name: '−', x: 24, y: 72, number: 2, signals: [] as string[] }, ]; constructor() { super(); this.attachShadow({ mode: 'open' }).innerHTML = batterySvg(label, color); } }; } const Battery9V = makeBatteryClass('9V', RED); const BatteryAA = makeBatteryClass('AA', '#336699'); const BatteryCoin = makeBatteryClass('3V', '#666'); // ─── Signal generator (benchtop instrument) ─────────────────────────────────── class SignalGeneratorElement extends HTMLElement { readonly pinInfo = [ { name: 'SIG', x: 80, y: 24, number: 1, signals: [] as string[] }, { name: 'GND', x: 80, y: 48, number: 2, signals: [] as string[] }, ]; constructor() { super(); this.attachShadow({ mode: 'open' }).innerHTML = ` SIG GND `; } } function def(tag: string, cls: CustomElementConstructor) { if (!customElements.get(tag)) customElements.define(tag, cls); } def('wokwi-reg-7805', Reg7805); def('wokwi-reg-7812', Reg7812); def('wokwi-reg-7905', Reg7905); def('wokwi-reg-lm317', RegLM317); def('wokwi-battery-9v', Battery9V); def('wokwi-battery-aa', BatteryAA); def('wokwi-battery-coin-cell', BatteryCoin); def('wokwi-signal-generator', SignalGeneratorElement); export {};