seveibar/keyboard-default60
A tscircuit package created by seveibar.
Usage: To import and use the "@tsci/seveibar.keyboard-default60" package: 1. Import the component: ```tsx import { default60 } from "@tsci/seveibar.keyboard-default60" ``` 2. Use in a tscircuit board: ```tsx <board> <KeyMatrix layout={default60} colToMicroPin={[/* column pins */]} rowToMicroPin={[/* row pins */]} /> </board> ``` The package provides a keyboard layout array (`default60`) that can be used with the `KeyMatrix` component from the keyboard utilities package.
- Version
- 1.0.5
- License
- unset
- Stars
- 5
dist/index.esm.js
PCB
Schematic
import React$1 from 'react';
import { createUseComponent } from '@tscircuit/core';
// biome-ignore lint: This file contains keyboard layout data
const default60 = [["~\n`", "!\n1", "@\n2", "#\n3", "$\n4", "%\n5", "^\n6", "&\n7", "*\n8", "(\n9", ")\n0", "_\n-", "+\n=", {
w: 2
}, "Backspace"], [{
w: 1.5
}, "Tab", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{\n[", "}\n]", {
w: 1.5
}, "|\n\\"], [{
w: 1.75
}, "Caps Lock", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":\n;", "\"\n'", {
w: 2.25
}, "Enter"], [{
w: 2.25
}, "Shift", "Z", "X", "C", "V", "B", "N", "M", "<\n,", ">\n.", "?\n/", {
w: 2.75
}, "Shift"], [{
w: 1.25
}, "Ctrl", {
w: 1.25
}, "Win", {
w: 1.25
}, "Alt", {
a: 7,
w: 6.25
}, "", {
a: 4,
w: 1.25
}, "Alt", {
w: 1.25
}, "Win", {
w: 1.25
}, "Menu", {
w: 1.25
}, "Ctrl"]];
function _extends$3() { return _extends$3 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$3.apply(null, arguments); }
const pinLabels$3 = {
pin1: ["GP0", "UART0_TX", "I2C0_SDA", "SPI0_RX"],
pin2: ["GP1", "UART0_RX", "I2C0_SCL", "SPI0_CSn"],
pin3: ["GND1"],
pin4: ["GP2", "I2C1_SDA", "SPI0_SCK"],
pin5: ["GP3", "I2C1_SCL", "SPI0_TX"],
pin6: ["GP4", "UART1_TX", "I2C0_SDA", "SPI0_RX"],
pin7: ["GP5", "UART1_RX", "I2C0_SCL", "SPI0_CSn"],
pin8: ["GND2"],
pin9: ["GP6", "I2C1_SDA", "SPI0_SCK"],
pin10: ["GP7", "I2C1_SCL", "SPI0_TX"],
pin11: ["GP8", "UART1_TX", "I2C0_SDA", "SPI1_RX"],
pin12: ["GP9", "UART1_RX", "I2C0_SCL", "SPI1_CSn"],
pin13: ["GND3"],
pin14: ["GP10", "I2C1_SDA", "SPI1_SCK"],
pin15: ["GP11", "I2C1_SCL", "SPI1_TX"],
pin16: ["GP12", "UART0_TX", "I2C0_SDA", "SPI1_RX"],
pin17: ["GP13", "UART0_RX", "I2C0_SCL", "SPI1_CSn"],
pin18: ["GND4"],
pin19: ["GP14", "I2C1_SDA", "SPI1_SCK"],
pin20: ["GP15", "I2C1_SCL", "SPI1_TX"],
pin21: ["GP16", "SPI0_RX", "I2C0_SDA", "UART0_TX"],
pin22: ["GP17", "SPI0_CSn", "I2C0_SCL", "UART0_RX"],
pin23: ["GND5"],
pin24: ["GP18", "SPI0_SCK", "I2C1_SDA"],
pin25: ["GP19", "SPI0_TX", "I2C1_SCL"],
pin26: ["GP20", "I2C0_SDA"],
pin27: ["GP21", "I2C0_SCL"],
pin28: ["GND6"],
pin29: ["GP22"],
pin30: ["RUN"],
pin31: ["GP26", "ADC0", "I2C1_SDA"],
pin32: ["GP27", "ADC1", "I2C1_SCL"],
pin33: ["GND7", "AGND"],
pin34: ["GP28", "ADC2"],
pin35: ["ADC_VREF"],
pin36: ["3V3_OUT"],
pin37: ["3V3_EN"],
pin38: ["GND8"],
pin39: ["VSYS"],
pin40: ["VBUS"],
pin41: ["SWCLK"],
pin42: ["GND9"],
pin43: ["SWDIO"],
pin44: ["TP1"],
pin45: ["TP2"],
pin46: ["TP3"],
pin47: ["TP4"],
pin48: ["TP5"],
pin49: ["TP6"]
};
const PICO = props => {
return /*#__PURE__*/React.createElement("chip", _extends$3({
pinLabels: pinLabels$3,
supplierPartNumbers: {
"jlcpcb": ["C7203002"]
},
schWidth: 2,
manufacturerPartNumber: "PICO",
footprint: /*#__PURE__*/React.createElement("footprint", null, /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin21"],
pcbX: "23.3898757500001mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin20"],
pcbX: "23.3898757500001mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin22"],
pcbX: "20.849875750000024mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin19"],
pcbX: "20.849875750000024mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin23"],
pcbX: "18.30987575000006mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin18"],
pcbX: "18.30987575000006mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin24"],
pcbX: "15.769875750000097mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin17"],
pcbX: "15.769875750000097mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin25"],
pcbX: "13.22987575000002mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin16"],
pcbX: "13.22987575000002mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin26"],
pcbX: "10.689875750000056mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin15"],
pcbX: "10.689875750000056mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin27"],
pcbX: "8.149875750000092mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin14"],
pcbX: "8.149875750000092mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin28"],
pcbX: "5.609875750000015mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin13"],
pcbX: "5.609875750000015mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin29"],
pcbX: "3.069875750000051mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin12"],
pcbX: "3.069875750000051mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin30"],
pcbX: "0.5298757500000875mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin11"],
pcbX: "0.5298757500000875mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin31"],
pcbX: "-2.01012424999999mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin10"],
pcbX: "-2.01012424999999mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin32"],
pcbX: "-4.5501242499999535mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin9"],
pcbX: "-4.5501242499999535mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin33"],
pcbX: "-7.090124249999917mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin8"],
pcbX: "-7.090124249999917mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin34"],
pcbX: "-9.630124249999994mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin7"],
pcbX: "-9.630124249999994mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin35"],
pcbX: "-12.170124249999958mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin6"],
pcbX: "-12.170124249999958mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin36"],
pcbX: "-14.710124249999922mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin5"],
pcbX: "-14.710124249999922mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin37"],
pcbX: "-17.25012425mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin4"],
pcbX: "-17.25012425mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin38"],
pcbX: "-19.790124249999963mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin3"],
pcbX: "-19.790124249999963mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin39"],
pcbX: "-22.330124249999926mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin2"],
pcbX: "-22.330124249999926mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin40"],
pcbX: "-24.870124250000003mm",
pcbY: "10.087356mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin1"],
pcbX: "-24.870124250000003mm",
pcbY: "-10.087355999999886mm",
width: "1.5999967999999998mm",
height: "3.1999935999999995mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin41"],
pcbX: "24.18997575000003mm",
pcbY: "-2.5399999999999636mm",
width: "3.1999935999999995mm",
height: "1.5999967999999998mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin42"],
pcbX: "24.18997575000003mm",
pcbY: "1.1368683772161603e-13mm",
width: "3.1999935999999995mm",
height: "1.5999967999999998mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin43"],
pcbX: "24.18997575000003mm",
pcbY: "2.5400000000000773mm",
width: "3.1999935999999995mm",
height: "1.5999967999999998mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin44"],
pcbX: "-21.739980649999893mm",
pcbY: "-0.00005079999993995443mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin45"],
pcbX: "-25.039974049999955mm",
pcbY: "0.999998000000005mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin46"],
pcbX: "-25.039974049999955mm",
pcbY: "-0.9999979999998914mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin47"],
pcbX: "-18.239987649999875mm",
pcbY: "-2.4999950000000126mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin48"],
pcbX: "-15.612967249999883mm",
pcbY: "-2.4999950000000126mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin49"],
pcbX: "-13.239997649999964mm",
pcbY: "-2.4999950000000126mm",
width: "1.499997mm",
height: "1.499997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 24.4210903500001,
"y": -10.49997899999994
}, {
"x": 24.759926350000114,
"y": -10.49997899999994
}, {
"x": 24.759926350000114,
"y": -3.571163800000022
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 24.759926350000114,
"y": 3.5710368000000017
}, {
"x": 24.759926350000114,
"y": 10.499979000000053
}, {
"x": 24.4210903500001,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 24.759926350000114,
"y": 1.0310368000001517
}, {
"x": 24.759926350000114,
"y": 1.5088362000001325
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 24.759926350000114,
"y": -1.5089631999999256
}, {
"x": 24.759926350000114,
"y": -1.0311637999999448
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -25.901059449999934,
"y": 10.499852000000033
}, {
"x": -26.23981924999987,
"y": 10.499852000000033
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -26.239997049999943,
"y": 10.499979000000053
}, {
"x": -26.239997049999943,
"y": -10.49997899999994
}, {
"x": -25.901161049999814,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -27.539842049999834,
"y": 3.999534799999992
}, {
"x": -27.139665049999962,
"y": 3.999534799999992
}, {
"x": -27.139665049999962,
"y": -4.000347599999941
}, {
"x": -27.539842049999834,
"y": -4.000347599999941
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -27.139665049999962,
"y": -3.8090347999998357
}, {
"x": -26.26529544999994,
"y": -3.8090347999998357
}, {
"x": -26.23981924999987,
"y": -3.834460199999967
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -27.139665049999962,
"y": 3.802405399999998
}, {
"x": -26.23981924999987,
"y": 3.802405399999998
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -27.539842049999834,
"y": 3.999534799999992
}, {
"x": -27.539842049999834,
"y": -4.000347599999941
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -23.361161049999964,
"y": 10.499979000000053
}, {
"x": -23.838909649999778,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -20.821161049999887,
"y": 10.499979000000053
}, {
"x": -21.298909649999928,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -18.28116104999981,
"y": 10.499979000000053
}, {
"x": -18.75890964999985,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -15.74116104999996,
"y": 10.499979000000053
}, {
"x": -16.218909649999887,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -13.201161049999882,
"y": 10.499979000000053
}, {
"x": -13.678909649999923,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -10.661161049999805,
"y": 10.499979000000053
}, {
"x": -11.138909649999846,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -8.121161049999955,
"y": 10.499979000000053
}, {
"x": -8.598909649999996,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -5.581161049999878,
"y": 10.499979000000053
}, {
"x": -6.058909649999919,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -3.0411610499998005,
"y": 10.499979000000053
}, {
"x": -3.5189096499998413,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -0.5011610499999506,
"y": 10.499979000000053
}, {
"x": -0.9789096499999914,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 2.0388389500001267,
"y": 10.499979000000053
}, {
"x": 1.561090350000086,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 4.578838950000204,
"y": 10.499979000000053
}, {
"x": 4.101090350000163,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 7.118838950000054,
"y": 10.499979000000053
}, {
"x": 6.641090350000013,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 9.658838950000131,
"y": 10.499979000000053
}, {
"x": 9.18109035000009,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 12.198838950000209,
"y": 10.499979000000053
}, {
"x": 11.721090350000168,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 14.738838950000059,
"y": 10.499979000000053
}, {
"x": 14.261090350000018,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 17.278838950000136,
"y": 10.499979000000053
}, {
"x": 16.801090350000095,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 19.818838950000213,
"y": 10.499979000000053
}, {
"x": 19.341090350000172,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 22.358838950000063,
"y": 10.499979000000053
}, {
"x": 21.881090350000022,
"y": 10.499979000000053
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 21.881090350000022,
"y": -10.49997899999994
}, {
"x": 22.358838950000063,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 19.341090350000172,
"y": -10.49997899999994
}, {
"x": 19.818838950000213,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 16.801090350000095,
"y": -10.49997899999994
}, {
"x": 17.278838950000136,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 14.261090350000018,
"y": -10.49997899999994
}, {
"x": 14.738838950000059,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 11.721090350000168,
"y": -10.49997899999994
}, {
"x": 12.198838950000209,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 9.18109035000009,
"y": -10.49997899999994
}, {
"x": 9.658838950000131,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 6.641090350000013,
"y": -10.49997899999994
}, {
"x": 7.118838950000054,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 4.101090350000163,
"y": -10.49997899999994
}, {
"x": 4.578838950000204,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": 1.561090350000086,
"y": -10.49997899999994
}, {
"x": 2.0388389500001267,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -0.9789096499999914,
"y": -10.49997899999994
}, {
"x": -0.5011610499999506,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -3.5189096499998413,
"y": -10.49997899999994
}, {
"x": -3.0411610499998005,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -6.058909649999919,
"y": -10.49997899999994
}, {
"x": -5.581161049999878,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -8.598909649999996,
"y": -10.49997899999994
}, {
"x": -8.121161049999955,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -11.138909649999846,
"y": -10.49997899999994
}, {
"x": -10.661161049999805,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -13.678909649999923,
"y": -10.49997899999994
}, {
"x": -13.201161049999882,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -16.218909649999887,
"y": -10.49997899999994
}, {
"x": -15.74116104999996,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -18.75890964999985,
"y": -10.49997899999994
}, {
"x": -18.28116104999981,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -21.298909649999928,
"y": -10.49997899999994
}, {
"x": -20.821161049999887,
"y": -10.49997899999994
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
"x": -23.838909649999778,
"y": -10.49997899999994
}, {
"x": -23.361161049999964,
"y": -10.49997899999994
}]
}))
}, props));
};
const refDesMap = {
"~": "K_TILDE",
"~`": "K_TILDE",
"!": "K_EXCLAMATION",
"@": "K_AT",
"#": "K_HASH",
$: "K_DOLLAR",
"%": "K_PERCENT",
"^": "K_CARET",
"&": "K_AMPERSAND",
"*": "K_ASTERISK",
"(": "K_LPAREN",
")": "K_RPAREN",
"{": "K_LBRACE",
"}": "K_RBRACE",
"|": "K_PIPE",
"[": "K_LSQBRAK",
"]": "K_RSQBRAK",
'"': "K_QUOTE",
"'": "K_SINGLEQUOTE",
"<": "K_LT",
">": "K_GT",
"?": "K_QUESTION",
"/": "K_SLASH",
windows: "K_WINDOWS",
win: "K_WINDOWS",
menu: "K_MENU",
"caps lock": "K_CAPSLOCK",
":": "K_COLON",
";": "K_SEMICOLON",
"1": "K_N1",
"2": "K_N2",
"3": "K_N3",
"4": "K_N4",
"5": "K_N5",
"6": "K_N6",
"7": "K_N7",
"8": "K_N8",
"9": "K_N9",
"0": "K_N0",
"-": "K_MINUS",
"+": "K_PLUS",
backspace: "K_BACKSPACE",
tab: "K_TAB",
" ": "K_SPACE",
enter: "K_ENTER",
shift: "K_SHIFT",
ctrl: "K_CTRL",
alt: "K_ALT",
escape: "K_ESCAPE",
arrowleft: "K_ARROW_LEFT",
arrowright: "K_ARROW_RIGHT",
arrowup: "K_ARROW_UP",
arrowdown: "K_ARROW_DOWN",
backquote: "K_BACKQUOTE",
quote: "K_QUOTE",
semicolon: "K_SEMICOLON",
comma: "K_COMMA",
period: "K_PERIOD",
slash: "K_SLASH",
backslash: "K_BACKSLASH",
bracketleft: "K_BRACKET_LEFT",
bracketright: "K_BRACKET_RIGHT",
a: "K_A",
b: "K_B",
c: "K_C",
d: "K_D",
e: "K_E",
f: "K_F",
g: "K_G",
h: "K_H",
i: "K_I",
j: "K_J",
k: "K_K",
l: "K_L",
m: "K_M",
n: "K_N",
o: "K_O",
p: "K_P",
q: "K_Q",
r: "K_R",
s: "K_S",
t: "K_T",
u: "K_U",
v: "K_V",
w: "K_W",
x: "K_X",
y: "K_Y",
z: "K_Z"
};
const getRefDesForKey = key => {
const normKeyLabels = key.toLowerCase().split("\n");
for (const normKeyLabel of normKeyLabels) {
if (normKeyLabel in refDesMap) {
return refDesMap[normKeyLabel];
}
}
if (key === "") {
return "K_SPACE";
}
if (key.match(/^[a-zA-Z0-9]+$/)) {
return `K_${key.toUpperCase()}`;
}
throw new Error(`No defined refDes for key "${key}"`);
};
// Define the types for keyboard-layout-editor.com JSON format
// Helper function to parse keyboard-layout-editor JSON
const parseKLELayout = layout => {
// Default key size in millimeters
const KEY_SIZE = 19.05; // Standard keycap size (19.05mm or 0.75 inches)
const keys = [];
let currentX = 0;
let currentY = 0;
let currentRotation = 0;
let currentRotationX = 0;
let currentRotationY = 0;
// Default properties for keys
let currentProps = {
width: 1,
height: 1,
x: 0,
y: 0,
align: undefined
};
const nameCounters = new Map();
layout.forEach((row, rowIndex) => {
currentX = 0;
let colIndex = 0;
// Process each item in the row
row.forEach(item => {
// If it's an object, it's a key with special properties
if (typeof item === "object") {
// Update current properties based on the item
if (item.x !== undefined) currentX += item.x;
if (item.y !== undefined) currentY += item.y;
if (item.w !== undefined) currentProps.width = item.w;
if (item.h !== undefined) currentProps.height = item.h;
if (item.r !== undefined) currentRotation = item.r;
if (item.rx !== undefined) currentRotationX = item.rx;
if (item.ry !== undefined) currentRotationY = item.ry;
if (item.a !== undefined) currentProps.align = item.a;
}
// If it's a string, it's a key label
else if (typeof item === "string") {
let refDes = getRefDesForKey(item);
if (nameCounters.has(refDes)) {
// Edit the original item to include the counter (if it doesn't have it)
const ogKey = keys.find(k => k.name === refDes);
if (ogKey) {
ogKey.name = `${refDes}${nameCounters.get(refDes)}`;
}
nameCounters.set(refDes, nameCounters.get(refDes) + 1);
refDes = `${refDes}${nameCounters.get(refDes)}`;
} else {
nameCounters.set(refDes, 1);
}
keys.push({
name: refDes,
x: (currentX + currentProps.width / 2) * KEY_SIZE,
y: -(currentY + currentProps.height / 2) * KEY_SIZE,
width: currentProps.width * KEY_SIZE,
height: currentProps.height * KEY_SIZE,
rotation: currentRotation,
rotationX: currentRotationX * KEY_SIZE,
rotationY: currentRotationY * KEY_SIZE,
row: rowIndex,
col: colIndex
});
// Move to the next position
currentX += currentProps.width;
colIndex++;
// Reset width and height to default for the next key
currentProps.width = 1;
currentProps.height = 1;
}
});
// Move to the next row
currentY++;
});
return keys;
};
function _extends$1() { return _extends$1 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1.apply(null, arguments); }
const pinLabels$1 = {
"1": "pin1",
"2": "pin2"
};
const pinNames$1 = Object.values(pinLabels$1);
const KeyHotSocket = props => {
return /*#__PURE__*/React.createElement("pushbutton", _extends$1({
layer: "bottom"
}, props, {
footprint: /*#__PURE__*/React.createElement("footprint", null, /*#__PURE__*/React.createElement("hole", {
pcbX: "3.1749999999999545mm",
pcbY: "-1.2699999999999818mm",
diameter: "2.9999939999999996mm"
}), /*#__PURE__*/React.createElement("hole", {
pcbX: "-3.1749999999999545mm",
pcbY: "1.2700000000000955mm",
diameter: "2.9999939999999996mm"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["2"],
pcbX: "6.724904000000038mm",
pcbY: "-1.2699999999999818mm",
width: "2.8999941999999996mm",
height: "2.4999949999999997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["1"],
pcbX: "-6.724904000000038mm",
pcbY: "1.2699999999999818mm",
width: "2.8999941999999996mm",
height: "2.4999949999999997mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -5.461000000000013,
y: -0.4611370000000079
}, {
x: -5.461000000000013,
y: -2.9209999999999354
}, {
x: -5.461000000000013,
y: -2.9209999999999354
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 5.4500017999999955,
y: -2.950006799999869
}, {
x: -5.461000000000013,
y: -2.950006799999869
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 0.18298159999994823,
y: 1.0549889999999778
}, {
x: 5.450027199999909,
y: 1.0549889999999778
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 5.450027199999909,
y: 1.0549889999999778
}, {
x: 5.450027199999909,
y: 0.4611370000000079
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -2.944114000000127,
y: 2.9450030000000424
}, {
x: -5.461000000000013,
y: 2.9450030000000424
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -1.707006999999976,
y: 2.9450030000000424
}, {
x: -2.944114000000127,
y: 2.9450030000000424
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -1.707006999999976,
y: 2.9450030000000424
}, {
x: -1.460311886129034,
y: 2.9288336092640748
}, {
x: -1.2178378661753868,
y: 2.8806021044970294
}, {
x: -0.9837338087377248,
y: 2.801133754218995
}, {
x: -0.762005367588813,
y: 2.6917883071702136
}, {
x: -0.5564464426572613,
y: 2.5544367262343712
}, {
x: -0.37057426423848483,
y: 2.3914291751993915
}, {
x: -0.20756921118118044,
y: 2.2055548061152876
}, {
x: -0.07022039279377168,
y: 1.9999940353145576
}, {
x: 0.03912207440475868,
y: 1.7782641246765252
}, {
x: 0.11858727851722506,
y: 1.5441589992735771
}, {
x: 0.1668155246366041,
y: 1.301684331151364
}, {
x: 0.18298159999994823,
y: 1.0549889999999778
}]
})),
supplierPartNumbers: {
jlcpcb: ["C41430893"]
},
cadModel: {
objUrl: "https://modelcdn.tscircuit.com/easyeda_models/download?uuid=c886ec2b42464573a88fc1f647577a49&pn=C5184526",
rotationOffset: {
x: 0,
y: 0,
z: 0
},
positionOffset: {
x: 0,
y: 0,
z: 0
}
},
pinLabels: pinLabels$1,
schPortArrangement: {
leftSide: {
direction: "top-to-bottom",
pins: [1]
},
rightSide: {
direction: "bottom-to-top",
pins: [2]
}
}
}));
};
createUseComponent(KeyHotSocket, pinNames$1);
function _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }
const pinLabels$2 = {
"1": "pin1",
"2": "pin2"
};
const pinNames = Object.values(pinLabels$2);
const KeyShaftForHotSocket = props => {
return /*#__PURE__*/React.createElement("chip", _extends$2({}, props, {
noSchematicRepresentation: true,
schWidth: 0.1,
schHeight: 0.1,
supplierPartNumbers: {
jlcpcb: ["C400227"]
},
footprint: /*#__PURE__*/React.createElement("footprint", null, /*#__PURE__*/React.createElement("hole", {
pcbX: "0.6349999999999909mm",
pcbY: "-3.1149987999999666mm",
diameter: "4.1999916mm"
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -7.165009800000007,
y: 4.685011000000031
}, {
x: 8.435009799999989,
y: 4.685011000000031
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -7.165009800000007,
y: -10.915008600000078
}, {
x: 8.435009799999989,
y: -10.915008600000078
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -7.165009800000007,
y: 4.685011000000031
}, {
x: -7.165009800000007,
y: -10.915008600000078
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 8.435009799999989,
y: 4.685011000000031
}, {
x: 8.435009799999989,
y: -10.915008600000078
}]
})),
cadModel: {
objUrl: "https://modelcdn.tscircuit.com/easyeda_models/download?uuid=c00f29e7afb64c29bc388e168980ded2&pn=C400227",
rotationOffset: {
x: 0,
y: 0,
z: 90
},
positionOffset: {
x: 0,
y: 0,
z: 0
}
},
pinLabels: pinLabels$2,
schPinSpacing: 0.75,
schPortArrangement: {}
}));
};
createUseComponent(KeyShaftForHotSocket, pinNames);
const Key = props => {
return /*#__PURE__*/React.createElement("group", {
pcbX: props.pcbX,
pcbY: props.pcbY,
schX: props.schX,
schY: props.schY
}, /*#__PURE__*/React.createElement(KeyHotSocket, {
name: props.name,
connections: props.connections
}), /*#__PURE__*/React.createElement(KeyShaftForHotSocket, {
name: `${props.name}_shaft`,
pcbX: 0,
pcbY: -0.52
}), /*#__PURE__*/React.createElement("footprint", null, /*#__PURE__*/React.createElement("silkscreentext", {
text: props.name,
pcbY: 5
})));
};
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const pinLabels = {
pin1: ["C"],
pin2: ["A"]
};
const A_1N4148WS = props => {
return /*#__PURE__*/React.createElement("chip", _extends({
pinLabels: pinLabels,
symbolName: "diode",
supplierPartNumbers: {
jlcpcb: ["C57759"]
},
manufacturerPartNumber: "A_1N4148WS",
footprint: /*#__PURE__*/React.createElement("footprint", null, /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin1"],
pcbX: "-1.1725910000000113mm",
pcbY: "0mm",
width: "0.9999979999999999mm",
height: "0.7500112mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("smtpad", {
portHints: ["pin2"],
pcbX: "1.1725910000000113mm",
pcbY: "0mm",
width: "0.9999979999999999mm",
height: "0.7500112mm",
shape: "rect"
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 0.9012427999999773,
y: -0.726211400000011
}, {
x: 0.9012427999999773,
y: -0.5199887999999646
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: 0.9012427999999773,
y: 0.726211400000011
}, {
x: 0.9012427999999773,
y: 0.5299964000000728
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -0.8512047999998913,
y: 0.726211400000011
}, {
x: 0.9012427999999773,
y: 0.726211400000011
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -0.8512047999998913,
y: -0.726211400000011
}, {
x: 0.9012427999999773,
y: -0.726211400000011
}]
}), /*#__PURE__*/React.createElement("silkscreenpath", {
route: [{
x: -0.44676059999994777,
y: 0.726211400000011
}, {
x: -0.44676059999994777,
y: -0.726211400000011
}]
})),
cadModel: {
objUrl: "https://modelcdn.tscircuit.com/easyeda_models/download?uuid=973acf8a660c48b1975f1ba1c890421a&pn=C57759",
rotationOffset: {
x: 0,
y: 0,
z: 0
},
positionOffset: {
x: 0,
y: 0,
z: 0
}
}
}, props));
};
const KeyMatrix = ({
layout,
rowToMicroPin,
colToMicroPin,
name = "KB",
pcbX = 0,
pcbY = 0,
schX = 0,
schY = 0
}) => {
const keys = parseKLELayout(layout);
const minX = Math.min(...keys.map(k => k.x));
const maxX = Math.max(...keys.map(k => k.x + k.width));
const minY = Math.min(...keys.map(k => k.y));
const maxY = Math.max(...keys.map(k => k.y + k.height));
return /*#__PURE__*/React$1.createElement("group", {
pcbX: pcbX,
pcbY: pcbY,
schX: schX,
schY: schY
}, keys.map((key, index) => {
// Calculate the relative position from the center of the keyboard
const relX = key.x - (minX + maxX) / 2;
const relY = key.y - (minY + maxY) / 2;
return /*#__PURE__*/React$1.createElement("group", {
key: key.name,
pcbX: relX,
pcbY: relY,
schX: relX / 5 // Scale down for schematic view
,
schY: relY / 7 // Scale down for schematic view
}, /*#__PURE__*/React$1.createElement(Key, {
name: key.name
}), rowToMicroPin?.[key.row] !== undefined && /*#__PURE__*/React$1.createElement(A_1N4148WS, {
name: `${key.name}_DIO`,
connections: {
A: `.${key.name} .pin1`,
C: rowToMicroPin[key.row]
},
pcbX: 0.5,
pcbY: -13.5,
schY: -1,
layer: "bottom"
}), colToMicroPin?.[key.col] !== undefined && /*#__PURE__*/React$1.createElement("trace", {
from: `.${key.name} .pin2`,
to: colToMicroPin[key.col]
}));
}));
};
var index = () => /*#__PURE__*/React.createElement("board", null, /*#__PURE__*/React.createElement(KeyMatrix, {
layout: default60,
colToMicroPin: ["net.COL0", "net.COL1", "net.COL2", "net.COL3", "net.COL4", "net.COL5", "net.COL6", "net.COL7", "net.COL8", "net.COL9", "net.COL10", "net.COL11", "net.COL12", "net.COL13", "net.COL14"],
rowToMicroPin: ["net.ROW1", "net.ROW2", "net.ROW3", "net.ROW4", "net.ROW5"]
}), /*#__PURE__*/React.createElement(PICO, {
name: "U1",
pcbRotation: "90deg",
layer: "bottom",
pcbX: -175,
pcbY: 7,
connections: {
GP0: "net.COL0",
GP1: "net.COL1",
GP2: "net.COL2",
GP3: "net.COL3",
GP4: "net.COL4",
GP5: "net.COL5",
GP6: "net.COL6",
GP7: "net.COL7",
GP8: "net.COL8",
GP9: "net.COL9",
GP10: "net.COL10",
GP11: "net.COL11",
GP12: "net.COL12",
GP13: "net.COL13",
GP14: "net.COL14",
GP15: "net.ROW1",
GP16: "net.ROW2",
GP17: "net.ROW3",
GP18: "net.ROW4",
GP19: "net.ROW5"
}
}), /*#__PURE__*/React.createElement("hole", {
pcbX: -180,
pcbY: -56,
diameter: "2.2mm"
}), /*#__PURE__*/React.createElement("hole", {
pcbX: 115,
pcbY: -32,
diameter: "2.2mm"
}), /*#__PURE__*/React.createElement("hole", {
pcbX: 119,
pcbY: 26,
diameter: "2.2mm"
}));
export { index as default };