schematic-symbols 0.0.99 → 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -9
- package/dist/index.js +2031 -1671
- package/dist/index.js.map +1 -1
- package/drawing/arc.ts +3 -1
- package/drawing/getSvg.ts +32 -19
- package/drawing/pathToSvgD.ts +15 -2
- package/drawing/rotateSymbol.ts +35 -19
- package/drawing/svgPathToPoints.ts +1 -0
- package/drawing/utils/makeYUpPositive.ts +46 -0
- package/package.json +1 -1
- package/symbols/ac_voltmeter_horz.ts +2 -2
- package/symbols/ac_voltmeter_vert.ts +5 -23
- package/symbols/avalanche_diode_vert.ts +4 -11
- package/symbols/battery_vert.ts +4 -2
- package/symbols/crystal_horz.ts +2 -2
- package/symbols/diode_right.ts +7 -17
- package/symbols/fuse_horz.ts +1 -1
- package/symbols/ground_horz.ts +4 -4
- package/symbols/ground_vert.ts +3 -30
- package/symbols/schottky_diode_horz.ts +7 -16
    
        package/drawing/arc.ts
    CHANGED
    
    | @@ -6,6 +6,7 @@ export function approximateArc( | |
| 6 6 | 
             
              rx: number,
         | 
| 7 7 | 
             
              ry: number,
         | 
| 8 8 | 
             
              largeArcFlag: number,
         | 
| 9 | 
            +
              sweepFlag: number,
         | 
| 9 10 | 
             
              x2: number,
         | 
| 10 11 | 
             
              y2: number,
         | 
| 11 12 | 
             
            ): Point[] {
         | 
| @@ -22,7 +23,8 @@ export function approximateArc( | |
| 22 23 | 
             
                  0.03 *
         | 
| 23 24 | 
             
                  Math.abs(Math.sin(t * Math.PI)) *
         | 
| 24 25 | 
             
                  Math.min(rx, ry) *
         | 
| 25 | 
            -
                  (largeArcFlag ? 1 : -1)
         | 
| 26 | 
            +
                  (largeArcFlag ? 1 : -1) *
         | 
| 27 | 
            +
                  (sweepFlag ? -1 : 1)
         | 
| 26 28 | 
             
                points.push({ x, y: y + curveY })
         | 
| 27 29 | 
             
              }
         | 
| 28 30 | 
             
              return points
         | 
    
        package/drawing/getSvg.ts
    CHANGED
    
    | @@ -1,16 +1,24 @@ | |
| 1 | 
            +
            import { makeAnchorYUpPositive, makeYUpPositive } from "./utils/makeYUpPositive"
         | 
| 1 2 | 
             
            import { mapColor } from "./mapColor"
         | 
| 2 3 | 
             
            import { pathToSvgD } from "./pathToSvgD"
         | 
| 3 4 | 
             
            import type { Point, Port, SchSymbol, TextPrimitive } from "./types"
         | 
| 4 5 |  | 
| 5 | 
            -
            function createDiamondElement( | 
| 6 | 
            +
            function createDiamondElement(
         | 
| 7 | 
            +
              center: Point,
         | 
| 8 | 
            +
              size = 0.05,
         | 
| 9 | 
            +
              yUpPositive: boolean = true,
         | 
| 10 | 
            +
            ): string {
         | 
| 6 11 | 
             
              const { x, y } = center
         | 
| 7 12 | 
             
              const halfSize = size / 2
         | 
| 8 | 
            -
              return `<path d="M ${x} ${y - halfSize} L ${x + halfSize} ${y} L ${x} ${
         | 
| 9 | 
            -
                y + halfSize
         | 
| 10 | 
            -
              } L ${x - halfSize} ${y} Z" fill="green" />`
         | 
| 13 | 
            +
              return `<path d="M ${x} ${makeYUpPositive(y, yUpPositive) - halfSize} L ${x + halfSize} ${makeYUpPositive(y, yUpPositive)} L ${x} ${
         | 
| 14 | 
            +
                makeYUpPositive(y, yUpPositive) + halfSize
         | 
| 15 | 
            +
              } L ${x - halfSize} ${makeYUpPositive(y, yUpPositive)} Z" fill="green" />`
         | 
| 11 16 | 
             
            }
         | 
| 12 17 |  | 
| 13 | 
            -
            function createTextElement( | 
| 18 | 
            +
            function createTextElement(
         | 
| 19 | 
            +
              primitive: TextPrimitive,
         | 
| 20 | 
            +
              { yUpPositive }: { yUpPositive?: boolean },
         | 
| 21 | 
            +
            ): {
         | 
| 14 22 | 
             
              text: string
         | 
| 15 23 | 
             
              anchor: string
         | 
| 16 24 | 
             
            } {
         | 
| @@ -58,16 +66,19 @@ function createTextElement(primitive: TextPrimitive): { | |
| 58 66 | 
             
              }
         | 
| 59 67 |  | 
| 60 68 | 
             
              return {
         | 
| 61 | 
            -
                text: `<text x="${x}" y="${y}" dx="${dx}" dy="${dy}" text-anchor="${textAnchor}" style="font: ${
         | 
| 69 | 
            +
                text: `<text x="${x}" y="${makeYUpPositive(y, yUpPositive)}" dx="${dx}" dy="${dy}" text-anchor="${textAnchor}" style="font: ${
         | 
| 62 70 | 
             
                  fontSize ?? 0.1
         | 
| 63 71 | 
             
                }px monospace; fill: ${mapColor("primary")}">${text}</text>`,
         | 
| 64 72 | 
             
                anchor: `<rect x="${x - 0.025 / 2}" y="${
         | 
| 65 | 
            -
                  y - 0.025 / 2
         | 
| 73 | 
            +
                  makeYUpPositive(y, yUpPositive) - 0.025 / 2
         | 
| 66 74 | 
             
                }" width="0.025" height="0.025" fill="blue" />`,
         | 
| 67 75 | 
             
              }
         | 
| 68 76 | 
             
            }
         | 
| 69 77 |  | 
| 70 | 
            -
            function createPortElement( | 
| 78 | 
            +
            function createPortElement(
         | 
| 79 | 
            +
              port: Port,
         | 
| 80 | 
            +
              { yUpPositive }: { yUpPositive?: boolean },
         | 
| 81 | 
            +
            ): string {
         | 
| 71 82 | 
             
              const { x, y, labels } = port
         | 
| 72 83 | 
             
              const rectSize = 0.05
         | 
| 73 84 | 
             
              const labelFontSize = 0.08
         | 
| @@ -75,10 +86,10 @@ function createPortElement(port: Port): string { | |
| 75 86 |  | 
| 76 87 | 
             
              return `
         | 
| 77 88 | 
             
                <rect x="${x - rectSize / 2}" y="${
         | 
| 78 | 
            -
                  y - rectSize / 2
         | 
| 89 | 
            +
                  makeYUpPositive(y, yUpPositive) - rectSize / 2
         | 
| 79 90 | 
             
                }" width="${rectSize}" height="${rectSize}" fill="red" />
         | 
| 80 91 | 
             
                <text x="${x - labelFontSize / 2}" y="${
         | 
| 81 | 
            -
                  y + rectSize + labelFontSize / 2
         | 
| 92 | 
            +
                  makeYUpPositive(y, yUpPositive) + rectSize + labelFontSize / 2
         | 
| 82 93 | 
             
                }" text-anchor="middle" style="font: ${labelFontSize}px monospace; fill: #833;">${label}</text>
         | 
| 83 94 | 
             
              `
         | 
| 84 95 | 
             
            }
         | 
| @@ -92,19 +103,19 @@ export function getInnerSvg( | |
| 92 103 | 
             
              const svgElements = primitives.map((primitive) => {
         | 
| 93 104 | 
             
                switch (primitive.type) {
         | 
| 94 105 | 
             
                  case "path":
         | 
| 95 | 
            -
                    return `<path d="${pathToSvgD(
         | 
| 96 | 
            -
                      primitive. | 
| 97 | 
            -
                       | 
| 98 | 
            -
                    )}" fill="${
         | 
| 106 | 
            +
                    return `<path d="${pathToSvgD(primitive.points, {
         | 
| 107 | 
            +
                      closed: primitive.closed,
         | 
| 108 | 
            +
                      yUpPositive: true,
         | 
| 109 | 
            +
                    })}" fill="${
         | 
| 99 110 | 
             
                      primitive.fill ? mapColor(primitive.color) : "none"
         | 
| 100 111 | 
             
                    }" stroke="${mapColor(
         | 
| 101 112 | 
             
                      primitive.color,
         | 
| 102 113 | 
             
                    )}" stroke-width="0.02" stroke-linecap="round" stroke-linejoin="round" />`
         | 
| 103 114 | 
             
                  case "text":
         | 
| 104 | 
            -
                    const textElements = createTextElement(primitive)
         | 
| 115 | 
            +
                    const textElements = createTextElement(primitive, { yUpPositive: true })
         | 
| 105 116 | 
             
                    return textElements.text + (debug ? textElements.anchor : "")
         | 
| 106 117 | 
             
                  case "circle":
         | 
| 107 | 
            -
                    return `<circle cx="${primitive.x}" cy="${primitive.y}" r="${
         | 
| 118 | 
            +
                    return `<circle cx="${primitive.x}" cy="${makeYUpPositive(primitive.y, true)}" r="${
         | 
| 108 119 | 
             
                      primitive.radius
         | 
| 109 120 | 
             
                    }" fill="${primitive.fill ? mapColor(primitive.color) : "none"}" ${
         | 
| 110 121 | 
             
                      !primitive.fill
         | 
| @@ -112,7 +123,7 @@ export function getInnerSvg( | |
| 112 123 | 
             
                        : ""
         | 
| 113 124 | 
             
                    } />`
         | 
| 114 125 | 
             
                  case "box":
         | 
| 115 | 
            -
                    return `<rect x="${primitive.x}" y="${primitive.y}" width="${
         | 
| 126 | 
            +
                    return `<rect x="${primitive.x}" y="${makeYUpPositive(primitive.y)}" width="${
         | 
| 116 127 | 
             
                      primitive.width
         | 
| 117 128 | 
             
                    }" height="${primitive.height}" fill="${mapColor("primary")}" />`
         | 
| 118 129 | 
             
                  default:
         | 
| @@ -120,7 +131,9 @@ export function getInnerSvg( | |
| 120 131 | 
             
                }
         | 
| 121 132 | 
             
              })
         | 
| 122 133 |  | 
| 123 | 
            -
              const portElements = ports | 
| 134 | 
            +
              const portElements = ports
         | 
| 135 | 
            +
                .map((p) => createPortElement(p, { yUpPositive: true }))
         | 
| 136 | 
            +
                .join("\n    ")
         | 
| 124 137 |  | 
| 125 138 | 
             
              const centerDiamond = createDiamondElement(symbol.center)
         | 
| 126 139 |  | 
| @@ -140,7 +153,7 @@ export function getSvg( | |
| 140 153 | 
             
              const h = size.height * bufferMultiple
         | 
| 141 154 | 
             
              const viewBox = {
         | 
| 142 155 | 
             
                x: symbol.center.x - w / 2,
         | 
| 143 | 
            -
                y: symbol.center.y - h / 2,
         | 
| 156 | 
            +
                y: makeYUpPositive(symbol.center.y, true) - h / 2,
         | 
| 144 157 | 
             
                width: w,
         | 
| 145 158 | 
             
                height: h,
         | 
| 146 159 | 
             
              }
         | 
    
        package/drawing/pathToSvgD.ts
    CHANGED
    
    | @@ -1,8 +1,21 @@ | |
| 1 1 | 
             
            import type { Point } from "drawing"
         | 
| 2 | 
            +
            import { makeYUpPositive } from "./utils/makeYUpPositive"
         | 
| 2 3 |  | 
| 3 | 
            -
            export function pathToSvgD( | 
| 4 | 
            +
            export function pathToSvgD(
         | 
| 5 | 
            +
              points: Point[],
         | 
| 6 | 
            +
              {
         | 
| 7 | 
            +
                closed = false,
         | 
| 8 | 
            +
                yUpPositive = true,
         | 
| 9 | 
            +
              }: {
         | 
| 10 | 
            +
                closed?: boolean
         | 
| 11 | 
            +
                yUpPositive?: boolean
         | 
| 12 | 
            +
              },
         | 
| 13 | 
            +
            ): string {
         | 
| 4 14 | 
             
              const pathCommands = points
         | 
| 5 | 
            -
                .map( | 
| 15 | 
            +
                .map(
         | 
| 16 | 
            +
                  (point, index) =>
         | 
| 17 | 
            +
                    `${index === 0 ? "M" : "L"}${point.x},${makeYUpPositive(point.y, yUpPositive)}`,
         | 
| 18 | 
            +
                )
         | 
| 6 19 | 
             
                .join(" ")
         | 
| 7 20 |  | 
| 8 21 | 
             
              return closed ? `${pathCommands} Z` : pathCommands
         | 
    
        package/drawing/rotateSymbol.ts
    CHANGED
    
    | @@ -8,29 +8,29 @@ import type { | |
| 8 8 | 
             
            } from "./types"
         | 
| 9 9 |  | 
| 10 10 | 
             
            // Update rotateAnchor to handle all anchor rotations based on orientation
         | 
| 11 | 
            -
            const  | 
| 11 | 
            +
            const rotateRightFacingAnchor = (
         | 
| 12 12 | 
             
              anchor: NinePointAnchor,
         | 
| 13 | 
            -
               | 
| 13 | 
            +
              newOrientation: "up" | "down" | "left" | "right" = "right",
         | 
| 14 14 | 
             
            ): NinePointAnchor => {
         | 
| 15 | 
            -
              switch ( | 
| 16 | 
            -
                case " | 
| 15 | 
            +
              switch (newOrientation) {
         | 
| 16 | 
            +
                case "down":
         | 
| 17 17 | 
             
                  switch (anchor) {
         | 
| 18 18 | 
             
                    case "middle_top":
         | 
| 19 | 
            -
                      return "middle_left"
         | 
| 20 | 
            -
                    case "middle_bottom":
         | 
| 21 19 | 
             
                      return "middle_right"
         | 
| 20 | 
            +
                    case "middle_bottom":
         | 
| 21 | 
            +
                      return "middle_left"
         | 
| 22 22 | 
             
                    case "middle_left":
         | 
| 23 23 | 
             
                      return "middle_bottom"
         | 
| 24 24 | 
             
                    case "middle_right":
         | 
| 25 25 | 
             
                      return "middle_top"
         | 
| 26 26 | 
             
                  }
         | 
| 27 27 | 
             
                  break
         | 
| 28 | 
            -
                case " | 
| 28 | 
            +
                case "up":
         | 
| 29 29 | 
             
                  switch (anchor) {
         | 
| 30 30 | 
             
                    case "middle_top":
         | 
| 31 | 
            -
                      return "middle_right"
         | 
| 32 | 
            -
                    case "middle_bottom":
         | 
| 33 31 | 
             
                      return "middle_left"
         | 
| 32 | 
            +
                    case "middle_bottom":
         | 
| 33 | 
            +
                      return "middle_right"
         | 
| 34 34 | 
             
                    case "middle_left":
         | 
| 35 35 | 
             
                      return "middle_top"
         | 
| 36 36 | 
             
                    case "middle_right":
         | 
| @@ -213,21 +213,24 @@ export const flipSymbolOverYAxis = ( | |
| 213 213 | 
             
              }
         | 
| 214 214 | 
             
            }
         | 
| 215 215 |  | 
| 216 | 
            -
            export const  | 
| 216 | 
            +
            export const rotateRightFacingSymbol = (
         | 
| 217 217 | 
             
              symbol: SchSymbol,
         | 
| 218 | 
            -
               | 
| 219 | 
            -
             | 
| 218 | 
            +
              opts: {
         | 
| 219 | 
            +
                newOrientation?: "up" | "down" | "left" | "right"
         | 
| 220 | 
            +
                overrides?: Partial<SchSymbol>
         | 
| 221 | 
            +
              },
         | 
| 220 222 | 
             
            ): SchSymbol => {
         | 
| 223 | 
            +
              const { newOrientation, overrides } = opts
         | 
| 221 224 | 
             
              // Assuming the default orientation is "right"
         | 
| 222 225 | 
             
              const angleMap = {
         | 
| 223 | 
            -
                up:  | 
| 226 | 
            +
                up: Math.PI / 2,
         | 
| 224 227 | 
             
                right: 0,
         | 
| 225 | 
            -
                down: Math.PI / 2,
         | 
| 228 | 
            +
                down: -Math.PI / 2,
         | 
| 226 229 | 
             
                left: -Math.PI,
         | 
| 227 230 | 
             
              }
         | 
| 228 231 |  | 
| 229 232 | 
             
              const transform = rotate(
         | 
| 230 | 
            -
                 | 
| 233 | 
            +
                newOrientation ? angleMap[newOrientation] : Math.PI / 2,
         | 
| 231 234 | 
             
                symbol.center.x,
         | 
| 232 235 | 
             
                symbol.center.y,
         | 
| 233 236 | 
             
              )
         | 
| @@ -250,9 +253,9 @@ export const rotateSymbol = ( | |
| 250 253 | 
             
                      y: primitive.y,
         | 
| 251 254 | 
             
                    }) as Point
         | 
| 252 255 |  | 
| 253 | 
            -
                    primitive.anchor =  | 
| 256 | 
            +
                    primitive.anchor = rotateRightFacingAnchor(
         | 
| 254 257 | 
             
                      primitive.anchor,
         | 
| 255 | 
            -
                       | 
| 258 | 
            +
                      newOrientation ?? "right",
         | 
| 256 259 | 
             
                    )
         | 
| 257 260 |  | 
| 258 261 | 
             
                    return {
         | 
| @@ -298,14 +301,27 @@ export const rotateSymbol = ( | |
| 298 301 | 
             
                ports: rotatedPorts,
         | 
| 299 302 | 
             
                size: {
         | 
| 300 303 | 
             
                  width:
         | 
| 301 | 
            -
                     | 
| 304 | 
            +
                    newOrientation === "up" || newOrientation === "down"
         | 
| 302 305 | 
             
                      ? size.width
         | 
| 303 306 | 
             
                      : size.height,
         | 
| 304 307 | 
             
                  height:
         | 
| 305 | 
            -
                     | 
| 308 | 
            +
                    newOrientation === "up" || newOrientation === "down"
         | 
| 306 309 | 
             
                      ? size.height
         | 
| 307 310 | 
             
                      : size.width,
         | 
| 308 311 | 
             
                },
         | 
| 309 312 | 
             
                ...overrides,
         | 
| 310 313 | 
             
              }
         | 
| 311 314 | 
             
            }
         | 
| 315 | 
            +
             | 
| 316 | 
            +
            /**
         | 
| 317 | 
            +
             * @deprecated use rotateRightFacingSymbol instead
         | 
| 318 | 
            +
             */
         | 
| 319 | 
            +
            export const rotateSymbol = (
         | 
| 320 | 
            +
              symbol: SchSymbol,
         | 
| 321 | 
            +
              orientation: "up" | "down" | "left" | "right" = "down",
         | 
| 322 | 
            +
              overrides: Partial<SchSymbol> = {},
         | 
| 323 | 
            +
            ): SchSymbol =>
         | 
| 324 | 
            +
              rotateRightFacingSymbol(symbol, {
         | 
| 325 | 
            +
                newOrientation: orientation,
         | 
| 326 | 
            +
                overrides,
         | 
| 327 | 
            +
              })
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            import { NinePointAnchor } from "drawing/types"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            /**
         | 
| 4 | 
            +
             * In Inkscape and Websites, Y-up is NEGATIVE- meaning e.g. y=10 is BELOW y=0.
         | 
| 5 | 
            +
             *
         | 
| 6 | 
            +
             * Our symbols are defined with Y-up POSITIVE, meaning e.g. y=10 is ABOVE y=0.
         | 
| 7 | 
            +
             *
         | 
| 8 | 
            +
             * This function helps flip y positions so that you can convert from schematic
         | 
| 9 | 
            +
             * symbol coordinates to SVG coordinates.
         | 
| 10 | 
            +
             */
         | 
| 11 | 
            +
            export const makeYUpPositive = (y: number, yUpPositive: boolean = true) => {
         | 
| 12 | 
            +
              return yUpPositive ? -y : y
         | 
| 13 | 
            +
            }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            /**
         | 
| 16 | 
            +
             * This function gives an intermediate anchor flip that can be used to determine
         | 
| 17 | 
            +
             * how anchors should be interpreted when flipping in the Y-axis.
         | 
| 18 | 
            +
             *
         | 
| 19 | 
            +
             * It converts top_left -> bottom_left etc.
         | 
| 20 | 
            +
             *
         | 
| 21 | 
            +
             * y=1            top_left  -------
         | 
| 22 | 
            +
             * y=0               |             |
         | 
| 23 | 
            +
             * y=-1               -------------
         | 
| 24 | 
            +
             *
         | 
| 25 | 
            +
             * Y-up Negative
         | 
| 26 | 
            +
             *
         | 
| 27 | 
            +
             * y=-1               -------------
         | 
| 28 | 
            +
             * y=0               |             |
         | 
| 29 | 
            +
             * y=1              bottom_left  --
         | 
| 30 | 
            +
             */
         | 
| 31 | 
            +
            export const flipAnchorOverYAxis = (anchor: NinePointAnchor) => {
         | 
| 32 | 
            +
              if (anchor === "top_left") return "bottom_left"
         | 
| 33 | 
            +
              if (anchor === "top_right") return "bottom_right"
         | 
| 34 | 
            +
              if (anchor === "bottom_left") return "top_left"
         | 
| 35 | 
            +
              if (anchor === "bottom_right") return "top_right"
         | 
| 36 | 
            +
              if (anchor === "middle_top") return "middle_bottom"
         | 
| 37 | 
            +
              if (anchor === "middle_bottom") return "middle_top"
         | 
| 38 | 
            +
              return anchor
         | 
| 39 | 
            +
            }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            export const makeAnchorYUpPositive = (
         | 
| 42 | 
            +
              anchor: NinePointAnchor,
         | 
| 43 | 
            +
              yUpPositive: boolean = true,
         | 
| 44 | 
            +
            ) => {
         | 
| 45 | 
            +
              return yUpPositive ? flipAnchorOverYAxis(anchor) : anchor
         | 
| 46 | 
            +
            }
         | 
    
        package/package.json
    CHANGED
    
    
| @@ -12,14 +12,14 @@ export default defineSymbol({ | |
| 12 12 | 
             
                  text: "{REF}",
         | 
| 13 13 | 
             
                  x: 0,
         | 
| 14 14 | 
             
                  y: -0.3594553499999995,
         | 
| 15 | 
            -
                  anchor: " | 
| 15 | 
            +
                  anchor: "middle_top",
         | 
| 16 16 | 
             
                },
         | 
| 17 17 | 
             
                {
         | 
| 18 18 | 
             
                  type: "text",
         | 
| 19 19 | 
             
                  text: "{VAL}",
         | 
| 20 20 | 
             
                  x: 0,
         | 
| 21 21 | 
             
                  y: 0.35,
         | 
| 22 | 
            -
                  anchor: " | 
| 22 | 
            +
                  anchor: "middle_bottom",
         | 
| 23 23 | 
             
                },
         | 
| 24 24 | 
             
              ] as any,
         | 
| 25 25 | 
             
              ports: [
         | 
| @@ -1,26 +1,8 @@ | |
| 1 | 
            -
            import {  | 
| 2 | 
            -
            import  | 
| 3 | 
            -
            import { Primitive } from "drawing/types"
         | 
| 1 | 
            +
            import { rotateRightFacingSymbol } from "drawing/rotateSymbol"
         | 
| 2 | 
            +
            import ac_voltmeter_horz from "./ac_voltmeter_horz"
         | 
| 4 3 |  | 
| 5 | 
            -
            const {
         | 
| 6 | 
            -
               | 
| 7 | 
            -
              3: path1,
         | 
| 8 | 
            -
              4: path2,
         | 
| 9 | 
            -
              5: path3,
         | 
| 10 | 
            -
              6: path4,
         | 
| 11 | 
            -
              ...rest
         | 
| 12 | 
            -
            } = dc_voltmeter_horz.primitives
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            function isPrimitive(value: any): value is Primitive {
         | 
| 15 | 
            -
              return typeof value === "object"
         | 
| 16 | 
            -
            }
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            const rotatedSymbol = rotateSymbol({
         | 
| 19 | 
            -
              ...dc_voltmeter_horz,
         | 
| 20 | 
            -
              primitives: Object.values(rest).filter(isPrimitive),
         | 
| 4 | 
            +
            const rotatedSymbol = rotateRightFacingSymbol(ac_voltmeter_horz, {
         | 
| 5 | 
            +
              newOrientation: "up",
         | 
| 21 6 | 
             
            })
         | 
| 22 7 |  | 
| 23 | 
            -
            export default  | 
| 24 | 
            -
              ...rotatedSymbol,
         | 
| 25 | 
            -
              primitives: [...rotatedSymbol.primitives, letter, path1, path2, path3, path4],
         | 
| 26 | 
            -
            }
         | 
| 8 | 
            +
            export default rotatedSymbol
         | 
| @@ -1,17 +1,10 @@ | |
| 1 | 
            -
            import { rotateSymbol } from "drawing/rotateSymbol"
         | 
| 1 | 
            +
            import { rotateRightFacingSymbol, rotateSymbol } from "drawing/rotateSymbol"
         | 
| 2 2 | 
             
            import avalanche_diode_horz from "./avalanche_diode_horz"
         | 
| 3 3 |  | 
| 4 4 | 
             
            import type { TextPrimitive } from "drawing"
         | 
| 5 5 |  | 
| 6 | 
            -
            const rotated =  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
            )! as TextPrimitive
         | 
| 10 | 
            -
            const val = rotated.primitives.find(
         | 
| 11 | 
            -
              (p) => p.type === "text" && p.text === "{VAL}",
         | 
| 12 | 
            -
            )! as TextPrimitive
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            ref.anchor = "middle_left"
         | 
| 15 | 
            -
            val.anchor = "middle_right"
         | 
| 6 | 
            +
            const rotated = rotateRightFacingSymbol(avalanche_diode_horz, {
         | 
| 7 | 
            +
              newOrientation: "down",
         | 
| 8 | 
            +
            })
         | 
| 16 9 |  | 
| 17 10 | 
             
            export default rotated
         | 
    
        package/symbols/battery_vert.ts
    CHANGED
    
    | @@ -1,4 +1,6 @@ | |
| 1 | 
            -
            import {  | 
| 1 | 
            +
            import { rotateRightFacingSymbol } from "drawing/rotateSymbol"
         | 
| 2 2 | 
             
            import battery_horz from "./battery_horz"
         | 
| 3 3 |  | 
| 4 | 
            -
            export default  | 
| 4 | 
            +
            export default rotateRightFacingSymbol(battery_horz, {
         | 
| 5 | 
            +
              newOrientation: "up",
         | 
| 6 | 
            +
            })
         | 
    
        package/symbols/crystal_horz.ts
    CHANGED
    
    | @@ -14,14 +14,14 @@ export default defineSymbol({ | |
| 14 14 | 
             
                  text: "{REF}",
         | 
| 15 15 | 
             
                  x: -0.012864500000000056,
         | 
| 16 16 | 
             
                  y: -0.4150086999999978,
         | 
| 17 | 
            -
                  anchor: " | 
| 17 | 
            +
                  anchor: "middle_top",
         | 
| 18 18 | 
             
                },
         | 
| 19 19 | 
             
                {
         | 
| 20 20 | 
             
                  type: "text",
         | 
| 21 21 | 
             
                  text: "{VAL}",
         | 
| 22 22 | 
             
                  x: -0.003850500000000423,
         | 
| 23 23 | 
             
                  y: 0.4250087000000011,
         | 
| 24 | 
            -
                  anchor: " | 
| 24 | 
            +
                  anchor: "middle_bottom",
         | 
| 25 25 | 
             
                },
         | 
| 26 26 | 
             
              ] as any,
         | 
| 27 27 | 
             
              ports: [
         | 
    
        package/symbols/diode_right.ts
    CHANGED
    
    | @@ -1,20 +1,10 @@ | |
| 1 1 | 
             
            import { defineSymbol } from "drawing/defineSymbol"
         | 
| 2 2 | 
             
            import svgJson from "assets/generated/diode.json"
         | 
| 3 | 
            -
            import {  | 
| 3 | 
            +
            import { modifySymbol } from "scripts/lib/modify-symbol/modify-symbol"
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
               | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
                { ...texts.top1, anchor: "middle_bottom" },
         | 
| 12 | 
            -
                { ...texts.bottom1, anchor: "middle_top" },
         | 
| 13 | 
            -
              ] as Primitive[],
         | 
| 14 | 
            -
              ports: [
         | 
| 15 | 
            -
                { ...refblocks.left1, labels: ["1"] }, // TODO add more "standard" labels
         | 
| 16 | 
            -
                { ...refblocks.right1, labels: ["2"] }, // TODO add more "standard" labels
         | 
| 17 | 
            -
              ],
         | 
| 18 | 
            -
              size: { width: bounds.width, height: bounds.height },
         | 
| 19 | 
            -
              center: { x: bounds.centerX, y: bounds.centerY },
         | 
| 20 | 
            -
            })
         | 
| 5 | 
            +
            export default modifySymbol(svgJson)
         | 
| 6 | 
            +
              .labelPort("left1", ["1", "pos"])
         | 
| 7 | 
            +
              .labelPort("right1", ["2", "neg"])
         | 
| 8 | 
            +
              .changeTextAnchor("{REF}", "middle_bottom")
         | 
| 9 | 
            +
              .changeTextAnchor("{VAL}", "middle_top")
         | 
| 10 | 
            +
              .build()
         | 
    
        package/symbols/fuse_horz.ts
    CHANGED
    
    
    
        package/symbols/ground_horz.ts
    CHANGED
    
    | @@ -15,20 +15,20 @@ export const horizontalSymbol = defineSymbol({ | |
| 15 15 | 
             
                  type: "text",
         | 
| 16 16 | 
             
                  text: "{REF}", // REF label for horizontal
         | 
| 17 17 | 
             
                  x: -0.1, // Adjust this for the horizontal positioning of REF
         | 
| 18 | 
            -
                  y:  | 
| 18 | 
            +
                  y: 0.8, // Adjust this for the vertical positioning of REF
         | 
| 19 19 | 
             
                  anchor: "middle_bottom", // Horizontal anchor for REF
         | 
| 20 20 | 
             
                },
         | 
| 21 21 | 
             
                {
         | 
| 22 22 | 
             
                  type: "text",
         | 
| 23 23 | 
             
                  text: "{VAL}", // VAL label for horizontal
         | 
| 24 24 | 
             
                  x: -0.1, // Adjust for horizontal positioning of VAL
         | 
| 25 | 
            -
                  y:  | 
| 25 | 
            +
                  y: 0.1, // Adjust for vertical positioning of VAL
         | 
| 26 26 | 
             
                  anchor: "middle_top", // Horizontal anchor for VAL
         | 
| 27 27 | 
             
                },
         | 
| 28 28 | 
             
              ] as Primitive[],
         | 
| 29 29 | 
             
              ports: [{ ...refblocks.top1, labels: ["1"] }],
         | 
| 30 | 
            -
              size: { width:  | 
| 31 | 
            -
              center: { x:  | 
| 30 | 
            +
              size: { width: 1, height: 1 },
         | 
| 31 | 
            +
              center: { x: 0, y: 0.4 },
         | 
| 32 32 | 
             
            })
         | 
| 33 33 |  | 
| 34 34 | 
             
            // Vertical orientation symbol
         | 
    
        package/symbols/ground_vert.ts
    CHANGED
    
    | @@ -1,34 +1,7 @@ | |
| 1 1 | 
             
            import { defineSymbol } from "drawing/defineSymbol"
         | 
| 2 2 | 
             
            import svgJson from "assets/generated/ground.json"
         | 
| 3 3 | 
             
            import { Primitive } from "drawing/types"
         | 
| 4 | 
            -
            import  | 
| 4 | 
            +
            import groundHorz from "./ground_horz"
         | 
| 5 | 
            +
            import { modifySymbol } from "scripts/lib/modify-symbol/modify-symbol"
         | 
| 5 6 |  | 
| 6 | 
            -
             | 
| 7 | 
            -
            const { paths, circles, bounds, refblocks } = svgJson
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            export const verticalSymbol = defineSymbol({
         | 
| 10 | 
            -
              primitives: [
         | 
| 11 | 
            -
                ...Object.values(paths),
         | 
| 12 | 
            -
                ...Object.values(circles),
         | 
| 13 | 
            -
                {
         | 
| 14 | 
            -
                  type: "text",
         | 
| 15 | 
            -
                  text: "{REF}", // REF label for vertical
         | 
| 16 | 
            -
                  x: -0.015, // Adjust this for the horizontal positioning of REF
         | 
| 17 | 
            -
                  y: -0.75, // Adjust this for the vertical positioning of REF
         | 
| 18 | 
            -
                  anchor: "middle_bottom", // Vertical anchor for REF
         | 
| 19 | 
            -
                },
         | 
| 20 | 
            -
                {
         | 
| 21 | 
            -
                  type: "text",
         | 
| 22 | 
            -
                  text: "{VAL}", // VAL label for vertical
         | 
| 23 | 
            -
                  x: -0.015, // Adjust for horizontal positioning of VAL
         | 
| 24 | 
            -
                  y: -0.12, // Adjust for vertical positioning of VAL
         | 
| 25 | 
            -
                  anchor: "middle_top", // Vertical anchor for VAL
         | 
| 26 | 
            -
                },
         | 
| 27 | 
            -
              ] as Primitive[],
         | 
| 28 | 
            -
              ports: [{ ...refblocks.top1, labels: ["1"] }],
         | 
| 29 | 
            -
              size: { width: bounds.width, height: bounds.height },
         | 
| 30 | 
            -
              center: { x: bounds.centerX, y: bounds.centerY - 0.45 },
         | 
| 31 | 
            -
            })
         | 
| 32 | 
            -
             | 
| 33 | 
            -
            // Export vertical symbol (rotated 90 degrees from original)
         | 
| 34 | 
            -
            export default rotateSymbol(verticalSymbol)
         | 
| 7 | 
            +
            export default modifySymbol(groundHorz).rotateRightFacingSymbol("down").build()
         | 
| @@ -1,19 +1,10 @@ | |
| 1 1 | 
             
            import { defineSymbol } from "drawing/defineSymbol"
         | 
| 2 2 | 
             
            import svgJson from "assets/generated/schottky_diode.json"
         | 
| 3 | 
            +
            import { modifySymbol } from "scripts/lib/modify-symbol/modify-symbol"
         | 
| 3 4 |  | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                { ...texts.top1, anchor: "middle_bottom" },
         | 
| 11 | 
            -
                { ...texts.bottom1, anchor: "middle_top" },
         | 
| 12 | 
            -
              ] as any,
         | 
| 13 | 
            -
              ports: [
         | 
| 14 | 
            -
                { ...refblocks.left1, labels: ["1"] }, // TODO add more "standard" labels
         | 
| 15 | 
            -
                { ...refblocks.right1, labels: ["2"] }, // TODO add more "standard" labels
         | 
| 16 | 
            -
              ],
         | 
| 17 | 
            -
              size: { width: bounds.width, height: bounds.height },
         | 
| 18 | 
            -
              center: { x: bounds.centerX, y: bounds.centerY },
         | 
| 19 | 
            -
            })
         | 
| 5 | 
            +
            export default modifySymbol(svgJson)
         | 
| 6 | 
            +
              .labelPort("left1", ["1", "pos"])
         | 
| 7 | 
            +
              .labelPort("right1", ["2", "neg"])
         | 
| 8 | 
            +
              .changeTextAnchor("{VAL}", "middle_bottom")
         | 
| 9 | 
            +
              .changeTextAnchor("{REF}", "middle_top")
         | 
| 10 | 
            +
              .build()
         |