@tscircuit/footprinter 0.0.27 → 0.0.29
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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3652,7 +3652,7 @@ var import_soup3 = __toESM(require_dist(), 1);
|
|
|
3652
3652
|
var soic_def = import_zod5.z.object({
|
|
3653
3653
|
soic: import_zod5.z.literal(true),
|
|
3654
3654
|
num_pins: import_zod5.z.number(),
|
|
3655
|
-
w: import_soup3.length,
|
|
3655
|
+
w: import_soup3.length.default(import_soup3.length.parse("5.3mm")),
|
|
3656
3656
|
p: import_soup3.length.default(import_soup3.length.parse("1.27mm")),
|
|
3657
3657
|
id: import_soup3.length.optional(),
|
|
3658
3658
|
od: import_soup3.length.optional()
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/lodash._objecttypes/index.js","../node_modules/lodash.isobject/index.js","../node_modules/lodash._renative/index.js","../node_modules/lodash._shimkeys/index.js","../node_modules/lodash.keys/index.js","../node_modules/lodash.noop/index.js","../node_modules/lodash._basecreate/index.js","../node_modules/lodash._setbinddata/index.js","../node_modules/lodash._basebind/index.js","../node_modules/lodash._slice/index.js","../node_modules/lodash._basecreatewrapper/index.js","../node_modules/lodash.isfunction/index.js","../node_modules/lodash._createwrapper/index.js","../node_modules/lodash.bind/index.js","../node_modules/lodash.identity/index.js","../node_modules/lodash.support/index.js","../node_modules/lodash._basecreatecallback/index.js","../node_modules/lodash.forown/index.js","../node_modules/lodash.foreach/index.js","../node_modules/convert-units/lib/definitions/length.js","../node_modules/convert-units/lib/definitions/area.js","../node_modules/convert-units/lib/definitions/mass.js","../node_modules/convert-units/lib/definitions/volume.js","../node_modules/convert-units/lib/definitions/each.js","../node_modules/convert-units/lib/definitions/temperature.js","../node_modules/convert-units/lib/definitions/time.js","../node_modules/convert-units/lib/definitions/digital.js","../node_modules/convert-units/lib/definitions/partsPer.js","../node_modules/convert-units/lib/definitions/speed.js","../node_modules/convert-units/lib/definitions/pace.js","../node_modules/convert-units/lib/definitions/pressure.js","../node_modules/convert-units/lib/definitions/current.js","../node_modules/convert-units/lib/definitions/voltage.js","../node_modules/convert-units/lib/definitions/power.js","../node_modules/convert-units/lib/definitions/reactivePower.js","../node_modules/convert-units/lib/definitions/apparentPower.js","../node_modules/convert-units/lib/definitions/energy.js","../node_modules/convert-units/lib/definitions/reactiveEnergy.js","../node_modules/convert-units/lib/definitions/volumeFlowRate.js","../node_modules/convert-units/lib/definitions/illuminance.js","../node_modules/convert-units/lib/definitions/frequency.js","../node_modules/convert-units/lib/definitions/angle.js","../node_modules/convert-units/lib/index.js","../node_modules/@tscircuit/soup/src/index.ts","../node_modules/@tscircuit/soup/src/utils/convert-si-unit-to-number.ts","../node_modules/@tscircuit/soup/src/units/index.ts","../node_modules/@tscircuit/soup/src/common/point.ts","../node_modules/@tscircuit/soup/src/common/size.ts","../node_modules/@tscircuit/soup/src/source/source_simple_capacitor.ts","../node_modules/@tscircuit/soup/src/pcb/properties/supplier_name.ts","../node_modules/@tscircuit/soup/src/source/base/source_component_base.ts","../node_modules/@tscircuit/soup/src/source/source_simple_resistor.ts","../node_modules/@tscircuit/soup/src/source/source_simple_diode.ts","../node_modules/@tscircuit/soup/src/source/source_simple_ground.ts","../node_modules/@tscircuit/soup/src/source/source_simple_bug.ts","../node_modules/@tscircuit/soup/src/source/source_simple_inductor.ts","../node_modules/@tscircuit/soup/src/source/source_led.ts","../node_modules/@tscircuit/soup/src/source/source_simple_power_source.ts","../node_modules/@tscircuit/soup/src/source/any_source_component.ts","../node_modules/@tscircuit/soup/src/source/source_port.ts","../node_modules/@tscircuit/soup/src/source/source_trace.ts","../node_modules/@tscircuit/soup/src/source/source_group.ts","../node_modules/@tscircuit/soup/src/source/source_net.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_box.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_path.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_component.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_line.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_trace.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_text.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_port.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_net_label.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_error.ts","../node_modules/@tscircuit/soup/src/pcb/properties/layer_ref.ts","../node_modules/@tscircuit/soup/src/pcb/properties/pcb_route_hints.ts","../node_modules/@tscircuit/soup/src/pcb/properties/route_hint_point.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_component.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_hole.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_plated_hole.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_port.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_smtpad.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_text.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_port_not_matched_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_via.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_board.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_placement_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace_hint.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_line.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_path.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_text.ts","../node_modules/@tscircuit/soup/src/any_soup_element.ts","../src/index.ts","../src/helpers/u-curve.ts","../src/helpers/platedhole.ts","../src/fn/dip.ts","../src/fn/diode.ts","../src/helpers/rectpad.ts","../src/helpers/passive-fn.ts","../src/fn/cap.ts","../src/fn/led.ts","../src/fn/res.ts","../src/helpers/zod/ALPHABET.ts","../src/fn/bga.ts","../src/helpers/zod/dim-2d.ts","../src/helpers/zod/function-call.ts","../src/fn/soic.ts","../src/fn/quad.ts","../src/helpers/zod/pin-order-specifier.ts","../src/helpers/get-quad-pin-map.ts","../src/fn/qfn.ts","../src/fn/qfp.ts","../src/fn/mlp.ts","../src/helpers/is-not-null.ts","../src/footprinter.ts"],"sourcesContent":["/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/** Used to determine if values are of the language type Object */\nvar objectTypes = {\n 'boolean': false,\n 'function': true,\n 'object': true,\n 'number': false,\n 'string': false,\n 'undefined': false\n};\n\nmodule.exports = objectTypes;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar objectTypes = require('lodash._objecttypes');\n\n/**\n * Checks if `value` is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // check if the value is the ECMAScript language type of Object\n // http://es5.github.io/#x8\n // and avoid a V8 bug\n // http://code.google.com/p/v8/issues/detail?id=2291\n return !!(value && objectTypes[typeof value]);\n}\n\nmodule.exports = isObject;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/** Used for native method references */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the internal [[Class]] of values */\nvar toString = objectProto.toString;\n\n/** Used to detect if a method is native */\nvar reNative = RegExp('^' +\n String(toString)\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n);\n\nmodule.exports = reNative;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar objectTypes = require('lodash._objecttypes');\n\n/** Used for native method references */\nvar objectProto = Object.prototype;\n\n/** Native method shortcuts */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which produces an array of the\n * given object's own enumerable property names.\n *\n * @private\n * @type Function\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n */\nvar shimKeys = function(object) {\n var index, iterable = object, result = [];\n if (!iterable) return result;\n if (!(objectTypes[typeof object])) return result;\n for (index in iterable) {\n if (hasOwnProperty.call(iterable, index)) {\n result.push(index);\n }\n }\n return result\n};\n\nmodule.exports = shimKeys;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar isObject = require('lodash.isobject'),\n reNative = require('lodash._renative'),\n shimKeys = require('lodash._shimkeys');\n\n/* Native method shortcuts for methods with the same name as other `lodash` methods */\nvar nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys;\n\n/**\n * Creates an array composed of the own enumerable property names of an object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n * @example\n *\n * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n if (!isObject(object)) {\n return [];\n }\n return nativeKeys(object);\n};\n\nmodule.exports = keys;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * A no-operation function.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.noop(object) === undefined;\n * // => true\n */\nfunction noop() {\n // no operation performed\n}\n\nmodule.exports = noop;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar isObject = require('lodash.isobject'),\n noop = require('lodash.noop'),\n reNative = require('lodash._renative');\n\n/* Native method shortcuts for methods with the same name as other `lodash` methods */\nvar nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(prototype, properties) {\n return isObject(prototype) ? nativeCreate(prototype) : {};\n}\n// fallback for browsers without `Object.create`\nif (!nativeCreate) {\n baseCreate = (function() {\n function Object() {}\n return function(prototype) {\n if (isObject(prototype)) {\n Object.prototype = prototype;\n var result = new Object;\n Object.prototype = null;\n }\n return result || global.Object();\n };\n }());\n}\n\nmodule.exports = baseCreate;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar noop = require('lodash.noop'),\n reNative = require('lodash._renative');\n\n/** Used as the property descriptor for `__bindData__` */\nvar descriptor = {\n 'configurable': false,\n 'enumerable': false,\n 'value': null,\n 'writable': false\n};\n\n/** Used to set meta data on functions */\nvar defineProperty = (function() {\n // IE 8 only accepts DOM elements\n try {\n var o = {},\n func = reNative.test(func = Object.defineProperty) && func,\n result = func(o, o, o) && func;\n } catch(e) { }\n return result;\n}());\n\n/**\n * Sets `this` binding data on a given function.\n *\n * @private\n * @param {Function} func The function to set data on.\n * @param {Array} value The data array to set.\n */\nvar setBindData = !defineProperty ? noop : function(func, value) {\n descriptor.value = value;\n defineProperty(func, '__bindData__', descriptor);\n};\n\nmodule.exports = setBindData;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreate = require('lodash._basecreate'),\n isObject = require('lodash.isobject'),\n setBindData = require('lodash._setbinddata');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * The base implementation of `_.bind` that creates the bound function and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new bound function.\n */\nfunction baseBind(bindData) {\n var func = bindData[0],\n partialArgs = bindData[2],\n thisArg = bindData[4];\n\n function bound() {\n // `Function#bind` spec\n // http://es5.github.io/#x15.3.4.5\n if (partialArgs) {\n var args = partialArgs.slice();\n push.apply(args, arguments);\n }\n // mimic the constructor's `return` behavior\n // http://es5.github.io/#x13.2.2\n if (this instanceof bound) {\n // ensure `new bound` is an instance of `func`\n var thisBinding = baseCreate(func.prototype),\n result = func.apply(thisBinding, args || arguments);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisArg, args || arguments);\n }\n setBindData(bound, bindData);\n return bound;\n}\n\nmodule.exports = baseBind;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * Slices the `collection` from the `start` index up to, but not including,\n * the `end` index.\n *\n * Note: This function is used instead of `Array#slice` to support node lists\n * in IE < 9 and to ensure dense arrays are returned.\n *\n * @private\n * @param {Array|Object|string} collection The collection to slice.\n * @param {number} start The start index.\n * @param {number} end The end index.\n * @returns {Array} Returns the new array.\n */\nfunction slice(array, start, end) {\n start || (start = 0);\n if (typeof end == 'undefined') {\n end = array ? array.length : 0;\n }\n var index = -1,\n length = end - start || 0,\n result = Array(length < 0 ? 0 : length);\n\n while (++index < length) {\n result[index] = array[start + index];\n }\n return result;\n}\n\nmodule.exports = slice;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreate = require('lodash._basecreate'),\n isObject = require('lodash.isobject'),\n setBindData = require('lodash._setbinddata'),\n slice = require('lodash._slice');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * The base implementation of `createWrapper` that creates the wrapper and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new function.\n */\nfunction baseCreateWrapper(bindData) {\n var func = bindData[0],\n bitmask = bindData[1],\n partialArgs = bindData[2],\n partialRightArgs = bindData[3],\n thisArg = bindData[4],\n arity = bindData[5];\n\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n key = func;\n\n function bound() {\n var thisBinding = isBind ? thisArg : this;\n if (partialArgs) {\n var args = partialArgs.slice();\n push.apply(args, arguments);\n }\n if (partialRightArgs || isCurry) {\n args || (args = slice(arguments));\n if (partialRightArgs) {\n push.apply(args, partialRightArgs);\n }\n if (isCurry && args.length < arity) {\n bitmask |= 16 & ~32;\n return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n }\n }\n args || (args = arguments);\n if (isBindKey) {\n func = thisBinding[key];\n }\n if (this instanceof bound) {\n thisBinding = baseCreate(func.prototype);\n var result = func.apply(thisBinding, args);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisBinding, args);\n }\n setBindData(bound, bindData);\n return bound;\n}\n\nmodule.exports = baseCreateWrapper;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * Checks if `value` is a function.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n */\nfunction isFunction(value) {\n return typeof value == 'function';\n}\n\nmodule.exports = isFunction;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseBind = require('lodash._basebind'),\n baseCreateWrapper = require('lodash._basecreatewrapper'),\n isFunction = require('lodash.isfunction');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * Creates a function that, when called, either curries or invokes `func`\n * with an optional `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to reference.\n * @param {number} bitmask The bitmask of method flags to compose.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry`\n * 8 - `_.curry` (bound)\n * 16 - `_.partial`\n * 32 - `_.partialRight`\n * @param {Array} [partialArgs] An array of arguments to prepend to those\n * provided to the new function.\n * @param {Array} [partialRightArgs] An array of arguments to append to those\n * provided to the new function.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new function.\n */\nfunction createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n isPartial = bitmask & 16,\n isPartialRight = bitmask & 32;\n\n if (!isBindKey && !isFunction(func)) {\n throw new TypeError;\n }\n if (isPartial && !partialArgs.length) {\n bitmask &= ~16;\n isPartial = partialArgs = false;\n }\n if (isPartialRight && !partialRightArgs.length) {\n bitmask &= ~32;\n isPartialRight = partialRightArgs = false;\n }\n var bindData = func && func.__bindData__;\n if (bindData && bindData !== true) {\n bindData = bindData.slice();\n\n // set `thisBinding` is not previously bound\n if (isBind && !(bindData[1] & 1)) {\n bindData[4] = thisArg;\n }\n // set if previously bound but not currently (subsequent curried functions)\n if (!isBind && bindData[1] & 1) {\n bitmask |= 8;\n }\n // set curried arity if not yet set\n if (isCurry && !(bindData[1] & 4)) {\n bindData[5] = arity;\n }\n // append partial left arguments\n if (isPartial) {\n push.apply(bindData[2] || (bindData[2] = []), partialArgs);\n }\n // append partial right arguments\n if (isPartialRight) {\n push.apply(bindData[3] || (bindData[3] = []), partialRightArgs);\n }\n // merge flags\n bindData[1] |= bitmask;\n return createWrapper.apply(null, bindData);\n }\n // fast path for `_.bind`\n var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n}\n\nmodule.exports = createWrapper;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar createWrapper = require('lodash._createwrapper'),\n reNative = require('lodash._renative'),\n slice = require('lodash._slice');\n\n/**\n * Creates a function that, when called, invokes `func` with the `this`\n * binding of `thisArg` and prepends any additional `bind` arguments to those\n * provided to the bound function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to bind.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var func = function(greeting) {\n * return greeting + ' ' + this.name;\n * };\n *\n * func = _.bind(func, { 'name': 'fred' }, 'hi');\n * func();\n * // => 'hi fred'\n */\nfunction bind(func, thisArg) {\n return arguments.length > 2\n ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n : createWrapper(func, 1, null, null, thisArg);\n}\n\nmodule.exports = bind;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar reNative = require('lodash._renative');\n\n/** Used to detect functions containing a `this` reference */\nvar reThis = /\\bthis\\b/;\n\n/**\n * An object used to flag environments features.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n/**\n * Detect if functions can be decompiled by `Function#toString`\n * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).\n *\n * @memberOf _.support\n * @type boolean\n */\nsupport.funcDecomp = !reNative.test(global.WinRTError) && reThis.test(function() { return this; });\n\n/**\n * Detect if `Function#name` is supported (all but IE).\n *\n * @memberOf _.support\n * @type boolean\n */\nsupport.funcNames = typeof Function.name == 'string';\n\nmodule.exports = support;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar bind = require('lodash.bind'),\n identity = require('lodash.identity'),\n setBindData = require('lodash._setbinddata'),\n support = require('lodash.support');\n\n/** Used to detected named functions */\nvar reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n/** Used to detect functions containing a `this` reference */\nvar reThis = /\\bthis\\b/;\n\n/** Native method shortcuts */\nvar fnToString = Function.prototype.toString;\n\n/**\n * The base implementation of `_.createCallback` without support for creating\n * \"_.pluck\" or \"_.where\" style callbacks.\n *\n * @private\n * @param {*} [func=identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of the created callback.\n * @param {number} [argCount] The number of arguments the callback accepts.\n * @returns {Function} Returns a callback function.\n */\nfunction baseCreateCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n // exit early for no `thisArg` or already bound by `Function#bind`\n if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n return func;\n }\n var bindData = func.__bindData__;\n if (typeof bindData == 'undefined') {\n if (support.funcNames) {\n bindData = !func.name;\n }\n bindData = bindData || !support.funcDecomp;\n if (!bindData) {\n var source = fnToString.call(func);\n if (!support.funcNames) {\n bindData = !reFuncName.test(source);\n }\n if (!bindData) {\n // checks if `func` references the `this` keyword and stores the result\n bindData = reThis.test(source);\n setBindData(func, bindData);\n }\n }\n }\n // exit early if there are no `this` references or `func` is bound\n if (bindData === false || (bindData !== true && bindData[1] & 1)) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 2: return function(a, b) {\n return func.call(thisArg, a, b);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n }\n return bind(func, thisArg);\n}\n\nmodule.exports = baseCreateCallback;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreateCallback = require('lodash._basecreatecallback'),\n keys = require('lodash.keys'),\n objectTypes = require('lodash._objecttypes');\n\n/**\n * Iterates over own enumerable properties of an object, executing the callback\n * for each property. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, key, object). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n * console.log(key);\n * });\n * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n */\nvar forOwn = function(collection, callback, thisArg) {\n var index, iterable = collection, result = iterable;\n if (!iterable) return result;\n if (!objectTypes[typeof iterable]) return result;\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n if (callback(iterable[index], index, collection) === false) return result;\n }\n return result\n};\n\nmodule.exports = forOwn;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreateCallback = require('lodash._basecreatecallback'),\n forOwn = require('lodash.forown');\n\n/**\n * Iterates over elements of a collection, executing the callback for each\n * element. The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * Note: As with other \"Collections\" methods, objects with a `length` property\n * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n * may be used for object iteration.\n *\n * @static\n * @memberOf _\n * @alias each\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n * // => logs each number and returns '1,2,3'\n *\n * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n * // => logs each number and returns the object (property order is not guaranteed across environments)\n */\nfunction forEach(collection, callback, thisArg) {\n var index = -1,\n length = collection ? collection.length : 0;\n\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n if (typeof length == 'number') {\n while (++index < length) {\n if (callback(collection[index], index, collection) === false) {\n break;\n }\n }\n } else {\n forOwn(collection, callback);\n }\n return collection;\n}\n\nmodule.exports = forEach;\n","var metric,\nimperial;\n\nmetric = {\n mm: {\n name: {\n singular: 'Millimeter',\n plural: 'Millimeters'\n },\n to_anchor: 1/1000\n },\n cm: {\n name: {\n singular: 'Centimeter',\n plural: 'Centimeters'\n },\n to_anchor: 1/100\n },\n m: {\n name: {\n singular: 'Meter',\n plural: 'Meters'\n },\n to_anchor: 1\n },\n km: {\n name: {\n singular: 'Kilometer',\n plural: 'Kilometers'\n },\n to_anchor: 1000\n }\n};\n\nimperial = {\n 'in': {\n name: {\n singular: 'Inch',\n plural: 'Inches'\n },\n to_anchor: 1/12\n },\n yd: {\n name: {\n singular: 'Yard',\n plural: 'Yards'\n },\n to_anchor: 3\n },\n 'ft-us': {\n name: {\n singular: 'US Survey Foot',\n plural: 'US Survey Feet'\n },\n to_anchor: 1.000002\n },\n ft: {\n name: {\n singular: 'Foot',\n plural: 'Feet'\n },\n to_anchor: 1\n },\n mi: {\n name: {\n singular: 'Mile',\n plural: 'Miles'\n },\n to_anchor: 5280\n }\n};\n\nmodule.exports = {\n metric: metric,\n imperial: imperial,\n _anchors: {\n metric: {\n unit: 'm',\n ratio: 3.28084\n },\n imperial: {\n unit: 'ft',\n ratio: 1/3.28084\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mm2: {\n name: {\n singular: 'Square Millimeter'\n , plural: 'Square Millimeters'\n }\n , to_anchor: 1/1000000\n }\n, cm2: {\n name: {\n singular: 'Centimeter'\n , plural: 'Centimeters'\n }\n , to_anchor: 1/10000\n }\n, m2: {\n name: {\n singular: 'Square Meter'\n , plural: 'Square Meters'\n }\n , to_anchor: 1\n }\n, ha: {\n name: {\n singular: 'Hectare'\n , plural: 'Hectares'\n }\n , to_anchor: 10000\n }\n, km2: {\n name: {\n singular: 'Square Kilometer'\n , plural: 'Square Kilometers'\n }\n , to_anchor: 1000000\n }\n};\n\nimperial = {\n 'in2': {\n name: {\n singular: 'Square Inch'\n , plural: 'Square Inches'\n }\n , to_anchor: 1/144\n }\n, yd2: {\n name: {\n singular: 'Square Yard'\n , plural: 'Square Yards' \n }\n , to_anchor: 9\n }\n, ft2: {\n name: {\n singular: 'Square Foot'\n , plural: 'Square Feet'\n }\n , to_anchor: 1\n }\n, ac: {\n name: {\n singular: 'Acre'\n , plural: 'Acres'\n }\n , to_anchor: 43560\n }\n, mi2: {\n name: {\n singular: 'Square Mile'\n , plural: 'Square Miles'\n }\n , to_anchor: 27878400\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'm2'\n , ratio: 10.7639\n }\n , imperial: {\n unit: 'ft2'\n , ratio: 1/10.7639\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mcg: {\n name: {\n singular: 'Microgram'\n , plural: 'Micrograms'\n }\n , to_anchor: 1/1000000\n }\n, mg: {\n name: {\n singular: 'Milligram'\n , plural: 'Milligrams'\n }\n , to_anchor: 1/1000\n }\n, g: {\n name: {\n singular: 'Gram'\n , plural: 'Grams'\n }\n , to_anchor: 1\n }\n, kg: {\n name: {\n singular: 'Kilogram'\n , plural: 'Kilograms'\n }\n , to_anchor: 1000\n}\n, mt: {\n name: {\n singular: 'Metric Tonne'\n , plural: 'Metric Tonnes'\n }\n , to_anchor: 1000000\n }\n};\n\nimperial = {\n oz: {\n name: {\n singular: 'Ounce'\n , plural: 'Ounces'\n }\n , to_anchor: 1/16\n }\n, lb: {\n name: {\n singular: 'Pound'\n , plural: 'Pounds'\n }\n , to_anchor: 1\n}, t: {\n name: {\n singular: 'Ton',\n plural: 'Tons',\n },\n to_anchor: 2000,\n },\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'g'\n , ratio: 1/453.592\n }\n , imperial: {\n unit: 'lb'\n , ratio: 453.592\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mm3: {\n name: {\n singular: 'Cubic Millimeter'\n , plural: 'Cubic Millimeters'\n }\n , to_anchor: 1/1000000\n }\n, cm3: {\n name: {\n singular: 'Cubic Centimeter'\n , plural: 'Cubic Centimeters'\n }\n , to_anchor: 1/1000\n }\n, ml: {\n name: {\n singular: 'Millilitre'\n , plural: 'Millilitres'\n }\n , to_anchor: 1/1000\n }\n, cl: {\n name: {\n singular: 'Centilitre'\n , plural: 'Centilitres'\n }\n , to_anchor: 1/100\n }\n, dl: {\n name: {\n singular: 'Decilitre'\n , plural: 'Decilitres'\n }\n , to_anchor: 1/10\n }\n, l: {\n name: {\n singular: 'Litre'\n , plural: 'Litres'\n }\n , to_anchor: 1\n }\n, kl: {\n name: {\n singular: 'Kilolitre'\n , plural: 'Kilolitres'\n }\n , to_anchor: 1000\n }\n, m3: {\n name: {\n singular: 'Cubic meter'\n , plural: 'Cubic meters'\n }\n , to_anchor: 1000\n }\n, km3: {\n name: {\n singular: 'Cubic kilometer'\n , plural: 'Cubic kilometers'\n }\n , to_anchor: 1000000000000\n }\n\n// Swedish units\n, krm: {\n name: {\n singular: 'Matsked'\n , plural: 'Matskedar'\n }\n , to_anchor: 1/1000\n}\n, tsk: {\n name: {\n singular: 'Tesked'\n , plural: 'Teskedar'\n }\n , to_anchor: 5/1000\n }\n, msk: {\n name: {\n singular: 'Matsked'\n , plural: 'Matskedar'\n }\n , to_anchor: 15/1000\n }\n, kkp: {\n name: {\n singular: 'Kaffekopp'\n , plural: 'Kaffekoppar'\n }\n , to_anchor: 150/1000\n }\n, glas: {\n name: {\n singular: 'Glas'\n , plural: 'Glas'\n }\n , to_anchor: 200/1000\n }\n, kanna: {\n name: {\n singular: 'Kanna'\n , plural: 'Kannor'\n }\n , to_anchor: 2.617\n }\n};\n\nimperial = {\n tsp: {\n name: {\n singular: 'Teaspoon'\n , plural: 'Teaspoons'\n }\n , to_anchor: 1/6\n }\n, Tbs: {\n name: {\n singular: 'Tablespoon'\n , plural: 'Tablespoons'\n }\n , to_anchor: 1/2\n }\n, in3: {\n name: {\n singular: 'Cubic inch'\n , plural: 'Cubic inches'\n }\n , to_anchor: 0.55411\n }\n, 'fl-oz': {\n name: {\n singular: 'Fluid Ounce'\n , plural: 'Fluid Ounces'\n }\n , to_anchor: 1\n }\n, cup: {\n name: {\n singular: 'Cup'\n , plural: 'Cups'\n }\n , to_anchor: 8\n }\n, pnt: {\n name: {\n singular: 'Pint'\n , plural: 'Pints'\n }\n , to_anchor: 16\n }\n, qt: {\n name: {\n singular: 'Quart'\n , plural: 'Quarts'\n }\n , to_anchor: 32\n }\n, gal: {\n name: {\n singular: 'Gallon'\n , plural: 'Gallons'\n }\n , to_anchor: 128\n }\n, ft3: {\n name: {\n singular: 'Cubic foot'\n , plural: 'Cubic feet'\n }\n , to_anchor: 957.506\n }\n, yd3: {\n name: {\n singular: 'Cubic yard'\n , plural: 'Cubic yards'\n }\n , to_anchor: 25852.7\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'l'\n , ratio: 33.8140226\n }\n , imperial: {\n unit: 'fl-oz'\n , ratio: 1/33.8140226\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n ea: {\n name: {\n singular: 'Each'\n , plural: 'Each'\n }\n , to_anchor: 1\n },\n dz: {\n name: {\n singular: 'Dozen'\n , plural: 'Dozens'\n }\n , to_anchor: 12\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: {}\n, _anchors: {\n metric: {\n unit: 'ea'\n , ratio: 1\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n C: {\n name: {\n singular: 'degree Celsius'\n , plural: 'degrees Celsius'\n }\n , to_anchor: 1\n , anchor_shift: 0\n },\n K: {\n name: {\n singular: 'degree Kelvin'\n , plural: 'degrees Kelvin'\n }\n , to_anchor: 1\n , anchor_shift: 273.15\n }\n};\n\nimperial = {\n F: {\n name: {\n singular: 'degree Fahrenheit'\n , plural: 'degrees Fahrenheit'\n }\n , to_anchor: 1\n },\n R: {\n name: {\n singular: 'degree Rankine'\n , plural: 'degrees Rankine'\n }\n , to_anchor: 1\n , anchor_shift: 459.67\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'C'\n , transform: function (C) { return C / (5/9) + 32 }\n }\n , imperial: {\n unit: 'F'\n , transform: function (F) { return (F - 32) * (5/9) }\n }\n }\n};\n\n","var time;\nvar daysInYear = 365.25;\n\ntime = {\n ns: {\n name: {\n singular: 'Nanosecond'\n , plural: 'Nanoseconds'\n }\n , to_anchor: 1/1000000000\n }\n, mu: {\n name: {\n singular: 'Microsecond'\n , plural: 'Microseconds'\n }\n , to_anchor: 1/1000000\n }\n, ms: {\n name: {\n singular: 'Millisecond'\n , plural: 'Milliseconds'\n }\n , to_anchor: 1/1000\n }\n, s: {\n name: {\n singular: 'Second'\n , plural: 'Seconds'\n }\n , to_anchor: 1\n }\n, min: {\n name: {\n singular: 'Minute'\n , plural: 'Minutes'\n }\n , to_anchor: 60\n }\n, h: {\n name: {\n singular: 'Hour'\n , plural: 'Hours'\n }\n , to_anchor: 60 * 60 \n }\n, d: {\n name: {\n singular: 'Day'\n , plural: 'Days'\n }\n , to_anchor: 60 * 60 * 24\n }\n, week: {\n name: {\n singular: 'Week'\n , plural: 'Weeks'\n }\n , to_anchor: 60 * 60 * 24 * 7\n }\n, month: {\n name: {\n singular: 'Month'\n , plural: 'Months'\n }\n , to_anchor: 60 * 60 * 24 * daysInYear / 12\n }\n, year: {\n name: {\n singular: 'Year'\n , plural: 'Years'\n }\n , to_anchor: 60 * 60 * 24 * daysInYear\n }\n};\n\n\nmodule.exports = {\n metric: time \n, _anchors: {\n metric: {\n unit: 's'\n , ratio: 1\n }\n }\n};\n","var bits\n , bytes;\n\nbits = {\n b: {\n name: {\n singular: 'Bit'\n , plural: 'Bits'\n }\n , to_anchor: 1\n }\n, Kb: {\n name: {\n singular: 'Kilobit'\n , plural: 'Kilobits'\n }\n , to_anchor: 1024\n }\n, Mb: {\n name: {\n singular: 'Megabit'\n , plural: 'Megabits'\n }\n , to_anchor: 1048576\n }\n, Gb: {\n name: {\n singular: 'Gigabit'\n , plural: 'Gigabits'\n }\n , to_anchor: 1073741824\n }\n, Tb: {\n name: {\n singular: 'Terabit'\n , plural: 'Terabits'\n }\n , to_anchor: 1099511627776\n }\n};\n\nbytes = {\n B: {\n name: {\n singular: 'Byte'\n , plural: 'Bytes'\n }\n , to_anchor: 1\n }\n, KB: {\n name: {\n singular: 'Kilobyte'\n , plural: 'Kilobytes'\n }\n , to_anchor: 1024\n }\n, MB: {\n name: {\n singular: 'Megabyte'\n , plural: 'Megabytes'\n }\n , to_anchor: 1048576\n }\n, GB: {\n name: {\n singular: 'Gigabyte'\n , plural: 'Gigabytes'\n }\n , to_anchor: 1073741824\n }\n, TB: {\n name: {\n singular: 'Terabyte'\n , plural: 'Terabytes'\n }\n , to_anchor: 1099511627776\n }\n};\n\nmodule.exports = {\n bits: bits\n, bytes: bytes\n, _anchors: {\n bits: {\n unit: 'b'\n , ratio: 1/8\n }\n , bytes: {\n unit: 'B'\n , ratio: 8\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n ppm: {\n name: {\n singular: 'Part-per Million'\n , plural: 'Parts-per Million'\n }\n , to_anchor: 1\n }\n , ppb: {\n name: {\n singular: 'Part-per Billion'\n , plural: 'Parts-per Billion'\n }\n , to_anchor: .001\n }\n , ppt: {\n name: {\n singular: 'Part-per Trillion'\n , plural: 'Parts-per Trillion'\n }\n , to_anchor: .000001\n }\n , ppq: {\n name: {\n singular: 'Part-per Quadrillion'\n , plural: 'Parts-per Quadrillion'\n }\n , to_anchor: .000000001\n }\n};\n\nmodule.exports = {\n metric: metric\n , imperial: {}\n , _anchors: {\n metric: {\n unit: 'ppm'\n , ratio: .000001\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'm/s': {\n name: {\n singular: 'Metre per second'\n , plural: 'Metres per second'\n }\n , to_anchor: 3.6\n }\n, 'km/h': {\n name: {\n singular: 'Kilometre per hour'\n , plural: 'Kilometres per hour'\n }\n , to_anchor: 1\n }\n}\n\n imperial = {\n 'm/h': {\n name: {\n singular: 'Mile per hour'\n , plural: 'Miles per hour'\n }\n , to_anchor: 1\n }\n , knot: {\n name: {\n singular: 'Knot'\n , plural: 'Knots'\n }\n , to_anchor: 1.150779\n }\n , 'ft/s': {\n name: {\n singular: 'Foot per second'\n , plural: 'Feet per second'\n }\n , to_anchor: 0.681818\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'km/h'\n , ratio: 1/1.609344\n }\n , imperial: {\n unit: 'm/h'\n , ratio: 1.609344\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'min/km': {\n name: {\n singular: 'Minute per kilometre'\n , plural: 'Minutes per kilometre'\n }\n , to_anchor: 0.06\n }\n ,'s/m': {\n name: {\n singular: 'Second per metre'\n , plural: 'Seconds per metre'\n }\n , to_anchor: 1\n }\n}\n\nimperial = {\n 'min/mi': {\n name: {\n singular: 'Minute per mile'\n , plural: 'Minutes per mile'\n }\n , to_anchor: 0.0113636\n }\n , 's/ft': {\n name: {\n singular: 'Second per foot'\n , plural: 'Seconds per foot'\n }\n , to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 's/m'\n , ratio: 0.3048\n }\n , imperial: {\n unit: 's/ft'\n , ratio: 1/0.3048\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n Pa: {\n name: {\n singular: 'pascal'\n , plural: 'pascals'\n }\n , to_anchor: 1/1000\n }\n, kPa: {\n name: {\n singular: 'kilopascal'\n , plural: 'kilopascals'\n }\n , to_anchor: 1\n }\n, MPa: {\n name: {\n singular: 'megapascal'\n , plural: 'megapascals'\n }\n , to_anchor: 1000\n }\n, hPa: {\n name: {\n singular: 'hectopascal'\n , plural: 'hectopascals'\n }\n , to_anchor: 1/10\n }\n, bar: {\n name: {\n singular: 'bar'\n , plural: 'bar'\n }\n , to_anchor: 100\n }\n, torr: {\n name: {\n singular: 'torr'\n , plural: 'torr'\n }\n , to_anchor: 101325/760000\n }\n};\n\nimperial = {\n psi: {\n name: {\n singular: 'pound per square inch'\n , plural: 'pounds per square inch'\n }\n , to_anchor: 1/1000\n }\n, ksi: {\n name: {\n singular: 'kilopound per square inch'\n , plural: 'kilopound per square inch'\n }\n , to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'kPa'\n , ratio: 0.00014503768078\n }\n , imperial: {\n unit: 'psi'\n , ratio: 1/0.00014503768078\n }\n }\n};\n","var current;\n\ncurrent = {\n A: {\n name: {\n singular: 'Ampere'\n , plural: 'Amperes'\n }\n , to_anchor: 1\n }\n, mA: {\n name: {\n singular: 'Milliampere'\n , plural: 'Milliamperes'\n }\n , to_anchor: .001\n }\n, kA: {\n name: {\n singular: 'Kiloampere'\n , plural: 'Kiloamperes'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: current\n, _anchors: {\n metric: {\n unit: 'A'\n , ratio: 1\n }\n }\n};\n","var voltage;\n\nvoltage = {\n V: {\n name: {\n singular: 'Volt'\n , plural: 'Volts'\n }\n , to_anchor: 1\n }\n, mV: {\n name: {\n singular: 'Millivolt'\n , plural: 'Millivolts'\n }\n , to_anchor: .001\n }\n, kV: {\n name: {\n singular: 'Kilovolt'\n , plural: 'Kilovolts'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: voltage\n, _anchors: {\n metric: {\n unit: 'V'\n , ratio: 1\n }\n }\n};\n","var power;\n\npower = {\n W: {\n name: {\n singular: 'Watt'\n , plural: 'Watts'\n }\n , to_anchor: 1\n }\n, mW: {\n name: {\n singular: 'Milliwatt'\n , plural: 'Milliwatts'\n }\n , to_anchor: .001\n }\n, kW: {\n name: {\n singular: 'Kilowatt'\n , plural: 'Kilowatts'\n }\n , to_anchor: 1000\n }\n, MW: {\n name: {\n singular: 'Megawatt'\n , plural: 'Megawatts'\n }\n , to_anchor: 1000000\n }\n, GW: {\n name: {\n singular: 'Gigawatt'\n , plural: 'Gigawatts'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: power\n, _anchors: {\n metric: {\n unit: 'W'\n , ratio: 1\n }\n }\n};\n","var reactivePower;\n\nreactivePower = {\n VAR: {\n name: {\n singular: 'Volt-Ampere Reactive'\n , plural: 'Volt-Amperes Reactive'\n }\n , to_anchor: 1\n }\n, mVAR: {\n name: {\n singular: 'Millivolt-Ampere Reactive'\n , plural: 'Millivolt-Amperes Reactive'\n }\n , to_anchor: .001\n }\n, kVAR: {\n name: {\n singular: 'Kilovolt-Ampere Reactive'\n , plural: 'Kilovolt-Amperes Reactive'\n }\n , to_anchor: 1000\n }\n, MVAR: {\n name: {\n singular: 'Megavolt-Ampere Reactive'\n , plural: 'Megavolt-Amperes Reactive'\n }\n , to_anchor: 1000000\n }\n, GVAR: {\n name: {\n singular: 'Gigavolt-Ampere Reactive'\n , plural: 'Gigavolt-Amperes Reactive'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: reactivePower\n, _anchors: {\n metric: {\n unit: 'VAR'\n , ratio: 1\n }\n }\n};\n","var apparentPower;\n\napparentPower = {\n VA: {\n name: {\n singular: 'Volt-Ampere'\n , plural: 'Volt-Amperes'\n }\n , to_anchor: 1\n }\n, mVA: {\n name: {\n singular: 'Millivolt-Ampere'\n , plural: 'Millivolt-Amperes'\n }\n , to_anchor: .001\n }\n, kVA: {\n name: {\n singular: 'Kilovolt-Ampere'\n , plural: 'Kilovolt-Amperes'\n }\n , to_anchor: 1000\n }\n, MVA: {\n name: {\n singular: 'Megavolt-Ampere'\n , plural: 'Megavolt-Amperes'\n }\n , to_anchor: 1000000\n }\n, GVA: {\n name: {\n singular: 'Gigavolt-Ampere'\n , plural: 'Gigavolt-Amperes'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: apparentPower\n, _anchors: {\n metric: {\n unit: 'VA'\n , ratio: 1\n }\n }\n};\n","var energy;\n\nenergy = {\n Wh: {\n name: {\n singular: 'Watt-hour'\n , plural: 'Watt-hours'\n }\n , to_anchor: 3600\n }\n, mWh: {\n name: {\n singular: 'Milliwatt-hour'\n , plural: 'Milliwatt-hours'\n }\n , to_anchor: 3.6\n }\n, kWh: {\n name: {\n singular: 'Kilowatt-hour'\n , plural: 'Kilowatt-hours'\n }\n , to_anchor: 3600000\n }\n, MWh: {\n name: {\n singular: 'Megawatt-hour'\n , plural: 'Megawatt-hours'\n }\n , to_anchor: 3600000000\n }\n, GWh: {\n name: {\n singular: 'Gigawatt-hour'\n , plural: 'Gigawatt-hours'\n }\n , to_anchor: 3600000000000\n }\n, J: {\n name: {\n singular: 'Joule'\n , plural: 'Joules'\n }\n , to_anchor: 1\n }\n, kJ: {\n name: {\n singular: 'Kilojoule'\n , plural: 'Kilojoules'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: energy\n, _anchors: {\n metric: {\n unit: 'J'\n , ratio: 1\n }\n }\n};\n","var reactiveEnergy;\n\nreactiveEnergy = {\n VARh: {\n name: {\n singular: 'Volt-Ampere Reactive Hour'\n , plural: 'Volt-Amperes Reactive Hour'\n }\n , to_anchor: 1\n }\n, mVARh: {\n name: {\n singular: 'Millivolt-Ampere Reactive Hour'\n , plural: 'Millivolt-Amperes Reactive Hour'\n }\n , to_anchor: .001\n }\n, kVARh: {\n name: {\n singular: 'Kilovolt-Ampere Reactive Hour'\n , plural: 'Kilovolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000\n }\n, MVARh: {\n name: {\n singular: 'Megavolt-Ampere Reactive Hour'\n , plural: 'Megavolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000000\n }\n, GVARh: {\n name: {\n singular: 'Gigavolt-Ampere Reactive Hour'\n , plural: 'Gigavolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: reactiveEnergy\n, _anchors: {\n metric: {\n unit: 'VARh'\n , ratio: 1\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'mm3/s': {\n name: {\n singular: 'Cubic Millimeter per second'\n , plural: 'Cubic Millimeters per second'\n }\n , to_anchor: 1/1000000\n }\n, 'cm3/s': {\n name: {\n singular: 'Cubic Centimeter per second'\n , plural: 'Cubic Centimeters per second'\n }\n , to_anchor: 1/1000\n }\n, 'ml/s': {\n name: {\n singular: 'Millilitre per second'\n , plural: 'Millilitres per second'\n }\n , to_anchor: 1/1000\n }\n, 'cl/s': {\n name: {\n singular: 'Centilitre per second'\n , plural: 'Centilitres per second'\n }\n , to_anchor: 1/100\n }\n, 'dl/s': {\n name: {\n singular: 'Decilitre per second'\n , plural: 'Decilitres per second'\n }\n , to_anchor: 1/10\n }\n, 'l/s': {\n name: {\n singular: 'Litre per second'\n , plural: 'Litres per second'\n }\n , to_anchor: 1\n }\n, 'l/min': {\n name: {\n singular: 'Litre per minute'\n , plural: 'Litres per minute'\n }\n , to_anchor: 1/60\n }\n, 'l/h': {\n name: {\n singular: 'Litre per hour'\n , plural: 'Litres per hour'\n }\n , to_anchor: 1/3600\n }\n, 'kl/s': {\n name: {\n singular: 'Kilolitre per second'\n , plural: 'Kilolitres per second'\n }\n , to_anchor: 1000\n }\n, 'kl/min': {\n name: {\n singular: 'Kilolitre per minute'\n , plural: 'Kilolitres per minute'\n }\n , to_anchor: 50/3\n }\n, 'kl/h': {\n name: {\n singular: 'Kilolitre per hour'\n , plural: 'Kilolitres per hour'\n }\n , to_anchor: 5/18\n }\n, 'm3/s': {\n name: {\n singular: 'Cubic meter per second'\n , plural: 'Cubic meters per second'\n }\n , to_anchor: 1000\n }\n, 'm3/min': {\n name: {\n singular: 'Cubic meter per minute'\n , plural: 'Cubic meters per minute'\n }\n , to_anchor: 50/3\n }\n, 'm3/h': {\n name: {\n singular: 'Cubic meter per hour'\n , plural: 'Cubic meters per hour'\n }\n , to_anchor: 5/18\n }\n, 'km3/s': {\n name: {\n singular: 'Cubic kilometer per second'\n , plural: 'Cubic kilometers per second'\n }\n , to_anchor: 1000000000000\n }\n};\n\nimperial = {\n 'tsp/s': {\n name: {\n singular: 'Teaspoon per second'\n , plural: 'Teaspoons per second'\n }\n , to_anchor: 1/6\n }\n, 'Tbs/s': {\n name: {\n singular: 'Tablespoon per second'\n , plural: 'Tablespoons per second'\n }\n , to_anchor: 1/2\n }\n, 'in3/s': {\n name: {\n singular: 'Cubic inch per second'\n , plural: 'Cubic inches per second'\n }\n , to_anchor: 0.55411\n }\n, 'in3/min': {\n name: {\n singular: 'Cubic inch per minute'\n , plural: 'Cubic inches per minute'\n }\n , to_anchor: 0.55411/60\n }\n, 'in3/h': {\n name: {\n singular: 'Cubic inch per hour'\n , plural: 'Cubic inches per hour'\n }\n , to_anchor: 0.55411/3600\n }\n, 'fl-oz/s': {\n name: {\n singular: 'Fluid Ounce per second'\n , plural: 'Fluid Ounces per second'\n }\n , to_anchor: 1\n }\n, 'fl-oz/min': {\n name: {\n singular: 'Fluid Ounce per minute'\n , plural: 'Fluid Ounces per minute'\n }\n , to_anchor: 1/60\n }\n, 'fl-oz/h': {\n name: {\n singular: 'Fluid Ounce per hour'\n , plural: 'Fluid Ounces per hour'\n }\n , to_anchor: 1/3600\n }\n, 'cup/s': {\n name: {\n singular: 'Cup per second'\n , plural: 'Cups per second'\n }\n , to_anchor: 8\n }\n, 'pnt/s': {\n name: {\n singular: 'Pint per second'\n , plural: 'Pints per second'\n }\n , to_anchor: 16\n }\n, 'pnt/min': {\n name: {\n singular: 'Pint per minute'\n , plural: 'Pints per minute'\n }\n , to_anchor: 4/15\n }\n, 'pnt/h': {\n name: {\n singular: 'Pint per hour'\n , plural: 'Pints per hour'\n }\n , to_anchor: 1/225\n }\n, 'qt/s': {\n name: {\n singular: 'Quart per second'\n , plural: 'Quarts per second'\n }\n , to_anchor: 32\n }\n, 'gal/s': {\n name: {\n singular: 'Gallon per second'\n , plural: 'Gallons per second'\n }\n , to_anchor: 128\n }\n, 'gal/min': {\n name: {\n singular: 'Gallon per minute'\n , plural: 'Gallons per minute'\n }\n , to_anchor: 32/15\n }\n, 'gal/h': {\n name: {\n singular: 'Gallon per hour'\n , plural: 'Gallons per hour'\n }\n , to_anchor: 8/225\n }\n, 'ft3/s': {\n name: {\n singular: 'Cubic foot per second'\n , plural: 'Cubic feet per second'\n }\n , to_anchor: 957.506\n }\n, 'ft3/min': {\n name: {\n singular: 'Cubic foot per minute'\n , plural: 'Cubic feet per minute'\n }\n , to_anchor: 957.506/60\n }\n, 'ft3/h': {\n name: {\n singular: 'Cubic foot per hour'\n , plural: 'Cubic feet per hour'\n }\n , to_anchor: 957.506/3600\n }\n, 'yd3/s': {\n name: {\n singular: 'Cubic yard per second'\n , plural: 'Cubic yards per second'\n }\n , to_anchor: 25852.7\n }\n, 'yd3/min': {\n name: {\n singular: 'Cubic yard per minute'\n , plural: 'Cubic yards per minute'\n }\n , to_anchor: 25852.7/60\n }\n, 'yd3/h': {\n name: {\n singular: 'Cubic yard per hour'\n , plural: 'Cubic yards per hour'\n }\n , to_anchor: 25852.7/3600\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'l/s'\n , ratio: 33.8140227\n }\n , imperial: {\n unit: 'fl-oz/s'\n , ratio: 1/33.8140227\n }\n }\n};\n","var metric,\nimperial;\n\nmetric = {\n 'lx': {\n name: {\n singular: 'Lux',\n plural: 'Lux'\n },\n to_anchor: 1\n }\n};\n\nimperial = {\n 'ft-cd': {\n name: {\n singular: 'Foot-candle',\n plural: 'Foot-candles'\n },\n to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric,\n imperial: imperial,\n _anchors: {\n metric: {\n unit: 'lx',\n ratio: 1/10.76391\n },\n imperial: {\n unit: 'ft-cd', \n\t ratio: 10.76391\n }\n }\n};\n","var frequency;\n\nfrequency = {\n mHz: {\n name: {\n singular: 'millihertz'\n , plural: 'millihertz'\n }\n , to_anchor: 1/1000\n }\n, Hz: {\n name: {\n singular: 'hertz'\n , plural: 'hertz'\n }\n , to_anchor: 1\n }\n, kHz: {\n name: {\n singular: 'kilohertz'\n , plural: 'kilohertz'\n }\n , to_anchor: 1000\n }\n, MHz: {\n name: {\n singular: 'megahertz'\n , plural: 'megahertz'\n }\n , to_anchor: 1000 * 1000\n }\n, GHz: {\n name: {\n singular: 'gigahertz'\n , plural: 'gigahertz'\n }\n , to_anchor: 1000 * 1000 * 1000\n }\n, THz: {\n name: {\n singular: 'terahertz'\n , plural: 'terahertz'\n }\n , to_anchor: 1000 * 1000 * 1000 * 1000\n }\n, rpm: {\n name: {\n singular: 'rotation per minute'\n , plural: 'rotations per minute'\n }\n , to_anchor: 1/60\n }\n, \"deg/s\": {\n name: {\n singular: 'degree per second'\n , plural: 'degrees per second'\n }\n , to_anchor: 1/360\n }\n, \"rad/s\": {\n name: {\n singular: 'radian per second'\n , plural: 'radians per second'\n }\n , to_anchor: 1/(Math.PI * 2)\n }\n};\n\n\nmodule.exports = {\n metric: frequency\n, _anchors: {\n frequency: {\n unit: 'hz'\n , ratio: 1\n }\n }\n};\n","var angle;\n\nangle = {\n rad: {\n name: {\n singular: 'radian'\n , plural: 'radians'\n }\n , to_anchor: 180/Math.PI\n }\n, deg: {\n name: {\n singular: 'degree'\n , plural: 'degrees'\n }\n , to_anchor: 1\n }\n, grad: {\n name: {\n singular: 'gradian'\n , plural: 'gradians'\n }\n , to_anchor: 9/10\n }\n, arcmin: {\n name: {\n singular: 'arcminute'\n , plural: 'arcminutes'\n }\n , to_anchor: 1/60\n }\n, arcsec: {\n name: {\n singular: 'arcsecond'\n , plural: 'arcseconds'\n }\n , to_anchor: 1/3600\n }\n};\n\nmodule.exports = {\n metric: angle\n, _anchors: {\n metric: {\n unit: 'deg'\n , ratio: 1\n }\n }\n};\n","var convert\n , keys = require('lodash.keys')\n , each = require('lodash.foreach')\n , measures = {\n length: require('./definitions/length')\n , area: require('./definitions/area')\n , mass: require('./definitions/mass')\n , volume: require('./definitions/volume')\n , each: require('./definitions/each')\n , temperature: require('./definitions/temperature')\n , time: require('./definitions/time')\n , digital: require('./definitions/digital')\n , partsPer: require('./definitions/partsPer')\n , speed: require('./definitions/speed')\n , pace: require('./definitions/pace')\n , pressure: require('./definitions/pressure')\n , current: require('./definitions/current')\n , voltage: require('./definitions/voltage')\n , power: require('./definitions/power')\n , reactivePower: require('./definitions/reactivePower')\n , apparentPower: require('./definitions/apparentPower')\n , energy: require('./definitions/energy')\n , reactiveEnergy: require('./definitions/reactiveEnergy')\n , volumeFlowRate: require('./definitions/volumeFlowRate')\n , illuminance: require('./definitions/illuminance')\n , frequency: require('./definitions/frequency')\n , angle : require('./definitions/angle')\n }\n , Converter;\n\nConverter = function (numerator, denominator) {\n if(denominator)\n this.val = numerator / denominator;\n else\n this.val = numerator;\n};\n\n/**\n* Lets the converter know the source unit abbreviation\n*/\nConverter.prototype.from = function (from) {\n if(this.destination)\n throw new Error('.from must be called before .to');\n\n this.origin = this.getUnit(from);\n\n if(!this.origin) {\n this.throwUnsupportedUnitError(from);\n }\n\n return this;\n};\n\n/**\n* Converts the unit and returns the value\n*/\nConverter.prototype.to = function (to) {\n if(!this.origin)\n throw new Error('.to must be called after .from');\n\n this.destination = this.getUnit(to);\n\n var result\n , transform;\n\n if(!this.destination) {\n this.throwUnsupportedUnitError(to);\n }\n\n // Don't change the value if origin and destination are the same\n if (this.origin.abbr === this.destination.abbr) {\n return this.val;\n }\n\n // You can't go from liquid to mass, for example\n if(this.destination.measure != this.origin.measure) {\n throw new Error('Cannot convert incompatible measures of '\n + this.destination.measure + ' and ' + this.origin.measure);\n }\n\n /**\n * Convert from the source value to its anchor inside the system\n */\n result = this.val * this.origin.unit.to_anchor;\n\n /**\n * For some changes it's a simple shift (C to K)\n * So we'll add it when convering into the unit (later)\n * and subtract it when converting from the unit\n */\n if (this.origin.unit.anchor_shift) {\n result -= this.origin.unit.anchor_shift\n }\n\n /**\n * Convert from one system to another through the anchor ratio. Some conversions\n * aren't ratio based or require more than a simple shift. We can provide a custom\n * transform here to provide the direct result\n */\n if(this.origin.system != this.destination.system) {\n transform = measures[this.origin.measure]._anchors[this.origin.system].transform;\n if (typeof transform === 'function') {\n result = transform(result)\n }\n else {\n result *= measures[this.origin.measure]._anchors[this.origin.system].ratio;\n }\n }\n\n /**\n * This shift has to be done after the system conversion business\n */\n if (this.destination.unit.anchor_shift) {\n result += this.destination.unit.anchor_shift;\n }\n\n /**\n * Convert to another unit inside the destination system\n */\n return result / this.destination.unit.to_anchor;\n};\n\n/**\n* Converts the unit to the best available unit.\n*/\nConverter.prototype.toBest = function(options) {\n if(!this.origin)\n throw new Error('.toBest must be called after .from');\n\n var options = Object.assign({\n exclude: [],\n cutOffNumber: 1,\n }, options)\n\n var best;\n /**\n Looks through every possibility for the 'best' available unit.\n i.e. Where the value has the fewest numbers before the decimal point,\n but is still higher than 1.\n */\n each(this.possibilities(), function(possibility) {\n var unit = this.describe(possibility);\n var isIncluded = options.exclude.indexOf(possibility) === -1;\n\n if (isIncluded && unit.system === this.origin.system) {\n var result = this.to(possibility);\n if (!best || (result >= options.cutOffNumber && result < best.val)) {\n best = {\n val: result,\n unit: possibility,\n singular: unit.singular,\n plural: unit.plural\n };\n }\n }\n }.bind(this));\n\n return best;\n}\n\n/**\n* Finds the unit\n*/\nConverter.prototype.getUnit = function (abbr) {\n var found;\n\n each(measures, function (systems, measure) {\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n each(units, function (unit, testAbbr) {\n if(testAbbr == abbr) {\n found = {\n abbr: abbr\n , measure: measure\n , system: system\n , unit: unit\n };\n return false;\n }\n });\n\n if(found)\n return false;\n });\n\n if(found)\n return false;\n });\n\n return found;\n};\n\nvar describe = function(resp) {\n return {\n abbr: resp.abbr\n , measure: resp.measure\n , system: resp.system\n , singular: resp.unit.name.singular\n , plural: resp.unit.name.plural\n };\n}\n\n/**\n* An alias for getUnit\n*/\nConverter.prototype.describe = function (abbr) {\n var resp = Converter.prototype.getUnit(abbr);\n var desc = null;\n\n try {\n desc = describe(resp);\n } catch(err) {\n this.throwUnsupportedUnitError(abbr);\n }\n\n return desc;\n};\n\n/**\n* Detailed list of all supported units\n*/\nConverter.prototype.list = function (measure) {\n var list = [];\n\n each(measures, function (systems, testMeasure) {\n if(measure && measure !== testMeasure)\n return;\n\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n each(units, function (unit, abbr) {\n list = list.concat(describe({\n abbr: abbr,\n measure: testMeasure\n , system: system\n , unit: unit\n }));\n });\n });\n });\n\n return list;\n};\n\nConverter.prototype.throwUnsupportedUnitError = function (what) {\n var validUnits = [];\n\n each(measures, function (systems, measure) {\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n validUnits = validUnits.concat(keys(units));\n });\n });\n\n throw new Error('Unsupported unit ' + what + ', use one of: ' + validUnits.join(', '));\n}\n\n/**\n* Returns the abbreviated measures that the value can be\n* converted to.\n*/\nConverter.prototype.possibilities = function (measure) {\n var possibilities = [];\n if(!this.origin && !measure) {\n\t each(keys(measures), function (measure){\n\t\t each(measures[measure], function (units, system) {\n\t\t if(system == '_anchors')\n\t\t return false;\n\n\t\t possibilities = possibilities.concat(keys(units));\n\t\t });\n\t });\n } else {\n\t measure = measure || this.origin.measure;\n\t each(measures[measure], function (units, system) {\n\t if(system == '_anchors')\n\t return false;\n\n\t possibilities = possibilities.concat(keys(units));\n\t });\n }\n\n return possibilities;\n};\n\n/**\n* Returns the abbreviated measures that the value can be\n* converted to.\n*/\nConverter.prototype.measures = function () {\n return keys(measures);\n};\n\nconvert = function (value) {\n return new Converter(value);\n};\n\nmodule.exports = convert;\n","export * from \"./units\"\nexport * from \"./common\"\nexport * from \"./source\"\nexport * from \"./schematic\"\nexport * from \"./pcb\"\nexport * from \"./any_soup_element\"\n","import convertUnits from \"convert-units\"\n\nconst si_prefix_multiplier = {\n tera: 10e12,\n T: 10e12,\n giga: 10e9,\n G: 10e9,\n mega: 10e6,\n M: 10e6,\n kilo: 10e3,\n k: 10e3,\n deci: 10e-1,\n d: 10e-1,\n centi: 10e-2,\n c: 10e-2,\n milli: 10e-3,\n m: 10e-3,\n micro: 10e-6,\n u: 10e-6,\n µ: 10e-6,\n nano: 10e-9,\n n: 10e-9,\n pico: 10e-12,\n p: 10e-12,\n}\nconst si_prefixes = Object.keys(si_prefix_multiplier)\n\nconst target_conversion = {\n mass: \"g\",\n length: \"mm\",\n time: \"ms\",\n volume: \"ml\",\n angle: \"deg\",\n}\n\nfunction getSiPrefixMultiplierFromUnit(v: string): number {\n for (const prefix of si_prefixes) {\n if (v.startsWith(prefix)) {\n return si_prefix_multiplier[prefix as keyof typeof si_prefix_multiplier]\n }\n }\n return 1\n}\n\nexport const parseAndConvertSiUnit = <\n T extends\n | string\n | number\n | undefined\n | { x: string | number; y: string | number }\n>(\n v: T\n): {\n unit: string | null\n value: T extends { x: string | number; y: string | number }\n ? null | { x: number; y: number }\n : null | number\n} => {\n if (typeof v === \"undefined\") return { unit: null, value: null }\n if (typeof v === \"string\" && v.match(/^[\\d\\.]+$/))\n return { value: parseFloat(v) as any, unit: null }\n if (typeof v === \"number\") return { value: v as any, unit: null }\n if (typeof v === \"object\" && \"x\" in v && \"y\" in v) {\n return {\n unit: parseAndConvertSiUnit(v.x).unit,\n value: {\n x: parseAndConvertSiUnit(v.x as any).value as number,\n y: parseAndConvertSiUnit(v.y as any).value as number,\n } as any,\n }\n }\n const unit_reversed = v\n .split(\"\")\n .reverse()\n .join(\"\")\n .match(/[a-zA-Z]+/)?.[0]\n if (!unit_reversed) {\n throw new Error(`Could not determine unit: \"${v}\"`)\n }\n const unit = unit_reversed.split(\"\").reverse().join(\"\")\n const value = v.slice(0, -unit.length)\n let measure\n try {\n measure = convertUnits().describe(unit as any)?.measure\n } catch (e) {}\n if (measure) {\n const target_unit = (target_conversion as any)[measure]\n if (!target_unit) {\n throw new Error(\n `Could not determine target unit for measure: \"${measure}\"`\n )\n }\n return {\n unit,\n value: convertUnits(parseFloat(value))\n .from(unit as any)\n .to(target_unit) as any,\n }\n } else {\n return {\n unit,\n value: (getSiPrefixMultiplierFromUnit(unit) * parseFloat(value)) as any,\n }\n }\n}\n","import { parseAndConvertSiUnit } from \"src/utils/convert-si-unit-to-number\"\nimport { z } from \"zod\"\n\n// // Currently, removing uncommon SI Prefixes for type simplicity.\n// export type SIPrefix =\n// // | \"y\"\n// // | \"yocto\"\n// // | \"z\"\n// // | \"zepto\"\n// // | \"atto\"\n// // | \"a\"\n// | \"femto\"\n// | \"f\"\n// | \"u\"\n// | \"micro\"\n// // | \"d\"\n// // | \"deci\"\n// | \"c\"\n// | \"centi\"\n// | \"m\"\n// | \"milli\"\n// | \"k\"\n// | \"kilo\"\n// | \"M\"\n// | \"mega\"\n// // | \"G\"\n// // | \"T\"\n// // | \"P\"\n// // | \"E\"\n// // | \"Z\"\n// // | \"Y\"\n\n// export type UnitAbbreviations = {\n// farad: \"F\"\n// ohm: \"Ω\"\n// henry: \"H\"\n// meter: \"m\"\n// volt: \"V\"\n// inch: \"in\"\n// foot: \"ft\"\n// }\n\n// export type Unit = keyof UnitAbbreviations\n// export type NumberWithUnit<T extends Unit> =\n// | `${number}${T | UnitAbbreviations[T]}`\n// | `${number} ${T | UnitAbbreviations[T]}`\n// | `${number}${SIPrefix}${T | UnitAbbreviations[T]}`\n// | `${number} ${SIPrefix}${T | UnitAbbreviations[T]}`\n// export type NumberWithAnyUnit =\n// | `${number}${UnitOrAbbreviation}`\n// | `${number} ${UnitOrAbbreviation}`\n// | `${number}${SIPrefix}${UnitOrAbbreviation}`\n// | `${number} ${SIPrefix}${UnitOrAbbreviation}`\n\n// TODO lots of validation to make sure the unit is valid etc.\nexport const resistance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const capacitance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const inductance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const length = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const distance = length\n\nexport const current = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const time = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const rotation = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type Point = z.infer<typeof point>\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\nexport type Position = z.infer<typeof position>\n","import { z } from \"zod\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type Size = z.infer<typeof size>\n","import { z } from \"zod\"\nimport { source_component_base } from \"src/source/base/source_component_base\"\nimport { capacitance } from \"src/units\"\n\nexport const source_simple_capacitor = source_component_base.extend({\n ftype: z.literal(\"simple_capacitor\"),\n capacitance,\n})\n\nexport type SourceSimpleCapacitor = z.infer<typeof source_simple_capacitor>\nexport type SourceSimpleCapacitorInput = z.input<typeof source_simple_capacitor>\n","import { z } from \"zod\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\nexport type SupplierName = z.infer<typeof supplier_name>\n","import { supplier_name } from \"src/pcb/properties/supplier_name\"\nimport { z } from \"zod\"\n\nexport const source_component_base = z.object({\n type: z.literal(\"source_component\"),\n ftype: z.string().optional(),\n source_component_id: z.string(),\n name: z.string(),\n // part_numbers: z.array(z.string()).optional(),\n supplier_part_numbers: z\n .record(supplier_name, z.array(z.string()))\n .optional(),\n})\n\nexport type SourceComponentBase = z.infer<typeof source_component_base>\n","import { z } from \"zod\"\nimport { source_component_base } from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\n\nexport const source_simple_resistor = source_component_base.extend({\n ftype: z.literal(\"simple_resistor\"),\n resistance,\n})\n\nexport type SourceSimpleResistor = z.infer<typeof source_simple_resistor>\nexport type SourceSimpleResistorInput = z.input<typeof source_simple_resistor>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_diode = source_component_base.extend({\n ftype: z.literal(\"simple_diode\"),\n})\n\nexport type SourceSimpleDiode = z.infer<typeof source_simple_diode>\nexport type SourceSimpleDiodeInput = z.input<typeof source_simple_diode>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_ground = source_component_base.extend({\n ftype: z.literal(\"simple_ground\"),\n})\n\nexport type SourceSimpleGround = z.infer<typeof source_simple_ground>\nexport type SourceSimpleGroundInput = z.input<typeof source_simple_ground>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_bug = source_component_base.extend({\n ftype: z.literal(\"simple_bug\"),\n})\n\nexport type SourceSimpleBug = z.infer<typeof source_simple_bug>\nexport type SourceSimpleBugInput = z.input<typeof source_simple_bug>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { inductance } from \"../units\"\n\nconst source_simple_inductor = source_component_base.extend({\n ftype: z.literal(\"simple_inductor\"),\n inductance,\n})\n\nexport type SourceSimpleInductor = z.infer<typeof source_simple_inductor>\nexport type SourceSimpleInductorInput = z.input<typeof source_simple_inductor>\n","import { z } from \"zod\"\nimport { source_simple_diode } from \"./source_simple_diode\"\n\nexport const source_led = source_simple_diode.extend({\n ftype: z.literal(\"led\"),\n})\n\nexport type SourceLed = z.infer<typeof source_led>\nexport type SourceLedInput = z.input<typeof source_led>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { voltage } from \"../units\"\n\nexport const source_simple_power_source = source_component_base.extend({\n ftype: z.literal(\"simple_power_source\"),\n voltage,\n})\n\nexport type SourceSimplePowerSource = z.infer<typeof source_simple_power_source>\nexport type SourceSimplePowerSourceInput = z.input<\n typeof source_simple_power_source\n>\n","import { z } from \"zod\"\nimport { source_simple_resistor } from \"./source_simple_resistor\"\nimport { source_simple_capacitor } from \"./source_simple_capacitor\"\nimport { source_simple_diode } from \"./source_simple_diode\"\nimport { source_simple_ground } from \"./source_simple_ground\"\nimport { source_simple_bug } from \"./source_simple_bug\"\nimport { source_led } from \"./source_led\"\nimport { source_simple_power_source } from \"./source_simple_power_source\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_ground,\n source_simple_bug,\n source_led,\n source_simple_power_source,\n])\n\nexport type AnySourceComponent = z.infer<typeof any_source_component>\n","import { z } from \"zod\"\n\nexport const source_port = z.object({\n type: z.literal(\"source_port\"),\n pin_number: z.number().optional(),\n port_hints: z.array(z.string()).optional(),\n name: z.string(),\n source_port_id: z.string(),\n source_component_id: z.string(),\n})\n\nexport type SourcePort = z.infer<typeof source_port>\n","import { z } from \"zod\"\n\nexport const source_trace = z.object({\n type: z.literal(\"source_trace\"),\n source_trace_id: z.string(),\n connected_source_port_ids: z.array(z.string()),\n connected_source_net_ids: z.array(z.string()),\n})\n\nexport type SourceTrace = z.infer<typeof source_trace>\n","import { z } from \"zod\"\n\nexport const source_group = z.object({\n type: z.literal(\"source_group\"),\n source_group_id: z.string(),\n name: z.string().optional(),\n})\n\nexport type SourceGroup = z.infer<typeof source_group>\nexport type SourceGroupInput = z.input<typeof source_group>\n","import { z } from \"zod\"\n\nexport const source_net = z.object({\n type: z.literal(\"source_net\"),\n source_net_id: z.string(),\n name: z.string(),\n member_source_group_ids: z.array(z.string()),\n is_power: z.boolean().optional(),\n is_ground: z.boolean().optional(),\n is_digital_signal: z.boolean().optional(),\n is_analog_signal: z.boolean().optional(),\n})\n\nexport type SourceNet = z.infer<typeof source_net>\nexport type SourceNetInput = z.input<typeof source_net>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_component_id: z.string(),\n width: distance,\n height: distance,\n x: distance,\n y: distance,\n })\n .describe(\"Draws a box on the schematic\")\n\nexport type SchematicBoxInput = z.input<typeof schematic_box>\nexport type SchematicBox = z.infer<typeof schematic_box>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_component_id: z.string(),\n fill_color: z.enum([\"red\", \"blue\"]).optional(),\n is_filled: z.boolean().optional(),\n points: z.array(point),\n})\n\nexport type SchematicPathInput = z.input<typeof schematic_path>\nexport type SchematicPath = z.infer<typeof schematic_path>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\nimport { size } from \"../common/size\"\nimport { rotation } from \"../units\"\n\nexport const schematic_component = z.object({\n type: z.literal(\"schematic_component\"),\n rotation: rotation.default(0),\n size,\n center: point,\n source_component_id: z.string(),\n schematic_component_id: z.string(),\n port_arrangement: z\n .union([\n z.object({\n left_size: z.number(),\n right_size: z.number(),\n top_size: z.number().optional(),\n bottom_size: z.number().optional(),\n }),\n z.object({\n left_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n right_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n top_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n bottom_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n }),\n ])\n .optional(),\n port_labels: z.record(z.string()).optional(),\n})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\nexport type SchematicComponent = z.infer<typeof schematic_component>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_line = z.object({\n type: z.literal(\"schematic_line\"),\n schematic_component_id: z.string(),\n x1: distance,\n x2: distance,\n y1: distance,\n y2: distance,\n})\n\nexport type SchematicLineInput = z.input<typeof schematic_line>\nexport type SchematicLine = z.infer<typeof schematic_line>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n source_trace_id: z.string(),\n edges: z.array(\n z.object({\n from: z.object({\n x: z.number(),\n y: z.number(),\n }),\n to: z.object({\n x: z.number(),\n y: z.number(),\n }),\n from_schematic_port_id: z.string().optional(),\n to_schematic_port_id: z.string().optional(),\n })\n ),\n})\n\nexport type SchematicTraceInput = z.input<typeof schematic_trace>\nexport type SchematicTrace = z.infer<typeof schematic_trace>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_component_id: z.string(),\n schematic_text_id: z.string(),\n text: z.string(),\n position: z.object({\n x: distance,\n y: distance,\n }),\n rotation: z.number().default(0),\n anchor: z\n .enum([\"center\", \"left\", \"right\", \"top\", \"bottom\"])\n .default(\"center\"),\n})\n\nexport type SchematicTextInput = z.input<typeof schematic_text>\nexport type SchematicText = z.infer<typeof schematic_text>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { point } from \"../common\"\n\nexport const schematic_port = z\n .object({\n type: z.literal(\"schematic_port\"),\n schematic_port_id: z.string(),\n source_port_id: z.string(),\n schematic_component_id: z.string().optional(),\n center: point,\n facing_direction: z.enum([\"up\", \"down\", \"left\", \"right\"]).optional(),\n })\n .describe(\"Defines a port on a schematic component\")\n\nexport type SchematicPortInput = z.input<typeof schematic_port>\nexport type SchematicPort = z.infer<typeof schematic_port>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\n\nexport const schematic_net_label = z.object({\n type: z.literal(\"schematic_net_label\"),\n source_net_id: z.string(),\n center: point,\n anchor_side: z.enum([\"top\", \"bottom\", \"left\", \"right\"]),\n text: z.string(),\n})\n\nexport type SchematicNetLabelInput = z.input<typeof schematic_net_label>\nexport type SchematicNetLabel = z.infer<typeof schematic_net_label>\n","import { z } from \"zod\"\n\nexport const schematic_error = z\n .object({\n schematic_error_id: z.string(),\n type: z.literal(\"schematic_error\"),\n // eventually each error type should be broken out into a dir of files\n error_type: z.literal(\"schematic_port_not_found\"),\n message: z.string(),\n })\n .describe(\"Defines a schematic error on the schematic\")\n\nexport type SchematicErrorInput = z.input<typeof schematic_error>\nexport type SchematicError = z.infer<typeof schematic_error>\n","import { z } from \"zod\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n] as const\n\nexport const layer_string = z.enum(all_layers)\n\nexport const layer_ref = layer_string\n .or(\n z.object({\n name: layer_string,\n })\n )\n .transform((layer) => {\n if (typeof layer === \"string\") {\n return layer\n }\n return layer.name\n })\n\nexport type LayerRefInput = z.input<typeof layer_ref>\nexport type LayerRef = z.output<typeof layer_ref>\n\nexport const visible_layer = z.enum([\"top\", \"bottom\"])\nexport type VisibleLayerRef = z.infer<typeof visible_layer>\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { layer_ref } from \"./layer_ref\"\n\n// x: string | number\n// y: string | number\n// via?: boolean\n// via_to_layer?: string\nexport const pcb_route_hint = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n via_to_layer: layer_ref.optional(),\n})\nexport const pcb_route_hints = z.array(pcb_route_hint)\n\nexport type PcbRouteHintInput = z.input<typeof pcb_route_hint>\nexport type PcbRouteHintsInput = z.input<typeof pcb_route_hints>\nexport type PcbRouteHint = z.output<typeof pcb_route_hint>\nexport type PcbRouteHints = z.output<typeof pcb_route_hints>\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref } from \"./layer_ref\"\n\nexport const route_hint_point = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n to_layer: layer_ref.optional(),\n})\n\nexport type RouteHintPoint = z.infer<typeof route_hint_point>\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { layer_ref } from \"./properties/layer_ref\"\nimport { rotation, length } from \"../units\"\n\nexport const pcb_component = z\n .object({\n type: z.literal(\"pcb_component\"),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n center: point,\n layer: layer_ref,\n rotation: rotation,\n width: length,\n height: length,\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type PCBComponentInput = z.input<typeof pcb_component>\nexport type PCBComponent = z.infer<typeof pcb_component>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_hole = z\n .object({\n type: z.literal(\"pcb_hole\"),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n })\n .describe(\"Defines a hole on the PCB\")\n\nexport type PCBHoleInput = z.input<typeof pcb_hole>\nexport type PCBHole = z.infer<typeof pcb_hole>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_plated_hole = z\n .object({\n type: z.literal(\"pcb_plated_hole\"),\n outer_diameter: z.number(),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n })\n .describe(\"Defines a plated hole on the PCB\")\n\nexport type PCBPlatedHoleInput = z.input<typeof pcb_plated_hole>\nexport type PCBPlatedHole = z.infer<typeof pcb_plated_hole>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_port = z\n .object({\n type: z.literal(\"pcb_port\"),\n pcb_port_id: z.string(),\n source_port_id: z.string(),\n pcb_component_id: z.string(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n })\n .describe(\"Defines a port on the PCB\")\n\nexport type PCBPort = z.infer<typeof pcb_port>\nexport type PCBPortInput = z.input<typeof pcb_port>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_smtpad = z\n .union([\n z.object({\n pcb_smtpad_id: z.string(),\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"circle\"),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n }),\n z.object({\n pcb_smtpad_id: z.string(),\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rect\"),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n }),\n ])\n .describe(\"Defines an SMT pad on the PCB\")\n\nexport type PCBSMTPadInput = z.input<typeof pcb_smtpad>\nexport type PCBSMTPad = z.infer<typeof pcb_smtpad>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_text = z\n .object({\n type: z.literal(\"pcb_text\"),\n text: z.string(),\n x: distance,\n y: distance,\n align: z.enum([\"bottom-left\"]),\n width: distance,\n height: distance,\n lines: z.number(),\n })\n .describe(\"Defines text on the PCB\")\n\nexport type PCBTextInput = z.input<typeof pcb_text>\nexport type PCBText = z.infer<typeof pcb_text>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_trace = z.object({\n type: z.literal(\"pcb_trace\"),\n source_trace_id: z.string(),\n pcb_trace_id: z.string(),\n route: z.array(\n z.union([\n z.object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: z.string(),\n }),\n z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n from_layer: z.string(),\n to_layer: z.string(),\n }),\n ])\n ),\n})\n\nexport type PCBTraceInput = z.input<typeof pcb_trace>\nexport type PCBTrace = z.output<typeof pcb_trace>\n","import { z } from \"zod\"\n\nexport const pcb_trace_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_trace_error\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PCBTraceErrorInput = z.input<typeof pcb_trace_error>\nexport type PCBTraceError = z.infer<typeof pcb_trace_error>\n","import { z } from \"zod\"\n\nexport const pcb_port_not_matched_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_port_not_matched_error\"),\n message: z.string(),\n pcb_component_ids: z.array(z.string()),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PCBPortNotMatchedErrorInput = z.input<\n typeof pcb_port_not_matched_error\n>\nexport type PCBPortNotMatchedError = z.infer<typeof pcb_port_not_matched_error>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_via = z\n .object({\n type: z.literal(\"pcb_via\"),\n x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n })\n .describe(\"Defines a via on the PCB\")\n\nexport type PCBViaInput = z.input<typeof pcb_via>\nexport type PCBVia = z.infer<typeof pcb_via>\n","import { z } from \"zod\"\nimport { length } from \"../units\"\nimport { point } from \"../common\"\n\nexport const pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n width: length,\n height: length,\n center: point,\n })\n .describe(\"Defines the board outline of the PCB\")\n\nexport type PCBBoardInput = z.input<typeof pcb_board>\nexport type PCBBoard = z.infer<typeof pcb_board>\n","import { z } from \"zod\"\n\nexport const pcb_placement_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_placement_error\"),\n message: z.string(),\n })\n .describe(\"Defines a placement error on the PCB\")\n\nexport type PCBPlacementErrorInput = z.input<typeof pcb_placement_error>\nexport type PCBPlacementError = z.infer<typeof pcb_placement_error>\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\nimport { route_hint_point } from \"./index\"\n\nexport const pcb_trace_hint = z\n .object({\n pcb_trace_hint_id: z.string(),\n type: z.literal(\"pcb_trace_hint\"),\n pcb_port_id: z.string(),\n pcb_component_id: z.string(),\n route: z.array(route_hint_point),\n })\n .describe(\"A hint that can be used to generate a PCB trace\")\n\nexport type PcbTraceHint = z.infer<typeof pcb_trace_hint>\nexport type PcbTraceHintInput = z.input<typeof pcb_trace_hint>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref, visible_layer } from \"./properties/layer_ref\"\n\nexport const pcb_silkscreen_line = z\n .object({\n type: z.literal(\"pcb_silkscreen_line\"),\n pcb_silkscreen_line_id: z.string(),\n pcb_component_id: z.string(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer,\n })\n .describe(\"Defines a silkscreen line on the PCB\")\n\nexport type PcbSilkscreenLine = z.infer<typeof pcb_silkscreen_line>\nexport type PcbSilkscreenLineInput = z.input<typeof pcb_silkscreen_line>\n","import { z } from \"zod\"\nimport { visible_layer } from \"./properties/layer_ref\"\nimport { point } from \"src/common\"\n\nexport const pcb_silkscreen_path = z\n .object({\n type: z.literal(\"pcb_silkscreen_path\"),\n pcb_silkscreen_path_id: z.string(),\n pcb_component_id: z.string(),\n layer: visible_layer,\n route: z.array(point),\n })\n .describe(\"Defines a silkscreen path on the PCB\")\n\nexport type PcbSilkscreenPath = z.infer<typeof pcb_silkscreen_path>\nexport type PcbSilkscreenPathInput = z.input<typeof pcb_silkscreen_path>\n","import { z } from \"zod\"\nimport { visible_layer } from \"./properties/layer_ref\"\nimport { point } from \"src/common\"\n\nexport const pcb_silkscreen_text = z\n .object({\n type: z.literal(\"pcb_silkscreen_text\"),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n pcb_component_id: z.string(),\n text: z.string(),\n layer: visible_layer,\n pcbX: z.number(),\n pcbY: z.number(),\n })\n .describe(\"Defines silkscreen text on the PCB\")\n\nexport type PcbSilkscreenText = z.infer<typeof pcb_silkscreen_text>\nexport type PcbSilkscreenTextInput = z.input<typeof pcb_silkscreen_text>\n","import { z } from \"zod\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as src from \"./source\"\n\nexport const any_soup_element = z.union([\n // TODO source_group\n // TODO source_config\n // TODO pcb_group\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_port,\n src.any_source_component,\n src.source_led,\n src.source_net,\n src.source_group,\n src.source_simple_bug,\n src.source_simple_capacitor,\n src.source_simple_diode,\n src.source_simple_resistor,\n src.source_simple_power_source,\n pcb.pcb_component,\n pcb.pcb_hole,\n pcb.pcb_plated_hole,\n pcb.pcb_port,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_board,\n pcb.pcb_trace_hint,\n pcb.pcb_silkscreen_line,\n pcb.pcb_silkscreen_path,\n pcb.pcb_silkscreen_text,\n pcb.pcb_trace_error,\n pcb.pcb_placement_error,\n pcb.pcb_port_not_matched_error,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_component,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_error,\n sch.schematic_net_label,\n])\n\nexport type AnySoupElement = z.infer<typeof any_soup_element>\nexport type AnySoupElementInput = z.input<typeof any_soup_element>\n","export * from \"./footprinter\"\n","export const u_curve = Array.from({ length: 9 }, (_, i) =>\n Math.cos((i / 8) * Math.PI - Math.PI)\n).map((x) => ({\n x,\n y: -Math.sqrt(1 - x ** 2),\n}))\n","import type { PCBPlatedHole, PCBSMTPad } from \"@tscircuit/soup\"\nimport { mm } from \"@tscircuit/mm\"\n\nexport const platedhole = (\n pn: number,\n x: number,\n y: number,\n id: number | string,\n od: number | string\n): PCBPlatedHole => {\n return {\n type: \"pcb_plated_hole\",\n x,\n y,\n hole_diameter: mm(id),\n outer_diameter: mm(od),\n pcb_port_id: \"\",\n layers: [\"top\", \"bottom\"],\n port_hints: [pn.toString()],\n }\n}\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { u_curve } from \"../helpers/u-curve\"\nimport { platedhole } from \"../helpers/platedhole\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\n\nconst dip_def = z\n .object({\n dip: z.literal(true),\n num_pins: z.number(),\n wide: z.boolean().optional(),\n narrow: z.boolean().optional(),\n w: length.optional(),\n p: length.default(length.parse(\"2.54mm\")),\n id: length.optional(),\n od: length.optional(),\n })\n .transform((v) => {\n // Default inner diameter and outer diameter\n if (!v.id && !v.od) {\n v.id = length.parse(\"1.0mm\")\n v.od = length.parse(\"1.2mm\")\n } else if (!v.id) {\n v.id = v.od! * (1.0 / 1.2)\n } else if (!v.od) {\n v.od = v.id! * (1.2 / 1.0)\n }\n\n // Default width (TODO high pin counts should probably be wide?)\n if (!v.w) {\n if (v.wide) {\n v.w = length.parse(\"600mil\")\n } else if (v.narrow) {\n v.w = length.parse(\"300mil\")\n } else {\n v.w = length.parse(\"300mil\")\n }\n }\n return v as NowDefined<typeof v, \"w\" | \"p\" | \"id\" | \"od\">\n })\n\nexport const getCcwDipCoords = (\n pinCount: number,\n pn: number,\n w: number,\n p: number\n) => {\n /** pin height */\n const ph = pinCount / 2\n const isLeft = pn <= ph\n\n /** Number of gaps between pins on each side, e.g. 4 pins = 3 spaces */\n const leftPinGaps = ph - 1\n\n /** gap size (pitch) */\n const gs = p\n\n const h = gs * leftPinGaps\n\n if (isLeft) {\n // The y position starts at h/2, then goes down by gap size\n // for each pin\n return { x: -w / 2, y: h / 2 - (pn - 1) * gs }\n } else {\n // The y position starts at -h/2, then goes up by gap size\n return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs }\n }\n}\n\n/**\n * Returns the plated holes for a DIP package.\n */\nexport const dip = (raw_params: {\n dip: true\n num_pins: number\n w: number\n p?: number\n id?: string | number\n od?: string | number\n}): AnySoupElement[] => {\n const params = dip_def.parse(raw_params)\n const platedHoles: AnySoupElement[] = []\n for (let i = 0; i < params.num_pins; i++) {\n const { x, y } = getCcwDipCoords(\n params.num_pins,\n i + 1,\n params.w,\n params.p ?? 2.54\n )\n platedHoles.push(\n platedhole(i + 1, x, y, params.id ?? \"0.8mm\", params.od ?? \"1mm\")\n )\n }\n /** silkscreen width */\n const sw = params.w - params.od - 0.4\n const sh = (params.num_pins / 2 - 1) * params.p + params.od + 0.4\n const silkscreenBorder: PcbSilkscreenPath = {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: \"silkscreen_path_1\",\n route: [\n { x: -sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: sh / 2 },\n // Little U shape at the top\n ...u_curve.map(({ x, y }) => ({\n x: (x * sw) / 6,\n y: (y * sw) / 6 + sh / 2,\n })),\n { x: sw / 2, y: sh / 2 },\n { x: sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: -sh / 2 },\n ],\n type: \"pcb_silkscreen_path\",\n }\n\n return [...platedHoles, silkscreenBorder]\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\n\nexport const diode = (params: {\n tht: boolean\n p: number\n}): AnySoupElement[] => {\n return []\n}\n","import type { PCBSMTPad } from \"@tscircuit/soup\"\nexport const rectpad = (\n pn: number | Array<string | number>,\n x: number,\n y: number,\n w: number,\n h: number\n): PCBSMTPad => {\n return {\n type: \"pcb_smtpad\",\n x,\n y,\n width: w,\n height: h,\n layer: \"top\",\n shape: \"rect\",\n pcb_smtpad_id: \"\",\n port_hints: Array.isArray(pn)\n ? pn.map((item) => item.toString())\n : [pn.toString()],\n }\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport mm from \"@tscircuit/mm\"\nimport { platedhole } from \"./platedhole\"\n\ntype StandardSize = {\n imperial: string\n metric: string\n Z_mm_min: number\n G_mm_min: number\n X_mm_min: number\n C_mm_ref: number\n}\n\n// https://www.worthingtonassembly.com/perfect-0201-footprint\n// https://static1.squarespace.com/static/54982a02e4b02e9f5e5d9ca7/t/660c692f69a0d83a4afecdf0/1712089391915/Discrete+Component+Footprints.pdf\n// https://page.venkel.com/hubfs/Resources/Technical/Resistors%20Landing%20Pattern.pdf\nconst sizes = [\n {\n imperial: \"01005\",\n metric: \"0402\",\n Z_mm_min: 0.58,\n G_mm_min: 0.18,\n X_mm_min: 0.21,\n C_mm_ref: 0.038,\n },\n {\n imperial: \"0201\",\n metric: \"0603\",\n Z_mm_min: 0.9,\n G_mm_min: 0.3,\n X_mm_min: 0.3,\n C_mm_ref: 0.6,\n },\n {\n imperial: \"0402\",\n metric: \"1005\",\n Z_mm_min: 1.6,\n G_mm_min: 0.4,\n X_mm_min: 0.7,\n C_mm_ref: 1,\n },\n {\n imperial: \"0603\",\n metric: \"1608\",\n Z_mm_min: 2.6,\n G_mm_min: 0.6,\n X_mm_min: 1.0,\n C_mm_ref: 1.7,\n },\n {\n imperial: \"0805\",\n metric: \"2012\",\n Z_mm_min: 3.0,\n G_mm_min: 0.6,\n X_mm_min: 1.2,\n C_mm_ref: 1.9,\n },\n {\n imperial: \"1206\",\n metric: \"3216\",\n Z_mm_min: 4.2,\n G_mm_min: 1.2,\n X_mm_min: 1.4,\n C_mm_ref: 2.8,\n },\n {\n imperial: \"1210\",\n metric: \"3225\",\n Z_mm_min: 4.2,\n G_mm_min: 1.2,\n X_mm_min: 2.4,\n C_mm_ref: 2.8,\n },\n {\n imperial: \"2010\",\n metric: \"5025\",\n Z_mm_min: 6.0,\n G_mm_min: 2.6,\n X_mm_min: 2.4,\n C_mm_ref: 4.4,\n },\n {\n imperial: \"2512\",\n metric: \"6332\",\n Z_mm_min: 7.2,\n G_mm_min: 3.8,\n X_mm_min: 3.0,\n C_mm_ref: 5.6,\n },\n]\nconst metricMap: Record<string, StandardSize> = sizes.reduce((acc: any, s) => {\n acc[s.metric] = s\n return acc\n}, {})\nconst imperialMap: Record<string, StandardSize> = sizes.reduce(\n (acc: any, s) => {\n acc[s.imperial] = s\n return acc\n },\n {}\n)\n\nexport type PassiveDef = {\n tht: boolean\n p: number\n pw?: number\n ph?: number\n metric?: string\n imperial?: string\n w?: number\n h?: number\n}\n\nconst deriveXFromH = (h: number) => 0.079 * h ** 2 + 0.94 * h - 0.009\nconst deriveZFromW = (w: number) => 1.09 * w + 0.6\nconst deriveGFromW = (w: number) => 0.59 * w - 0.31\nconst deriveCFromW = (w: number) => -0.01 * w ** 2 + 0.94 * w + 0.03\n\nexport const passive = (params: PassiveDef): AnySoupElement[] => {\n let { tht, p, pw, ph, metric, imperial, w, h } = params\n\n if (typeof w === \"string\") w = mm(w)\n if (typeof h === \"string\") h = mm(h)\n if (typeof p === \"string\") p = mm(p)\n if (typeof pw === \"string\") pw = mm(pw)\n if (typeof ph === \"string\") ph = mm(ph)\n\n if (h! > w!) {\n throw new Error(\n \"height cannot be greater than width (rotated footprint not yet implemented)\"\n )\n }\n\n /** standard size */\n let sz: StandardSize | undefined\n if (metric) {\n sz = metricMap[metric]\n }\n\n if (imperial) {\n sz = imperialMap[imperial]\n }\n\n if (!sz && w && h && !pw && !ph) {\n sz = {\n imperial: \"custom\",\n metric: \"custom\",\n Z_mm_min: deriveZFromW(w),\n G_mm_min: deriveGFromW(w),\n X_mm_min: deriveXFromH(h),\n C_mm_ref: deriveCFromW(w),\n }\n }\n\n if (sz) {\n w = sz.Z_mm_min\n h = sz.X_mm_min\n p = sz.C_mm_ref\n pw = (sz.Z_mm_min - sz.G_mm_min) / 2\n ph = (sz.Z_mm_min - sz.G_mm_min) / 2\n }\n\n if (pw === undefined) throw new Error(`could not infer pad width`)\n if (ph === undefined) throw new Error(`could not infer pad width`)\n\n if (tht) {\n return [\n platedhole(1, -p / 2, 0, pw, (pw * 1) / 0.8),\n platedhole(2, -p / 2, 0, pw, (pw * 1) / 0.8),\n ]\n } else {\n return [rectpad(1, -p / 2, 0, pw, ph), rectpad(2, p / 2, 0, pw, ph)]\n }\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { PassiveDef, passive } from \"../helpers/passive-fn\"\n\nexport const cap = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { PassiveDef, passive } from \"../helpers/passive-fn\"\n\nexport const led = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { passive, PassiveDef } from \"../helpers/passive-fn\"\n\nexport const res = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","export const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n","import type { AnySoupElement, PCBSMTPad } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { ALPHABET } from \"../helpers/zod/ALPHABET\"\nimport { z } from \"zod\"\nimport { length, distance } from \"@tscircuit/soup\"\nimport { dim2d } from \"src/helpers/zod/dim-2d\"\nimport { function_call } from \"src/helpers/zod/function-call\"\nimport type { NowDefined } from \"src/helpers/zod/now-defined\"\n\nexport const bga_def = z\n .object({\n num_pins: z.number(),\n grid: dim2d.optional(),\n p: distance.default(\"0.8mm\"),\n w: length.optional(),\n h: length.optional(),\n ball: length.optional().describe(\"ball diameter\"),\n pad: length.optional().describe(\"pad width/height\"),\n\n tlorigin: z.boolean().optional(),\n blorigin: z.boolean().optional(),\n trorigin: z.boolean().optional(),\n brorigin: z.boolean().optional(),\n\n missing: function_call.default([]),\n })\n .transform((a) => {\n let origin: \"tl\" | \"bl\" | \"tr\" | \"br\" = \"tl\"\n if (a.blorigin) origin = \"bl\"\n if (a.trorigin) origin = \"tr\"\n if (a.brorigin) origin = \"br\"\n\n if (!a.grid) {\n // find the largest square for the number of pins\n const largest_square = Math.ceil(Math.sqrt(a.num_pins))\n a.grid = { x: largest_square, y: largest_square }\n }\n\n if (a.missing) {\n a.missing = a.missing.map((s) => {\n if (typeof s === \"number\") return s\n if (s === \"center\") return \"center\"\n if (s === \"topleft\") return \"topleft\"\n const m = s.match(/([A-Z]+)(\\d+)/)\n if (!m) return s\n let Y = ALPHABET.indexOf(m[1]!)\n let X = parseInt(m[2]!) - 1\n return Y * a.grid!.x + X + 1\n })\n }\n\n const new_def = { ...a, origin }\n\n return new_def as NowDefined<typeof new_def, \"w\" | \"h\" | \"grid\">\n })\n\nexport type BgaDefInput = z.input<typeof bga_def>\nexport type BgaDef = z.infer<typeof bga_def>\n\nexport const bga = (params: BgaDefInput): AnySoupElement[] => {\n const bga_params = bga_def.parse(params)\n let { num_pins, grid, p, w, h, ball, pad, missing } = bga_params\n\n ball ??= (0.75 / 1.27) * p\n\n pad ??= ball * 0.8\n\n const pads: PCBSMTPad[] = []\n\n const missing_pin_nums = (missing ?? []).filter((a) => typeof a === \"number\")\n const num_pins_missing = grid.x * grid.y - num_pins\n\n if (missing.length === 0 && num_pins_missing > 0) {\n // No missing pins specified, let's see if a squared center works\n // if num_pins_missing is a square\n if (Math.sqrt(num_pins_missing) % 1 === 0) {\n missing.push(\"center\")\n } else if (num_pins_missing === 1) {\n missing.push(\"topleft\")\n }\n }\n\n if (missing?.includes(\"center\")) {\n // Find the largest square that's square is less than\n // the number of missing pins\n const square_size = Math.floor(Math.sqrt(num_pins_missing))\n\n // Find the top left coordinate of the inner square, keep\n // in mind the full grid size is grid.x x grid.y\n const inner_square_x = Math.floor((grid.x - square_size) / 2)\n const inner_square_y = Math.floor((grid.y - square_size) / 2)\n\n // Add all the missing square pin numbers to missing_pin_nums\n for (let y = inner_square_y; y < inner_square_y + square_size; y++) {\n for (let x = inner_square_x; x < inner_square_x + square_size; x++) {\n missing_pin_nums.push(y * grid.x + x + 1)\n }\n }\n }\n\n if (missing?.includes(\"topleft\")) {\n missing_pin_nums.push(1)\n }\n\n if (num_pins_missing !== missing_pin_nums.length) {\n throw new Error(\n `not able to create bga component, unable to determine missing pins (try specifying them with \"missing+1+2+...\"\\n\\n${JSON.stringify(\n bga_params,\n null,\n \" \"\n )}`\n )\n }\n\n const missing_pin_nums_set = new Set(missing_pin_nums)\n\n let missing_pins_passed = 0\n for (let y = 0; y < grid.y; y++) {\n for (let x = 0; x < grid.x; x++) {\n let pin_num = y * grid.x + x + 1\n if (missing_pin_nums_set.has(pin_num)) {\n missing_pins_passed++\n continue\n }\n pin_num -= missing_pins_passed\n\n const pad_x = (x - (grid.x - 1) / 2) * p\n const pad_y = -(y - (grid.y - 1) / 2) * p\n\n // TODO handle >26 rows\n pads.push(\n rectpad([pin_num, `${ALPHABET[y]}${x + 1}`], pad_x, pad_y, pad, pad)\n )\n }\n }\n\n return [...pads]\n}\n","import { z } from \"zod\"\n\nexport const dim2d = z\n .string()\n .transform((a) => {\n const [x, y] = a.split(/[x ]/)\n return {\n x: parseFloat(x),\n y: parseFloat(y),\n }\n })\n .pipe(\n z.object({\n x: z.number(),\n y: z.number(),\n })\n )\n","import { z } from \"zod\"\n\nexport const function_call = z\n .string()\n .or(z.array(z.any()))\n .transform((a) => {\n if (Array.isArray(a)) return a\n if (a.startsWith(\"(\") && a.endsWith(\")\")) {\n a = a.slice(1, -1)\n }\n return a.split(\",\").map((v) => {\n const numVal = Number(v)\n return isNaN(numVal) ? v : numVal\n })\n })\n .pipe(z.array(z.string().or(z.number())))\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { platedhole } from \"../helpers/platedhole\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\nimport { u_curve } from \"../helpers/u-curve\"\n\nconst soic_def = z\n .object({\n soic: z.literal(true),\n num_pins: z.number(),\n w: length,\n p: length.default(length.parse(\"1.27mm\")),\n id: length.optional(),\n od: length.optional(),\n })\n .transform((v) => {\n // Default inner diameter and outer diameter\n if (!v.id && !v.od) {\n v.id = length.parse(\"0.6mm\")\n v.od = length.parse(\"1.0mm\")\n } else if (!v.id) {\n v.id = v.od! * (0.6 / 1.0)\n } else if (!v.od) {\n v.od = v.id! * (1.0 / 0.6)\n }\n return v as NowDefined<typeof v, \"w\" | \"p\" | \"id\" | \"od\">\n })\n\nexport const getCcwSoicCoords = (\n pinCount: number,\n pn: number,\n w: number,\n p: number\n) => {\n /** pin height */\n const ph = pinCount / 2\n const isLeft = pn <= ph\n\n /** Number of gaps between pins on each side, e.g. 4 pins = 3 spaces */\n const leftPinGaps = ph - 1\n\n /** gap size (pitch) */\n const gs = p\n\n const h = gs * leftPinGaps\n\n if (isLeft) {\n // The y position starts at h/2, then goes down by gap size\n // for each pin\n return { x: -w / 2, y: h / 2 - (pn - 1) * gs }\n } else {\n // The y position starts at -h/2, then goes up by gap size\n return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs }\n }\n}\n\n/**\n * Returns the plated holes for a SOIC package.\n */\nexport const soic = (raw_params: {\n soic: true\n num_pins: number\n w: number\n p?: number\n id?: string | number\n od?: string | number\n}): AnySoupElement[] => {\n const params = soic_def.parse(raw_params)\n const platedHoles: AnySoupElement[] = []\n for (let i = 0; i < params.num_pins; i++) {\n const { x, y } = getCcwSoicCoords(\n params.num_pins,\n i + 1,\n params.w,\n params.p ?? 1.27\n )\n platedHoles.push(\n platedhole(i + 1, x, y, params.id ?? \"0.6mm\", params.od ?? \"1mm\")\n )\n }\n\n /** silkscreen width */\n const sw = params.w - params.od - 0.4\n const sh = (params.num_pins / 2 - 1) * params.p + params.od + 0.4\n const silkscreenBorder: PcbSilkscreenPath = {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: \"silkscreen_path_1\",\n route: [\n { x: -sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: sh / 2 },\n // Little U shape at the top\n ...u_curve.map(({ x, y }) => ({\n x: (x * sw) / 6,\n y: (y * sw) / 6 + sh / 2,\n })),\n { x: sw / 2, y: sh / 2 },\n { x: sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: -sh / 2 },\n ],\n type: \"pcb_silkscreen_path\",\n }\n\n return [...platedHoles, silkscreenBorder]\n}\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { pin_order_specifier } from \"src/helpers/zod/pin-order-specifier\"\nimport { getQuadPinMap } from \"src/helpers/get-quad-pin-map\"\nimport { dim2d } from \"src/helpers/zod/dim-2d\"\n\nexport const base_quad_def = z.object({\n cc: z.literal(true).optional(),\n ccw: z.literal(true).optional(),\n startingpin: z\n .string()\n .or(z.array(pin_order_specifier))\n .transform((a) => (typeof a === \"string\" ? a.slice(1, -1).split(\",\") : a))\n .pipe(z.array(pin_order_specifier))\n .optional(),\n num_pins: z.number(),\n w: length.optional(),\n h: length.optional(),\n p: length.default(length.parse(\"0.5mm\")),\n pw: length.optional(),\n pl: length.optional(),\n thermalpad: z.union([z.literal(true), dim2d]).optional(),\n legsoutside: z.boolean().optional(),\n})\n\nexport const quadTransform = <T extends z.infer<typeof base_quad_def>>(\n v: T\n) => {\n if (v.w && !v.h) {\n v.h = v.w\n } else if (!v.w && v.h) {\n v.w = v.h\n }\n\n const side_pin_count = v.num_pins / 4\n\n if (!v.p && !v.pw && !v.pl && v.w) {\n // HACK: This is wayyy underspecified\n const approx_pin_size_of_side = side_pin_count + 4\n v.p = v.w / approx_pin_size_of_side\n }\n\n if (!v.p && v.w && v.h && v.pw && v.pl) {\n // HACK: This is wayyy underspecified\n v.p = (v.w - v.pl * 2) / (side_pin_count - 1)\n }\n\n if (!v.w && !v.h && v.p) {\n // HACK: underspecified\n v.w = v.p * (side_pin_count + 4)\n v.h = v.w\n }\n\n if (v.p && !v.pw && !v.pl) {\n v.pw = v.p / 2\n v.pl = v.p / 2\n } else if (!v.pw) {\n v.pw = v.pl! * (0.6 / 1.0)\n } else if (!v.pl) {\n v.pl = v.pw! * (1.0 / 0.6)\n }\n\n return v as NowDefined<T, \"w\" | \"h\" | \"p\" | \"pw\" | \"pl\">\n}\n\nexport const quad_def = base_quad_def.transform(quadTransform)\n\nconst SIDES_CCW = [\"left\", \"bottom\", \"right\", \"top\"] as const\n\nexport const getQuadCoords = (params: {\n pin_count: number\n pn: number // pin number\n w: number // width of the package\n h: number // height (length) of the package\n p: number // pitch between pins\n pl: number // length of the pin\n legsoutside?: boolean\n}) => {\n const { pin_count, pn, w, h, p, pl, legsoutside } = params\n const sidePinCount = pin_count / 4\n const side = SIDES_CCW[Math.floor((pn - 1) / sidePinCount)]\n const pos = (pn - 1) % sidePinCount\n\n /** inner box width */\n const ibw = p * (sidePinCount - 1)\n /** inner box height */\n const ibh = p * (sidePinCount - 1)\n\n /** pad center distance from edge (negative is inside, positive is outside) */\n const pcdfe = legsoutside ? pl / 2 : -pl / 2\n\n switch (side) {\n case \"left\":\n return { x: -w / 2 - pcdfe, y: ibh / 2 - pos * p, o: \"vert\" }\n case \"bottom\":\n return { x: -ibw / 2 + pos * p, y: -h / 2 - pcdfe, o: \"horz\" }\n case \"right\":\n return { x: w / 2 + pcdfe, y: -ibh / 2 + pos * p, o: \"vert\" }\n case \"top\":\n return { x: ibw / 2 - pos * p, y: h / 2 + pcdfe, o: \"horz\" }\n default:\n throw new Error(\"Invalid pin number\")\n }\n}\n\nexport const quad = (\n raw_params: z.input<typeof quad_def>\n): AnySoupElement[] => {\n const params = quad_def.parse(raw_params)\n const pads: AnySoupElement[] = []\n const pin_map = getQuadPinMap(params)\n /** Side pin count */\n const spc = params.num_pins / 4\n for (let i = 0; i < params.num_pins; i++) {\n const {\n x,\n y,\n o: orientation,\n } = getQuadCoords({\n pin_count: params.num_pins,\n pn: i + 1,\n w: params.w,\n h: params.h,\n p: params.p ?? 0.5,\n pl: params.pl,\n legsoutside: params.legsoutside,\n })\n\n let pw = params.pw\n let pl = params.pl\n if (orientation === \"vert\") {\n ;[pw, pl] = [pl, pw]\n }\n\n const pn = pin_map[i + 1]!\n pads.push(rectpad(pn, x, y, pw, pl))\n }\n\n if (params.thermalpad) {\n if (typeof params.thermalpad === \"boolean\") {\n const ibw = params.p * (spc - 1) + params.pw\n const ibh = params.p * (spc - 1) + params.pw\n pads.push(rectpad([\"thermalpad\"], 0, 0, ibw, ibh))\n } else {\n pads.push(\n rectpad([\"thermalpad\"], 0, 0, params.thermalpad.x, params.thermalpad.y)\n )\n }\n }\n\n // Silkscreen corners\n const silkscreen_corners: PcbSilkscreenPath[] = []\n for (const [corner, dx, dy] of [\n [\"top-left\", -1, 1],\n [\"bottom-left\", -1, -1],\n [\"bottom-right\", 1, -1],\n [\"top-right\", 1, 1],\n ] as const) {\n // const dx = Math.floor(corner_index / 2) * 2 - 1\n // const dy = 1 - (corner_index % 2) * 2\n const corner_x = (params.w / 2) * dx\n const corner_y = (params.h / 2) * dy\n let arrow: \"none\" | \"in1\" | \"in2\" = \"none\"\n\n let arrow_x = corner_x\n let arrow_y = corner_y\n\n /** corner size */\n const csz = params.pw * 2\n\n if (pin_map[1] === 1 && corner === \"top-left\") {\n arrow = \"in1\"\n } else if (pin_map[spc * 4] === 1 && corner === \"top-left\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 3 + 1] === 1 && corner === \"top-right\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 3] === 1 && corner === \"top-right\") {\n arrow = \"in1\"\n } else if (pin_map[spc] === 1 && corner === \"bottom-left\") {\n arrow = \"in1\"\n } else if (pin_map[spc + 1] === 1 && corner === \"bottom-left\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 2] === 1 && corner === \"bottom-right\") {\n arrow = \"in1\"\n } else if (pin_map[spc * 2 + 1] === 1 && corner === \"bottom-right\") {\n arrow = \"in2\"\n }\n\n const rotate_arrow = arrow === \"in1\" ? 1 : -1\n if (params.legsoutside) {\n const arrow_dx = arrow === \"in1\" ? params.pl / 2 : params.pw / 2\n const arrow_dy = arrow === \"in1\" ? params.pw / 2 : params.pl / 2\n arrow_x += arrow_dx * dx * rotate_arrow\n arrow_y -= arrow_dy * dy * rotate_arrow\n }\n\n // Normal Corner\n if (arrow === \"none\" || params.legsoutside) {\n silkscreen_corners.push({\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}`,\n route: [\n {\n x: corner_x - csz * dx,\n y: corner_y,\n },\n {\n x: corner_x,\n y: corner_y,\n },\n {\n x: corner_x,\n y: corner_y - csz * dy,\n },\n ],\n type: \"pcb_silkscreen_path\",\n })\n }\n\n // Two lines nearly forming a corner, used when the arrow needs to overlap\n // the corne (QFN components where legs are inside)\n if ((arrow === \"in1\" || arrow === \"in2\") && !params.legsoutside) {\n silkscreen_corners.push(\n {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_1`,\n route: [\n {\n x: corner_x - csz * dx,\n y: corner_y,\n },\n {\n x: corner_x - (csz * dx) / 2,\n y: corner_y,\n },\n ],\n type: \"pcb_silkscreen_path\",\n },\n {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_2`,\n route: [\n {\n x: corner_x,\n y: corner_y - (csz * dy) / 2,\n },\n {\n x: corner_x,\n y: corner_y - csz * dy,\n },\n ],\n type: \"pcb_silkscreen_path\",\n }\n )\n }\n if (arrow === \"in1\" || arrow === \"in2\") {\n silkscreen_corners.push({\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_3`,\n route: [\n {\n x: arrow_x - 0.2 * -dx,\n y: arrow_y + 0.2 * rotate_arrow,\n },\n {\n x: arrow_x,\n y: arrow_y,\n },\n {\n x: arrow_x + 0.2 * rotate_arrow * -dx,\n y: arrow_y + 0.2,\n },\n {\n x: arrow_x - 0.2 * -dx,\n y: arrow_y + 0.2 * rotate_arrow,\n },\n ],\n type: \"pcb_silkscreen_path\",\n })\n }\n }\n\n return [...pads, ...silkscreen_corners]\n}\n","import { z } from \"zod\"\nexport const pin_order_specifier = z.enum([\n \"leftside\",\n \"topside\",\n \"rightside\",\n \"bottomside\",\n \"toppin\",\n \"bottompin\",\n \"leftpin\",\n \"rightpin\",\n])\n\nexport type PinOrderSpecifier = z.infer<typeof pin_order_specifier>\n","import type { PinOrderSpecifier } from \"./zod/pin-order-specifier\"\n\n/**\n * A counter-clockwise pin map is [1,2,3,4,5,6,7,8] for an 8-pin package\n *\n * 8 7\n * 1 6\n * 2 5\n * 3 4\n *\n * Given some parameters, we're returning how to map the pins in a quad package\n * with a different order. For example, if we pass in cw=true, we'll get the\n * following mapping\n *\n * 1 -> 1\n * 2 -> 8\n * 3 -> 7\n * 4 -> 6\n * 5 -> 5\n * 6 -> 4\n * 7 -> 3\n * 8 -> 2\n *\n * Which allows us to create the CW version of the package using...\n * new_pin = pin_map[normal_ccw_pin]\n *\n * 2 3\n * 1 4\n * 8 5\n * 7 6\n */\nexport const getQuadPinMap = ({\n num_pins,\n cw,\n ccw,\n startingpin,\n}: {\n num_pins: number\n cw?: boolean\n ccw?: boolean\n startingpin?: PinOrderSpecifier[]\n}): number[] => {\n const pin_map: number[] = []\n const pins_per_side = num_pins / 4\n let current_position_ccw_normal = 1\n\n /** Starting Flag Pins */\n const sfp: Record<PinOrderSpecifier, boolean> = {} as any\n for (const specifier of startingpin ?? []) {\n sfp[specifier] = true\n }\n if (!sfp.leftside && !sfp.topside && !sfp.rightside && !sfp.bottomside) {\n sfp.leftside = true\n }\n if (!sfp.bottompin && !sfp.leftpin && !sfp.rightpin && !sfp.toppin) {\n if (sfp.leftside) {\n sfp.toppin = true\n } else if (sfp.topside) {\n sfp.rightpin = true\n } else if (sfp.rightside) {\n sfp.bottompin = true\n } else if (sfp.bottomside) {\n sfp.leftpin = true\n }\n }\n\n if (sfp.leftside && sfp.toppin) {\n current_position_ccw_normal = 1\n } else if (sfp.leftside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side\n } else if (sfp.bottomside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side + 1\n } else if (sfp.bottomside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 2\n } else if (sfp.rightside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side * 2 + 1\n } else if (sfp.rightside && sfp.toppin) {\n current_position_ccw_normal = pins_per_side * 3\n } else if (sfp.topside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 3 + 1\n } else if (sfp.topside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side * 4\n }\n\n pin_map.push(-1) // the first index is meaningless\n\n // Each iteration we move the current position to the next pin, if we're\n // going CCW this means incrementing, if we're going CW this means\n // decrementing\n for (let i = 0; i < num_pins; i++) {\n pin_map[current_position_ccw_normal] = i + 1\n if (ccw || !cw) {\n current_position_ccw_normal++\n if (current_position_ccw_normal > num_pins) {\n current_position_ccw_normal = 1\n }\n } else {\n current_position_ccw_normal--\n if (current_position_ccw_normal < 1) {\n current_position_ccw_normal = num_pins\n }\n }\n }\n\n return pin_map\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { base_quad_def, quad, quad_def, quadTransform } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const qfn_def = base_quad_def.extend({}).transform(quadTransform)\n\nexport const qfn = (params: z.input<typeof qfn_def>): AnySoupElement[] => {\n params.legsoutside = false\n return quad(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { quad, quad_def } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const qfp_def = quad_def\n\nexport const qfp = (raw_params: z.input<typeof quad_def>): AnySoupElement[] => {\n raw_params.legsoutside = true\n\n const quad_defaults = quad_def.parse(raw_params)\n\n if (!raw_params.pl) {\n // SLOP - eyeballing typical pad width:pad length ratio\n raw_params.pl = quad_defaults.pl * 4\n raw_params.pw = quad_defaults.pw\n }\n\n return quad(raw_params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { base_quad_def, quad, quad_def, quadTransform } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const mlp_def = base_quad_def.extend({}).transform(quadTransform)\n\nexport const mlp = (params: z.input<typeof mlp_def>): AnySoupElement[] => {\n params.legsoutside = false\n if (params.thermalpad === undefined) {\n params.thermalpad = true\n }\n return quad(params)\n}\n","export function isNotNull<T>(value: T | null): value is T {\n return value !== null\n}\n","import { dip } from \"./fn/dip\"\nimport { diode } from \"./fn/diode\"\nimport { cap } from \"./fn/cap\"\nimport { led } from \"./fn/led\"\nimport { res } from \"./fn/res\"\nimport { bga } from \"./fn/bga\"\nimport { soic } from \"./fn/soic\"\nimport { quad } from \"./fn/quad\"\nimport { qfn } from \"./fn/qfn\"\nimport { qfp } from \"./fn/qfp\"\nimport { mlp } from \"./fn/mlp\"\nimport type { AnySoupElement } from \"@tscircuit/soup\"\nimport { isNotNull } from \"./helpers/is-not-null\"\n\nexport type FootprinterParamsBuilder<K extends string> = {\n [P in K | \"params\" | \"soup\"]: P extends \"params\" | \"soup\"\n ? Footprinter[P]\n : (v?: number | string) => FootprinterParamsBuilder<K>\n}\n\ntype CommonPassiveOptionKey =\n | \"metric\"\n | \"imperial\"\n | \"tht\"\n | \"p\"\n | \"pw\"\n | \"ph\"\n | \"w\"\n | \"h\"\n\nexport type Footprinter = {\n dip: (\n num_pins: number\n ) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\" | \"wide\" | \"narrow\">\n cap: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n res: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n diode: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n led: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n lr: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"l\" | \"pl\" | \"pr\">\n qfp: (\n num_pins: number\n ) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\" | \"wide\" | \"narrow\">\n quad: (\n num_pins: number\n ) => FootprinterParamsBuilder<\n \"w\" | \"l\" | \"square\" | \"pl\" | \"pr\" | \"pb\" | \"pt\" | \"p\" | \"pw\" | \"ph\"\n >\n bga: (\n num_pins: number\n ) => FootprinterParamsBuilder<\n \"grid\" | \"p\" | \"w\" | \"h\" | \"ball\" | \"pad\" | \"missing\"\n >\n qfn: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"h\" | \"p\">\n soic: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\">\n mlp: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"h\" | \"p\">\n params: () => any\n soup: () => AnySoupElement[]\n}\n\nexport const string = (def: string): Footprinter => {\n let fp = footprinter()\n\n // special case: 0402, 0603, etc.\n if ((def.length === 4 || def.length === 5) && def.matchAll(/\\d+/))\n def = `res${def}`\n\n const def_parts = def\n .split(\"_\")\n .map((s) => {\n const m = s.match(/([a-z]+)([\\(\\d\\.\\+\\?].*)?/)\n const [_, fn, v] = m ?? []\n if (v?.includes(\"?\")) return null\n return { fn: m?.[1]!, v: m?.[2]! }\n })\n .filter(isNotNull)\n\n for (const { fn, v } of def_parts) {\n fp = fp[fn](v)\n }\n\n return fp\n}\n\nexport const footprinter = (): Footprinter & { string: typeof string } => {\n const proxy = new Proxy(\n {},\n {\n get: (target: any, prop) => {\n if (prop === \"soup\") {\n if (\"dip\" in target) return () => dip(target)\n if (\"diode\" in target) return () => diode(target)\n if (\"cap\" in target) return () => cap(target)\n if (\"led\" in target) return () => led(target)\n if (\"res\" in target) return () => res(target)\n if (\"bga\" in target) return () => bga(target)\n if (\"soic\" in target) return () => soic(target)\n if (\"quad\" in target) return () => quad(target)\n if (\"qfn\" in target) return () => qfn(target)\n if (\"qfp\" in target) return () => qfp(target)\n if (\"mlp\" in target) return () => mlp(target)\n\n return () => {\n // TODO improve error\n throw new Error(\n `No function found for footprinter, make sure to specify .dip, .lr, .p, etc. Got \\\"${prop}\\\"`\n )\n }\n }\n if (prop === \"params\") {\n // TODO\n return () => target\n }\n return (v: any) => {\n if (Object.keys(target).length === 0) {\n target[prop] = true\n if (prop === \"res\" || prop === \"cap\") {\n if (v) {\n target.imperial = v // res0402, cap0603 etc.\n }\n } else {\n target.num_pins = parseFloat(v)\n }\n } else {\n target[prop] = v ?? true\n }\n return proxy\n }\n },\n }\n )\n return proxy as any\n}\nfootprinter.string = string\n\nexport const fp = footprinter\n"],"mappings":"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","names":["exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","Object","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","length","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","length","require_lodash","exports","module","length","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","measure","src_exports","__export","distance","length","module","__toCommonJS","__toESM","convertUnits","import_zod","import_zod2","import_zod3","import_zod4","import_zod5","import_zod6","import_zod7","import_zod8","import_zod22","import_zod32","import_zod42","import_mm","mm","import_zod","import_soup","import_zod","import_zod","import_zod","import_soup","import_zod","import_soup","import_zod","fp"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/lodash._objecttypes/index.js","../node_modules/lodash.isobject/index.js","../node_modules/lodash._renative/index.js","../node_modules/lodash._shimkeys/index.js","../node_modules/lodash.keys/index.js","../node_modules/lodash.noop/index.js","../node_modules/lodash._basecreate/index.js","../node_modules/lodash._setbinddata/index.js","../node_modules/lodash._basebind/index.js","../node_modules/lodash._slice/index.js","../node_modules/lodash._basecreatewrapper/index.js","../node_modules/lodash.isfunction/index.js","../node_modules/lodash._createwrapper/index.js","../node_modules/lodash.bind/index.js","../node_modules/lodash.identity/index.js","../node_modules/lodash.support/index.js","../node_modules/lodash._basecreatecallback/index.js","../node_modules/lodash.forown/index.js","../node_modules/lodash.foreach/index.js","../node_modules/convert-units/lib/definitions/length.js","../node_modules/convert-units/lib/definitions/area.js","../node_modules/convert-units/lib/definitions/mass.js","../node_modules/convert-units/lib/definitions/volume.js","../node_modules/convert-units/lib/definitions/each.js","../node_modules/convert-units/lib/definitions/temperature.js","../node_modules/convert-units/lib/definitions/time.js","../node_modules/convert-units/lib/definitions/digital.js","../node_modules/convert-units/lib/definitions/partsPer.js","../node_modules/convert-units/lib/definitions/speed.js","../node_modules/convert-units/lib/definitions/pace.js","../node_modules/convert-units/lib/definitions/pressure.js","../node_modules/convert-units/lib/definitions/current.js","../node_modules/convert-units/lib/definitions/voltage.js","../node_modules/convert-units/lib/definitions/power.js","../node_modules/convert-units/lib/definitions/reactivePower.js","../node_modules/convert-units/lib/definitions/apparentPower.js","../node_modules/convert-units/lib/definitions/energy.js","../node_modules/convert-units/lib/definitions/reactiveEnergy.js","../node_modules/convert-units/lib/definitions/volumeFlowRate.js","../node_modules/convert-units/lib/definitions/illuminance.js","../node_modules/convert-units/lib/definitions/frequency.js","../node_modules/convert-units/lib/definitions/angle.js","../node_modules/convert-units/lib/index.js","../node_modules/@tscircuit/soup/src/index.ts","../node_modules/@tscircuit/soup/src/utils/convert-si-unit-to-number.ts","../node_modules/@tscircuit/soup/src/units/index.ts","../node_modules/@tscircuit/soup/src/common/point.ts","../node_modules/@tscircuit/soup/src/common/size.ts","../node_modules/@tscircuit/soup/src/source/source_simple_capacitor.ts","../node_modules/@tscircuit/soup/src/pcb/properties/supplier_name.ts","../node_modules/@tscircuit/soup/src/source/base/source_component_base.ts","../node_modules/@tscircuit/soup/src/source/source_simple_resistor.ts","../node_modules/@tscircuit/soup/src/source/source_simple_diode.ts","../node_modules/@tscircuit/soup/src/source/source_simple_ground.ts","../node_modules/@tscircuit/soup/src/source/source_simple_bug.ts","../node_modules/@tscircuit/soup/src/source/source_simple_inductor.ts","../node_modules/@tscircuit/soup/src/source/source_led.ts","../node_modules/@tscircuit/soup/src/source/source_simple_power_source.ts","../node_modules/@tscircuit/soup/src/source/any_source_component.ts","../node_modules/@tscircuit/soup/src/source/source_port.ts","../node_modules/@tscircuit/soup/src/source/source_trace.ts","../node_modules/@tscircuit/soup/src/source/source_group.ts","../node_modules/@tscircuit/soup/src/source/source_net.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_box.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_path.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_component.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_line.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_trace.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_text.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_port.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_net_label.ts","../node_modules/@tscircuit/soup/src/schematic/schematic_error.ts","../node_modules/@tscircuit/soup/src/pcb/properties/layer_ref.ts","../node_modules/@tscircuit/soup/src/pcb/properties/pcb_route_hints.ts","../node_modules/@tscircuit/soup/src/pcb/properties/route_hint_point.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_component.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_hole.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_plated_hole.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_port.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_smtpad.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_text.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_port_not_matched_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_via.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_board.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_placement_error.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_trace_hint.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_line.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_path.ts","../node_modules/@tscircuit/soup/src/pcb/pcb_silkscreen_text.ts","../node_modules/@tscircuit/soup/src/any_soup_element.ts","../src/index.ts","../src/helpers/u-curve.ts","../src/helpers/platedhole.ts","../src/fn/dip.ts","../src/fn/diode.ts","../src/helpers/rectpad.ts","../src/helpers/passive-fn.ts","../src/fn/cap.ts","../src/fn/led.ts","../src/fn/res.ts","../src/helpers/zod/ALPHABET.ts","../src/fn/bga.ts","../src/helpers/zod/dim-2d.ts","../src/helpers/zod/function-call.ts","../src/fn/soic.ts","../src/fn/quad.ts","../src/helpers/zod/pin-order-specifier.ts","../src/helpers/get-quad-pin-map.ts","../src/fn/qfn.ts","../src/fn/qfp.ts","../src/fn/mlp.ts","../src/helpers/is-not-null.ts","../src/footprinter.ts"],"sourcesContent":["/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/** Used to determine if values are of the language type Object */\nvar objectTypes = {\n 'boolean': false,\n 'function': true,\n 'object': true,\n 'number': false,\n 'string': false,\n 'undefined': false\n};\n\nmodule.exports = objectTypes;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar objectTypes = require('lodash._objecttypes');\n\n/**\n * Checks if `value` is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // check if the value is the ECMAScript language type of Object\n // http://es5.github.io/#x8\n // and avoid a V8 bug\n // http://code.google.com/p/v8/issues/detail?id=2291\n return !!(value && objectTypes[typeof value]);\n}\n\nmodule.exports = isObject;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/** Used for native method references */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the internal [[Class]] of values */\nvar toString = objectProto.toString;\n\n/** Used to detect if a method is native */\nvar reNative = RegExp('^' +\n String(toString)\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n);\n\nmodule.exports = reNative;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar objectTypes = require('lodash._objecttypes');\n\n/** Used for native method references */\nvar objectProto = Object.prototype;\n\n/** Native method shortcuts */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which produces an array of the\n * given object's own enumerable property names.\n *\n * @private\n * @type Function\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n */\nvar shimKeys = function(object) {\n var index, iterable = object, result = [];\n if (!iterable) return result;\n if (!(objectTypes[typeof object])) return result;\n for (index in iterable) {\n if (hasOwnProperty.call(iterable, index)) {\n result.push(index);\n }\n }\n return result\n};\n\nmodule.exports = shimKeys;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar isObject = require('lodash.isobject'),\n reNative = require('lodash._renative'),\n shimKeys = require('lodash._shimkeys');\n\n/* Native method shortcuts for methods with the same name as other `lodash` methods */\nvar nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys;\n\n/**\n * Creates an array composed of the own enumerable property names of an object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n * @example\n *\n * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n if (!isObject(object)) {\n return [];\n }\n return nativeKeys(object);\n};\n\nmodule.exports = keys;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * A no-operation function.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.noop(object) === undefined;\n * // => true\n */\nfunction noop() {\n // no operation performed\n}\n\nmodule.exports = noop;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar isObject = require('lodash.isobject'),\n noop = require('lodash.noop'),\n reNative = require('lodash._renative');\n\n/* Native method shortcuts for methods with the same name as other `lodash` methods */\nvar nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(prototype, properties) {\n return isObject(prototype) ? nativeCreate(prototype) : {};\n}\n// fallback for browsers without `Object.create`\nif (!nativeCreate) {\n baseCreate = (function() {\n function Object() {}\n return function(prototype) {\n if (isObject(prototype)) {\n Object.prototype = prototype;\n var result = new Object;\n Object.prototype = null;\n }\n return result || global.Object();\n };\n }());\n}\n\nmodule.exports = baseCreate;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar noop = require('lodash.noop'),\n reNative = require('lodash._renative');\n\n/** Used as the property descriptor for `__bindData__` */\nvar descriptor = {\n 'configurable': false,\n 'enumerable': false,\n 'value': null,\n 'writable': false\n};\n\n/** Used to set meta data on functions */\nvar defineProperty = (function() {\n // IE 8 only accepts DOM elements\n try {\n var o = {},\n func = reNative.test(func = Object.defineProperty) && func,\n result = func(o, o, o) && func;\n } catch(e) { }\n return result;\n}());\n\n/**\n * Sets `this` binding data on a given function.\n *\n * @private\n * @param {Function} func The function to set data on.\n * @param {Array} value The data array to set.\n */\nvar setBindData = !defineProperty ? noop : function(func, value) {\n descriptor.value = value;\n defineProperty(func, '__bindData__', descriptor);\n};\n\nmodule.exports = setBindData;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreate = require('lodash._basecreate'),\n isObject = require('lodash.isobject'),\n setBindData = require('lodash._setbinddata');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * The base implementation of `_.bind` that creates the bound function and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new bound function.\n */\nfunction baseBind(bindData) {\n var func = bindData[0],\n partialArgs = bindData[2],\n thisArg = bindData[4];\n\n function bound() {\n // `Function#bind` spec\n // http://es5.github.io/#x15.3.4.5\n if (partialArgs) {\n var args = partialArgs.slice();\n push.apply(args, arguments);\n }\n // mimic the constructor's `return` behavior\n // http://es5.github.io/#x13.2.2\n if (this instanceof bound) {\n // ensure `new bound` is an instance of `func`\n var thisBinding = baseCreate(func.prototype),\n result = func.apply(thisBinding, args || arguments);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisArg, args || arguments);\n }\n setBindData(bound, bindData);\n return bound;\n}\n\nmodule.exports = baseBind;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * Slices the `collection` from the `start` index up to, but not including,\n * the `end` index.\n *\n * Note: This function is used instead of `Array#slice` to support node lists\n * in IE < 9 and to ensure dense arrays are returned.\n *\n * @private\n * @param {Array|Object|string} collection The collection to slice.\n * @param {number} start The start index.\n * @param {number} end The end index.\n * @returns {Array} Returns the new array.\n */\nfunction slice(array, start, end) {\n start || (start = 0);\n if (typeof end == 'undefined') {\n end = array ? array.length : 0;\n }\n var index = -1,\n length = end - start || 0,\n result = Array(length < 0 ? 0 : length);\n\n while (++index < length) {\n result[index] = array[start + index];\n }\n return result;\n}\n\nmodule.exports = slice;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreate = require('lodash._basecreate'),\n isObject = require('lodash.isobject'),\n setBindData = require('lodash._setbinddata'),\n slice = require('lodash._slice');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * The base implementation of `createWrapper` that creates the wrapper and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new function.\n */\nfunction baseCreateWrapper(bindData) {\n var func = bindData[0],\n bitmask = bindData[1],\n partialArgs = bindData[2],\n partialRightArgs = bindData[3],\n thisArg = bindData[4],\n arity = bindData[5];\n\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n key = func;\n\n function bound() {\n var thisBinding = isBind ? thisArg : this;\n if (partialArgs) {\n var args = partialArgs.slice();\n push.apply(args, arguments);\n }\n if (partialRightArgs || isCurry) {\n args || (args = slice(arguments));\n if (partialRightArgs) {\n push.apply(args, partialRightArgs);\n }\n if (isCurry && args.length < arity) {\n bitmask |= 16 & ~32;\n return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n }\n }\n args || (args = arguments);\n if (isBindKey) {\n func = thisBinding[key];\n }\n if (this instanceof bound) {\n thisBinding = baseCreate(func.prototype);\n var result = func.apply(thisBinding, args);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisBinding, args);\n }\n setBindData(bound, bindData);\n return bound;\n}\n\nmodule.exports = baseCreateWrapper;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * Checks if `value` is a function.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n */\nfunction isFunction(value) {\n return typeof value == 'function';\n}\n\nmodule.exports = isFunction;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseBind = require('lodash._basebind'),\n baseCreateWrapper = require('lodash._basecreatewrapper'),\n isFunction = require('lodash.isfunction');\n\n/**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\nvar arrayRef = [];\n\n/** Native method shortcuts */\nvar push = arrayRef.push;\n\n/**\n * Creates a function that, when called, either curries or invokes `func`\n * with an optional `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to reference.\n * @param {number} bitmask The bitmask of method flags to compose.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry`\n * 8 - `_.curry` (bound)\n * 16 - `_.partial`\n * 32 - `_.partialRight`\n * @param {Array} [partialArgs] An array of arguments to prepend to those\n * provided to the new function.\n * @param {Array} [partialRightArgs] An array of arguments to append to those\n * provided to the new function.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new function.\n */\nfunction createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n isPartial = bitmask & 16,\n isPartialRight = bitmask & 32;\n\n if (!isBindKey && !isFunction(func)) {\n throw new TypeError;\n }\n if (isPartial && !partialArgs.length) {\n bitmask &= ~16;\n isPartial = partialArgs = false;\n }\n if (isPartialRight && !partialRightArgs.length) {\n bitmask &= ~32;\n isPartialRight = partialRightArgs = false;\n }\n var bindData = func && func.__bindData__;\n if (bindData && bindData !== true) {\n bindData = bindData.slice();\n\n // set `thisBinding` is not previously bound\n if (isBind && !(bindData[1] & 1)) {\n bindData[4] = thisArg;\n }\n // set if previously bound but not currently (subsequent curried functions)\n if (!isBind && bindData[1] & 1) {\n bitmask |= 8;\n }\n // set curried arity if not yet set\n if (isCurry && !(bindData[1] & 4)) {\n bindData[5] = arity;\n }\n // append partial left arguments\n if (isPartial) {\n push.apply(bindData[2] || (bindData[2] = []), partialArgs);\n }\n // append partial right arguments\n if (isPartialRight) {\n push.apply(bindData[3] || (bindData[3] = []), partialRightArgs);\n }\n // merge flags\n bindData[1] |= bitmask;\n return createWrapper.apply(null, bindData);\n }\n // fast path for `_.bind`\n var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n}\n\nmodule.exports = createWrapper;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar createWrapper = require('lodash._createwrapper'),\n reNative = require('lodash._renative'),\n slice = require('lodash._slice');\n\n/**\n * Creates a function that, when called, invokes `func` with the `this`\n * binding of `thisArg` and prepends any additional `bind` arguments to those\n * provided to the bound function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to bind.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var func = function(greeting) {\n * return greeting + ' ' + this.name;\n * };\n *\n * func = _.bind(func, { 'name': 'fred' }, 'hi');\n * func();\n * // => 'hi fred'\n */\nfunction bind(func, thisArg) {\n return arguments.length > 2\n ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n : createWrapper(func, 1, null, null, thisArg);\n}\n\nmodule.exports = bind;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar reNative = require('lodash._renative');\n\n/** Used to detect functions containing a `this` reference */\nvar reThis = /\\bthis\\b/;\n\n/**\n * An object used to flag environments features.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n/**\n * Detect if functions can be decompiled by `Function#toString`\n * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).\n *\n * @memberOf _.support\n * @type boolean\n */\nsupport.funcDecomp = !reNative.test(global.WinRTError) && reThis.test(function() { return this; });\n\n/**\n * Detect if `Function#name` is supported (all but IE).\n *\n * @memberOf _.support\n * @type boolean\n */\nsupport.funcNames = typeof Function.name == 'string';\n\nmodule.exports = support;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar bind = require('lodash.bind'),\n identity = require('lodash.identity'),\n setBindData = require('lodash._setbinddata'),\n support = require('lodash.support');\n\n/** Used to detected named functions */\nvar reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n/** Used to detect functions containing a `this` reference */\nvar reThis = /\\bthis\\b/;\n\n/** Native method shortcuts */\nvar fnToString = Function.prototype.toString;\n\n/**\n * The base implementation of `_.createCallback` without support for creating\n * \"_.pluck\" or \"_.where\" style callbacks.\n *\n * @private\n * @param {*} [func=identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of the created callback.\n * @param {number} [argCount] The number of arguments the callback accepts.\n * @returns {Function} Returns a callback function.\n */\nfunction baseCreateCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n // exit early for no `thisArg` or already bound by `Function#bind`\n if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n return func;\n }\n var bindData = func.__bindData__;\n if (typeof bindData == 'undefined') {\n if (support.funcNames) {\n bindData = !func.name;\n }\n bindData = bindData || !support.funcDecomp;\n if (!bindData) {\n var source = fnToString.call(func);\n if (!support.funcNames) {\n bindData = !reFuncName.test(source);\n }\n if (!bindData) {\n // checks if `func` references the `this` keyword and stores the result\n bindData = reThis.test(source);\n setBindData(func, bindData);\n }\n }\n }\n // exit early if there are no `this` references or `func` is bound\n if (bindData === false || (bindData !== true && bindData[1] & 1)) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 2: return function(a, b) {\n return func.call(thisArg, a, b);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n }\n return bind(func, thisArg);\n}\n\nmodule.exports = baseCreateCallback;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreateCallback = require('lodash._basecreatecallback'),\n keys = require('lodash.keys'),\n objectTypes = require('lodash._objecttypes');\n\n/**\n * Iterates over own enumerable properties of an object, executing the callback\n * for each property. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, key, object). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n * console.log(key);\n * });\n * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n */\nvar forOwn = function(collection, callback, thisArg) {\n var index, iterable = collection, result = iterable;\n if (!iterable) return result;\n if (!objectTypes[typeof iterable]) return result;\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n if (callback(iterable[index], index, collection) === false) return result;\n }\n return result\n};\n\nmodule.exports = forOwn;\n","/**\n * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar baseCreateCallback = require('lodash._basecreatecallback'),\n forOwn = require('lodash.forown');\n\n/**\n * Iterates over elements of a collection, executing the callback for each\n * element. The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * Note: As with other \"Collections\" methods, objects with a `length` property\n * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n * may be used for object iteration.\n *\n * @static\n * @memberOf _\n * @alias each\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n * // => logs each number and returns '1,2,3'\n *\n * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n * // => logs each number and returns the object (property order is not guaranteed across environments)\n */\nfunction forEach(collection, callback, thisArg) {\n var index = -1,\n length = collection ? collection.length : 0;\n\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n if (typeof length == 'number') {\n while (++index < length) {\n if (callback(collection[index], index, collection) === false) {\n break;\n }\n }\n } else {\n forOwn(collection, callback);\n }\n return collection;\n}\n\nmodule.exports = forEach;\n","var metric,\nimperial;\n\nmetric = {\n mm: {\n name: {\n singular: 'Millimeter',\n plural: 'Millimeters'\n },\n to_anchor: 1/1000\n },\n cm: {\n name: {\n singular: 'Centimeter',\n plural: 'Centimeters'\n },\n to_anchor: 1/100\n },\n m: {\n name: {\n singular: 'Meter',\n plural: 'Meters'\n },\n to_anchor: 1\n },\n km: {\n name: {\n singular: 'Kilometer',\n plural: 'Kilometers'\n },\n to_anchor: 1000\n }\n};\n\nimperial = {\n 'in': {\n name: {\n singular: 'Inch',\n plural: 'Inches'\n },\n to_anchor: 1/12\n },\n yd: {\n name: {\n singular: 'Yard',\n plural: 'Yards'\n },\n to_anchor: 3\n },\n 'ft-us': {\n name: {\n singular: 'US Survey Foot',\n plural: 'US Survey Feet'\n },\n to_anchor: 1.000002\n },\n ft: {\n name: {\n singular: 'Foot',\n plural: 'Feet'\n },\n to_anchor: 1\n },\n mi: {\n name: {\n singular: 'Mile',\n plural: 'Miles'\n },\n to_anchor: 5280\n }\n};\n\nmodule.exports = {\n metric: metric,\n imperial: imperial,\n _anchors: {\n metric: {\n unit: 'm',\n ratio: 3.28084\n },\n imperial: {\n unit: 'ft',\n ratio: 1/3.28084\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mm2: {\n name: {\n singular: 'Square Millimeter'\n , plural: 'Square Millimeters'\n }\n , to_anchor: 1/1000000\n }\n, cm2: {\n name: {\n singular: 'Centimeter'\n , plural: 'Centimeters'\n }\n , to_anchor: 1/10000\n }\n, m2: {\n name: {\n singular: 'Square Meter'\n , plural: 'Square Meters'\n }\n , to_anchor: 1\n }\n, ha: {\n name: {\n singular: 'Hectare'\n , plural: 'Hectares'\n }\n , to_anchor: 10000\n }\n, km2: {\n name: {\n singular: 'Square Kilometer'\n , plural: 'Square Kilometers'\n }\n , to_anchor: 1000000\n }\n};\n\nimperial = {\n 'in2': {\n name: {\n singular: 'Square Inch'\n , plural: 'Square Inches'\n }\n , to_anchor: 1/144\n }\n, yd2: {\n name: {\n singular: 'Square Yard'\n , plural: 'Square Yards' \n }\n , to_anchor: 9\n }\n, ft2: {\n name: {\n singular: 'Square Foot'\n , plural: 'Square Feet'\n }\n , to_anchor: 1\n }\n, ac: {\n name: {\n singular: 'Acre'\n , plural: 'Acres'\n }\n , to_anchor: 43560\n }\n, mi2: {\n name: {\n singular: 'Square Mile'\n , plural: 'Square Miles'\n }\n , to_anchor: 27878400\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'm2'\n , ratio: 10.7639\n }\n , imperial: {\n unit: 'ft2'\n , ratio: 1/10.7639\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mcg: {\n name: {\n singular: 'Microgram'\n , plural: 'Micrograms'\n }\n , to_anchor: 1/1000000\n }\n, mg: {\n name: {\n singular: 'Milligram'\n , plural: 'Milligrams'\n }\n , to_anchor: 1/1000\n }\n, g: {\n name: {\n singular: 'Gram'\n , plural: 'Grams'\n }\n , to_anchor: 1\n }\n, kg: {\n name: {\n singular: 'Kilogram'\n , plural: 'Kilograms'\n }\n , to_anchor: 1000\n}\n, mt: {\n name: {\n singular: 'Metric Tonne'\n , plural: 'Metric Tonnes'\n }\n , to_anchor: 1000000\n }\n};\n\nimperial = {\n oz: {\n name: {\n singular: 'Ounce'\n , plural: 'Ounces'\n }\n , to_anchor: 1/16\n }\n, lb: {\n name: {\n singular: 'Pound'\n , plural: 'Pounds'\n }\n , to_anchor: 1\n}, t: {\n name: {\n singular: 'Ton',\n plural: 'Tons',\n },\n to_anchor: 2000,\n },\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'g'\n , ratio: 1/453.592\n }\n , imperial: {\n unit: 'lb'\n , ratio: 453.592\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n mm3: {\n name: {\n singular: 'Cubic Millimeter'\n , plural: 'Cubic Millimeters'\n }\n , to_anchor: 1/1000000\n }\n, cm3: {\n name: {\n singular: 'Cubic Centimeter'\n , plural: 'Cubic Centimeters'\n }\n , to_anchor: 1/1000\n }\n, ml: {\n name: {\n singular: 'Millilitre'\n , plural: 'Millilitres'\n }\n , to_anchor: 1/1000\n }\n, cl: {\n name: {\n singular: 'Centilitre'\n , plural: 'Centilitres'\n }\n , to_anchor: 1/100\n }\n, dl: {\n name: {\n singular: 'Decilitre'\n , plural: 'Decilitres'\n }\n , to_anchor: 1/10\n }\n, l: {\n name: {\n singular: 'Litre'\n , plural: 'Litres'\n }\n , to_anchor: 1\n }\n, kl: {\n name: {\n singular: 'Kilolitre'\n , plural: 'Kilolitres'\n }\n , to_anchor: 1000\n }\n, m3: {\n name: {\n singular: 'Cubic meter'\n , plural: 'Cubic meters'\n }\n , to_anchor: 1000\n }\n, km3: {\n name: {\n singular: 'Cubic kilometer'\n , plural: 'Cubic kilometers'\n }\n , to_anchor: 1000000000000\n }\n\n// Swedish units\n, krm: {\n name: {\n singular: 'Matsked'\n , plural: 'Matskedar'\n }\n , to_anchor: 1/1000\n}\n, tsk: {\n name: {\n singular: 'Tesked'\n , plural: 'Teskedar'\n }\n , to_anchor: 5/1000\n }\n, msk: {\n name: {\n singular: 'Matsked'\n , plural: 'Matskedar'\n }\n , to_anchor: 15/1000\n }\n, kkp: {\n name: {\n singular: 'Kaffekopp'\n , plural: 'Kaffekoppar'\n }\n , to_anchor: 150/1000\n }\n, glas: {\n name: {\n singular: 'Glas'\n , plural: 'Glas'\n }\n , to_anchor: 200/1000\n }\n, kanna: {\n name: {\n singular: 'Kanna'\n , plural: 'Kannor'\n }\n , to_anchor: 2.617\n }\n};\n\nimperial = {\n tsp: {\n name: {\n singular: 'Teaspoon'\n , plural: 'Teaspoons'\n }\n , to_anchor: 1/6\n }\n, Tbs: {\n name: {\n singular: 'Tablespoon'\n , plural: 'Tablespoons'\n }\n , to_anchor: 1/2\n }\n, in3: {\n name: {\n singular: 'Cubic inch'\n , plural: 'Cubic inches'\n }\n , to_anchor: 0.55411\n }\n, 'fl-oz': {\n name: {\n singular: 'Fluid Ounce'\n , plural: 'Fluid Ounces'\n }\n , to_anchor: 1\n }\n, cup: {\n name: {\n singular: 'Cup'\n , plural: 'Cups'\n }\n , to_anchor: 8\n }\n, pnt: {\n name: {\n singular: 'Pint'\n , plural: 'Pints'\n }\n , to_anchor: 16\n }\n, qt: {\n name: {\n singular: 'Quart'\n , plural: 'Quarts'\n }\n , to_anchor: 32\n }\n, gal: {\n name: {\n singular: 'Gallon'\n , plural: 'Gallons'\n }\n , to_anchor: 128\n }\n, ft3: {\n name: {\n singular: 'Cubic foot'\n , plural: 'Cubic feet'\n }\n , to_anchor: 957.506\n }\n, yd3: {\n name: {\n singular: 'Cubic yard'\n , plural: 'Cubic yards'\n }\n , to_anchor: 25852.7\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'l'\n , ratio: 33.8140226\n }\n , imperial: {\n unit: 'fl-oz'\n , ratio: 1/33.8140226\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n ea: {\n name: {\n singular: 'Each'\n , plural: 'Each'\n }\n , to_anchor: 1\n },\n dz: {\n name: {\n singular: 'Dozen'\n , plural: 'Dozens'\n }\n , to_anchor: 12\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: {}\n, _anchors: {\n metric: {\n unit: 'ea'\n , ratio: 1\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n C: {\n name: {\n singular: 'degree Celsius'\n , plural: 'degrees Celsius'\n }\n , to_anchor: 1\n , anchor_shift: 0\n },\n K: {\n name: {\n singular: 'degree Kelvin'\n , plural: 'degrees Kelvin'\n }\n , to_anchor: 1\n , anchor_shift: 273.15\n }\n};\n\nimperial = {\n F: {\n name: {\n singular: 'degree Fahrenheit'\n , plural: 'degrees Fahrenheit'\n }\n , to_anchor: 1\n },\n R: {\n name: {\n singular: 'degree Rankine'\n , plural: 'degrees Rankine'\n }\n , to_anchor: 1\n , anchor_shift: 459.67\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'C'\n , transform: function (C) { return C / (5/9) + 32 }\n }\n , imperial: {\n unit: 'F'\n , transform: function (F) { return (F - 32) * (5/9) }\n }\n }\n};\n\n","var time;\nvar daysInYear = 365.25;\n\ntime = {\n ns: {\n name: {\n singular: 'Nanosecond'\n , plural: 'Nanoseconds'\n }\n , to_anchor: 1/1000000000\n }\n, mu: {\n name: {\n singular: 'Microsecond'\n , plural: 'Microseconds'\n }\n , to_anchor: 1/1000000\n }\n, ms: {\n name: {\n singular: 'Millisecond'\n , plural: 'Milliseconds'\n }\n , to_anchor: 1/1000\n }\n, s: {\n name: {\n singular: 'Second'\n , plural: 'Seconds'\n }\n , to_anchor: 1\n }\n, min: {\n name: {\n singular: 'Minute'\n , plural: 'Minutes'\n }\n , to_anchor: 60\n }\n, h: {\n name: {\n singular: 'Hour'\n , plural: 'Hours'\n }\n , to_anchor: 60 * 60 \n }\n, d: {\n name: {\n singular: 'Day'\n , plural: 'Days'\n }\n , to_anchor: 60 * 60 * 24\n }\n, week: {\n name: {\n singular: 'Week'\n , plural: 'Weeks'\n }\n , to_anchor: 60 * 60 * 24 * 7\n }\n, month: {\n name: {\n singular: 'Month'\n , plural: 'Months'\n }\n , to_anchor: 60 * 60 * 24 * daysInYear / 12\n }\n, year: {\n name: {\n singular: 'Year'\n , plural: 'Years'\n }\n , to_anchor: 60 * 60 * 24 * daysInYear\n }\n};\n\n\nmodule.exports = {\n metric: time \n, _anchors: {\n metric: {\n unit: 's'\n , ratio: 1\n }\n }\n};\n","var bits\n , bytes;\n\nbits = {\n b: {\n name: {\n singular: 'Bit'\n , plural: 'Bits'\n }\n , to_anchor: 1\n }\n, Kb: {\n name: {\n singular: 'Kilobit'\n , plural: 'Kilobits'\n }\n , to_anchor: 1024\n }\n, Mb: {\n name: {\n singular: 'Megabit'\n , plural: 'Megabits'\n }\n , to_anchor: 1048576\n }\n, Gb: {\n name: {\n singular: 'Gigabit'\n , plural: 'Gigabits'\n }\n , to_anchor: 1073741824\n }\n, Tb: {\n name: {\n singular: 'Terabit'\n , plural: 'Terabits'\n }\n , to_anchor: 1099511627776\n }\n};\n\nbytes = {\n B: {\n name: {\n singular: 'Byte'\n , plural: 'Bytes'\n }\n , to_anchor: 1\n }\n, KB: {\n name: {\n singular: 'Kilobyte'\n , plural: 'Kilobytes'\n }\n , to_anchor: 1024\n }\n, MB: {\n name: {\n singular: 'Megabyte'\n , plural: 'Megabytes'\n }\n , to_anchor: 1048576\n }\n, GB: {\n name: {\n singular: 'Gigabyte'\n , plural: 'Gigabytes'\n }\n , to_anchor: 1073741824\n }\n, TB: {\n name: {\n singular: 'Terabyte'\n , plural: 'Terabytes'\n }\n , to_anchor: 1099511627776\n }\n};\n\nmodule.exports = {\n bits: bits\n, bytes: bytes\n, _anchors: {\n bits: {\n unit: 'b'\n , ratio: 1/8\n }\n , bytes: {\n unit: 'B'\n , ratio: 8\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n ppm: {\n name: {\n singular: 'Part-per Million'\n , plural: 'Parts-per Million'\n }\n , to_anchor: 1\n }\n , ppb: {\n name: {\n singular: 'Part-per Billion'\n , plural: 'Parts-per Billion'\n }\n , to_anchor: .001\n }\n , ppt: {\n name: {\n singular: 'Part-per Trillion'\n , plural: 'Parts-per Trillion'\n }\n , to_anchor: .000001\n }\n , ppq: {\n name: {\n singular: 'Part-per Quadrillion'\n , plural: 'Parts-per Quadrillion'\n }\n , to_anchor: .000000001\n }\n};\n\nmodule.exports = {\n metric: metric\n , imperial: {}\n , _anchors: {\n metric: {\n unit: 'ppm'\n , ratio: .000001\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'm/s': {\n name: {\n singular: 'Metre per second'\n , plural: 'Metres per second'\n }\n , to_anchor: 3.6\n }\n, 'km/h': {\n name: {\n singular: 'Kilometre per hour'\n , plural: 'Kilometres per hour'\n }\n , to_anchor: 1\n }\n}\n\n imperial = {\n 'm/h': {\n name: {\n singular: 'Mile per hour'\n , plural: 'Miles per hour'\n }\n , to_anchor: 1\n }\n , knot: {\n name: {\n singular: 'Knot'\n , plural: 'Knots'\n }\n , to_anchor: 1.150779\n }\n , 'ft/s': {\n name: {\n singular: 'Foot per second'\n , plural: 'Feet per second'\n }\n , to_anchor: 0.681818\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'km/h'\n , ratio: 1/1.609344\n }\n , imperial: {\n unit: 'm/h'\n , ratio: 1.609344\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'min/km': {\n name: {\n singular: 'Minute per kilometre'\n , plural: 'Minutes per kilometre'\n }\n , to_anchor: 0.06\n }\n ,'s/m': {\n name: {\n singular: 'Second per metre'\n , plural: 'Seconds per metre'\n }\n , to_anchor: 1\n }\n}\n\nimperial = {\n 'min/mi': {\n name: {\n singular: 'Minute per mile'\n , plural: 'Minutes per mile'\n }\n , to_anchor: 0.0113636\n }\n , 's/ft': {\n name: {\n singular: 'Second per foot'\n , plural: 'Seconds per foot'\n }\n , to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 's/m'\n , ratio: 0.3048\n }\n , imperial: {\n unit: 's/ft'\n , ratio: 1/0.3048\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n Pa: {\n name: {\n singular: 'pascal'\n , plural: 'pascals'\n }\n , to_anchor: 1/1000\n }\n, kPa: {\n name: {\n singular: 'kilopascal'\n , plural: 'kilopascals'\n }\n , to_anchor: 1\n }\n, MPa: {\n name: {\n singular: 'megapascal'\n , plural: 'megapascals'\n }\n , to_anchor: 1000\n }\n, hPa: {\n name: {\n singular: 'hectopascal'\n , plural: 'hectopascals'\n }\n , to_anchor: 1/10\n }\n, bar: {\n name: {\n singular: 'bar'\n , plural: 'bar'\n }\n , to_anchor: 100\n }\n, torr: {\n name: {\n singular: 'torr'\n , plural: 'torr'\n }\n , to_anchor: 101325/760000\n }\n};\n\nimperial = {\n psi: {\n name: {\n singular: 'pound per square inch'\n , plural: 'pounds per square inch'\n }\n , to_anchor: 1/1000\n }\n, ksi: {\n name: {\n singular: 'kilopound per square inch'\n , plural: 'kilopound per square inch'\n }\n , to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'kPa'\n , ratio: 0.00014503768078\n }\n , imperial: {\n unit: 'psi'\n , ratio: 1/0.00014503768078\n }\n }\n};\n","var current;\n\ncurrent = {\n A: {\n name: {\n singular: 'Ampere'\n , plural: 'Amperes'\n }\n , to_anchor: 1\n }\n, mA: {\n name: {\n singular: 'Milliampere'\n , plural: 'Milliamperes'\n }\n , to_anchor: .001\n }\n, kA: {\n name: {\n singular: 'Kiloampere'\n , plural: 'Kiloamperes'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: current\n, _anchors: {\n metric: {\n unit: 'A'\n , ratio: 1\n }\n }\n};\n","var voltage;\n\nvoltage = {\n V: {\n name: {\n singular: 'Volt'\n , plural: 'Volts'\n }\n , to_anchor: 1\n }\n, mV: {\n name: {\n singular: 'Millivolt'\n , plural: 'Millivolts'\n }\n , to_anchor: .001\n }\n, kV: {\n name: {\n singular: 'Kilovolt'\n , plural: 'Kilovolts'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: voltage\n, _anchors: {\n metric: {\n unit: 'V'\n , ratio: 1\n }\n }\n};\n","var power;\n\npower = {\n W: {\n name: {\n singular: 'Watt'\n , plural: 'Watts'\n }\n , to_anchor: 1\n }\n, mW: {\n name: {\n singular: 'Milliwatt'\n , plural: 'Milliwatts'\n }\n , to_anchor: .001\n }\n, kW: {\n name: {\n singular: 'Kilowatt'\n , plural: 'Kilowatts'\n }\n , to_anchor: 1000\n }\n, MW: {\n name: {\n singular: 'Megawatt'\n , plural: 'Megawatts'\n }\n , to_anchor: 1000000\n }\n, GW: {\n name: {\n singular: 'Gigawatt'\n , plural: 'Gigawatts'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: power\n, _anchors: {\n metric: {\n unit: 'W'\n , ratio: 1\n }\n }\n};\n","var reactivePower;\n\nreactivePower = {\n VAR: {\n name: {\n singular: 'Volt-Ampere Reactive'\n , plural: 'Volt-Amperes Reactive'\n }\n , to_anchor: 1\n }\n, mVAR: {\n name: {\n singular: 'Millivolt-Ampere Reactive'\n , plural: 'Millivolt-Amperes Reactive'\n }\n , to_anchor: .001\n }\n, kVAR: {\n name: {\n singular: 'Kilovolt-Ampere Reactive'\n , plural: 'Kilovolt-Amperes Reactive'\n }\n , to_anchor: 1000\n }\n, MVAR: {\n name: {\n singular: 'Megavolt-Ampere Reactive'\n , plural: 'Megavolt-Amperes Reactive'\n }\n , to_anchor: 1000000\n }\n, GVAR: {\n name: {\n singular: 'Gigavolt-Ampere Reactive'\n , plural: 'Gigavolt-Amperes Reactive'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: reactivePower\n, _anchors: {\n metric: {\n unit: 'VAR'\n , ratio: 1\n }\n }\n};\n","var apparentPower;\n\napparentPower = {\n VA: {\n name: {\n singular: 'Volt-Ampere'\n , plural: 'Volt-Amperes'\n }\n , to_anchor: 1\n }\n, mVA: {\n name: {\n singular: 'Millivolt-Ampere'\n , plural: 'Millivolt-Amperes'\n }\n , to_anchor: .001\n }\n, kVA: {\n name: {\n singular: 'Kilovolt-Ampere'\n , plural: 'Kilovolt-Amperes'\n }\n , to_anchor: 1000\n }\n, MVA: {\n name: {\n singular: 'Megavolt-Ampere'\n , plural: 'Megavolt-Amperes'\n }\n , to_anchor: 1000000\n }\n, GVA: {\n name: {\n singular: 'Gigavolt-Ampere'\n , plural: 'Gigavolt-Amperes'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: apparentPower\n, _anchors: {\n metric: {\n unit: 'VA'\n , ratio: 1\n }\n }\n};\n","var energy;\n\nenergy = {\n Wh: {\n name: {\n singular: 'Watt-hour'\n , plural: 'Watt-hours'\n }\n , to_anchor: 3600\n }\n, mWh: {\n name: {\n singular: 'Milliwatt-hour'\n , plural: 'Milliwatt-hours'\n }\n , to_anchor: 3.6\n }\n, kWh: {\n name: {\n singular: 'Kilowatt-hour'\n , plural: 'Kilowatt-hours'\n }\n , to_anchor: 3600000\n }\n, MWh: {\n name: {\n singular: 'Megawatt-hour'\n , plural: 'Megawatt-hours'\n }\n , to_anchor: 3600000000\n }\n, GWh: {\n name: {\n singular: 'Gigawatt-hour'\n , plural: 'Gigawatt-hours'\n }\n , to_anchor: 3600000000000\n }\n, J: {\n name: {\n singular: 'Joule'\n , plural: 'Joules'\n }\n , to_anchor: 1\n }\n, kJ: {\n name: {\n singular: 'Kilojoule'\n , plural: 'Kilojoules'\n }\n , to_anchor: 1000\n }\n};\n\nmodule.exports = {\n metric: energy\n, _anchors: {\n metric: {\n unit: 'J'\n , ratio: 1\n }\n }\n};\n","var reactiveEnergy;\n\nreactiveEnergy = {\n VARh: {\n name: {\n singular: 'Volt-Ampere Reactive Hour'\n , plural: 'Volt-Amperes Reactive Hour'\n }\n , to_anchor: 1\n }\n, mVARh: {\n name: {\n singular: 'Millivolt-Ampere Reactive Hour'\n , plural: 'Millivolt-Amperes Reactive Hour'\n }\n , to_anchor: .001\n }\n, kVARh: {\n name: {\n singular: 'Kilovolt-Ampere Reactive Hour'\n , plural: 'Kilovolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000\n }\n, MVARh: {\n name: {\n singular: 'Megavolt-Ampere Reactive Hour'\n , plural: 'Megavolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000000\n }\n, GVARh: {\n name: {\n singular: 'Gigavolt-Ampere Reactive Hour'\n , plural: 'Gigavolt-Amperes Reactive Hour'\n }\n , to_anchor: 1000000000\n }\n};\n\nmodule.exports = {\n metric: reactiveEnergy\n, _anchors: {\n metric: {\n unit: 'VARh'\n , ratio: 1\n }\n }\n};\n","var metric\n , imperial;\n\nmetric = {\n 'mm3/s': {\n name: {\n singular: 'Cubic Millimeter per second'\n , plural: 'Cubic Millimeters per second'\n }\n , to_anchor: 1/1000000\n }\n, 'cm3/s': {\n name: {\n singular: 'Cubic Centimeter per second'\n , plural: 'Cubic Centimeters per second'\n }\n , to_anchor: 1/1000\n }\n, 'ml/s': {\n name: {\n singular: 'Millilitre per second'\n , plural: 'Millilitres per second'\n }\n , to_anchor: 1/1000\n }\n, 'cl/s': {\n name: {\n singular: 'Centilitre per second'\n , plural: 'Centilitres per second'\n }\n , to_anchor: 1/100\n }\n, 'dl/s': {\n name: {\n singular: 'Decilitre per second'\n , plural: 'Decilitres per second'\n }\n , to_anchor: 1/10\n }\n, 'l/s': {\n name: {\n singular: 'Litre per second'\n , plural: 'Litres per second'\n }\n , to_anchor: 1\n }\n, 'l/min': {\n name: {\n singular: 'Litre per minute'\n , plural: 'Litres per minute'\n }\n , to_anchor: 1/60\n }\n, 'l/h': {\n name: {\n singular: 'Litre per hour'\n , plural: 'Litres per hour'\n }\n , to_anchor: 1/3600\n }\n, 'kl/s': {\n name: {\n singular: 'Kilolitre per second'\n , plural: 'Kilolitres per second'\n }\n , to_anchor: 1000\n }\n, 'kl/min': {\n name: {\n singular: 'Kilolitre per minute'\n , plural: 'Kilolitres per minute'\n }\n , to_anchor: 50/3\n }\n, 'kl/h': {\n name: {\n singular: 'Kilolitre per hour'\n , plural: 'Kilolitres per hour'\n }\n , to_anchor: 5/18\n }\n, 'm3/s': {\n name: {\n singular: 'Cubic meter per second'\n , plural: 'Cubic meters per second'\n }\n , to_anchor: 1000\n }\n, 'm3/min': {\n name: {\n singular: 'Cubic meter per minute'\n , plural: 'Cubic meters per minute'\n }\n , to_anchor: 50/3\n }\n, 'm3/h': {\n name: {\n singular: 'Cubic meter per hour'\n , plural: 'Cubic meters per hour'\n }\n , to_anchor: 5/18\n }\n, 'km3/s': {\n name: {\n singular: 'Cubic kilometer per second'\n , plural: 'Cubic kilometers per second'\n }\n , to_anchor: 1000000000000\n }\n};\n\nimperial = {\n 'tsp/s': {\n name: {\n singular: 'Teaspoon per second'\n , plural: 'Teaspoons per second'\n }\n , to_anchor: 1/6\n }\n, 'Tbs/s': {\n name: {\n singular: 'Tablespoon per second'\n , plural: 'Tablespoons per second'\n }\n , to_anchor: 1/2\n }\n, 'in3/s': {\n name: {\n singular: 'Cubic inch per second'\n , plural: 'Cubic inches per second'\n }\n , to_anchor: 0.55411\n }\n, 'in3/min': {\n name: {\n singular: 'Cubic inch per minute'\n , plural: 'Cubic inches per minute'\n }\n , to_anchor: 0.55411/60\n }\n, 'in3/h': {\n name: {\n singular: 'Cubic inch per hour'\n , plural: 'Cubic inches per hour'\n }\n , to_anchor: 0.55411/3600\n }\n, 'fl-oz/s': {\n name: {\n singular: 'Fluid Ounce per second'\n , plural: 'Fluid Ounces per second'\n }\n , to_anchor: 1\n }\n, 'fl-oz/min': {\n name: {\n singular: 'Fluid Ounce per minute'\n , plural: 'Fluid Ounces per minute'\n }\n , to_anchor: 1/60\n }\n, 'fl-oz/h': {\n name: {\n singular: 'Fluid Ounce per hour'\n , plural: 'Fluid Ounces per hour'\n }\n , to_anchor: 1/3600\n }\n, 'cup/s': {\n name: {\n singular: 'Cup per second'\n , plural: 'Cups per second'\n }\n , to_anchor: 8\n }\n, 'pnt/s': {\n name: {\n singular: 'Pint per second'\n , plural: 'Pints per second'\n }\n , to_anchor: 16\n }\n, 'pnt/min': {\n name: {\n singular: 'Pint per minute'\n , plural: 'Pints per minute'\n }\n , to_anchor: 4/15\n }\n, 'pnt/h': {\n name: {\n singular: 'Pint per hour'\n , plural: 'Pints per hour'\n }\n , to_anchor: 1/225\n }\n, 'qt/s': {\n name: {\n singular: 'Quart per second'\n , plural: 'Quarts per second'\n }\n , to_anchor: 32\n }\n, 'gal/s': {\n name: {\n singular: 'Gallon per second'\n , plural: 'Gallons per second'\n }\n , to_anchor: 128\n }\n, 'gal/min': {\n name: {\n singular: 'Gallon per minute'\n , plural: 'Gallons per minute'\n }\n , to_anchor: 32/15\n }\n, 'gal/h': {\n name: {\n singular: 'Gallon per hour'\n , plural: 'Gallons per hour'\n }\n , to_anchor: 8/225\n }\n, 'ft3/s': {\n name: {\n singular: 'Cubic foot per second'\n , plural: 'Cubic feet per second'\n }\n , to_anchor: 957.506\n }\n, 'ft3/min': {\n name: {\n singular: 'Cubic foot per minute'\n , plural: 'Cubic feet per minute'\n }\n , to_anchor: 957.506/60\n }\n, 'ft3/h': {\n name: {\n singular: 'Cubic foot per hour'\n , plural: 'Cubic feet per hour'\n }\n , to_anchor: 957.506/3600\n }\n, 'yd3/s': {\n name: {\n singular: 'Cubic yard per second'\n , plural: 'Cubic yards per second'\n }\n , to_anchor: 25852.7\n }\n, 'yd3/min': {\n name: {\n singular: 'Cubic yard per minute'\n , plural: 'Cubic yards per minute'\n }\n , to_anchor: 25852.7/60\n }\n, 'yd3/h': {\n name: {\n singular: 'Cubic yard per hour'\n , plural: 'Cubic yards per hour'\n }\n , to_anchor: 25852.7/3600\n }\n};\n\nmodule.exports = {\n metric: metric\n, imperial: imperial\n, _anchors: {\n metric: {\n unit: 'l/s'\n , ratio: 33.8140227\n }\n , imperial: {\n unit: 'fl-oz/s'\n , ratio: 1/33.8140227\n }\n }\n};\n","var metric,\nimperial;\n\nmetric = {\n 'lx': {\n name: {\n singular: 'Lux',\n plural: 'Lux'\n },\n to_anchor: 1\n }\n};\n\nimperial = {\n 'ft-cd': {\n name: {\n singular: 'Foot-candle',\n plural: 'Foot-candles'\n },\n to_anchor: 1\n }\n};\n\nmodule.exports = {\n metric: metric,\n imperial: imperial,\n _anchors: {\n metric: {\n unit: 'lx',\n ratio: 1/10.76391\n },\n imperial: {\n unit: 'ft-cd', \n\t ratio: 10.76391\n }\n }\n};\n","var frequency;\n\nfrequency = {\n mHz: {\n name: {\n singular: 'millihertz'\n , plural: 'millihertz'\n }\n , to_anchor: 1/1000\n }\n, Hz: {\n name: {\n singular: 'hertz'\n , plural: 'hertz'\n }\n , to_anchor: 1\n }\n, kHz: {\n name: {\n singular: 'kilohertz'\n , plural: 'kilohertz'\n }\n , to_anchor: 1000\n }\n, MHz: {\n name: {\n singular: 'megahertz'\n , plural: 'megahertz'\n }\n , to_anchor: 1000 * 1000\n }\n, GHz: {\n name: {\n singular: 'gigahertz'\n , plural: 'gigahertz'\n }\n , to_anchor: 1000 * 1000 * 1000\n }\n, THz: {\n name: {\n singular: 'terahertz'\n , plural: 'terahertz'\n }\n , to_anchor: 1000 * 1000 * 1000 * 1000\n }\n, rpm: {\n name: {\n singular: 'rotation per minute'\n , plural: 'rotations per minute'\n }\n , to_anchor: 1/60\n }\n, \"deg/s\": {\n name: {\n singular: 'degree per second'\n , plural: 'degrees per second'\n }\n , to_anchor: 1/360\n }\n, \"rad/s\": {\n name: {\n singular: 'radian per second'\n , plural: 'radians per second'\n }\n , to_anchor: 1/(Math.PI * 2)\n }\n};\n\n\nmodule.exports = {\n metric: frequency\n, _anchors: {\n frequency: {\n unit: 'hz'\n , ratio: 1\n }\n }\n};\n","var angle;\n\nangle = {\n rad: {\n name: {\n singular: 'radian'\n , plural: 'radians'\n }\n , to_anchor: 180/Math.PI\n }\n, deg: {\n name: {\n singular: 'degree'\n , plural: 'degrees'\n }\n , to_anchor: 1\n }\n, grad: {\n name: {\n singular: 'gradian'\n , plural: 'gradians'\n }\n , to_anchor: 9/10\n }\n, arcmin: {\n name: {\n singular: 'arcminute'\n , plural: 'arcminutes'\n }\n , to_anchor: 1/60\n }\n, arcsec: {\n name: {\n singular: 'arcsecond'\n , plural: 'arcseconds'\n }\n , to_anchor: 1/3600\n }\n};\n\nmodule.exports = {\n metric: angle\n, _anchors: {\n metric: {\n unit: 'deg'\n , ratio: 1\n }\n }\n};\n","var convert\n , keys = require('lodash.keys')\n , each = require('lodash.foreach')\n , measures = {\n length: require('./definitions/length')\n , area: require('./definitions/area')\n , mass: require('./definitions/mass')\n , volume: require('./definitions/volume')\n , each: require('./definitions/each')\n , temperature: require('./definitions/temperature')\n , time: require('./definitions/time')\n , digital: require('./definitions/digital')\n , partsPer: require('./definitions/partsPer')\n , speed: require('./definitions/speed')\n , pace: require('./definitions/pace')\n , pressure: require('./definitions/pressure')\n , current: require('./definitions/current')\n , voltage: require('./definitions/voltage')\n , power: require('./definitions/power')\n , reactivePower: require('./definitions/reactivePower')\n , apparentPower: require('./definitions/apparentPower')\n , energy: require('./definitions/energy')\n , reactiveEnergy: require('./definitions/reactiveEnergy')\n , volumeFlowRate: require('./definitions/volumeFlowRate')\n , illuminance: require('./definitions/illuminance')\n , frequency: require('./definitions/frequency')\n , angle : require('./definitions/angle')\n }\n , Converter;\n\nConverter = function (numerator, denominator) {\n if(denominator)\n this.val = numerator / denominator;\n else\n this.val = numerator;\n};\n\n/**\n* Lets the converter know the source unit abbreviation\n*/\nConverter.prototype.from = function (from) {\n if(this.destination)\n throw new Error('.from must be called before .to');\n\n this.origin = this.getUnit(from);\n\n if(!this.origin) {\n this.throwUnsupportedUnitError(from);\n }\n\n return this;\n};\n\n/**\n* Converts the unit and returns the value\n*/\nConverter.prototype.to = function (to) {\n if(!this.origin)\n throw new Error('.to must be called after .from');\n\n this.destination = this.getUnit(to);\n\n var result\n , transform;\n\n if(!this.destination) {\n this.throwUnsupportedUnitError(to);\n }\n\n // Don't change the value if origin and destination are the same\n if (this.origin.abbr === this.destination.abbr) {\n return this.val;\n }\n\n // You can't go from liquid to mass, for example\n if(this.destination.measure != this.origin.measure) {\n throw new Error('Cannot convert incompatible measures of '\n + this.destination.measure + ' and ' + this.origin.measure);\n }\n\n /**\n * Convert from the source value to its anchor inside the system\n */\n result = this.val * this.origin.unit.to_anchor;\n\n /**\n * For some changes it's a simple shift (C to K)\n * So we'll add it when convering into the unit (later)\n * and subtract it when converting from the unit\n */\n if (this.origin.unit.anchor_shift) {\n result -= this.origin.unit.anchor_shift\n }\n\n /**\n * Convert from one system to another through the anchor ratio. Some conversions\n * aren't ratio based or require more than a simple shift. We can provide a custom\n * transform here to provide the direct result\n */\n if(this.origin.system != this.destination.system) {\n transform = measures[this.origin.measure]._anchors[this.origin.system].transform;\n if (typeof transform === 'function') {\n result = transform(result)\n }\n else {\n result *= measures[this.origin.measure]._anchors[this.origin.system].ratio;\n }\n }\n\n /**\n * This shift has to be done after the system conversion business\n */\n if (this.destination.unit.anchor_shift) {\n result += this.destination.unit.anchor_shift;\n }\n\n /**\n * Convert to another unit inside the destination system\n */\n return result / this.destination.unit.to_anchor;\n};\n\n/**\n* Converts the unit to the best available unit.\n*/\nConverter.prototype.toBest = function(options) {\n if(!this.origin)\n throw new Error('.toBest must be called after .from');\n\n var options = Object.assign({\n exclude: [],\n cutOffNumber: 1,\n }, options)\n\n var best;\n /**\n Looks through every possibility for the 'best' available unit.\n i.e. Where the value has the fewest numbers before the decimal point,\n but is still higher than 1.\n */\n each(this.possibilities(), function(possibility) {\n var unit = this.describe(possibility);\n var isIncluded = options.exclude.indexOf(possibility) === -1;\n\n if (isIncluded && unit.system === this.origin.system) {\n var result = this.to(possibility);\n if (!best || (result >= options.cutOffNumber && result < best.val)) {\n best = {\n val: result,\n unit: possibility,\n singular: unit.singular,\n plural: unit.plural\n };\n }\n }\n }.bind(this));\n\n return best;\n}\n\n/**\n* Finds the unit\n*/\nConverter.prototype.getUnit = function (abbr) {\n var found;\n\n each(measures, function (systems, measure) {\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n each(units, function (unit, testAbbr) {\n if(testAbbr == abbr) {\n found = {\n abbr: abbr\n , measure: measure\n , system: system\n , unit: unit\n };\n return false;\n }\n });\n\n if(found)\n return false;\n });\n\n if(found)\n return false;\n });\n\n return found;\n};\n\nvar describe = function(resp) {\n return {\n abbr: resp.abbr\n , measure: resp.measure\n , system: resp.system\n , singular: resp.unit.name.singular\n , plural: resp.unit.name.plural\n };\n}\n\n/**\n* An alias for getUnit\n*/\nConverter.prototype.describe = function (abbr) {\n var resp = Converter.prototype.getUnit(abbr);\n var desc = null;\n\n try {\n desc = describe(resp);\n } catch(err) {\n this.throwUnsupportedUnitError(abbr);\n }\n\n return desc;\n};\n\n/**\n* Detailed list of all supported units\n*/\nConverter.prototype.list = function (measure) {\n var list = [];\n\n each(measures, function (systems, testMeasure) {\n if(measure && measure !== testMeasure)\n return;\n\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n each(units, function (unit, abbr) {\n list = list.concat(describe({\n abbr: abbr,\n measure: testMeasure\n , system: system\n , unit: unit\n }));\n });\n });\n });\n\n return list;\n};\n\nConverter.prototype.throwUnsupportedUnitError = function (what) {\n var validUnits = [];\n\n each(measures, function (systems, measure) {\n each(systems, function (units, system) {\n if(system == '_anchors')\n return false;\n\n validUnits = validUnits.concat(keys(units));\n });\n });\n\n throw new Error('Unsupported unit ' + what + ', use one of: ' + validUnits.join(', '));\n}\n\n/**\n* Returns the abbreviated measures that the value can be\n* converted to.\n*/\nConverter.prototype.possibilities = function (measure) {\n var possibilities = [];\n if(!this.origin && !measure) {\n\t each(keys(measures), function (measure){\n\t\t each(measures[measure], function (units, system) {\n\t\t if(system == '_anchors')\n\t\t return false;\n\n\t\t possibilities = possibilities.concat(keys(units));\n\t\t });\n\t });\n } else {\n\t measure = measure || this.origin.measure;\n\t each(measures[measure], function (units, system) {\n\t if(system == '_anchors')\n\t return false;\n\n\t possibilities = possibilities.concat(keys(units));\n\t });\n }\n\n return possibilities;\n};\n\n/**\n* Returns the abbreviated measures that the value can be\n* converted to.\n*/\nConverter.prototype.measures = function () {\n return keys(measures);\n};\n\nconvert = function (value) {\n return new Converter(value);\n};\n\nmodule.exports = convert;\n","export * from \"./units\"\nexport * from \"./common\"\nexport * from \"./source\"\nexport * from \"./schematic\"\nexport * from \"./pcb\"\nexport * from \"./any_soup_element\"\n","import convertUnits from \"convert-units\"\n\nconst si_prefix_multiplier = {\n tera: 10e12,\n T: 10e12,\n giga: 10e9,\n G: 10e9,\n mega: 10e6,\n M: 10e6,\n kilo: 10e3,\n k: 10e3,\n deci: 10e-1,\n d: 10e-1,\n centi: 10e-2,\n c: 10e-2,\n milli: 10e-3,\n m: 10e-3,\n micro: 10e-6,\n u: 10e-6,\n µ: 10e-6,\n nano: 10e-9,\n n: 10e-9,\n pico: 10e-12,\n p: 10e-12,\n}\nconst si_prefixes = Object.keys(si_prefix_multiplier)\n\nconst target_conversion = {\n mass: \"g\",\n length: \"mm\",\n time: \"ms\",\n volume: \"ml\",\n angle: \"deg\",\n}\n\nfunction getSiPrefixMultiplierFromUnit(v: string): number {\n for (const prefix of si_prefixes) {\n if (v.startsWith(prefix)) {\n return si_prefix_multiplier[prefix as keyof typeof si_prefix_multiplier]\n }\n }\n return 1\n}\n\nexport const parseAndConvertSiUnit = <\n T extends\n | string\n | number\n | undefined\n | { x: string | number; y: string | number }\n>(\n v: T\n): {\n unit: string | null\n value: T extends { x: string | number; y: string | number }\n ? null | { x: number; y: number }\n : null | number\n} => {\n if (typeof v === \"undefined\") return { unit: null, value: null }\n if (typeof v === \"string\" && v.match(/^[\\d\\.]+$/))\n return { value: parseFloat(v) as any, unit: null }\n if (typeof v === \"number\") return { value: v as any, unit: null }\n if (typeof v === \"object\" && \"x\" in v && \"y\" in v) {\n return {\n unit: parseAndConvertSiUnit(v.x).unit,\n value: {\n x: parseAndConvertSiUnit(v.x as any).value as number,\n y: parseAndConvertSiUnit(v.y as any).value as number,\n } as any,\n }\n }\n const unit_reversed = v\n .split(\"\")\n .reverse()\n .join(\"\")\n .match(/[a-zA-Z]+/)?.[0]\n if (!unit_reversed) {\n throw new Error(`Could not determine unit: \"${v}\"`)\n }\n const unit = unit_reversed.split(\"\").reverse().join(\"\")\n const value = v.slice(0, -unit.length)\n let measure\n try {\n measure = convertUnits().describe(unit as any)?.measure\n } catch (e) {}\n if (measure) {\n const target_unit = (target_conversion as any)[measure]\n if (!target_unit) {\n throw new Error(\n `Could not determine target unit for measure: \"${measure}\"`\n )\n }\n return {\n unit,\n value: convertUnits(parseFloat(value))\n .from(unit as any)\n .to(target_unit) as any,\n }\n } else {\n return {\n unit,\n value: (getSiPrefixMultiplierFromUnit(unit) * parseFloat(value)) as any,\n }\n }\n}\n","import { parseAndConvertSiUnit } from \"src/utils/convert-si-unit-to-number\"\nimport { z } from \"zod\"\n\n// // Currently, removing uncommon SI Prefixes for type simplicity.\n// export type SIPrefix =\n// // | \"y\"\n// // | \"yocto\"\n// // | \"z\"\n// // | \"zepto\"\n// // | \"atto\"\n// // | \"a\"\n// | \"femto\"\n// | \"f\"\n// | \"u\"\n// | \"micro\"\n// // | \"d\"\n// // | \"deci\"\n// | \"c\"\n// | \"centi\"\n// | \"m\"\n// | \"milli\"\n// | \"k\"\n// | \"kilo\"\n// | \"M\"\n// | \"mega\"\n// // | \"G\"\n// // | \"T\"\n// // | \"P\"\n// // | \"E\"\n// // | \"Z\"\n// // | \"Y\"\n\n// export type UnitAbbreviations = {\n// farad: \"F\"\n// ohm: \"Ω\"\n// henry: \"H\"\n// meter: \"m\"\n// volt: \"V\"\n// inch: \"in\"\n// foot: \"ft\"\n// }\n\n// export type Unit = keyof UnitAbbreviations\n// export type NumberWithUnit<T extends Unit> =\n// | `${number}${T | UnitAbbreviations[T]}`\n// | `${number} ${T | UnitAbbreviations[T]}`\n// | `${number}${SIPrefix}${T | UnitAbbreviations[T]}`\n// | `${number} ${SIPrefix}${T | UnitAbbreviations[T]}`\n// export type NumberWithAnyUnit =\n// | `${number}${UnitOrAbbreviation}`\n// | `${number} ${UnitOrAbbreviation}`\n// | `${number}${SIPrefix}${UnitOrAbbreviation}`\n// | `${number} ${SIPrefix}${UnitOrAbbreviation}`\n\n// TODO lots of validation to make sure the unit is valid etc.\nexport const resistance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const capacitance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const inductance = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const voltage = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const length = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const distance = length\n\nexport const current = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const time = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n\nexport const rotation = z\n .string()\n .or(z.number())\n .transform((v) => parseAndConvertSiUnit(v).value!)\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const point = z.object({\n x: distance,\n y: distance,\n})\n\nexport const position = point\n\nexport type Point = z.infer<typeof point>\nexport type InputPoint = z.input<typeof point>\nexport type InputPosition = z.input<typeof position>\nexport type Position = z.infer<typeof position>\n","import { z } from \"zod\"\n\nexport const size = z.object({\n width: z.number(),\n height: z.number(),\n})\n\nexport type Size = z.infer<typeof size>\n","import { z } from \"zod\"\nimport { source_component_base } from \"src/source/base/source_component_base\"\nimport { capacitance } from \"src/units\"\n\nexport const source_simple_capacitor = source_component_base.extend({\n ftype: z.literal(\"simple_capacitor\"),\n capacitance,\n})\n\nexport type SourceSimpleCapacitor = z.infer<typeof source_simple_capacitor>\nexport type SourceSimpleCapacitorInput = z.input<typeof source_simple_capacitor>\n","import { z } from \"zod\"\n\nexport const supplier_name = z.enum([\n \"jlcpcb\",\n \"macrofab\",\n \"pcbway\",\n \"digikey\",\n \"mouser\",\n \"lcsc\",\n])\n\nexport type SupplierName = z.infer<typeof supplier_name>\n","import { supplier_name } from \"src/pcb/properties/supplier_name\"\nimport { z } from \"zod\"\n\nexport const source_component_base = z.object({\n type: z.literal(\"source_component\"),\n ftype: z.string().optional(),\n source_component_id: z.string(),\n name: z.string(),\n // part_numbers: z.array(z.string()).optional(),\n supplier_part_numbers: z\n .record(supplier_name, z.array(z.string()))\n .optional(),\n})\n\nexport type SourceComponentBase = z.infer<typeof source_component_base>\n","import { z } from \"zod\"\nimport { source_component_base } from \"src/source/base/source_component_base\"\nimport { resistance } from \"src/units\"\n\nexport const source_simple_resistor = source_component_base.extend({\n ftype: z.literal(\"simple_resistor\"),\n resistance,\n})\n\nexport type SourceSimpleResistor = z.infer<typeof source_simple_resistor>\nexport type SourceSimpleResistorInput = z.input<typeof source_simple_resistor>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_diode = source_component_base.extend({\n ftype: z.literal(\"simple_diode\"),\n})\n\nexport type SourceSimpleDiode = z.infer<typeof source_simple_diode>\nexport type SourceSimpleDiodeInput = z.input<typeof source_simple_diode>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_ground = source_component_base.extend({\n ftype: z.literal(\"simple_ground\"),\n})\n\nexport type SourceSimpleGround = z.infer<typeof source_simple_ground>\nexport type SourceSimpleGroundInput = z.input<typeof source_simple_ground>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\n\nexport const source_simple_bug = source_component_base.extend({\n ftype: z.literal(\"simple_bug\"),\n})\n\nexport type SourceSimpleBug = z.infer<typeof source_simple_bug>\nexport type SourceSimpleBugInput = z.input<typeof source_simple_bug>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { inductance } from \"../units\"\n\nconst source_simple_inductor = source_component_base.extend({\n ftype: z.literal(\"simple_inductor\"),\n inductance,\n})\n\nexport type SourceSimpleInductor = z.infer<typeof source_simple_inductor>\nexport type SourceSimpleInductorInput = z.input<typeof source_simple_inductor>\n","import { z } from \"zod\"\nimport { source_simple_diode } from \"./source_simple_diode\"\n\nexport const source_led = source_simple_diode.extend({\n ftype: z.literal(\"led\"),\n})\n\nexport type SourceLed = z.infer<typeof source_led>\nexport type SourceLedInput = z.input<typeof source_led>\n","import { source_component_base } from \"src/source/base/source_component_base\"\nimport { z } from \"zod\"\nimport { voltage } from \"../units\"\n\nexport const source_simple_power_source = source_component_base.extend({\n ftype: z.literal(\"simple_power_source\"),\n voltage,\n})\n\nexport type SourceSimplePowerSource = z.infer<typeof source_simple_power_source>\nexport type SourceSimplePowerSourceInput = z.input<\n typeof source_simple_power_source\n>\n","import { z } from \"zod\"\nimport { source_simple_resistor } from \"./source_simple_resistor\"\nimport { source_simple_capacitor } from \"./source_simple_capacitor\"\nimport { source_simple_diode } from \"./source_simple_diode\"\nimport { source_simple_ground } from \"./source_simple_ground\"\nimport { source_simple_bug } from \"./source_simple_bug\"\nimport { source_led } from \"./source_led\"\nimport { source_simple_power_source } from \"./source_simple_power_source\"\n\nexport const any_source_component = z.union([\n source_simple_resistor,\n source_simple_capacitor,\n source_simple_diode,\n source_simple_ground,\n source_simple_bug,\n source_led,\n source_simple_power_source,\n])\n\nexport type AnySourceComponent = z.infer<typeof any_source_component>\n","import { z } from \"zod\"\n\nexport const source_port = z.object({\n type: z.literal(\"source_port\"),\n pin_number: z.number().optional(),\n port_hints: z.array(z.string()).optional(),\n name: z.string(),\n source_port_id: z.string(),\n source_component_id: z.string(),\n})\n\nexport type SourcePort = z.infer<typeof source_port>\n","import { z } from \"zod\"\n\nexport const source_trace = z.object({\n type: z.literal(\"source_trace\"),\n source_trace_id: z.string(),\n connected_source_port_ids: z.array(z.string()),\n connected_source_net_ids: z.array(z.string()),\n})\n\nexport type SourceTrace = z.infer<typeof source_trace>\n","import { z } from \"zod\"\n\nexport const source_group = z.object({\n type: z.literal(\"source_group\"),\n source_group_id: z.string(),\n name: z.string().optional(),\n})\n\nexport type SourceGroup = z.infer<typeof source_group>\nexport type SourceGroupInput = z.input<typeof source_group>\n","import { z } from \"zod\"\n\nexport const source_net = z.object({\n type: z.literal(\"source_net\"),\n source_net_id: z.string(),\n name: z.string(),\n member_source_group_ids: z.array(z.string()),\n is_power: z.boolean().optional(),\n is_ground: z.boolean().optional(),\n is_digital_signal: z.boolean().optional(),\n is_analog_signal: z.boolean().optional(),\n})\n\nexport type SourceNet = z.infer<typeof source_net>\nexport type SourceNetInput = z.input<typeof source_net>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_box = z\n .object({\n type: z.literal(\"schematic_box\"),\n schematic_component_id: z.string(),\n width: distance,\n height: distance,\n x: distance,\n y: distance,\n })\n .describe(\"Draws a box on the schematic\")\n\nexport type SchematicBoxInput = z.input<typeof schematic_box>\nexport type SchematicBox = z.infer<typeof schematic_box>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\n\nexport const schematic_path = z.object({\n type: z.literal(\"schematic_path\"),\n schematic_component_id: z.string(),\n fill_color: z.enum([\"red\", \"blue\"]).optional(),\n is_filled: z.boolean().optional(),\n points: z.array(point),\n})\n\nexport type SchematicPathInput = z.input<typeof schematic_path>\nexport type SchematicPath = z.infer<typeof schematic_path>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\nimport { size } from \"../common/size\"\nimport { rotation } from \"../units\"\n\nexport const schematic_component = z.object({\n type: z.literal(\"schematic_component\"),\n rotation: rotation.default(0),\n size,\n center: point,\n source_component_id: z.string(),\n schematic_component_id: z.string(),\n port_arrangement: z\n .union([\n z.object({\n left_size: z.number(),\n right_size: z.number(),\n top_size: z.number().optional(),\n bottom_size: z.number().optional(),\n }),\n z.object({\n left_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n right_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"top-to-bottom\", \"bottom-to-top\"]).optional(),\n })\n .optional(),\n top_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n bottom_side: z\n .object({\n pins: z.array(z.number()),\n direction: z.enum([\"left-to-right\", \"right-to-left\"]).optional(),\n })\n .optional(),\n }),\n ])\n .optional(),\n port_labels: z.record(z.string()).optional(),\n})\n\nexport type SchematicComponentInput = z.input<typeof schematic_component>\nexport type SchematicComponent = z.infer<typeof schematic_component>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_line = z.object({\n type: z.literal(\"schematic_line\"),\n schematic_component_id: z.string(),\n x1: distance,\n x2: distance,\n y1: distance,\n y2: distance,\n})\n\nexport type SchematicLineInput = z.input<typeof schematic_line>\nexport type SchematicLine = z.infer<typeof schematic_line>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_trace = z.object({\n type: z.literal(\"schematic_trace\"),\n schematic_trace_id: z.string(),\n source_trace_id: z.string(),\n edges: z.array(\n z.object({\n from: z.object({\n x: z.number(),\n y: z.number(),\n }),\n to: z.object({\n x: z.number(),\n y: z.number(),\n }),\n from_schematic_port_id: z.string().optional(),\n to_schematic_port_id: z.string().optional(),\n })\n ),\n})\n\nexport type SchematicTraceInput = z.input<typeof schematic_trace>\nexport type SchematicTrace = z.infer<typeof schematic_trace>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const schematic_text = z.object({\n type: z.literal(\"schematic_text\"),\n schematic_component_id: z.string(),\n schematic_text_id: z.string(),\n text: z.string(),\n position: z.object({\n x: distance,\n y: distance,\n }),\n rotation: z.number().default(0),\n anchor: z\n .enum([\"center\", \"left\", \"right\", \"top\", \"bottom\"])\n .default(\"center\"),\n})\n\nexport type SchematicTextInput = z.input<typeof schematic_text>\nexport type SchematicText = z.infer<typeof schematic_text>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { point } from \"../common\"\n\nexport const schematic_port = z\n .object({\n type: z.literal(\"schematic_port\"),\n schematic_port_id: z.string(),\n source_port_id: z.string(),\n schematic_component_id: z.string().optional(),\n center: point,\n facing_direction: z.enum([\"up\", \"down\", \"left\", \"right\"]).optional(),\n })\n .describe(\"Defines a port on a schematic component\")\n\nexport type SchematicPortInput = z.input<typeof schematic_port>\nexport type SchematicPort = z.infer<typeof schematic_port>\n","import { z } from \"zod\"\nimport { point } from \"../common/point\"\n\nexport const schematic_net_label = z.object({\n type: z.literal(\"schematic_net_label\"),\n source_net_id: z.string(),\n center: point,\n anchor_side: z.enum([\"top\", \"bottom\", \"left\", \"right\"]),\n text: z.string(),\n})\n\nexport type SchematicNetLabelInput = z.input<typeof schematic_net_label>\nexport type SchematicNetLabel = z.infer<typeof schematic_net_label>\n","import { z } from \"zod\"\n\nexport const schematic_error = z\n .object({\n schematic_error_id: z.string(),\n type: z.literal(\"schematic_error\"),\n // eventually each error type should be broken out into a dir of files\n error_type: z.literal(\"schematic_port_not_found\"),\n message: z.string(),\n })\n .describe(\"Defines a schematic error on the schematic\")\n\nexport type SchematicErrorInput = z.input<typeof schematic_error>\nexport type SchematicError = z.infer<typeof schematic_error>\n","import { z } from \"zod\"\n\nexport const all_layers = [\n \"top\",\n \"bottom\",\n \"inner1\",\n \"inner2\",\n \"inner3\",\n \"inner4\",\n \"inner5\",\n \"inner6\",\n] as const\n\nexport const layer_string = z.enum(all_layers)\n\nexport const layer_ref = layer_string\n .or(\n z.object({\n name: layer_string,\n })\n )\n .transform((layer) => {\n if (typeof layer === \"string\") {\n return layer\n }\n return layer.name\n })\n\nexport type LayerRefInput = z.input<typeof layer_ref>\nexport type LayerRef = z.output<typeof layer_ref>\n\nexport const visible_layer = z.enum([\"top\", \"bottom\"])\nexport type VisibleLayerRef = z.infer<typeof visible_layer>\n","import { z } from \"zod\"\nimport { distance } from \"src/units\"\nimport { layer_ref } from \"./layer_ref\"\n\n// x: string | number\n// y: string | number\n// via?: boolean\n// via_to_layer?: string\nexport const pcb_route_hint = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n via_to_layer: layer_ref.optional(),\n})\nexport const pcb_route_hints = z.array(pcb_route_hint)\n\nexport type PcbRouteHintInput = z.input<typeof pcb_route_hint>\nexport type PcbRouteHintsInput = z.input<typeof pcb_route_hints>\nexport type PcbRouteHint = z.output<typeof pcb_route_hint>\nexport type PcbRouteHints = z.output<typeof pcb_route_hints>\n","import { z } from \"zod\"\nimport { distance } from \"../../units\"\nimport { layer_ref } from \"./layer_ref\"\n\nexport const route_hint_point = z.object({\n x: distance,\n y: distance,\n via: z.boolean().optional(),\n to_layer: layer_ref.optional(),\n})\n\nexport type RouteHintPoint = z.infer<typeof route_hint_point>\nexport type RouteHintPointInput = z.input<typeof route_hint_point>\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { layer_ref } from \"./properties/layer_ref\"\nimport { rotation, length } from \"../units\"\n\nexport const pcb_component = z\n .object({\n type: z.literal(\"pcb_component\"),\n pcb_component_id: z.string(),\n source_component_id: z.string(),\n center: point,\n layer: layer_ref,\n rotation: rotation,\n width: length,\n height: length,\n })\n .describe(\"Defines a component on the PCB\")\n\nexport type PCBComponentInput = z.input<typeof pcb_component>\nexport type PCBComponent = z.infer<typeof pcb_component>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_hole = z\n .object({\n type: z.literal(\"pcb_hole\"),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n })\n .describe(\"Defines a hole on the PCB\")\n\nexport type PCBHoleInput = z.input<typeof pcb_hole>\nexport type PCBHole = z.infer<typeof pcb_hole>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_plated_hole = z\n .object({\n type: z.literal(\"pcb_plated_hole\"),\n outer_diameter: z.number(),\n hole_diameter: z.number(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n })\n .describe(\"Defines a plated hole on the PCB\")\n\nexport type PCBPlatedHoleInput = z.input<typeof pcb_plated_hole>\nexport type PCBPlatedHole = z.infer<typeof pcb_plated_hole>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_port = z\n .object({\n type: z.literal(\"pcb_port\"),\n pcb_port_id: z.string(),\n source_port_id: z.string(),\n pcb_component_id: z.string(),\n x: distance,\n y: distance,\n layers: z.array(layer_ref),\n })\n .describe(\"Defines a port on the PCB\")\n\nexport type PCBPort = z.infer<typeof pcb_port>\nexport type PCBPortInput = z.input<typeof pcb_port>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_smtpad = z\n .union([\n z.object({\n pcb_smtpad_id: z.string(),\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"circle\"),\n x: distance,\n y: distance,\n radius: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n }),\n z.object({\n pcb_smtpad_id: z.string(),\n type: z.literal(\"pcb_smtpad\"),\n shape: z.literal(\"rect\"),\n x: distance,\n y: distance,\n width: z.number(),\n height: z.number(),\n layer: layer_ref,\n port_hints: z.array(z.string()).optional(),\n pcb_component_id: z.string().optional(),\n pcb_port_id: z.string().optional(),\n }),\n ])\n .describe(\"Defines an SMT pad on the PCB\")\n\nexport type PCBSMTPadInput = z.input<typeof pcb_smtpad>\nexport type PCBSMTPad = z.infer<typeof pcb_smtpad>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_text = z\n .object({\n type: z.literal(\"pcb_text\"),\n text: z.string(),\n x: distance,\n y: distance,\n align: z.enum([\"bottom-left\"]),\n width: distance,\n height: distance,\n lines: z.number(),\n })\n .describe(\"Defines text on the PCB\")\n\nexport type PCBTextInput = z.input<typeof pcb_text>\nexport type PCBText = z.infer<typeof pcb_text>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\n\nexport const pcb_trace = z.object({\n type: z.literal(\"pcb_trace\"),\n source_trace_id: z.string(),\n pcb_trace_id: z.string(),\n route: z.array(\n z.union([\n z.object({\n route_type: z.literal(\"wire\"),\n x: distance,\n y: distance,\n width: distance,\n start_pcb_port_id: z.string().optional(),\n end_pcb_port_id: z.string().optional(),\n layer: z.string(),\n }),\n z.object({\n route_type: z.literal(\"via\"),\n x: distance,\n y: distance,\n from_layer: z.string(),\n to_layer: z.string(),\n }),\n ])\n ),\n})\n\nexport type PCBTraceInput = z.input<typeof pcb_trace>\nexport type PCBTrace = z.output<typeof pcb_trace>\n","import { z } from \"zod\"\n\nexport const pcb_trace_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_trace_error\"),\n message: z.string(),\n pcb_trace_id: z.string(),\n source_trace_id: z.string(),\n pcb_component_ids: z.array(z.string()),\n pcb_port_ids: z.array(z.string()),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PCBTraceErrorInput = z.input<typeof pcb_trace_error>\nexport type PCBTraceError = z.infer<typeof pcb_trace_error>\n","import { z } from \"zod\"\n\nexport const pcb_port_not_matched_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_port_not_matched_error\"),\n message: z.string(),\n pcb_component_ids: z.array(z.string()),\n })\n .describe(\"Defines a trace error on the PCB\")\n\nexport type PCBPortNotMatchedErrorInput = z.input<\n typeof pcb_port_not_matched_error\n>\nexport type PCBPortNotMatchedError = z.infer<typeof pcb_port_not_matched_error>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\n\nexport const pcb_via = z\n .object({\n type: z.literal(\"pcb_via\"),\n x: distance,\n y: distance,\n outer_diameter: distance.default(\"0.6mm\"),\n hole_diameter: distance.default(\"0.25mm\"),\n /** @deprecated */\n from_layer: layer_ref.optional(),\n /** @deprecated */\n to_layer: layer_ref.optional(),\n layers: z.array(layer_ref),\n })\n .describe(\"Defines a via on the PCB\")\n\nexport type PCBViaInput = z.input<typeof pcb_via>\nexport type PCBVia = z.infer<typeof pcb_via>\n","import { z } from \"zod\"\nimport { length } from \"../units\"\nimport { point } from \"../common\"\n\nexport const pcb_board = z\n .object({\n type: z.literal(\"pcb_board\"),\n width: length,\n height: length,\n center: point,\n })\n .describe(\"Defines the board outline of the PCB\")\n\nexport type PCBBoardInput = z.input<typeof pcb_board>\nexport type PCBBoard = z.infer<typeof pcb_board>\n","import { z } from \"zod\"\n\nexport const pcb_placement_error = z\n .object({\n pcb_error_id: z.string(),\n type: z.literal(\"pcb_error\"),\n error_type: z.literal(\"pcb_placement_error\"),\n message: z.string(),\n })\n .describe(\"Defines a placement error on the PCB\")\n\nexport type PCBPlacementErrorInput = z.input<typeof pcb_placement_error>\nexport type PCBPlacementError = z.infer<typeof pcb_placement_error>\n","import { z } from \"zod\"\nimport { point } from \"../common\"\nimport { distance } from \"../units\"\nimport { layer_ref } from \"./properties/layer_ref\"\nimport { route_hint_point } from \"./index\"\n\nexport const pcb_trace_hint = z\n .object({\n pcb_trace_hint_id: z.string(),\n type: z.literal(\"pcb_trace_hint\"),\n pcb_port_id: z.string(),\n pcb_component_id: z.string(),\n route: z.array(route_hint_point),\n })\n .describe(\"A hint that can be used to generate a PCB trace\")\n\nexport type PcbTraceHint = z.infer<typeof pcb_trace_hint>\nexport type PcbTraceHintInput = z.input<typeof pcb_trace_hint>\n","import { z } from \"zod\"\nimport { distance } from \"../units\"\nimport { layer_ref, visible_layer } from \"./properties/layer_ref\"\n\nexport const pcb_silkscreen_line = z\n .object({\n type: z.literal(\"pcb_silkscreen_line\"),\n pcb_silkscreen_line_id: z.string(),\n pcb_component_id: z.string(),\n x1: distance,\n y1: distance,\n x2: distance,\n y2: distance,\n layer: visible_layer,\n })\n .describe(\"Defines a silkscreen line on the PCB\")\n\nexport type PcbSilkscreenLine = z.infer<typeof pcb_silkscreen_line>\nexport type PcbSilkscreenLineInput = z.input<typeof pcb_silkscreen_line>\n","import { z } from \"zod\"\nimport { visible_layer } from \"./properties/layer_ref\"\nimport { point } from \"src/common\"\n\nexport const pcb_silkscreen_path = z\n .object({\n type: z.literal(\"pcb_silkscreen_path\"),\n pcb_silkscreen_path_id: z.string(),\n pcb_component_id: z.string(),\n layer: visible_layer,\n route: z.array(point),\n })\n .describe(\"Defines a silkscreen path on the PCB\")\n\nexport type PcbSilkscreenPath = z.infer<typeof pcb_silkscreen_path>\nexport type PcbSilkscreenPathInput = z.input<typeof pcb_silkscreen_path>\n","import { z } from \"zod\"\nimport { visible_layer } from \"./properties/layer_ref\"\nimport { point } from \"src/common\"\n\nexport const pcb_silkscreen_text = z\n .object({\n type: z.literal(\"pcb_silkscreen_text\"),\n font: z.literal(\"tscircuit2024\").default(\"tscircuit2024\"),\n pcb_component_id: z.string(),\n text: z.string(),\n layer: visible_layer,\n pcbX: z.number(),\n pcbY: z.number(),\n })\n .describe(\"Defines silkscreen text on the PCB\")\n\nexport type PcbSilkscreenText = z.infer<typeof pcb_silkscreen_text>\nexport type PcbSilkscreenTextInput = z.input<typeof pcb_silkscreen_text>\n","import { z } from \"zod\"\nimport * as pcb from \"./pcb\"\nimport * as sch from \"./schematic\"\nimport * as src from \"./source\"\n\nexport const any_soup_element = z.union([\n // TODO source_group\n // TODO source_config\n // TODO pcb_group\n // TODO pcb_config\n // TODO schematic_config\n // TODO schematic_group\n src.source_trace,\n src.source_port,\n src.any_source_component,\n src.source_led,\n src.source_net,\n src.source_group,\n src.source_simple_bug,\n src.source_simple_capacitor,\n src.source_simple_diode,\n src.source_simple_resistor,\n src.source_simple_power_source,\n pcb.pcb_component,\n pcb.pcb_hole,\n pcb.pcb_plated_hole,\n pcb.pcb_port,\n pcb.pcb_text,\n pcb.pcb_trace,\n pcb.pcb_via,\n pcb.pcb_smtpad,\n pcb.pcb_board,\n pcb.pcb_trace_hint,\n pcb.pcb_silkscreen_line,\n pcb.pcb_silkscreen_path,\n pcb.pcb_silkscreen_text,\n pcb.pcb_trace_error,\n pcb.pcb_placement_error,\n pcb.pcb_port_not_matched_error,\n sch.schematic_box,\n sch.schematic_text,\n sch.schematic_line,\n sch.schematic_component,\n sch.schematic_port,\n sch.schematic_trace,\n sch.schematic_path,\n sch.schematic_error,\n sch.schematic_net_label,\n])\n\nexport type AnySoupElement = z.infer<typeof any_soup_element>\nexport type AnySoupElementInput = z.input<typeof any_soup_element>\n","export * from \"./footprinter\"\n","export const u_curve = Array.from({ length: 9 }, (_, i) =>\n Math.cos((i / 8) * Math.PI - Math.PI)\n).map((x) => ({\n x,\n y: -Math.sqrt(1 - x ** 2),\n}))\n","import type { PCBPlatedHole, PCBSMTPad } from \"@tscircuit/soup\"\nimport { mm } from \"@tscircuit/mm\"\n\nexport const platedhole = (\n pn: number,\n x: number,\n y: number,\n id: number | string,\n od: number | string\n): PCBPlatedHole => {\n return {\n type: \"pcb_plated_hole\",\n x,\n y,\n hole_diameter: mm(id),\n outer_diameter: mm(od),\n pcb_port_id: \"\",\n layers: [\"top\", \"bottom\"],\n port_hints: [pn.toString()],\n }\n}\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { u_curve } from \"../helpers/u-curve\"\nimport { platedhole } from \"../helpers/platedhole\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\n\nconst dip_def = z\n .object({\n dip: z.literal(true),\n num_pins: z.number(),\n wide: z.boolean().optional(),\n narrow: z.boolean().optional(),\n w: length.optional(),\n p: length.default(length.parse(\"2.54mm\")),\n id: length.optional(),\n od: length.optional(),\n })\n .transform((v) => {\n // Default inner diameter and outer diameter\n if (!v.id && !v.od) {\n v.id = length.parse(\"1.0mm\")\n v.od = length.parse(\"1.2mm\")\n } else if (!v.id) {\n v.id = v.od! * (1.0 / 1.2)\n } else if (!v.od) {\n v.od = v.id! * (1.2 / 1.0)\n }\n\n // Default width (TODO high pin counts should probably be wide?)\n if (!v.w) {\n if (v.wide) {\n v.w = length.parse(\"600mil\")\n } else if (v.narrow) {\n v.w = length.parse(\"300mil\")\n } else {\n v.w = length.parse(\"300mil\")\n }\n }\n return v as NowDefined<typeof v, \"w\" | \"p\" | \"id\" | \"od\">\n })\n\nexport const getCcwDipCoords = (\n pinCount: number,\n pn: number,\n w: number,\n p: number\n) => {\n /** pin height */\n const ph = pinCount / 2\n const isLeft = pn <= ph\n\n /** Number of gaps between pins on each side, e.g. 4 pins = 3 spaces */\n const leftPinGaps = ph - 1\n\n /** gap size (pitch) */\n const gs = p\n\n const h = gs * leftPinGaps\n\n if (isLeft) {\n // The y position starts at h/2, then goes down by gap size\n // for each pin\n return { x: -w / 2, y: h / 2 - (pn - 1) * gs }\n } else {\n // The y position starts at -h/2, then goes up by gap size\n return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs }\n }\n}\n\n/**\n * Returns the plated holes for a DIP package.\n */\nexport const dip = (raw_params: {\n dip: true\n num_pins: number\n w: number\n p?: number\n id?: string | number\n od?: string | number\n}): AnySoupElement[] => {\n const params = dip_def.parse(raw_params)\n const platedHoles: AnySoupElement[] = []\n for (let i = 0; i < params.num_pins; i++) {\n const { x, y } = getCcwDipCoords(\n params.num_pins,\n i + 1,\n params.w,\n params.p ?? 2.54\n )\n platedHoles.push(\n platedhole(i + 1, x, y, params.id ?? \"0.8mm\", params.od ?? \"1mm\")\n )\n }\n /** silkscreen width */\n const sw = params.w - params.od - 0.4\n const sh = (params.num_pins / 2 - 1) * params.p + params.od + 0.4\n const silkscreenBorder: PcbSilkscreenPath = {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: \"silkscreen_path_1\",\n route: [\n { x: -sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: sh / 2 },\n // Little U shape at the top\n ...u_curve.map(({ x, y }) => ({\n x: (x * sw) / 6,\n y: (y * sw) / 6 + sh / 2,\n })),\n { x: sw / 2, y: sh / 2 },\n { x: sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: -sh / 2 },\n ],\n type: \"pcb_silkscreen_path\",\n }\n\n return [...platedHoles, silkscreenBorder]\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\n\nexport const diode = (params: {\n tht: boolean\n p: number\n}): AnySoupElement[] => {\n return []\n}\n","import type { PCBSMTPad } from \"@tscircuit/soup\"\nexport const rectpad = (\n pn: number | Array<string | number>,\n x: number,\n y: number,\n w: number,\n h: number\n): PCBSMTPad => {\n return {\n type: \"pcb_smtpad\",\n x,\n y,\n width: w,\n height: h,\n layer: \"top\",\n shape: \"rect\",\n pcb_smtpad_id: \"\",\n port_hints: Array.isArray(pn)\n ? pn.map((item) => item.toString())\n : [pn.toString()],\n }\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport mm from \"@tscircuit/mm\"\nimport { platedhole } from \"./platedhole\"\n\ntype StandardSize = {\n imperial: string\n metric: string\n Z_mm_min: number\n G_mm_min: number\n X_mm_min: number\n C_mm_ref: number\n}\n\n// https://www.worthingtonassembly.com/perfect-0201-footprint\n// https://static1.squarespace.com/static/54982a02e4b02e9f5e5d9ca7/t/660c692f69a0d83a4afecdf0/1712089391915/Discrete+Component+Footprints.pdf\n// https://page.venkel.com/hubfs/Resources/Technical/Resistors%20Landing%20Pattern.pdf\nconst sizes = [\n {\n imperial: \"01005\",\n metric: \"0402\",\n Z_mm_min: 0.58,\n G_mm_min: 0.18,\n X_mm_min: 0.21,\n C_mm_ref: 0.038,\n },\n {\n imperial: \"0201\",\n metric: \"0603\",\n Z_mm_min: 0.9,\n G_mm_min: 0.3,\n X_mm_min: 0.3,\n C_mm_ref: 0.6,\n },\n {\n imperial: \"0402\",\n metric: \"1005\",\n Z_mm_min: 1.6,\n G_mm_min: 0.4,\n X_mm_min: 0.7,\n C_mm_ref: 1,\n },\n {\n imperial: \"0603\",\n metric: \"1608\",\n Z_mm_min: 2.6,\n G_mm_min: 0.6,\n X_mm_min: 1.0,\n C_mm_ref: 1.7,\n },\n {\n imperial: \"0805\",\n metric: \"2012\",\n Z_mm_min: 3.0,\n G_mm_min: 0.6,\n X_mm_min: 1.2,\n C_mm_ref: 1.9,\n },\n {\n imperial: \"1206\",\n metric: \"3216\",\n Z_mm_min: 4.2,\n G_mm_min: 1.2,\n X_mm_min: 1.4,\n C_mm_ref: 2.8,\n },\n {\n imperial: \"1210\",\n metric: \"3225\",\n Z_mm_min: 4.2,\n G_mm_min: 1.2,\n X_mm_min: 2.4,\n C_mm_ref: 2.8,\n },\n {\n imperial: \"2010\",\n metric: \"5025\",\n Z_mm_min: 6.0,\n G_mm_min: 2.6,\n X_mm_min: 2.4,\n C_mm_ref: 4.4,\n },\n {\n imperial: \"2512\",\n metric: \"6332\",\n Z_mm_min: 7.2,\n G_mm_min: 3.8,\n X_mm_min: 3.0,\n C_mm_ref: 5.6,\n },\n]\nconst metricMap: Record<string, StandardSize> = sizes.reduce((acc: any, s) => {\n acc[s.metric] = s\n return acc\n}, {})\nconst imperialMap: Record<string, StandardSize> = sizes.reduce(\n (acc: any, s) => {\n acc[s.imperial] = s\n return acc\n },\n {}\n)\n\nexport type PassiveDef = {\n tht: boolean\n p: number\n pw?: number\n ph?: number\n metric?: string\n imperial?: string\n w?: number\n h?: number\n}\n\nconst deriveXFromH = (h: number) => 0.079 * h ** 2 + 0.94 * h - 0.009\nconst deriveZFromW = (w: number) => 1.09 * w + 0.6\nconst deriveGFromW = (w: number) => 0.59 * w - 0.31\nconst deriveCFromW = (w: number) => -0.01 * w ** 2 + 0.94 * w + 0.03\n\nexport const passive = (params: PassiveDef): AnySoupElement[] => {\n let { tht, p, pw, ph, metric, imperial, w, h } = params\n\n if (typeof w === \"string\") w = mm(w)\n if (typeof h === \"string\") h = mm(h)\n if (typeof p === \"string\") p = mm(p)\n if (typeof pw === \"string\") pw = mm(pw)\n if (typeof ph === \"string\") ph = mm(ph)\n\n if (h! > w!) {\n throw new Error(\n \"height cannot be greater than width (rotated footprint not yet implemented)\"\n )\n }\n\n /** standard size */\n let sz: StandardSize | undefined\n if (metric) {\n sz = metricMap[metric]\n }\n\n if (imperial) {\n sz = imperialMap[imperial]\n }\n\n if (!sz && w && h && !pw && !ph) {\n sz = {\n imperial: \"custom\",\n metric: \"custom\",\n Z_mm_min: deriveZFromW(w),\n G_mm_min: deriveGFromW(w),\n X_mm_min: deriveXFromH(h),\n C_mm_ref: deriveCFromW(w),\n }\n }\n\n if (sz) {\n w = sz.Z_mm_min\n h = sz.X_mm_min\n p = sz.C_mm_ref\n pw = (sz.Z_mm_min - sz.G_mm_min) / 2\n ph = (sz.Z_mm_min - sz.G_mm_min) / 2\n }\n\n if (pw === undefined) throw new Error(`could not infer pad width`)\n if (ph === undefined) throw new Error(`could not infer pad width`)\n\n if (tht) {\n return [\n platedhole(1, -p / 2, 0, pw, (pw * 1) / 0.8),\n platedhole(2, -p / 2, 0, pw, (pw * 1) / 0.8),\n ]\n } else {\n return [rectpad(1, -p / 2, 0, pw, ph), rectpad(2, p / 2, 0, pw, ph)]\n }\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { PassiveDef, passive } from \"../helpers/passive-fn\"\n\nexport const cap = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { PassiveDef, passive } from \"../helpers/passive-fn\"\n\nexport const led = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { passive, PassiveDef } from \"../helpers/passive-fn\"\n\nexport const res = (params: PassiveDef): AnySoupElement[] => {\n return passive(params)\n}\n","export const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n","import type { AnySoupElement, PCBSMTPad } from \"@tscircuit/soup\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { ALPHABET } from \"../helpers/zod/ALPHABET\"\nimport { z } from \"zod\"\nimport { length, distance } from \"@tscircuit/soup\"\nimport { dim2d } from \"src/helpers/zod/dim-2d\"\nimport { function_call } from \"src/helpers/zod/function-call\"\nimport type { NowDefined } from \"src/helpers/zod/now-defined\"\n\nexport const bga_def = z\n .object({\n num_pins: z.number(),\n grid: dim2d.optional(),\n p: distance.default(\"0.8mm\"),\n w: length.optional(),\n h: length.optional(),\n ball: length.optional().describe(\"ball diameter\"),\n pad: length.optional().describe(\"pad width/height\"),\n\n tlorigin: z.boolean().optional(),\n blorigin: z.boolean().optional(),\n trorigin: z.boolean().optional(),\n brorigin: z.boolean().optional(),\n\n missing: function_call.default([]),\n })\n .transform((a) => {\n let origin: \"tl\" | \"bl\" | \"tr\" | \"br\" = \"tl\"\n if (a.blorigin) origin = \"bl\"\n if (a.trorigin) origin = \"tr\"\n if (a.brorigin) origin = \"br\"\n\n if (!a.grid) {\n // find the largest square for the number of pins\n const largest_square = Math.ceil(Math.sqrt(a.num_pins))\n a.grid = { x: largest_square, y: largest_square }\n }\n\n if (a.missing) {\n a.missing = a.missing.map((s) => {\n if (typeof s === \"number\") return s\n if (s === \"center\") return \"center\"\n if (s === \"topleft\") return \"topleft\"\n const m = s.match(/([A-Z]+)(\\d+)/)\n if (!m) return s\n let Y = ALPHABET.indexOf(m[1]!)\n let X = parseInt(m[2]!) - 1\n return Y * a.grid!.x + X + 1\n })\n }\n\n const new_def = { ...a, origin }\n\n return new_def as NowDefined<typeof new_def, \"w\" | \"h\" | \"grid\">\n })\n\nexport type BgaDefInput = z.input<typeof bga_def>\nexport type BgaDef = z.infer<typeof bga_def>\n\nexport const bga = (params: BgaDefInput): AnySoupElement[] => {\n const bga_params = bga_def.parse(params)\n let { num_pins, grid, p, w, h, ball, pad, missing } = bga_params\n\n ball ??= (0.75 / 1.27) * p\n\n pad ??= ball * 0.8\n\n const pads: PCBSMTPad[] = []\n\n const missing_pin_nums = (missing ?? []).filter((a) => typeof a === \"number\")\n const num_pins_missing = grid.x * grid.y - num_pins\n\n if (missing.length === 0 && num_pins_missing > 0) {\n // No missing pins specified, let's see if a squared center works\n // if num_pins_missing is a square\n if (Math.sqrt(num_pins_missing) % 1 === 0) {\n missing.push(\"center\")\n } else if (num_pins_missing === 1) {\n missing.push(\"topleft\")\n }\n }\n\n if (missing?.includes(\"center\")) {\n // Find the largest square that's square is less than\n // the number of missing pins\n const square_size = Math.floor(Math.sqrt(num_pins_missing))\n\n // Find the top left coordinate of the inner square, keep\n // in mind the full grid size is grid.x x grid.y\n const inner_square_x = Math.floor((grid.x - square_size) / 2)\n const inner_square_y = Math.floor((grid.y - square_size) / 2)\n\n // Add all the missing square pin numbers to missing_pin_nums\n for (let y = inner_square_y; y < inner_square_y + square_size; y++) {\n for (let x = inner_square_x; x < inner_square_x + square_size; x++) {\n missing_pin_nums.push(y * grid.x + x + 1)\n }\n }\n }\n\n if (missing?.includes(\"topleft\")) {\n missing_pin_nums.push(1)\n }\n\n if (num_pins_missing !== missing_pin_nums.length) {\n throw new Error(\n `not able to create bga component, unable to determine missing pins (try specifying them with \"missing+1+2+...\"\\n\\n${JSON.stringify(\n bga_params,\n null,\n \" \"\n )}`\n )\n }\n\n const missing_pin_nums_set = new Set(missing_pin_nums)\n\n let missing_pins_passed = 0\n for (let y = 0; y < grid.y; y++) {\n for (let x = 0; x < grid.x; x++) {\n let pin_num = y * grid.x + x + 1\n if (missing_pin_nums_set.has(pin_num)) {\n missing_pins_passed++\n continue\n }\n pin_num -= missing_pins_passed\n\n const pad_x = (x - (grid.x - 1) / 2) * p\n const pad_y = -(y - (grid.y - 1) / 2) * p\n\n // TODO handle >26 rows\n pads.push(\n rectpad([pin_num, `${ALPHABET[y]}${x + 1}`], pad_x, pad_y, pad, pad)\n )\n }\n }\n\n return [...pads]\n}\n","import { z } from \"zod\"\n\nexport const dim2d = z\n .string()\n .transform((a) => {\n const [x, y] = a.split(/[x ]/)\n return {\n x: parseFloat(x),\n y: parseFloat(y),\n }\n })\n .pipe(\n z.object({\n x: z.number(),\n y: z.number(),\n })\n )\n","import { z } from \"zod\"\n\nexport const function_call = z\n .string()\n .or(z.array(z.any()))\n .transform((a) => {\n if (Array.isArray(a)) return a\n if (a.startsWith(\"(\") && a.endsWith(\")\")) {\n a = a.slice(1, -1)\n }\n return a.split(\",\").map((v) => {\n const numVal = Number(v)\n return isNaN(numVal) ? v : numVal\n })\n })\n .pipe(z.array(z.string().or(z.number())))\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { platedhole } from \"../helpers/platedhole\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\nimport { u_curve } from \"../helpers/u-curve\"\n\nconst soic_def = z\n .object({\n soic: z.literal(true),\n num_pins: z.number(),\n w: length.default(length.parse(\"5.3mm\")),\n p: length.default(length.parse(\"1.27mm\")),\n id: length.optional(),\n od: length.optional(),\n })\n .transform((v) => {\n // Default inner diameter and outer diameter\n if (!v.id && !v.od) {\n v.id = length.parse(\"0.6mm\")\n v.od = length.parse(\"1.0mm\")\n } else if (!v.id) {\n v.id = v.od! * (0.6 / 1.0)\n } else if (!v.od) {\n v.od = v.id! * (1.0 / 0.6)\n }\n\n return v as NowDefined<typeof v, \"w\" | \"p\" | \"id\" | \"od\">\n })\n\nexport const getCcwSoicCoords = (\n pinCount: number,\n pn: number,\n w: number,\n p: number\n) => {\n /** pin height */\n const ph = pinCount / 2\n const isLeft = pn <= ph\n\n /** Number of gaps between pins on each side, e.g. 4 pins = 3 spaces */\n const leftPinGaps = ph - 1\n\n /** gap size (pitch) */\n const gs = p\n\n const h = gs * leftPinGaps\n\n if (isLeft) {\n // The y position starts at h/2, then goes down by gap size\n // for each pin\n return { x: -w / 2, y: h / 2 - (pn - 1) * gs }\n } else {\n // The y position starts at -h/2, then goes up by gap size\n return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs }\n }\n}\n\n/**\n * Returns the plated holes for a SOIC package.\n */\nexport const soic = (raw_params: {\n soic: true\n num_pins: number\n w: number\n p?: number\n id?: string | number\n od?: string | number\n}): AnySoupElement[] => {\n const params = soic_def.parse(raw_params)\n const platedHoles: AnySoupElement[] = []\n for (let i = 0; i < params.num_pins; i++) {\n const { x, y } = getCcwSoicCoords(\n params.num_pins,\n i + 1,\n params.w,\n params.p ?? 1.27\n )\n platedHoles.push(\n platedhole(i + 1, x, y, params.id ?? \"0.6mm\", params.od ?? \"1mm\")\n )\n }\n\n /** silkscreen width */\n const sw = params.w - params.od - 0.4\n const sh = (params.num_pins / 2 - 1) * params.p + params.od + 0.4\n const silkscreenBorder: PcbSilkscreenPath = {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: \"silkscreen_path_1\",\n route: [\n { x: -sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: sh / 2 },\n // Little U shape at the top\n ...u_curve.map(({ x, y }) => ({\n x: (x * sw) / 6,\n y: (y * sw) / 6 + sh / 2,\n })),\n { x: sw / 2, y: sh / 2 },\n { x: sw / 2, y: -sh / 2 },\n { x: -sw / 2, y: -sh / 2 },\n ],\n type: \"pcb_silkscreen_path\",\n }\n\n return [...platedHoles, silkscreenBorder]\n}\n","import type { AnySoupElement, PcbSilkscreenPath } from \"@tscircuit/soup\"\nimport { z } from \"zod\"\nimport { length } from \"@tscircuit/soup\"\nimport type { NowDefined } from \"../helpers/zod/now-defined\"\nimport { rectpad } from \"../helpers/rectpad\"\nimport { pin_order_specifier } from \"src/helpers/zod/pin-order-specifier\"\nimport { getQuadPinMap } from \"src/helpers/get-quad-pin-map\"\nimport { dim2d } from \"src/helpers/zod/dim-2d\"\n\nexport const base_quad_def = z.object({\n cc: z.literal(true).optional(),\n ccw: z.literal(true).optional(),\n startingpin: z\n .string()\n .or(z.array(pin_order_specifier))\n .transform((a) => (typeof a === \"string\" ? a.slice(1, -1).split(\",\") : a))\n .pipe(z.array(pin_order_specifier))\n .optional(),\n num_pins: z.number(),\n w: length.optional(),\n h: length.optional(),\n p: length.default(length.parse(\"0.5mm\")),\n pw: length.optional(),\n pl: length.optional(),\n thermalpad: z.union([z.literal(true), dim2d]).optional(),\n legsoutside: z.boolean().optional(),\n})\n\nexport const quadTransform = <T extends z.infer<typeof base_quad_def>>(\n v: T\n) => {\n if (v.w && !v.h) {\n v.h = v.w\n } else if (!v.w && v.h) {\n v.w = v.h\n }\n\n const side_pin_count = v.num_pins / 4\n\n if (!v.p && !v.pw && !v.pl && v.w) {\n // HACK: This is wayyy underspecified\n const approx_pin_size_of_side = side_pin_count + 4\n v.p = v.w / approx_pin_size_of_side\n }\n\n if (!v.p && v.w && v.h && v.pw && v.pl) {\n // HACK: This is wayyy underspecified\n v.p = (v.w - v.pl * 2) / (side_pin_count - 1)\n }\n\n if (!v.w && !v.h && v.p) {\n // HACK: underspecified\n v.w = v.p * (side_pin_count + 4)\n v.h = v.w\n }\n\n if (v.p && !v.pw && !v.pl) {\n v.pw = v.p / 2\n v.pl = v.p / 2\n } else if (!v.pw) {\n v.pw = v.pl! * (0.6 / 1.0)\n } else if (!v.pl) {\n v.pl = v.pw! * (1.0 / 0.6)\n }\n\n return v as NowDefined<T, \"w\" | \"h\" | \"p\" | \"pw\" | \"pl\">\n}\n\nexport const quad_def = base_quad_def.transform(quadTransform)\n\nconst SIDES_CCW = [\"left\", \"bottom\", \"right\", \"top\"] as const\n\nexport const getQuadCoords = (params: {\n pin_count: number\n pn: number // pin number\n w: number // width of the package\n h: number // height (length) of the package\n p: number // pitch between pins\n pl: number // length of the pin\n legsoutside?: boolean\n}) => {\n const { pin_count, pn, w, h, p, pl, legsoutside } = params\n const sidePinCount = pin_count / 4\n const side = SIDES_CCW[Math.floor((pn - 1) / sidePinCount)]\n const pos = (pn - 1) % sidePinCount\n\n /** inner box width */\n const ibw = p * (sidePinCount - 1)\n /** inner box height */\n const ibh = p * (sidePinCount - 1)\n\n /** pad center distance from edge (negative is inside, positive is outside) */\n const pcdfe = legsoutside ? pl / 2 : -pl / 2\n\n switch (side) {\n case \"left\":\n return { x: -w / 2 - pcdfe, y: ibh / 2 - pos * p, o: \"vert\" }\n case \"bottom\":\n return { x: -ibw / 2 + pos * p, y: -h / 2 - pcdfe, o: \"horz\" }\n case \"right\":\n return { x: w / 2 + pcdfe, y: -ibh / 2 + pos * p, o: \"vert\" }\n case \"top\":\n return { x: ibw / 2 - pos * p, y: h / 2 + pcdfe, o: \"horz\" }\n default:\n throw new Error(\"Invalid pin number\")\n }\n}\n\nexport const quad = (\n raw_params: z.input<typeof quad_def>\n): AnySoupElement[] => {\n const params = quad_def.parse(raw_params)\n const pads: AnySoupElement[] = []\n const pin_map = getQuadPinMap(params)\n /** Side pin count */\n const spc = params.num_pins / 4\n for (let i = 0; i < params.num_pins; i++) {\n const {\n x,\n y,\n o: orientation,\n } = getQuadCoords({\n pin_count: params.num_pins,\n pn: i + 1,\n w: params.w,\n h: params.h,\n p: params.p ?? 0.5,\n pl: params.pl,\n legsoutside: params.legsoutside,\n })\n\n let pw = params.pw\n let pl = params.pl\n if (orientation === \"vert\") {\n ;[pw, pl] = [pl, pw]\n }\n\n const pn = pin_map[i + 1]!\n pads.push(rectpad(pn, x, y, pw, pl))\n }\n\n if (params.thermalpad) {\n if (typeof params.thermalpad === \"boolean\") {\n const ibw = params.p * (spc - 1) + params.pw\n const ibh = params.p * (spc - 1) + params.pw\n pads.push(rectpad([\"thermalpad\"], 0, 0, ibw, ibh))\n } else {\n pads.push(\n rectpad([\"thermalpad\"], 0, 0, params.thermalpad.x, params.thermalpad.y)\n )\n }\n }\n\n // Silkscreen corners\n const silkscreen_corners: PcbSilkscreenPath[] = []\n for (const [corner, dx, dy] of [\n [\"top-left\", -1, 1],\n [\"bottom-left\", -1, -1],\n [\"bottom-right\", 1, -1],\n [\"top-right\", 1, 1],\n ] as const) {\n // const dx = Math.floor(corner_index / 2) * 2 - 1\n // const dy = 1 - (corner_index % 2) * 2\n const corner_x = (params.w / 2) * dx\n const corner_y = (params.h / 2) * dy\n let arrow: \"none\" | \"in1\" | \"in2\" = \"none\"\n\n let arrow_x = corner_x\n let arrow_y = corner_y\n\n /** corner size */\n const csz = params.pw * 2\n\n if (pin_map[1] === 1 && corner === \"top-left\") {\n arrow = \"in1\"\n } else if (pin_map[spc * 4] === 1 && corner === \"top-left\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 3 + 1] === 1 && corner === \"top-right\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 3] === 1 && corner === \"top-right\") {\n arrow = \"in1\"\n } else if (pin_map[spc] === 1 && corner === \"bottom-left\") {\n arrow = \"in1\"\n } else if (pin_map[spc + 1] === 1 && corner === \"bottom-left\") {\n arrow = \"in2\"\n } else if (pin_map[spc * 2] === 1 && corner === \"bottom-right\") {\n arrow = \"in1\"\n } else if (pin_map[spc * 2 + 1] === 1 && corner === \"bottom-right\") {\n arrow = \"in2\"\n }\n\n const rotate_arrow = arrow === \"in1\" ? 1 : -1\n if (params.legsoutside) {\n const arrow_dx = arrow === \"in1\" ? params.pl / 2 : params.pw / 2\n const arrow_dy = arrow === \"in1\" ? params.pw / 2 : params.pl / 2\n arrow_x += arrow_dx * dx * rotate_arrow\n arrow_y -= arrow_dy * dy * rotate_arrow\n }\n\n // Normal Corner\n if (arrow === \"none\" || params.legsoutside) {\n silkscreen_corners.push({\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}`,\n route: [\n {\n x: corner_x - csz * dx,\n y: corner_y,\n },\n {\n x: corner_x,\n y: corner_y,\n },\n {\n x: corner_x,\n y: corner_y - csz * dy,\n },\n ],\n type: \"pcb_silkscreen_path\",\n })\n }\n\n // Two lines nearly forming a corner, used when the arrow needs to overlap\n // the corne (QFN components where legs are inside)\n if ((arrow === \"in1\" || arrow === \"in2\") && !params.legsoutside) {\n silkscreen_corners.push(\n {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_1`,\n route: [\n {\n x: corner_x - csz * dx,\n y: corner_y,\n },\n {\n x: corner_x - (csz * dx) / 2,\n y: corner_y,\n },\n ],\n type: \"pcb_silkscreen_path\",\n },\n {\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_2`,\n route: [\n {\n x: corner_x,\n y: corner_y - (csz * dy) / 2,\n },\n {\n x: corner_x,\n y: corner_y - csz * dy,\n },\n ],\n type: \"pcb_silkscreen_path\",\n }\n )\n }\n if (arrow === \"in1\" || arrow === \"in2\") {\n silkscreen_corners.push({\n layer: \"top\",\n pcb_component_id: \"\",\n pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_3`,\n route: [\n {\n x: arrow_x - 0.2 * -dx,\n y: arrow_y + 0.2 * rotate_arrow,\n },\n {\n x: arrow_x,\n y: arrow_y,\n },\n {\n x: arrow_x + 0.2 * rotate_arrow * -dx,\n y: arrow_y + 0.2,\n },\n {\n x: arrow_x - 0.2 * -dx,\n y: arrow_y + 0.2 * rotate_arrow,\n },\n ],\n type: \"pcb_silkscreen_path\",\n })\n }\n }\n\n return [...pads, ...silkscreen_corners]\n}\n","import { z } from \"zod\"\nexport const pin_order_specifier = z.enum([\n \"leftside\",\n \"topside\",\n \"rightside\",\n \"bottomside\",\n \"toppin\",\n \"bottompin\",\n \"leftpin\",\n \"rightpin\",\n])\n\nexport type PinOrderSpecifier = z.infer<typeof pin_order_specifier>\n","import type { PinOrderSpecifier } from \"./zod/pin-order-specifier\"\n\n/**\n * A counter-clockwise pin map is [1,2,3,4,5,6,7,8] for an 8-pin package\n *\n * 8 7\n * 1 6\n * 2 5\n * 3 4\n *\n * Given some parameters, we're returning how to map the pins in a quad package\n * with a different order. For example, if we pass in cw=true, we'll get the\n * following mapping\n *\n * 1 -> 1\n * 2 -> 8\n * 3 -> 7\n * 4 -> 6\n * 5 -> 5\n * 6 -> 4\n * 7 -> 3\n * 8 -> 2\n *\n * Which allows us to create the CW version of the package using...\n * new_pin = pin_map[normal_ccw_pin]\n *\n * 2 3\n * 1 4\n * 8 5\n * 7 6\n */\nexport const getQuadPinMap = ({\n num_pins,\n cw,\n ccw,\n startingpin,\n}: {\n num_pins: number\n cw?: boolean\n ccw?: boolean\n startingpin?: PinOrderSpecifier[]\n}): number[] => {\n const pin_map: number[] = []\n const pins_per_side = num_pins / 4\n let current_position_ccw_normal = 1\n\n /** Starting Flag Pins */\n const sfp: Record<PinOrderSpecifier, boolean> = {} as any\n for (const specifier of startingpin ?? []) {\n sfp[specifier] = true\n }\n if (!sfp.leftside && !sfp.topside && !sfp.rightside && !sfp.bottomside) {\n sfp.leftside = true\n }\n if (!sfp.bottompin && !sfp.leftpin && !sfp.rightpin && !sfp.toppin) {\n if (sfp.leftside) {\n sfp.toppin = true\n } else if (sfp.topside) {\n sfp.rightpin = true\n } else if (sfp.rightside) {\n sfp.bottompin = true\n } else if (sfp.bottomside) {\n sfp.leftpin = true\n }\n }\n\n if (sfp.leftside && sfp.toppin) {\n current_position_ccw_normal = 1\n } else if (sfp.leftside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side\n } else if (sfp.bottomside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side + 1\n } else if (sfp.bottomside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 2\n } else if (sfp.rightside && sfp.bottompin) {\n current_position_ccw_normal = pins_per_side * 2 + 1\n } else if (sfp.rightside && sfp.toppin) {\n current_position_ccw_normal = pins_per_side * 3\n } else if (sfp.topside && sfp.rightpin) {\n current_position_ccw_normal = pins_per_side * 3 + 1\n } else if (sfp.topside && sfp.leftpin) {\n current_position_ccw_normal = pins_per_side * 4\n }\n\n pin_map.push(-1) // the first index is meaningless\n\n // Each iteration we move the current position to the next pin, if we're\n // going CCW this means incrementing, if we're going CW this means\n // decrementing\n for (let i = 0; i < num_pins; i++) {\n pin_map[current_position_ccw_normal] = i + 1\n if (ccw || !cw) {\n current_position_ccw_normal++\n if (current_position_ccw_normal > num_pins) {\n current_position_ccw_normal = 1\n }\n } else {\n current_position_ccw_normal--\n if (current_position_ccw_normal < 1) {\n current_position_ccw_normal = num_pins\n }\n }\n }\n\n return pin_map\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { base_quad_def, quad, quad_def, quadTransform } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const qfn_def = base_quad_def.extend({}).transform(quadTransform)\n\nexport const qfn = (params: z.input<typeof qfn_def>): AnySoupElement[] => {\n params.legsoutside = false\n return quad(params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { quad, quad_def } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const qfp_def = quad_def\n\nexport const qfp = (raw_params: z.input<typeof quad_def>): AnySoupElement[] => {\n raw_params.legsoutside = true\n\n const quad_defaults = quad_def.parse(raw_params)\n\n if (!raw_params.pl) {\n // SLOP - eyeballing typical pad width:pad length ratio\n raw_params.pl = quad_defaults.pl * 4\n raw_params.pw = quad_defaults.pw\n }\n\n return quad(raw_params)\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { base_quad_def, quad, quad_def, quadTransform } from \"./quad\"\nimport type { z } from \"zod\"\n\nexport const mlp_def = base_quad_def.extend({}).transform(quadTransform)\n\nexport const mlp = (params: z.input<typeof mlp_def>): AnySoupElement[] => {\n params.legsoutside = false\n if (params.thermalpad === undefined) {\n params.thermalpad = true\n }\n return quad(params)\n}\n","export function isNotNull<T>(value: T | null): value is T {\n return value !== null\n}\n","import { dip } from \"./fn/dip\"\nimport { diode } from \"./fn/diode\"\nimport { cap } from \"./fn/cap\"\nimport { led } from \"./fn/led\"\nimport { res } from \"./fn/res\"\nimport { bga } from \"./fn/bga\"\nimport { soic } from \"./fn/soic\"\nimport { quad } from \"./fn/quad\"\nimport { qfn } from \"./fn/qfn\"\nimport { qfp } from \"./fn/qfp\"\nimport { mlp } from \"./fn/mlp\"\nimport type { AnySoupElement } from \"@tscircuit/soup\"\nimport { isNotNull } from \"./helpers/is-not-null\"\n\nexport type FootprinterParamsBuilder<K extends string> = {\n [P in K | \"params\" | \"soup\"]: P extends \"params\" | \"soup\"\n ? Footprinter[P]\n : (v?: number | string) => FootprinterParamsBuilder<K>\n}\n\ntype CommonPassiveOptionKey =\n | \"metric\"\n | \"imperial\"\n | \"tht\"\n | \"p\"\n | \"pw\"\n | \"ph\"\n | \"w\"\n | \"h\"\n\nexport type Footprinter = {\n dip: (\n num_pins: number\n ) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\" | \"wide\" | \"narrow\">\n cap: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n res: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n diode: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n led: () => FootprinterParamsBuilder<CommonPassiveOptionKey>\n lr: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"l\" | \"pl\" | \"pr\">\n qfp: (\n num_pins: number\n ) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\" | \"wide\" | \"narrow\">\n quad: (\n num_pins: number\n ) => FootprinterParamsBuilder<\n \"w\" | \"l\" | \"square\" | \"pl\" | \"pr\" | \"pb\" | \"pt\" | \"p\" | \"pw\" | \"ph\"\n >\n bga: (\n num_pins: number\n ) => FootprinterParamsBuilder<\n \"grid\" | \"p\" | \"w\" | \"h\" | \"ball\" | \"pad\" | \"missing\"\n >\n qfn: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"h\" | \"p\">\n soic: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"p\" | \"id\" | \"od\">\n mlp: (num_pins: number) => FootprinterParamsBuilder<\"w\" | \"h\" | \"p\">\n params: () => any\n soup: () => AnySoupElement[]\n}\n\nexport const string = (def: string): Footprinter => {\n let fp = footprinter()\n\n // special case: 0402, 0603, etc.\n if ((def.length === 4 || def.length === 5) && def.matchAll(/\\d+/))\n def = `res${def}`\n\n const def_parts = def\n .split(\"_\")\n .map((s) => {\n const m = s.match(/([a-z]+)([\\(\\d\\.\\+\\?].*)?/)\n const [_, fn, v] = m ?? []\n if (v?.includes(\"?\")) return null\n return { fn: m?.[1]!, v: m?.[2]! }\n })\n .filter(isNotNull)\n\n for (const { fn, v } of def_parts) {\n fp = fp[fn](v)\n }\n\n return fp\n}\n\nexport const footprinter = (): Footprinter & { string: typeof string } => {\n const proxy = new Proxy(\n {},\n {\n get: (target: any, prop) => {\n if (prop === \"soup\") {\n if (\"dip\" in target) return () => dip(target)\n if (\"diode\" in target) return () => diode(target)\n if (\"cap\" in target) return () => cap(target)\n if (\"led\" in target) return () => led(target)\n if (\"res\" in target) return () => res(target)\n if (\"bga\" in target) return () => bga(target)\n if (\"soic\" in target) return () => soic(target)\n if (\"quad\" in target) return () => quad(target)\n if (\"qfn\" in target) return () => qfn(target)\n if (\"qfp\" in target) return () => qfp(target)\n if (\"mlp\" in target) return () => mlp(target)\n\n return () => {\n // TODO improve error\n throw new Error(\n `No function found for footprinter, make sure to specify .dip, .lr, .p, etc. Got \\\"${prop}\\\"`\n )\n }\n }\n if (prop === \"params\") {\n // TODO\n return () => target\n }\n return (v: any) => {\n if (Object.keys(target).length === 0) {\n target[prop] = true\n if (prop === \"res\" || prop === \"cap\") {\n if (v) {\n target.imperial = v // res0402, cap0603 etc.\n }\n } else {\n target.num_pins = parseFloat(v)\n }\n } else {\n target[prop] = v ?? true\n }\n return proxy\n }\n },\n }\n )\n return proxy as any\n}\nfootprinter.string = string\n\nexport const fp = footprinter\n"],"mappings":"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","names":["exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","Object","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","length","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","length","require_lodash","exports","module","length","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","measure","src_exports","__export","distance","length","module","__toCommonJS","__toESM","convertUnits","import_zod","import_zod2","import_zod3","import_zod4","import_zod5","import_zod6","import_zod7","import_zod8","import_zod22","import_zod32","import_zod42","import_mm","mm","import_zod","import_soup","import_zod","import_zod","import_zod","import_soup","import_zod","import_soup","import_zod","fp"]}
|