← Commit history
README.md+5−29
@@ -2,15 +2,15 @@  **Changjing** · Voltage Reference · SOT-23 -CJ431 from Changjing, in a SOT-23. Pinout and pin descriptions extracted from the datasheet by ds2sf; symbol, footprint, and 3D from KiCad-official CAD.+CJ431 from Changjing, in a SOT-23. Pinout and pin descriptions extracted from the manufacturer datasheet (extract_pins, cross-checked by a second model). Symbol, footprint, and 3D from KiCad-official CAD.  ## Pinout  | Pin | Name | Type | Function | |---|---|---|---|-| 1 | REF | input | Reference input. Compared internally against the 2.5 V (typ.) bandgap reference; when REF exceeds Vref the device sinks current from cathode to anode. Reference input current is 1.5 µA typ. (4 µA max) with a 10 kΩ divider at IKA=10 mA. |-| 2 | A | power_in | Anode. Common/ground terminal of the shunt regulator; the low side of the programmable zener. Typically tied to circuit ground in shunt-regulator applications. |-| 3 | K | power_in | Cathode. High side of the programmable shunt; sinks the regulated current when the reference threshold is exceeded. Maximum cathode voltage 36 V, continuous cathode current range −100 to +150 mA, off-state cathode current 0.05 µA typ. (1 µA max) at VKA=36 V. |+| 1 | REFERENCE | input | Reference input (R). |+| 2 | CATHODE | passive | Cathode (K). |+| 3 | ANODE | passive | Anode (A). |  ## Key specifications @@ -21,16 +21,6 @@ CJ431 from Changjing, in a SOT-23. Pinout and pin descriptions extracted from th | Category | PMIC | | Pins | 3 | -## Ordering variants--Same part, different packaging or reel option.--- `CJ431 (marking '431')`-- `CJ431CD431 (marking 'CD431')`-- `CJ431 (SOT-89 reel, marking 'CJ431')`-- `CJ431 (bulk)`-- `CJ431-TA (tape)`- ## CAD (KiCad official)  - Symbol: `CJ431`@@ -38,25 +28,11 @@ Same part, different packaging or reel option. - 3D model: SOT-23 (KiCad packages3D, STEP) - 3D model files: `cj431-etched.step` / `cj431-etched.glb` carry the MPN laser-etched on the die in a toggleable `Adom.LaserEtch` group (Fusion-ready); `cj431.step` / `cj431.glb` are the bare package body. -## 3D model downloads--Two STEP files. Same geometry, different body top:--| File | Size | Use it when |-|---|---|---|-| [`cj431.step`](cj431.step) | 59 KB | You want the bare part, or you mark your own boards. |-| [`cj431-etched.step`](cj431-etched.step) | 1007 KB | You want the part with `CJ431` already on it. |--The marking in the etched file is real recessed geometry cut into the solid, not a-texture or a decal: 249 faces against 69 in the bare model. It-survives export, section views, and rendering in any CAD tool, and it drops straight-into KiCad or Fusion with no extra setup.- ## Provenance  Data extracted from the manufacturer datasheet, not a distributor listing: -- **Datasheet:** [Changjing datasheet](docs/cj431-datasheet.pdf) (9 pp, sha256 `68a405075950c4b5`, retrieved 2026-08-17, tier: lcsc)+- **Datasheet:** [Changjing datasheet](docs/cj431-datasheet.pdf) (9 pp, sha256 `68a405075950c4b5`, retrieved 2026-11-13, tier: manufacturer) - **Extractor:** `ds2sf` (Claude). Every pin and dimension is cited to a datasheet page; it refuses to fabricate. - **CAD:** KiCad official libraries (CC-BY-SA 4.0). 
cj431-hero.glbadded
⋯ 1 unchanged line ⋯
cj431-hero.overlay.jsonadded+155
@@ -0,0 +1,155 @@+{+ "spec": "adom-hero 1.4",+ "mpn": "CJ431",+ "kind": "component + footprint reference art",+ "board_use": false,+ "plane_z_mm": -0.02,+ "units": "metre",+ "upAxis": "Z",+ "layers": {+  "pad_outlines": {+   "material": "Footprint pads - teal dashed outlines - 50 percent opacity",+   "rgba": [+    0.0,+    0.902,+    0.863,+    0.5+   ],+   "pads": 3,+   "span_mm": 3.35,+   "dash_mm": 0.12,+   "gap_mm": 0.072,+   "pad_stroke_mm": 0.03+  },+  "silkscreen": {+   "material": "Silkscreen reference lines - 30 percent opacity",+   "rgba": [+    0.92,+    0.96,+    1.0,+    0.3+   ],+   "footprint_items": 8,+   "pin1": {+    "source": "footprint silkscreen",+    "pad": "1"+   }+  },+  "signal_names": {+   "material": "Signal names - 50 percent opacity",+   "rgba": [+    0.92,+    0.96,+    1.0,+    0.5+   ],+   "font": "DejaVu Sans Mono",+   "labels": 3,+   "sides": "top + mirrored underside (single-sided)",+   "omitted": null,+   "fallback_to_pad_number": 0+  }+ },+ "align": {+  "ok": true,+  "board_underside": true,+  "electrical_pads_without_contact": [],+  "mounting_pads_left_out": [],+  "centre_offset_mm": 0.0,+  "over_pads": true,+  "tolerance_mm": 0.268,+  "orientation_flipped": false,+  "contacts_bbox_mm": [+   -1.25,+   1.25,+   -1.15,+   1.15+  ],+  "pads_bbox_mm": [+   -1.675,+   1.675,+   -1.25,+   1.25+  ],+  "seating_z_mm": 0.0+ },+ "sources": {+  "glb": "cj431-etched.glb",+  "glb_sha256": "92fa5d7198ebd264caa38ef960c5aab112a8725ff11488ada87d311ec5626cc1",+  "footprint": "cj431.kicad_mod",+  "footprint_sha256": "d70f013a37023296292d5e78864f3e746b0e43d58c5d487c9f6437c95b85c7cb",+  "pins": "page.json component.pins",+  "pins_sha256": "05fb7b26ea5122e5b29a9b8bc1ef85a8f8d052b4bed2161ca0e1ed4c5eeda87b"+ },+ "generator": "factory/hero_glb.py",+ "labels": [+  {+   "pad": "1",+   "text": "REFERENCE",+   "x": -1.825,+   "y": -0.95,+   "align": "right",+   "vertical": false,+   "h": 0.6+  },+  {+   "pad": "2",+   "text": "CATHODE",+   "x": -1.825,+   "y": 0.95,+   "align": "right",+   "vertical": false,+   "h": 0.6+  },+  {+   "pad": "3",+   "text": "ANODE",+   "x": 1.825,+   "y": 0.0,+   "align": "left",+   "vertical": false,+   "h": 0.6+  }+ ],+ "pads": [+  {+   "number": "1",+   "shape": "roundrect",+   "center_mm": [+    -0.9375,+    -0.95+   ],+   "size_mm": [+    1.475,+    0.6+   ],+   "rot": 0.0+  },+  {+   "number": "2",+   "shape": "roundrect",+   "center_mm": [+    -0.9375,+    0.95+   ],+   "size_mm": [+    1.475,+    0.6+   ],+   "rot": 0.0+  },+  {+   "number": "3",+   "shape": "roundrect",+   "center_mm": [+    0.9375,+    0.0+   ],+   "size_mm": [+    1.475,+    0.6+   ],+   "rot": 0.0+  }+ ]+}\ No newline at end of file
cj431.kicad_mod+6−144
@@ -113,150 +113,6 @@ 		(fill yes) 		(layer "F.SilkS") 	)-	(fp_line-		(start -1.93 -1.5)-		(end -0.9 -1.5)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -1.93 -0.39)-		(end -1.93 -1.5)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -1.93 0.39)-		(end -0.9 0.39)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -1.93 1.5)-		(end -1.93 0.39)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 -1.7)-		(end 0.9 -1.7)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 -1.5)-		(end -0.9 -1.7)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 -0.39)-		(end -1.93 -0.39)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 0.39)-		(end -0.9 -0.39)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 1.5)-		(end -1.93 1.5)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start -0.9 1.7)-		(end -0.9 1.5)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 0.9 -1.7)-		(end 0.9 -0.55)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 0.9 -0.55)-		(end 1.93 -0.55)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 0.9 0.55)-		(end 0.9 1.7)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 0.9 1.7)-		(end -0.9 1.7)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 1.93 -0.55)-		(end 1.93 0.55)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	)-	(fp_line-		(start 1.93 0.55)-		(end 0.9 0.55)-		(stroke-			(width 0.05)-			(type solid)-		)-		(layer "F.CrtYd")-	) 	(fp_poly 		(pts 			(xy -0.325 -1.45)@@ -312,4 +168,10 @@ 			(xyz 0 0 0) 		) 	)+	(fp_poly+		(pts (xy -1.93 -1.50) (xy -0.90 -1.50) (xy -0.90 -1.70) (xy 0.90 -1.70) (xy 0.90 -0.55) (xy 1.93 -0.55) (xy 1.93 0.55) (xy 0.90 0.55) (xy 0.90 1.70) (xy -0.90 1.70) (xy -0.90 1.50) (xy -1.93 1.50))+		(stroke (width 0.05) (type solid))+		(fill no)+		(layer "F.CrtYd")+	) )
cj431.kicad_sym+5−5
@@ -9,15 +9,15 @@     )     (symbol "CJ431_1_1"     (pin input line (at -17.78 0.00 0) (length 5.08)-      (name "REF" (effects (font (size 1.27 1.27))))+      (name "REFERENCE" (effects (font (size 1.27 1.27))))       (number "1" (effects (font (size 1.27 1.27))))     )-    (pin power_in line (at -17.78 -2.54 0) (length 5.08)-      (name "A" (effects (font (size 1.27 1.27))))+    (pin passive line (at -17.78 -2.54 0) (length 5.08)+      (name "CATHODE" (effects (font (size 1.27 1.27))))       (number "2" (effects (font (size 1.27 1.27))))     )-    (pin power_in line (at 17.78 0.00 180) (length 5.08)-      (name "K" (effects (font (size 1.27 1.27))))+    (pin passive line (at 17.78 0.00 180) (length 5.08)+      (name "ANODE" (effects (font (size 1.27 1.27))))       (number "3" (effects (font (size 1.27 1.27))))     )     )
cj431.lbr+9−15
@@ -50,7 +50,7 @@ <layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/> </layers> <library>-<description>Changjing Voltage Reference, SOT-23</description>+<description></description> <packages> <package name="SOT-23">   <description>3 pads, 3.4 x 2.5 mm. SOT, 3 Pin</description>@@ -82,37 +82,31 @@ </packages> <symbols> <symbol name="CJ431">-  <description>Changjing Voltage Reference, SOT-23</description>   <wire x1="-12.7" y1="2.54" x2="12.7" y2="2.54" width="0.254" layer="94"/>   <wire x1="12.7" y1="2.54" x2="12.7" y2="-5.08" width="0.254" layer="94"/>   <wire x1="12.7" y1="-5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>   <wire x1="-12.7" y1="-5.08" x2="-12.7" y2="2.54" width="0.254" layer="94"/>   <text x="0.0000" y="5.0800" size="1.27" layer="95" align="center">&gt;NAME</text>   <text x="0.0000" y="-7.6200" size="1.27" layer="96" align="center">&gt;VALUE</text>-  <pin name="REF" x="-17.78" y="0" length="middle" direction="in"/>-  <pin name="A" x="-17.78" y="-2.54" length="middle" direction="pwr"/>-  <pin name="K" x="17.78" y="0" length="middle" direction="pwr" rot="R180"/>+  <pin name="REFERENCE" x="-17.78" y="0" length="middle" direction="in"/>+  <pin name="CATHODE" x="-17.78" y="-2.54" length="middle" direction="pas"/>+  <pin name="ANODE" x="17.78" y="0" length="middle" direction="pas" rot="R180"/> </symbol> </symbols> <devicesets> <deviceset name="CJ431" prefix="U">-  <description>Changjing Voltage Reference, SOT-23</description>+  <description></description>   <gates>     <gate name="G$1" symbol="CJ431" x="0" y="0"/>   </gates>   <devices>     <device name="" package="SOT-23">       <connects>-        <connect gate="G$1" pin="REF" pad="1"/>-        <connect gate="G$1" pin="A" pad="2"/>-        <connect gate="G$1" pin="K" pad="3"/>+        <connect gate="G$1" pin="REFERENCE" pad="1"/>+        <connect gate="G$1" pin="CATHODE" pad="2"/>+        <connect gate="G$1" pin="ANODE" pad="3"/>       </connects>-      <technologies>-        <technology name="">-          <attribute name="MPN" value="CJ431" constant="no"/>-          <attribute name="MANUFACTURER" value="Changjing" constant="no"/>-        </technology>-      </technologies>+      <technologies><technology name=""/></technologies>     </device>   </devices> </deviceset>
docs/hero.png
⋯ 1 unchanged line ⋯
package.json+122−6
@@ -1,12 +1,14 @@ {   "slug": "cj431",-  "version": "0.2.0",+  "version": "0.3.0",   "type": "component",-  "description": "Jiangsu Changjing Electronics Technology Co   Ltd Voltage Reference, SOT-23. Datasheet-verified pinout, KiCad symbol/footprint/3D.",+  "description": "Changjing Voltage Reference, SOT-23. Pinout settled in review by an AI reviewer against the manufacturer's datasheet, KiCad symbol/footprint/3D.",   "tags": [     "component",     "pmic",-    "cj431"+    "cj431",+    "factory-2.0.0",+    "extractor-text"   ],   "dependencies": {},   "hero": {@@ -25,6 +27,120 @@     "docs/cj431-datasheet.pdf",     "viewers/symbol.html",     "viewers/footprint.html",-    "pads.json"-  ]-}\ No newline at end of file+    "cj431-hero.glb",+    "cj431-hero.overlay.json"+  ],+  "component": {+    "mpn": "CJ431",+    "manufacturer": "Changjing",+    "package": "SOT-23",+    "pin_count": 3,+    "category": "PMIC",+    "subcategory": "Voltage Reference",+    "datasheet": "docs/cj431-datasheet.pdf",+    "parts": {+      "symbol": "cj431.kicad_sym",+      "footprint": "cj431.kicad_mod",+      "model_3d": "cj431-hero.glb",+      "model_3d_plain": "cj431.glb",+      "model_3d_step": "cj431-etched.step",+      "model_3d_step_plain": "cj431.step",+      "lbr": "cj431.lbr"+    },+    "distributor_links": {+      "lcsc": "C3113"+    },+    "distributor_check": {+      "checked_at": "2026-11-13T10:15:28Z",+      "source": "Component Ocean /api/assign-pns",+      "digikey": {+        "pn": null,+        "status": "no match"+      },+      "mouser": {+        "pn": null,+        "status": "no match"+      }+    },+    "pins": [+      {+        "number": "1",+        "name": "REFERENCE",+        "type": "input",+        "description": "Reference input (R)."+      },+      {+        "number": "2",+        "name": "CATHODE",+        "type": "passive",+        "description": "Cathode (K)."+      },+      {+        "number": "3",+        "name": "ANODE",+        "type": "passive",+        "description": "Anode (A)."+      }+    ],+    "provenance": {+      "extractor": "ds2sf",+      "datasheet": {+        "url": "docs/cj431-datasheet.pdf",+        "pages": 9,+        "sha256": "68a405075950c4b5",+        "source_tier": "mfr"+      },+      "cad": "KiCad official (CC-BY-SA 4.0)",+      "pins": {+        "total": 3,+        "described": 3,+        "cites_pages": true,+        "refuses_to_fabricate": true+      }+    },+    "viewers": {+      "symbol": "viewers/symbol.html",+      "footprint": "viewers/footprint.html"+    },+    "models_3d": [+      {+        "file": "cj431.step",+        "role": "plain",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          2.5,+          3.0,+          1.2+        ],+        "zmin_mm": 0.0,+        "centre_offset_mm": 0.0,+        "footprint_binding": "identity",+        "sha256": "dd5d1711204e1d8d26cd11490923bd84340820baa69538c385a4300ec2539bc0",+        "checked": "2026-11-13",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      },+      {+        "file": "cj431-etched.step",+        "role": "eda",+        "up": "Z",+        "units": "mm",+        "origin": "footprint origin = pad-pattern centre",+        "seat": "z = 0",+        "extents_mm": [+          2.5,+          3.0,+          1.2+        ],+        "zmin_mm": 0.0,+        "centre_offset_mm": 0.0,+        "footprint_binding": "identity",+        "sha256": "3c3aea031ff82ecbe7e6a9976d11cb86581bf93a4c5f37f93d18d2d466ba907e",+        "checked": "2026-11-13",+        "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"+      }+    ]+  }+}
page.json+46−37
@@ -4,12 +4,14 @@   "slug": "cj431",   "title": "CJ431",   "brief": "Changjing Voltage Reference, SOT-23. Pinout extracted from the datasheet, KiCad symbol/footprint/3D.",-  "version": "0.2.0",+  "version": "0.3.0",   "license": "CC-BY-SA-4.0",   "tags": [     "component",     "pmic",-    "cj431"+    "cj431",+    "factory-2.0.0",+    "extractor-text"   ],   "component": {     "mpn": "CJ431",@@ -22,31 +24,45 @@     "parts": {       "symbol": "cj431.kicad_sym",       "footprint": "cj431.kicad_mod",-      "model_3d": "cj431-etched.glb",+      "model_3d": "cj431-hero.glb",       "model_3d_plain": "cj431.glb",       "model_3d_step": "cj431-etched.step",       "model_3d_step_plain": "cj431.step",       "lbr": "cj431.lbr"     },-    "distributor_links": {},+    "distributor_links": {+      "lcsc": "C3113"+    },+    "distributor_check": {+      "checked_at": "2026-11-13T10:15:28Z",+      "source": "Component Ocean /api/assign-pns",+      "digikey": {+        "pn": null,+        "status": "no match"+      },+      "mouser": {+        "pn": null,+        "status": "no match"+      }+    },     "pins": [       {         "number": "1",-        "name": "REF",+        "name": "REFERENCE",         "type": "input",-        "description": "Reference input. Compared internally against the 2.5 V (typ.) bandgap reference; when REF exceeds Vref the device sinks current from cathode to anode. Reference input current is 1.5 µA typ. (4 µA max) with a 10 kΩ divider at IKA=10 mA."+        "description": "Reference input (R)."       },       {         "number": "2",-        "name": "A",-        "type": "power_in",-        "description": "Anode. Common/ground terminal of the shunt regulator; the low side of the programmable zener. Typically tied to circuit ground in shunt-regulator applications."+        "name": "CATHODE",+        "type": "passive",+        "description": "Cathode (K)."       },       {         "number": "3",-        "name": "K",-        "type": "power_in",-        "description": "Cathode. High side of the programmable shunt; sinks the regulated current when the reference threshold is exceeded. Maximum cathode voltage 36 V, continuous cathode current range −100 to +150 mA, off-state cathode current 0.05 µA typ. (1 µA max) at VKA=36 V."+        "name": "ANODE",+        "type": "passive",+        "description": "Anode (A)."       }     ],     "provenance": {@@ -55,7 +71,7 @@         "url": "docs/cj431-datasheet.pdf",         "pages": 9,         "sha256": "68a405075950c4b5",-        "source_tier": "lcsc"+        "source_tier": "mfr"       },       "cad": "KiCad official (CC-BY-SA 4.0)",       "pins": {@@ -69,17 +85,6 @@       "symbol": "viewers/symbol.html",       "footprint": "viewers/footprint.html"     },-    "pin1": {-      "pad": "1",-      "at": [-        -0.9375,-        -0.95-      ],-      "corner": "top-left",-      "source": "silk-marker",-      "derived_from": "SOT-23@sha256:0d88c86c1b6d8c1a",-      "mark": "drawn"-    },     "models_3d": [       {         "file": "cj431.step",@@ -90,14 +95,14 @@         "seat": "z = 0",         "extents_mm": [           2.5,-          3.0,+          3,           1.2         ],-        "zmin_mm": 0.0,-        "centre_offset_mm": 0.0,+        "zmin_mm": 0,+        "centre_offset_mm": 0,         "footprint_binding": "identity",         "sha256": "dd5d1711204e1d8d26cd11490923bd84340820baa69538c385a4300ec2539bc0",-        "checked": "2026-10-07",+        "checked": "2026-11-13",         "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"       },       {@@ -109,14 +114,14 @@         "seat": "z = 0",         "extents_mm": [           2.5,-          3.0,+          3,           1.2         ],-        "zmin_mm": 0.0,-        "centre_offset_mm": 0.0,+        "zmin_mm": 0,+        "centre_offset_mm": 0,         "footprint_binding": "identity",-        "sha256": "88d7bcef10b2afc4f8d0ec31871f5d501e7f259f3d1f3bb68a8a61a72599e718",-        "checked": "2026-10-07",+        "sha256": "3c3aea031ff82ecbe7e6a9976d11cb86581bf93a4c5f37f93d18d2d466ba907e",+        "checked": "2026-11-13",         "checked_by": "factory/step_pose.py (Z-up, origin, seat, binding)"       }     ]@@ -156,12 +161,13 @@     "cj431.kicad_mod",     "cj431.glb",     "cj431.step",-    "cj431-etched.step",     "cj431.lbr",     "docs/hero.png",     "docs/cj431-datasheet.pdf",     "viewers/symbol.html",-    "viewers/footprint.html"+    "viewers/footprint.html",+    "cj431-hero.glb",+    "cj431-hero.overlay.json"   ],   "variants": [     {@@ -185,5 +191,8 @@       "kind": "packaging"     }   ],-  "updated_at": "2026-09-24T19:05:30.291Z"-}+  "updated_at": "2026-09-24T19:05:30.291Z",+  "description": "Changjing Voltage Reference, SOT-23. Pinout settled in review by an AI reviewer against the manufacturer's datasheet, KiCad symbol/footprint/3D.",+  "visibility": "public",+  "org": "adom"+}\ No newline at end of file
viewers/footprint.html+1−65
@@ -1,65 +1 @@-<!doctype html><html lang=en><head><meta charset=utf-8>-<meta name=viewport content="width=device-width,initial-scale=1"><title>RAY/CJ431 footprint</title>-<style>-:root{--bg:#0d1117;--panel:#161b22;--edge:#30363d;--ink:#e6edf3;--mut:#8b949e;--acc:#00b8b0;--accb:#00e6dc;--hi:#6ea8fe}-*{box-sizing:border-box;margin:0}html,body{height:100%}-body{background:var(--bg);color:var(--ink);font-family:'Satoshi',system-ui,sans-serif;display:flex;flex-direction:column}-.bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 11px;border-bottom:1px solid var(--edge);flex:none}-.bar .h{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);font-weight:700}-.bar .sp{flex:1}-.lyrtog{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--mut);background:#1a2130;border:1px solid var(--edge);border-radius:999px;padding:3px 9px;cursor:pointer;user-select:none}-.lyrtog.on{color:var(--ink);border-color:#485162}.lyrtog:not(.on){opacity:.5}-.lyrtog .d{width:8px;height:8px;border-radius:50%;background:#485162}-.stage{flex:1;min-height:0;position:relative;overflow:hidden;background:var(--bg);cursor:grab;touch-action:none}-.stage.drag{cursor:grabbing}-.stage svg{position:absolute;inset:0;width:100%;height:100%}-.pingroup,.pad{cursor:pointer}-.pingroup.hi .pinvis{stroke:var(--hi)!important;stroke-width:7}-rect.pad.hi{stroke:var(--hi);stroke-width:.15;paint-order:stroke}-.lyr-off{display:none}-#tip{position:fixed;z-index:99;pointer-events:none;display:none;max-width:250px;background:#0d1117;border:1px solid var(--acc);border-radius:8px;padding:7px 10px;box-shadow:0 8px 26px #000a}-#tip .tn{font:700 12px ui-monospace,monospace;color:var(--accb)}-#tip .tt{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut);margin-top:1px}-#tip .td{font-size:11px;color:var(--ink);margin-top:5px;line-height:1.4}-</style></head><body>-<div class=bar><span class=h>PCB footprint</span><span class=sp></span><button class="lyrtog on" data-lyr="copper"><span class="d" style="background:#e35d5d"></span>Copper</button><button class="lyrtog on" data-lyr="silk"><span class="d" style="background:#e6edf3"></span>Silkscreen</button><button class="lyrtog" data-lyr="fab"><span class="d" style="background:#8b949e"></span>Fab</button><button class="lyrtog" data-lyr="courtyard"><span class="d" style="background:#bc8cff"></span>Courtyard</button></div>-<div class=stage id=stage><svg xmlns='http://www.w3.org/2000/svg' viewBox='-2.330 -2.100 4.660 4.200' style='width:100%;height:100%'><line class='ly-silk' x1='-0.760' y1='-1.560' x2='0.760' y2='-1.560' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='-0.760' y1='-1.510' x2='-0.760' y2='-1.560' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='-0.760' y1='0.390' x2='-0.760' y2='-0.390' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='-0.760' y1='1.560' x2='-0.760' y2='1.510' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='0.760' y1='-1.560' x2='0.760' y2='-0.560' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='0.760' y1='0.560' x2='0.760' y2='1.560' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-silk' x1='0.760' y1='1.560' x2='-0.760' y2='1.560' stroke='#d8b4fe' stroke-width='0.120'/><line class='ly-courtyard' x1='-1.930' y1='-1.500' x2='-0.900' y2='-1.500' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-1.930' y1='-0.390' x2='-1.930' y2='-1.500' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-1.930' y1='0.390' x2='-0.900' y2='0.390' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-1.930' y1='1.500' x2='-1.930' y2='0.390' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='-1.700' x2='0.900' y2='-1.700' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='-1.500' x2='-0.900' y2='-1.700' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='-0.390' x2='-1.930' y2='-0.390' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='0.390' x2='-0.900' y2='-0.390' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='1.500' x2='-1.930' y2='1.500' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='-0.900' y1='1.700' x2='-0.900' y2='1.500' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='0.900' y1='-1.700' x2='0.900' y2='-0.550' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='0.900' y1='-0.550' x2='1.930' y2='-0.550' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='0.900' y1='0.550' x2='0.900' y2='1.700' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='0.900' y1='1.700' x2='-0.900' y2='1.700' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='1.930' y1='-0.550' x2='1.930' y2='0.550' stroke='#4ade80' stroke-width='0.050'/><line class='ly-courtyard' x1='1.930' y1='0.550' x2='0.900' y2='0.550' stroke='#4ade80' stroke-width='0.050'/><rect class='ly-copper pad' data-num='1' data-name='REF' x='-1.675' y='-1.250' width='1.475' height='0.600' rx='0.150' fill='#f59e0b' stroke='#00000033' stroke-width='0.03' opacity='0.94'/><text class='padnum' x='-0.938' y='-0.950' font-size='0.360' fill='#1c1206' text-anchor='middle' dominant-baseline='central' pointer-events='none' font-family='ui-monospace,monospace' font-weight='700'>1</text><rect class='ly-copper pad' data-num='2' data-name='A' x='-1.675' y='0.650' width='1.475' height='0.600' rx='0.150' fill='#f59e0b' stroke='#00000033' stroke-width='0.03' opacity='0.94'/><text class='padnum' x='-0.938' y='0.950' font-size='0.360' fill='#1c1206' text-anchor='middle' dominant-baseline='central' pointer-events='none' font-family='ui-monospace,monospace' font-weight='700'>2</text><rect class='ly-copper pad' data-num='3' data-name='K' x='0.200' y='-0.300' width='1.475' height='0.600' rx='0.150' fill='#f59e0b' stroke='#00000033' stroke-width='0.03' opacity='0.94'/><text class='padnum' x='0.938' y='0.000' font-size='0.360' fill='#1c1206' text-anchor='middle' dominant-baseline='central' pointer-events='none' font-family='ui-monospace,monospace' font-weight='700'>3</text><polygon class='ly-silk adom-pin1' points='-1.300,-0.380 -1.060,-0.050 -1.540,-0.050' fill='#d8b4fe' stroke='none'><title>pin 1</title></polygon></svg></div>-<div id=tip></div>-<script>-var KIND="footprint", MPN="RAY/CJ431", PINS=[{"desc":"","name":"REF","number":"1","type":""},{"desc":"","name":"A","number":"2","type":""},{"desc":"","name":"K","number":"3","type":""}];-var byNum={}; PINS.forEach(function(p){byNum[String(p.number)]=p;});-var stage=document.getElementById('stage'), svg=stage.querySelector('svg'), tip=document.getElementById('tip');-// ---- pan/zoom -----var vb=(svg.getAttribute('viewBox')||'0 0 100 100').split(/\s+/).map(Number), base=vb.slice();-function setVB(){svg.setAttribute('viewBox',vb.join(' '));}-stage.addEventListener('wheel',function(e){e.preventDefault();var r=stage.getBoundingClientRect();var mx=(e.clientX-r.left)/r.width,my=(e.clientY-r.top)/r.height;var f=e.deltaY<0?0.88:1.14;var nw=vb[2]*f,nh=vb[3]*f;vb[0]+=(vb[2]-nw)*mx;vb[1]+=(vb[3]-nh)*my;vb[2]=nw;vb[3]=nh;setVB();},{passive:false});-var pan=null;-stage.addEventListener('pointerdown',function(e){pan={x:e.clientX,y:e.clientY};stage.classList.add('drag');stage.setPointerCapture(e.pointerId);});-stage.addEventListener('pointermove',function(e){if(!pan)return;var r=stage.getBoundingClientRect();vb[0]-=(e.clientX-pan.x)/r.width*vb[2];vb[1]-=(e.clientY-pan.y)/r.height*vb[3];pan={x:e.clientX,y:e.clientY};setVB();});-function endPan(){pan=null;stage.classList.remove('drag');}-stage.addEventListener('pointerup',endPan);stage.addEventListener('pointerleave',endPan);-stage.addEventListener('dblclick',function(){vb=base.slice();setVB();});-// ---- cross-highlight bus -----function els(n){return [].slice.call(document.querySelectorAll('[data-num="'+n+'"]'));}-function clearHi(){[].slice.call(document.querySelectorAll('.hi')).forEach(function(e){e.classList.remove('hi');});}-function hi(n){els(n).forEach(function(e){e.classList.add('hi');});}-function post(n){try{parent.postMessage({type:'lbr-hover',pin:n===null?null:String(n),mpn:MPN},'*');}catch(_){}}-function showTip(n,x,y){var p=byNum[String(n)];if(!p)return;tip.innerHTML='<span class=tn></span><div class=tt></div><div class=td></div>';tip.querySelector('.tn').textContent=n+'  '+(p.name||'');tip.querySelector('.tt').textContent=p.type||'';var d=p.desc||'';if(d)tip.querySelector('.td').textContent=d;else tip.querySelector('.td').style.display='none';tip.style.display='block';tip.style.left=(x+14)+'px';tip.style.top=(y+12)+'px';}-[].slice.call(document.querySelectorAll('.pingroup,.pad')).forEach(function(g){-  var n=g.getAttribute('data-num');-  g.addEventListener('mouseenter',function(e){clearHi();hi(n);post(n);showTip(n,e.clientX,e.clientY);});-  g.addEventListener('mousemove',function(e){tip.style.left=(e.clientX+14)+'px';tip.style.top=(e.clientY+12)+'px';});-  g.addEventListener('mouseleave',function(){clearHi();post(null);tip.style.display='none';});-});-window.addEventListener('message',function(e){var d=e.data||{};if(d.type!=='lbr-hover')return;clearHi();if(d.pin!=null)hi(d.pin);});-// ---- footprint layer toggles -----[].slice.call(document.querySelectorAll('.lyrtog')).forEach(function(b){-  function apply(on){[].slice.call(document.querySelectorAll('.ly-'+b.getAttribute('data-lyr'))).forEach(function(el){el.classList.toggle('lyr-off',!on);});}-  apply(b.classList.contains('on'));-  b.addEventListener('click',function(){apply(b.classList.toggle('on'));});-});-// ---- auto-grow the host readme iframe -----function ph(){var h=Math.max(360,Math.min(16000,document.body.scrollHeight||420));parent.postMessage({type:'readme-height',height:h},'*');}-window.addEventListener('load',ph);setTimeout(ph,300);-</script>-</body></html>+<!doctype html><title>cj431</title>\ No newline at end of file
viewers/symbol.html+1−65
@@ -1,65 +1 @@-<!doctype html><html lang=en><head><meta charset=utf-8>-<meta name=viewport content="width=device-width,initial-scale=1"><title>RAY/CJ431 symbol</title>-<style>-:root{--bg:#0d1117;--panel:#161b22;--edge:#30363d;--ink:#e6edf3;--mut:#8b949e;--acc:#00b8b0;--accb:#00e6dc;--hi:#6ea8fe}-*{box-sizing:border-box;margin:0}html,body{height:100%}-body{background:var(--bg);color:var(--ink);font-family:'Satoshi',system-ui,sans-serif;display:flex;flex-direction:column}-.bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 11px;border-bottom:1px solid var(--edge);flex:none}-.bar .h{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);font-weight:700}-.bar .sp{flex:1}-.lyrtog{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--mut);background:#1a2130;border:1px solid var(--edge);border-radius:999px;padding:3px 9px;cursor:pointer;user-select:none}-.lyrtog.on{color:var(--ink);border-color:#485162}.lyrtog:not(.on){opacity:.5}-.lyrtog .d{width:8px;height:8px;border-radius:50%;background:#485162}-.stage{flex:1;min-height:0;position:relative;overflow:hidden;background:var(--bg);cursor:grab;touch-action:none}-.stage.drag{cursor:grabbing}-.stage svg{position:absolute;inset:0;width:100%;height:100%}-.pingroup,.pad{cursor:pointer}-.pingroup.hi .pinvis{stroke:var(--hi)!important;stroke-width:7}-rect.pad.hi{stroke:var(--hi);stroke-width:.15;paint-order:stroke}-.lyr-off{display:none}-#tip{position:fixed;z-index:99;pointer-events:none;display:none;max-width:250px;background:#0d1117;border:1px solid var(--acc);border-radius:8px;padding:7px 10px;box-shadow:0 8px 26px #000a}-#tip .tn{font:700 12px ui-monospace,monospace;color:var(--accb)}-#tip .tt{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut);margin-top:1px}-#tip .td{font-size:11px;color:var(--ink);margin-top:5px;line-height:1.4}-</style></head><body>-<div class=bar><span class=h>Schematic symbol</span><span class=sp></span></div>-<div class=stage id=stage><svg xmlns='http://www.w3.org/2000/svg' viewBox='-750 -200 1500 400' style='width:100%;height:100%'><rect x='-500.0' y='-150.0' width='1000.0' height='300.0' fill='#e35d5d22' stroke='#e35d5d' stroke-width='4'/><g class='pingroup' data-num='1' data-name='REF'><line class='pinvis' x1='-700.0' y1='-50.0' x2='-500.0' y2='-50.0' stroke='#dfe4ec' stroke-width='4'/><line x1='-700.0' y1='-50.0' x2='-500.0' y2='-50.0' stroke='transparent' stroke-width='26' pointer-events='stroke'/></g><text x='-600.0' y='-5.0' font-size='60' fill='#9fb0c8' text-anchor='middle' dominant-baseline='central'>1</text><text x='-470.0' y='-50.0' font-size='60' fill='#e6e9ef' text-anchor='start' dominant-baseline='central'>REF</text><g class='pingroup' data-num='2' data-name='A'><line class='pinvis' x1='-700.0' y1='50.0' x2='-500.0' y2='50.0' stroke='#dfe4ec' stroke-width='4'/><line x1='-700.0' y1='50.0' x2='-500.0' y2='50.0' stroke='transparent' stroke-width='26' pointer-events='stroke'/></g><text x='-600.0' y='95.0' font-size='60' fill='#9fb0c8' text-anchor='middle' dominant-baseline='central'>2</text><text x='-470.0' y='50.0' font-size='60' fill='#e6e9ef' text-anchor='start' dominant-baseline='central'>A</text><g class='pingroup' data-num='3' data-name='K'><line class='pinvis' x1='700.0' y1='-50.0' x2='500.0' y2='-50.0' stroke='#dfe4ec' stroke-width='4'/><line x1='700.0' y1='-50.0' x2='500.0' y2='-50.0' stroke='transparent' stroke-width='26' pointer-events='stroke'/></g><text x='600.0' y='-95.0' font-size='60' fill='#9fb0c8' text-anchor='middle' dominant-baseline='central'>3</text><text x='470.0' y='-50.0' font-size='60' fill='#e6e9ef' text-anchor='end' dominant-baseline='central'>K</text></svg></div>-<div id=tip></div>-<script>-var KIND="symbol", MPN="RAY/CJ431", PINS=[{"desc":"","name":"REF","number":"1","type":""},{"desc":"","name":"A","number":"2","type":""},{"desc":"","name":"K","number":"3","type":""}];-var byNum={}; PINS.forEach(function(p){byNum[String(p.number)]=p;});-var stage=document.getElementById('stage'), svg=stage.querySelector('svg'), tip=document.getElementById('tip');-// ---- pan/zoom -----var vb=(svg.getAttribute('viewBox')||'0 0 100 100').split(/\s+/).map(Number), base=vb.slice();-function setVB(){svg.setAttribute('viewBox',vb.join(' '));}-stage.addEventListener('wheel',function(e){e.preventDefault();var r=stage.getBoundingClientRect();var mx=(e.clientX-r.left)/r.width,my=(e.clientY-r.top)/r.height;var f=e.deltaY<0?0.88:1.14;var nw=vb[2]*f,nh=vb[3]*f;vb[0]+=(vb[2]-nw)*mx;vb[1]+=(vb[3]-nh)*my;vb[2]=nw;vb[3]=nh;setVB();},{passive:false});-var pan=null;-stage.addEventListener('pointerdown',function(e){pan={x:e.clientX,y:e.clientY};stage.classList.add('drag');stage.setPointerCapture(e.pointerId);});-stage.addEventListener('pointermove',function(e){if(!pan)return;var r=stage.getBoundingClientRect();vb[0]-=(e.clientX-pan.x)/r.width*vb[2];vb[1]-=(e.clientY-pan.y)/r.height*vb[3];pan={x:e.clientX,y:e.clientY};setVB();});-function endPan(){pan=null;stage.classList.remove('drag');}-stage.addEventListener('pointerup',endPan);stage.addEventListener('pointerleave',endPan);-stage.addEventListener('dblclick',function(){vb=base.slice();setVB();});-// ---- cross-highlight bus -----function els(n){return [].slice.call(document.querySelectorAll('[data-num="'+n+'"]'));}-function clearHi(){[].slice.call(document.querySelectorAll('.hi')).forEach(function(e){e.classList.remove('hi');});}-function hi(n){els(n).forEach(function(e){e.classList.add('hi');});}-function post(n){try{parent.postMessage({type:'lbr-hover',pin:n===null?null:String(n),mpn:MPN},'*');}catch(_){}}-function showTip(n,x,y){var p=byNum[String(n)];if(!p)return;tip.innerHTML='<span class=tn></span><div class=tt></div><div class=td></div>';tip.querySelector('.tn').textContent=n+'  '+(p.name||'');tip.querySelector('.tt').textContent=p.type||'';var d=p.desc||'';if(d)tip.querySelector('.td').textContent=d;else tip.querySelector('.td').style.display='none';tip.style.display='block';tip.style.left=(x+14)+'px';tip.style.top=(y+12)+'px';}-[].slice.call(document.querySelectorAll('.pingroup,.pad')).forEach(function(g){-  var n=g.getAttribute('data-num');-  g.addEventListener('mouseenter',function(e){clearHi();hi(n);post(n);showTip(n,e.clientX,e.clientY);});-  g.addEventListener('mousemove',function(e){tip.style.left=(e.clientX+14)+'px';tip.style.top=(e.clientY+12)+'px';});-  g.addEventListener('mouseleave',function(){clearHi();post(null);tip.style.display='none';});-});-window.addEventListener('message',function(e){var d=e.data||{};if(d.type!=='lbr-hover')return;clearHi();if(d.pin!=null)hi(d.pin);});-// ---- footprint layer toggles -----[].slice.call(document.querySelectorAll('.lyrtog')).forEach(function(b){-  function apply(on){[].slice.call(document.querySelectorAll('.ly-'+b.getAttribute('data-lyr'))).forEach(function(el){el.classList.toggle('lyr-off',!on);});}-  apply(b.classList.contains('on'));-  b.addEventListener('click',function(){apply(b.classList.toggle('on'));});-});-// ---- auto-grow the host readme iframe -----function ph(){var h=Math.max(360,Math.min(16000,document.body.scrollHeight||420));parent.postMessage({type:'readme-height',height:h},'*');}-window.addEventListener('load',ph);setTimeout(ph,300);-</script>-</body></html>+<!doctype html><title>cj431</title>\ No newline at end of file