@tscircuit/schematic-viewer 1.1.6 → 1.1.8
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.js
CHANGED
|
@@ -1279,6 +1279,7 @@ var SVGPathComponent = ({ size, center, rotation, paths }) => {
|
|
|
1279
1279
|
viewBox: `${pathBounds.minX} ${pathBounds.minY} ${pathBounds.width} ${pathBounds.height}`,
|
|
1280
1280
|
children: paths.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
|
|
1281
1281
|
fill: "none",
|
|
1282
|
+
strokeLinecap: "round",
|
|
1282
1283
|
strokeWidth: 2 * (p.strokeWidth || 1),
|
|
1283
1284
|
stroke: p.stroke || "red",
|
|
1284
1285
|
d: p.d
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/parse-svg-path/index.js","../node_modules/abs-svg-path/index.js","../node_modules/svg-arc-to-cubic-bezier/modules/index.js","../node_modules/normalize-svg-path/index.js","../node_modules/is-svg-path/index.js","../node_modules/svg-path-bounds/index.js","../node_modules/debounce/index.js","../node_modules/svg-path-generator/lib/svg-path-generator.js","../node_modules/svg-path-generator/index.js","../src/index.ts","../src/Schematic.tsx","../src/lib/utils/collect-element-refs.ts","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/index.mjs","../node_modules/transformation-matrix/src/applyToPoint.js","../node_modules/transformation-matrix/src/utils.js","../node_modules/transformation-matrix/src/translate.js","../node_modules/transformation-matrix/src/transform.js","../node_modules/transformation-matrix/src/rotate.js","../node_modules/transformation-matrix/src/scale.js","../node_modules/transformation-matrix/src/skew.js","../node_modules/transformation-matrix/src/fromTransformAttribute.autogenerated.js","../src/lib/render-context/index.ts","../src/lib/utils/get-svg-path-bounds.ts","../src/schematic-components/SVGPathComponent.tsx","../src/schematic-components/SimpleResistor.tsx","../src/schematic-components/SimpleCapacitor.tsx","../src/lib/hooks/use-maybe-promise.ts","../src/schematic-components/ProjectComponent.tsx","../src/lib/utils/direction-to-vec.ts","../src/schematic-components/SchematicPort.tsx","../node_modules/react-use-measure/dist/web.js","../src/schematic-components/SchematicText.tsx","../src/schematic-components/SchematicTrace.tsx","../src/schematic-components/RenderError.tsx","../src/schematic-components/SchematicBug.tsx","../src/schematic-components/SimplePowerSource.tsx","../src/schematic-components/SimpleGround.tsx","../src/schematic-components/SimpleInductor.tsx","../src/schematic-components/SimpleDiode.tsx","../src/schematic-components/SchematicComponent.tsx","../src/schematic-components/SchematicBox.tsx","../src/schematic-components/SchematicLine.tsx","../src/schematic-components/SchematicElement.tsx","../src/schematic-components/TableViewer.tsx"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","\nmodule.exports = parse\n\n/**\n * expected argument lengths\n * @type {Object}\n */\n\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}\n\n/**\n * segment pattern\n * @type {RegExp}\n */\n\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig\n\n/**\n * parse an svg path data string. Generates an Array\n * of commands where each command is an Array of the\n * form `[command, arg1, arg2, ...]`\n *\n * @param {String} path\n * @return {Array}\n */\n\nfunction parse(path) {\n\tvar data = []\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase()\n\t\targs = parseValues(args)\n\n\t\t// overloaded moveTo\n\t\tif (type == 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)))\n\t\t\ttype = 'l'\n\t\t\tcommand = command == 'm' ? 'l' : 'L'\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (args.length == length[type]) {\n\t\t\t\targs.unshift(command)\n\t\t\t\treturn data.push(args)\n\t\t\t}\n\t\t\tif (args.length < length[type]) throw new Error('malformed path data')\n\t\t\tdata.push([command].concat(args.splice(0, length[type])))\n\t\t}\n\t})\n\treturn data\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number)\n\treturn numbers ? numbers.map(Number) : []\n}\n","\nmodule.exports = absolutize\n\n/**\n * redefine `path` with absolute coordinates\n *\n * @param {Array} path\n * @return {Array}\n */\n\nfunction absolutize(path){\n\tvar startX = 0\n\tvar startY = 0\n\tvar x = 0\n\tvar y = 0\n\n\treturn path.map(function(seg){\n\t\tseg = seg.slice()\n\t\tvar type = seg[0]\n\t\tvar command = type.toUpperCase()\n\n\t\t// is relative\n\t\tif (type != command) {\n\t\t\tseg[0] = command\n\t\t\tswitch (type) {\n\t\t\t\tcase 'a':\n\t\t\t\t\tseg[6] += x\n\t\t\t\t\tseg[7] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'v':\n\t\t\t\t\tseg[1] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'h':\n\t\t\t\t\tseg[1] += x\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tfor (var i = 1; i < seg.length;) {\n\t\t\t\t\t\tseg[i++] += x\n\t\t\t\t\t\tseg[i++] += y\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update cursor state\n\t\tswitch (command) {\n\t\t\tcase 'Z':\n\t\t\t\tx = startX\n\t\t\t\ty = startY\n\t\t\t\tbreak\n\t\t\tcase 'H':\n\t\t\t\tx = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'V':\n\t\t\t\ty = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'M':\n\t\t\t\tx = startX = seg[1]\n\t\t\t\ty = startY = seg[2]\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tx = seg[seg.length - 2]\n\t\t\t\ty = seg[seg.length - 1]\n\t\t}\n\n\t\treturn seg\n\t})\n}\n","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar TAU = Math.PI * 2;\n\nvar mapToEllipse = function mapToEllipse(_ref, rx, ry, cosphi, sinphi, centerx, centery) {\n var x = _ref.x,\n y = _ref.y;\n\n x *= rx;\n y *= ry;\n\n var xp = cosphi * x - sinphi * y;\n var yp = sinphi * x + cosphi * y;\n\n return {\n x: xp + centerx,\n y: yp + centery\n };\n};\n\nvar approxUnitArc = function approxUnitArc(ang1, ang2) {\n // If 90 degree circular arc, use a constant\n // as derived from http://spencermortensen.com/articles/bezier-circle\n var a = ang2 === 1.5707963267948966 ? 0.551915024494 : ang2 === -1.5707963267948966 ? -0.551915024494 : 4 / 3 * Math.tan(ang2 / 4);\n\n var x1 = Math.cos(ang1);\n var y1 = Math.sin(ang1);\n var x2 = Math.cos(ang1 + ang2);\n var y2 = Math.sin(ang1 + ang2);\n\n return [{\n x: x1 - y1 * a,\n y: y1 + x1 * a\n }, {\n x: x2 + y2 * a,\n y: y2 - x2 * a\n }, {\n x: x2,\n y: y2\n }];\n};\n\nvar vectorAngle = function vectorAngle(ux, uy, vx, vy) {\n var sign = ux * vy - uy * vx < 0 ? -1 : 1;\n\n var dot = ux * vx + uy * vy;\n\n if (dot > 1) {\n dot = 1;\n }\n\n if (dot < -1) {\n dot = -1;\n }\n\n return sign * Math.acos(dot);\n};\n\nvar getArcCenter = function getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp) {\n var rxsq = Math.pow(rx, 2);\n var rysq = Math.pow(ry, 2);\n var pxpsq = Math.pow(pxp, 2);\n var pypsq = Math.pow(pyp, 2);\n\n var radicant = rxsq * rysq - rxsq * pypsq - rysq * pxpsq;\n\n if (radicant < 0) {\n radicant = 0;\n }\n\n radicant /= rxsq * pypsq + rysq * pxpsq;\n radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n\n var centerxp = radicant * rx / ry * pyp;\n var centeryp = radicant * -ry / rx * pxp;\n\n var centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n var centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n\n var vx1 = (pxp - centerxp) / rx;\n var vy1 = (pyp - centeryp) / ry;\n var vx2 = (-pxp - centerxp) / rx;\n var vy2 = (-pyp - centeryp) / ry;\n\n var ang1 = vectorAngle(1, 0, vx1, vy1);\n var ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n\n if (sweepFlag === 0 && ang2 > 0) {\n ang2 -= TAU;\n }\n\n if (sweepFlag === 1 && ang2 < 0) {\n ang2 += TAU;\n }\n\n return [centerx, centery, ang1, ang2];\n};\n\nvar arcToBezier = function arcToBezier(_ref2) {\n var px = _ref2.px,\n py = _ref2.py,\n cx = _ref2.cx,\n cy = _ref2.cy,\n rx = _ref2.rx,\n ry = _ref2.ry,\n _ref2$xAxisRotation = _ref2.xAxisRotation,\n xAxisRotation = _ref2$xAxisRotation === undefined ? 0 : _ref2$xAxisRotation,\n _ref2$largeArcFlag = _ref2.largeArcFlag,\n largeArcFlag = _ref2$largeArcFlag === undefined ? 0 : _ref2$largeArcFlag,\n _ref2$sweepFlag = _ref2.sweepFlag,\n sweepFlag = _ref2$sweepFlag === undefined ? 0 : _ref2$sweepFlag;\n\n var curves = [];\n\n if (rx === 0 || ry === 0) {\n return [];\n }\n\n var sinphi = Math.sin(xAxisRotation * TAU / 360);\n var cosphi = Math.cos(xAxisRotation * TAU / 360);\n\n var pxp = cosphi * (px - cx) / 2 + sinphi * (py - cy) / 2;\n var pyp = -sinphi * (px - cx) / 2 + cosphi * (py - cy) / 2;\n\n if (pxp === 0 && pyp === 0) {\n return [];\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n var _getArcCenter = getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp),\n _getArcCenter2 = _slicedToArray(_getArcCenter, 4),\n centerx = _getArcCenter2[0],\n centery = _getArcCenter2[1],\n ang1 = _getArcCenter2[2],\n ang2 = _getArcCenter2[3];\n\n // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n // 1.0000000001. This causes `segments` to be greater than one, which is an\n // unecessary split, and adds extra points to the bezier curve. To alleviate\n // this issue, we round to 1.0 when the ratio is close to 1.0.\n\n\n var ratio = Math.abs(ang2) / (TAU / 4);\n if (Math.abs(1.0 - ratio) < 0.0000001) {\n ratio = 1.0;\n }\n\n var segments = Math.max(Math.ceil(ratio), 1);\n\n ang2 /= segments;\n\n for (var i = 0; i < segments; i++) {\n curves.push(approxUnitArc(ang1, ang2));\n ang1 += ang2;\n }\n\n return curves.map(function (curve) {\n var _mapToEllipse = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery),\n x1 = _mapToEllipse.x,\n y1 = _mapToEllipse.y;\n\n var _mapToEllipse2 = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery),\n x2 = _mapToEllipse2.x,\n y2 = _mapToEllipse2.y;\n\n var _mapToEllipse3 = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery),\n x = _mapToEllipse3.x,\n y = _mapToEllipse3.y;\n\n return { x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y };\n });\n};\n\nexport default arcToBezier;","'use strict'\r\n\r\nmodule.exports = normalize\r\n\r\nvar arcToCurve = require('svg-arc-to-cubic-bezier')\r\n\r\nfunction normalize(path){\r\n // init state\r\n var prev\r\n var result = []\r\n var bezierX = 0\r\n var bezierY = 0\r\n var startX = 0\r\n var startY = 0\r\n var quadX = null\r\n var quadY = null\r\n var x = 0\r\n var y = 0\r\n\r\n for (var i = 0, len = path.length; i < len; i++) {\r\n var seg = path[i]\r\n var command = seg[0]\r\n\r\n switch (command) {\r\n case 'M':\r\n startX = seg[1]\r\n startY = seg[2]\r\n break\r\n case 'A':\r\n var curves = arcToCurve({\r\n px: x,\r\n py: y,\r\n cx: seg[6],\r\n cy: seg[7],\r\n rx: seg[1],\r\n ry: seg[2],\r\n xAxisRotation: seg[3],\r\n largeArcFlag: seg[4],\r\n sweepFlag: seg[5]\r\n })\r\n\r\n // null-curves\r\n if (!curves.length) continue\r\n\r\n for (var j = 0, c; j < curves.length; j++) {\r\n c = curves[j]\r\n seg = ['C', c.x1, c.y1, c.x2, c.y2, c.x, c.y]\r\n if (j < curves.length - 1) result.push(seg)\r\n }\r\n\r\n break\r\n case 'S':\r\n // default control point\r\n var cx = x\r\n var cy = y\r\n if (prev == 'C' || prev == 'S') {\r\n cx += cx - bezierX // reflect the previous command's control\r\n cy += cy - bezierY // point relative to the current point\r\n }\r\n seg = ['C', cx, cy, seg[1], seg[2], seg[3], seg[4]]\r\n break\r\n case 'T':\r\n if (prev == 'Q' || prev == 'T') {\r\n quadX = x * 2 - quadX // as with 'S' reflect previous control point\r\n quadY = y * 2 - quadY\r\n } else {\r\n quadX = x\r\n quadY = y\r\n }\r\n seg = quadratic(x, y, quadX, quadY, seg[1], seg[2])\r\n break\r\n case 'Q':\r\n quadX = seg[1]\r\n quadY = seg[2]\r\n seg = quadratic(x, y, seg[1], seg[2], seg[3], seg[4])\r\n break\r\n case 'L':\r\n seg = line(x, y, seg[1], seg[2])\r\n break\r\n case 'H':\r\n seg = line(x, y, seg[1], y)\r\n break\r\n case 'V':\r\n seg = line(x, y, x, seg[1])\r\n break\r\n case 'Z':\r\n seg = line(x, y, startX, startY)\r\n break\r\n }\r\n\r\n // update state\r\n prev = command\r\n x = seg[seg.length - 2]\r\n y = seg[seg.length - 1]\r\n if (seg.length > 4) {\r\n bezierX = seg[seg.length - 4]\r\n bezierY = seg[seg.length - 3]\r\n } else {\r\n bezierX = x\r\n bezierY = y\r\n }\r\n result.push(seg)\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction line(x1, y1, x2, y2){\r\n return ['C', x1, y1, x2, y2, x2, y2]\r\n}\r\n\r\nfunction quadratic(x1, y1, cx, cy, x2, y2){\r\n return [\r\n 'C',\r\n x1/3 + (2/3) * cx,\r\n y1/3 + (2/3) * cy,\r\n x2/3 + (2/3) * cx,\r\n y2/3 + (2/3) * cy,\r\n x2,\r\n y2\r\n ]\r\n}\r\n","'use strict'\r\n\r\nmodule.exports = function isPath(str) {\r\n\tif (typeof str !== 'string') return false\r\n\r\n\tstr = str.trim()\r\n\r\n\t// https://www.w3.org/TR/SVG/paths.html#PathDataBNF\r\n\tif (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) return true\r\n\r\n\treturn false\r\n}\r\n","'use strict'\r\n\r\nvar parse = require('parse-svg-path')\r\nvar abs = require('abs-svg-path')\r\nvar normalize = require('normalize-svg-path')\r\nvar isSvgPath = require('is-svg-path')\r\n\r\nmodule.exports = pathBounds\r\n\r\n\r\nfunction pathBounds(path) {\r\n // ES6 string tpl call\r\n if (Array.isArray(path) && path.length === 1 && typeof path[0] === 'string') path = path[0]\r\n\r\n // svg path string\r\n if (typeof path === 'string') {\r\n if (!isSvgPath(path)) throw Error('String is not an SVG path.')\r\n path = parse(path)\r\n }\r\n\r\n if (!Array.isArray(path)) throw Error('Argument should be a string or an array of path segments.')\r\n\r\n path = abs(path)\r\n path = normalize(path)\r\n\r\n if (!path.length) return [0, 0, 0, 0]\r\n\r\n var bounds = [Infinity, Infinity, -Infinity, -Infinity]\r\n\r\n for (var i = 0, l = path.length; i < l; i++) {\r\n var points = path[i].slice(1)\r\n\r\n for (var j = 0; j < points.length; j += 2) {\r\n if (points[j + 0] < bounds[0]) bounds[0] = points[j + 0]\r\n if (points[j + 1] < bounds[1]) bounds[1] = points[j + 1]\r\n if (points[j + 0] > bounds[2]) bounds[2] = points[j + 0]\r\n if (points[j + 1] > bounds[3]) bounds[3] = points[j + 1]\r\n }\r\n }\r\n\r\n return bounds\r\n}\r\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","\n\nfunction SvgPathGenerator(path) {\n if (!(this instanceof SvgPathGenerator)) {\n return new SvgPathGenerator(path);\n }\n\n this.currentPath = (path || '') + ' ';\n this.isRelative = false;\n}\n\n\nmodule.exports = SvgPathGenerator;\n\n\n\nSvgPathGenerator.prototype.toString = function() {\n return this.end();\n};\n\n\nSvgPathGenerator.prototype.moveTo = function() {\n this._appendData('M', arguments);\n return this;\n};\n\n\nSvgPathGenerator.prototype.close = SvgPathGenerator.prototype.closePath = function() {\n this._appendData('Z', []);\n return this;\n};\n\nSvgPathGenerator.prototype.lineTo = function() {\n this._appendData('L', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.horizontalLineTo = function(x) {\n this._appendData('H', [x]);\n return this;\n};\n\nSvgPathGenerator.prototype.verticalLineTo = function(y) {\n this._appendData('V', [y]);\n return this;\n};\n\nSvgPathGenerator.prototype.curveTo = function() {\n this._appendData('C', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.smoothCurveTo = function() {\n this._appendData('S', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.bezierCurveTo = function() {\n this._appendData('Q', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.smoothBezierCurveTo = function() {\n this._appendData('T', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.ellipticalArc = function() {\n this._appendData('A', arguments);\n return this;\n};\n\n\nSvgPathGenerator.prototype.relative = function() {\n this.isRelative = true;\n return this;\n};\n\nSvgPathGenerator.prototype.end = function() {\n return this.currentPath.trim();\n};\n\n\nSvgPathGenerator.prototype._appendData = function(symbol, args) {\n\n args = Array.prototype.slice.call(args);\n\n if(this.isRelative) {\n symbol = symbol.toLowerCase();\n this.isRelative = false;\n }\n\n this.currentPath += symbol + ' ' + args.join(' ') + ' ';\n};\n\n\n","\nmodule.exports = require('./lib/svg-path-generator');\n\n","export * from \"./Schematic\"\n","import { useCallback, useEffect, useState } from \"react\"\nimport { ProjectComponent } from \"schematic-components\"\nimport { SuperGrid, toMMSI } from \"react-supergrid\"\nimport {\n AnyElement,\n createProjectBuilder,\n createProjectFromElements,\n findBoundsAndCenter,\n transformSchematicElement,\n} from \"@tscircuit/builder\"\nimport { createRoot } from \"@tscircuit/react-fiber\"\nimport { SchematicElement } from \"schematic-components/SchematicElement\"\nimport { collectElementRefs } from \"lib/utils/collect-element-refs\"\nimport { useMouseMatrixTransform } from \"use-mouse-matrix-transform\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { identity, compose, scale, translate } from \"transformation-matrix\"\nimport { useRenderContext } from \"lib/render-context\"\nimport useMeasure from \"react-use-measure\"\nimport { TableViewer } from \"./schematic-components/TableViewer\"\n\nconst fallbackRender =\n (elm) =>\n ({ error, resetErrorBoundary }: any) => {\n return (\n <div style={{ color: \"red\" }}>\n error rendering {elm.type}: {error.toString()}\n </div>\n )\n }\n\nconst toMMSINeg = (v: number, z: number) =>\n v >= 0 ? toMMSI(v, z) : `-${toMMSI(-v, z)}`\n\nexport const Schematic = ({\n children,\n elements: initialElements,\n soup: initialSoup,\n style,\n showTable,\n}: {\n children?: any\n\n /** @deprecated */\n elements?: any\n\n soup?: any\n\n style?: any\n\n showTable?: boolean\n}) => {\n initialSoup = initialSoup ?? initialElements ?? []\n\n const [elements, setElements] = useState<any>(initialSoup ?? [])\n const [project, setProject] = useState<any>(null)\n const setCameraTransform = useRenderContext((s) => s.setCameraTransform)\n const cameraTransform = useRenderContext((s) => s.camera_transform)\n const [boundsRef, bounds] = useMeasure()\n const { ref, setTransform } = useMouseMatrixTransform({\n onSetTransform: (transform) => {\n setCameraTransform(transform)\n },\n // initialTransform: compose(scale(100, 100, 0, 0)),\n })\n const setElementsAndCamera = useCallback(\n (elements: Array<AnyElement>) => {\n const elmBounds = (ref.current as HTMLDivElement).getBoundingClientRect()\n\n const { center, width, height } = elements.some((e) =>\n e.type.startsWith(\"schematic_\")\n )\n ? findBoundsAndCenter(\n elements.filter((e) => e.type.startsWith(\"schematic_\"))\n )\n : { center: { x: 0, y: 0 }, width: 0.001, height: 0.001 }\n\n const scaleFactor = Math.min(\n (elmBounds.width ?? 0) / width,\n (elmBounds.height ?? 0) / height,\n 100\n )\n setElements(elements)\n setProject(createProjectFromElements(elements))\n setTransform(\n compose(\n translate((elmBounds.width ?? 0) / 2, (elmBounds.height ?? 0) / 2),\n // translate(100, 0),\n scale(scaleFactor, scaleFactor, 0, 0),\n translate(-center.x, -center.y)\n )\n )\n },\n [setElements, setTransform]\n )\n\n useEffect(() => {\n if (initialSoup.length > 0) {\n setElementsAndCamera(initialSoup)\n return\n }\n const projectBuilder = createProjectBuilder()\n createRoot()\n .render(children, projectBuilder as any)\n .then(async (elements) => {\n setElementsAndCamera(elements)\n })\n .catch((e) => {\n console.error(\"ERROR RENDERING CIRCUIT\")\n throw e\n })\n }, [children])\n\n return (\n <>\n <div\n style={{\n width: \"100%\",\n backgroundColor: \"rgba(255,255,255,0)\",\n minHeight: 200,\n overflow: \"hidden\",\n position: \"relative\",\n cursor: \"grab\",\n ...style,\n }}\n ref={(el) => {\n ref.current = el\n boundsRef(el)\n }}\n >\n <SuperGrid\n stringifyCoord={(x, y, z) => {\n if (z === 0) return \"\"\n return `${toMMSINeg(x, z)}, ${toMMSINeg(y, z)}`\n }}\n width={bounds.width}\n height={bounds.height}\n transform={cameraTransform}\n />\n {elements?.map((elm, i) => (\n <ErrorBoundary key={i} fallbackRender={fallbackRender(elm)}>\n <SchematicElement\n element={elm}\n allElements={elements}\n key={JSON.stringify(elm)}\n />\n </ErrorBoundary>\n ))}\n </div>\n {showTable !== false && elements && <TableViewer elements={elements} />}\n </>\n )\n}\n","import { AnyElement } from \"@tscircuit/builder\"\n\nexport const collectElementRefs = (elm: AnyElement, allElms: AnyElement[]) => {\n const source_component = allElms.find(\n (e) =>\n e.type === \"source_component\" &&\n e.source_component_id === (elm as any).source_component_id\n )\n if (\n [\n \"schematic_component\",\n \"schematic_trace\",\n \"schematic_port\",\n \"schematic_box\",\n \"schematic_line\",\n ].includes(elm.type)\n ) {\n const schematic_children = allElms.filter(\n (e) =>\n \"schematic_component_id\" in e &&\n e.schematic_component_id === (elm as any).schematic_component_id\n )\n\n return {\n schematic_children,\n schematic: elm,\n source: source_component,\n }\n }\n return null\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (nextState !== state) {\n const previousState = state;\n state = replace ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => listeners.clear();\n const api = { setState, getState, subscribe, destroy };\n state = createState(\n setState,\n getState,\n api\n );\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore as default };\n","import createStore__default from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nexport { default as createStore } from 'zustand/vanilla';\nimport { useDebugValue } from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = typeof createState === \"function\" ? createStore__default(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar create$1 = create;\n\nexport { create$1 as default, useStore };\n","/**\n * Calculate a point transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param point {Point} Point\n * @returns {Point} Point\n */\nexport function applyToPoint (matrix, point) {\n return Array.isArray(point)\n ? [\n matrix.a * point[0] + matrix.c * point[1] + matrix.e,\n matrix.b * point[0] + matrix.d * point[1] + matrix.f\n ]\n : {\n x: matrix.a * point.x + matrix.c * point.y + matrix.e,\n y: matrix.b * point.x + matrix.d * point.y + matrix.f\n }\n}\n\n/**\n * Calculate an array of points transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param points {Point[]} Array of point\n * @returns {Point[]} Array of point\n */\nexport function applyToPoints (matrix, points) {\n return points.map(point => applyToPoint(matrix, point))\n}\n","export function isUndefined (val) {\n return typeof val === 'undefined'\n}\n\nexport function isNumeric (n) {\n return typeof n === 'number' &&\n !Number.isNaN(n) &&\n Number.isFinite(n)\n}\n\nexport function isObject (obj) {\n return typeof obj === 'object' &&\n obj !== null &&\n !Array.isArray(obj)\n}\n\nexport function matchesShape (obj, keys) {\n return keys.every(key => key in obj)\n}\n","/**\n * Calculate a translate matrix\n * @param tx {number} Translation on axis x\n * @param [ty = 0] {number} Translation on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function translate (tx, ty = 0) {\n return {\n a: 1,\n c: 0,\n e: tx,\n b: 0,\n d: 1,\n f: ty\n }\n}\n","/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function transform (...matrices) {\n matrices = Array.isArray(matrices[0]) ? matrices[0] : matrices\n\n const multiply = (m1, m2) => {\n return {\n a: m1.a * m2.a + m1.c * m2.b,\n c: m1.a * m2.c + m1.c * m2.d,\n e: m1.a * m2.e + m1.c * m2.f + m1.e,\n b: m1.b * m2.a + m1.d * m2.b,\n d: m1.b * m2.c + m1.d * m2.d,\n f: m1.b * m2.e + m1.d * m2.f + m1.f\n }\n }\n\n switch (matrices.length) {\n case 0:\n throw new Error('no matrices provided')\n\n case 1:\n return matrices[0]\n\n case 2:\n return multiply(matrices[0], matrices[1])\n\n default: {\n const [m1, m2, ...rest] = matrices\n const m = multiply(m1, m2)\n return transform(m, ...rest)\n }\n }\n}\n\n/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function compose (...matrices) {\n return transform(...matrices)\n}\n","import { isUndefined } from './utils'\nimport { translate } from './translate'\nimport { transform } from './transform'\n\nconst { cos, sin, PI } = Math\n/**\n * Calculate a rotation matrix\n * @param angle {number} Angle in radians\n * @param [cx] {number} If (cx,cy) are supplied the rotate is about this point\n * @param [cy] {number} If (cx,cy) are supplied the rotate is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function rotate (angle, cx, cy) {\n const cosAngle = cos(angle)\n const sinAngle = sin(angle)\n const rotationMatrix = {\n a: cosAngle,\n c: -sinAngle,\n e: 0,\n b: sinAngle,\n d: cosAngle,\n f: 0\n }\n if (isUndefined(cx) || isUndefined(cy)) {\n return rotationMatrix\n }\n\n return transform([\n translate(cx, cy),\n rotationMatrix,\n translate(-cx, -cy)\n ])\n}\n\n/**\n * Calculate a rotation matrix with a DEG angle\n * @param angle {number} Angle in degree\n * @param [cx] {number} If (cx,cy) are supplied the rotate is about this point\n * @param [cy] {number} If (cx,cy) are supplied the rotate is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function rotateDEG (angle, cx = undefined, cy = undefined) {\n return rotate(angle * PI / 180, cx, cy)\n}\n","import { isUndefined } from './utils'\nimport { translate } from './translate'\nimport { transform } from './transform'\n\n/**\n * Calculate a scaling matrix\n * @param sx {number} Scaling on axis x\n * @param [sy = sx] {number} Scaling on axis y (default sx)\n * @param [cx] {number} If (cx,cy) are supplied the scaling is about this point\n * @param [cy] {number} If (cx,cy) are supplied the scaling is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function scale (sx, sy = undefined, cx = undefined, cy = undefined) {\n if (isUndefined(sy)) sy = sx\n\n const scaleMatrix = {\n a: sx,\n c: 0,\n e: 0,\n b: 0,\n d: sy,\n f: 0\n }\n\n if (isUndefined(cx) || isUndefined(cy)) {\n return scaleMatrix\n }\n\n return transform([\n translate(cx, cy),\n scaleMatrix,\n translate(-cx, -cy)\n ])\n}\n","// https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew\nconst { tan } = Math\n\n/**\n * Calculate a skew matrix\n * @param ax {number} Skew on axis x\n * @param ay {number} Skew on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function skew (ax, ay) {\n return {\n a: 1,\n c: tan(ax),\n e: 0,\n b: tan(ay),\n d: 1,\n f: 0\n }\n}\n\n/**\n * Calculate a skew matrix using DEG angles\n * @param ax {number} Skew on axis x\n * @param ay {number} Skew on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function skewDEG (ax, ay) {\n return skew(ax * Math.PI / 180, ay * Math.PI / 180)\n}\n","// Generated by Peggy 3.0.0.\n//\n// https://peggyjs.org/\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { transformList: peg$parsetransformList };\n var peg$startRuleFunction = peg$parsetransformList;\n\n var peg$c0 = \"matrix\";\n var peg$c1 = \"(\";\n var peg$c2 = \")\";\n var peg$c3 = \"translate\";\n var peg$c4 = \"scale\";\n var peg$c5 = \"rotate\";\n var peg$c6 = \"skewX\";\n var peg$c7 = \"skewY\";\n var peg$c8 = \",\";\n var peg$c9 = \".\";\n\n var peg$r0 = /^[eE]/;\n var peg$r1 = /^[+\\-]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"matrix\", false);\n var peg$e1 = peg$literalExpectation(\"(\", false);\n var peg$e2 = peg$literalExpectation(\")\", false);\n var peg$e3 = peg$literalExpectation(\"translate\", false);\n var peg$e4 = peg$literalExpectation(\"scale\", false);\n var peg$e5 = peg$literalExpectation(\"rotate\", false);\n var peg$e6 = peg$literalExpectation(\"skewX\", false);\n var peg$e7 = peg$literalExpectation(\"skewY\", false);\n var peg$e8 = peg$literalExpectation(\",\", false);\n var peg$e9 = peg$otherExpectation(\"fractionalConstant\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$classExpectation([\"e\", \"E\"], false, false);\n var peg$e12 = peg$classExpectation([\"+\", \"-\"], false, false);\n var peg$e13 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e14 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(ts) { return ts; };\n var peg$f1 = function(t, ts) { return t.concat(ts) };\n var peg$f2 = function(a, b, c, d, e, f) {\n return [{type: 'matrix', a: a, b: b, c: c, d: d, e: e, f: f}];\n };\n var peg$f3 = function(tx, ty) {\n var t = {type: 'translate', tx: tx};\n if (ty) t.ty = ty;\n return [t];\n };\n var peg$f4 = function(sx, sy) {\n var s = {type:'scale', sx: sx};\n if (sy) s.sy = sy;\n return [s];\n };\n var peg$f5 = function(angle, c) {\n var r = {type:'rotate', angle: angle};\n if (c) {\n r.cx = c[0];\n r.cy = c[1];\n }\n return [r];\n };\n var peg$f6 = function(angle) {\n return [{type: 'skewX', angle: angle}];\n };\n var peg$f7 = function(angle) {\n return [{type: 'skewY', angle: angle}];\n };\n var peg$f8 = function(f) { return parseFloat(f.join(\"\")); };\n var peg$f9 = function(i) { return parseInt(i.join(\"\")); };\n var peg$f10 = function(n) { return n; };\n var peg$f11 = function(n1, n2) { return [n1, n2]; };\n var peg$f12 = function(ds) { return ds.join(\"\"); };\n var peg$f13 = function(f, e) { return [f, e || null].join(\"\")};\n var peg$f14 = function(d, e) { return [d, e].join(\"\")};\n var peg$f15 = function(d1, d2) { return [d1 ? d1.join(\"\") : null, \".\", d2.join(\"\")].join(\"\"); };\n var peg$f16 = function(d) { return d.join(\"\"); };\n var peg$f17 = function(s, d) { return ['e', s, d.join(\"\")].join(\"\") };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsetransformList() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n s2 = peg$parsetransforms();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n\n return s0;\n }\n\n function peg$parsetransforms() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsetransform();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsecommaWsp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsecommaWsp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetransforms();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsetransform();\n }\n\n return s0;\n }\n\n function peg$parsetransform() {\n var s0;\n\n s0 = peg$parsematrix();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetranslate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsescale();\n if (s0 === peg$FAILED) {\n s0 = peg$parserotate();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewX();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewY();\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsematrix() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWsp();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsenumber();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsecommaWsp();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsenumber();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsecommaWsp();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsenumber();\n if (s11 !== peg$FAILED) {\n s12 = peg$parsecommaWsp();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsenumber();\n if (s13 !== peg$FAILED) {\n s14 = peg$parsecommaWsp();\n if (s14 !== peg$FAILED) {\n s15 = peg$parsenumber();\n if (s15 !== peg$FAILED) {\n s16 = [];\n s17 = peg$parsewsp();\n while (s17 !== peg$FAILED) {\n s16.push(s17);\n s17 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s17 = peg$c2;\n peg$currPos++;\n } else {\n s17 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s17 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s5, s7, s9, s11, s13, s15);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetranslate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c3) {\n s1 = peg$c3;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsescale() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c4) {\n s1 = peg$c4;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserotate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c5) {\n s1 = peg$c5;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspTwoNumbers();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseskewX() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseskewY() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsefloatingPointConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parseintegerConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsecommaWspNumber() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecommaWspTwoNumbers() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecommaWsp();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsenumber();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecommaWsp() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecomma();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomma();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsecomma() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s0 = peg$c8;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parseintegerConstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsefloatingPointConstant() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsefractionalConstant();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseexponent();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseexponent();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsefractionalConstant() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedigitSequence();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parseexponent() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsedigitSequence();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesign() {\n var s0;\n\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n\n return s0;\n }\n\n function peg$parsedigitSequence() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parsedigit();\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedigit();\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedigit() {\n var s0;\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parsewsp() {\n var s0;\n\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import createStore from \"zustand\"\nimport { Matrix, compose, scale } from \"transformation-matrix\"\n\ninterface RenderContextState {\n camera_transform: Matrix\n setCameraTransform: (transform: Matrix) => void\n}\n\nexport const useRenderContext = createStore<RenderContextState>((set, get) => ({\n camera_transform: compose(scale(100, 100, 0, 0)),\n setCameraTransform: (transform: Matrix) =>\n set({ camera_transform: transform }),\n}))\n\nexport const useCameraTransform = () =>\n useRenderContext((s) => s.camera_transform)\n","import svgPathBounds from \"svg-path-bounds\"\n\nexport function getSVGPathBounds(ds: string[] | string) {\n if (typeof ds === \"string\") ds = [ds]\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity\n\n for (const d of ds) {\n const [left, top, right, bottom] = svgPathBounds(d)\n\n minX = Math.min(left, minX)\n maxX = Math.max(right, maxX)\n minY = Math.min(top, minY)\n maxY = Math.max(bottom, maxY)\n }\n\n return { minX, maxX, minY, maxY, width: maxX - minX, height: maxY - minY }\n}\n\nexport default getSVGPathBounds\n","import { useCameraTransform } from \"lib/render-context\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\nimport { applyToPoint } from \"transformation-matrix\"\n\ninterface Props {\n rotation: number\n center: { x: number; y: number }\n size: { width: number; height: number }\n paths: Array<{\n strokeWidth: number\n stroke: string\n d: string\n }>\n}\n\nexport const SVGPathComponent = ({ size, center, rotation, paths }: Props) => {\n const ct = useCameraTransform()\n const pathBounds = getSVGPathBounds(paths.map((p) => p.d))\n // Margin in SVG Space\n const badRatio =\n Math.abs(pathBounds.width / pathBounds.height - size.width / size.height) >\n 0.01\n if (badRatio) {\n // console.warn(\n // `Ratio doesn't match for component. ${pathBounds.width}:${pathBounds.height} is not close to ${size.width}:${size.height}`\n // )\n }\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const absoluteCenter = applyToPoint(ct, center)\n const absoluteSize = {\n width: Math.max(1, size.width * ct.a),\n height: Math.max(1, size.height * ct.d),\n }\n\n return (\n <svg\n style={{\n position: \"absolute\",\n transform: rotation === 0 ? \"\" : `rotate(${rotation}rad)`,\n left: absoluteCenter.x - absoluteSize.width / 2,\n top: absoluteCenter.y - absoluteSize.height / 2,\n // backgroundColor: badRatio ? \"rgba(255, 0, 0, 0.5)\" : \"transparent\",\n }}\n overflow=\"visible\"\n width={absoluteSize.width}\n height={absoluteSize.height}\n viewBox={`${pathBounds.minX} ${pathBounds.minY} ${pathBounds.width} ${pathBounds.height}`}\n >\n {paths.map((p, i) => (\n <path\n key={i}\n fill=\"none\"\n strokeWidth={2 * (p.strokeWidth || 1)}\n stroke={p.stroke || \"red\"}\n d={p.d}\n />\n ))}\n </svg>\n )\n}\n\nexport default SVGPathComponent\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleResistor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleResistor = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n d: \"M 0 15 l 10 0 l 0 -6 l 20 0 l 0 12 l -20 0 l 0 -6 m 20 0 l 10 0\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleResistor\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleCapacitor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleCapacitor = ({\n component: { source, schematic },\n}: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n { stroke: \"red\", strokeWidth: 1, d: \"M 0 15 l 12 0\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 12 0 l 0 30\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 18 0 l 0 30\" },\n { stroke: \"red\", strokeWidth: 1, d: \"M 18 15 l 12 0\" },\n ]}\n />\n )\n}\n\nexport default SimpleCapacitor\n","import { useEffect, useState } from \"react\"\n\nexport const useMaybePromise = <T>(promise: Promise<T> | T): T | null => {\n const [state, setState] = useState<T | null>(null)\n useEffect(() => {\n if (promise instanceof Promise) {\n promise.then(setState)\n } else {\n setState(promise)\n }\n }, [promise])\n return state\n}\nexport default useMaybePromise\n","import { useMaybePromise } from \"lib/hooks\"\nimport { ProjectClass } from \"@tscircuit/builder\"\nimport * as Types from \"lib/types\"\nimport * as Components from \"./\"\n\ninterface Props {\n project: Types.Project | Promise<Types.Project>\n}\n\n/**\n * @deprecated use SchematicElement instead because we're most likely\n * deprecating projects\n */\nexport const ProjectComponent = ({ project: $project }: Props) => {\n const project = useMaybePromise($project)\n\n if (!project) return <span>loading</span>\n\n const projectClass = new ProjectClass(project as any)\n\n return (\n <>\n {project.schematic_components.map((schematic_component) => (\n <Components.SchematicComponent\n key={schematic_component.schematic_component_id}\n component={{\n source: projectClass.getSourceComponent(\n schematic_component.source_component_id\n ),\n schematic: schematic_component,\n }}\n />\n ))}\n {project.schematic_ports.map((schematic_port) => (\n <Components.SchematicPort\n key={schematic_port.schematic_port_id}\n port={{\n source: projectClass.getSourcePort(\n schematic_port.schematic_port_id\n ),\n schematic: schematic_port,\n }}\n />\n ))}\n {project.schematic_traces.map((schematic_trace) => (\n <Components.SchematicTrace\n key={schematic_trace.schematic_trace_id}\n trace={{\n source: projectClass.getSourceTrace(\n schematic_trace.source_trace_id\n ),\n schematic: schematic_trace,\n }}\n />\n ))}\n {project.schematic_texts.map((schematic_text) => (\n <Components.SchematicText\n key={schematic_text.schematic_text_id}\n schematic_text={schematic_text}\n />\n ))}\n </>\n )\n}\n\nexport default ProjectComponent\n","export const directionToVec = (direction: \"up\" | \"down\" | \"left\" | \"right\") => {\n if (direction === \"up\") return { x: 0, y: -1 }\n else if (direction === \"down\") return { x: 0, y: 1 }\n else if (direction === \"left\") return { x: -1, y: 0 }\n else if (direction === \"right\") return { x: 1, y: 0 }\n else throw new Error(\"Invalid direction\")\n}\n\nexport const vecToDirection = ({ x, y }: { x: number; y: number }) => {\n if (x > y) y = 0\n if (y > x) x = 0\n if (x > 0 && y === 0) return \"right\"\n else if (x < 0 && y === 0) return \"left\"\n else if (x === 0 && y > 0) return \"down\"\n else if (x === 0 && y < 0) return \"up\"\n else throw new Error(`Invalid vector for direction conversion (${x}, ${y})`)\n}\n\nexport const rotateClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"right\"\n else if (direction === \"right\") return \"down\"\n else if (direction === \"down\") return \"left\"\n else if (direction === \"left\") return \"up\"\n}\n\nexport const rotateCounterClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"left\"\n else if (direction === \"left\") return \"down\"\n else if (direction === \"down\") return \"right\"\n else if (direction === \"right\") return \"up\"\n}\n\nexport const rotateDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n num90DegreeClockwiseTurns: number\n) => {\n while (num90DegreeClockwiseTurns > 0) {\n direction = rotateClockwise(direction)\n num90DegreeClockwiseTurns--\n }\n while (num90DegreeClockwiseTurns < 0) {\n direction = rotateCounterClockwise(direction)\n num90DegreeClockwiseTurns++\n }\n return direction\n}\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \"./\"\n\ninterface Props {\n port: {\n source: Type.SourcePort\n schematic: Type.SchematicPort\n }\n}\n\nexport const SchematicPort = ({ port: { source, schematic } }: Props) => {\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={schematic.center}\n size={{ width: 0.2, height: 0.2 }}\n paths={[\n {\n stroke: \"blue\",\n strokeWidth: 1,\n d: \"M 0 0 l 10 0 l 0 10 l -10 0 z\",\n },\n schematic.facing_direction\n ? {\n stroke: \"blue\",\n strokeWidth: 0.5,\n d: `M 5 5 l ${directionToVec(schematic.facing_direction).x * 7} ${\n directionToVec(schematic.facing_direction).y * 7\n }`,\n }\n : null,\n ].filter(Boolean)}\n />\n )\n}\n\nexport default SchematicPort\n","import { useState, useRef, useEffect, useMemo } from 'react';\nimport createDebounce from 'debounce';\n\nfunction useMeasure(_temp) {\n let {\n debounce,\n scroll,\n polyfill,\n offsetSize\n } = _temp === void 0 ? {\n debounce: 0,\n scroll: false,\n offsetSize: false\n } : _temp;\n const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);\n\n if (!ResizeObserver) {\n throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');\n }\n\n const [bounds, set] = useState({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0\n }); // keep all state in a ref\n\n const state = useRef({\n element: null,\n scrollContainers: null,\n resizeObserver: null,\n lastBounds: bounds\n }); // set actual debounce values early, so effects know if they should react accordingly\n\n const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;\n const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted\n\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return () => void (mounted.current = false);\n }); // memoize handlers, so event-listeners know when they should update\n\n const [forceRefresh, resizeChange, scrollChange] = useMemo(() => {\n const callback = () => {\n if (!state.current.element) return;\n const {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n } = state.current.element.getBoundingClientRect();\n const size = {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n };\n\n if (state.current.element instanceof HTMLElement && offsetSize) {\n size.height = state.current.element.offsetHeight;\n size.width = state.current.element.offsetWidth;\n }\n\n Object.freeze(size);\n if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);\n };\n\n return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];\n }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers\n\n function removeListeners() {\n if (state.current.scrollContainers) {\n state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));\n state.current.scrollContainers = null;\n }\n\n if (state.current.resizeObserver) {\n state.current.resizeObserver.disconnect();\n state.current.resizeObserver = null;\n }\n } // add scroll-listeners / observers\n\n\n function addListeners() {\n if (!state.current.element) return;\n state.current.resizeObserver = new ResizeObserver(scrollChange);\n state.current.resizeObserver.observe(state.current.element);\n\n if (scroll && state.current.scrollContainers) {\n state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {\n capture: true,\n passive: true\n }));\n }\n } // the ref we expose to the user\n\n\n const ref = node => {\n if (!node || node === state.current.element) return;\n removeListeners();\n state.current.element = node;\n state.current.scrollContainers = findScrollContainers(node);\n addListeners();\n }; // add general event listeners\n\n\n useOnWindowScroll(scrollChange, Boolean(scroll));\n useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners\n\n useEffect(() => {\n removeListeners();\n addListeners();\n }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts\n\n useEffect(() => removeListeners, []);\n return [ref, bounds, forceRefresh];\n} // Adds native resize listener to window\n\n\nfunction useOnWindowResize(onWindowResize) {\n useEffect(() => {\n const cb = onWindowResize;\n window.addEventListener('resize', cb);\n return () => void window.removeEventListener('resize', cb);\n }, [onWindowResize]);\n}\n\nfunction useOnWindowScroll(onScroll, enabled) {\n useEffect(() => {\n if (enabled) {\n const cb = onScroll;\n window.addEventListener('scroll', cb, {\n capture: true,\n passive: true\n });\n return () => void window.removeEventListener('scroll', cb, true);\n }\n }, [onScroll, enabled]);\n} // Returns a list of scroll offsets\n\n\nfunction findScrollContainers(element) {\n const result = [];\n if (!element || element === document.body) return result;\n const {\n overflow,\n overflowX,\n overflowY\n } = window.getComputedStyle(element);\n if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);\n return [...result, ...findScrollContainers(element.parentElement)];\n} // Checks if element boundaries are equal\n\n\nconst keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];\n\nconst areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);\n\nexport { useMeasure as default };\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\nimport { useCameraTransform } from \"lib/render-context\"\nimport { applyToPoint } from \"transformation-matrix\"\nimport useMeasure from \"react-use-measure\"\n\ninterface Props {\n schematic_text: Type.SchematicText\n}\n\nexport const SchematicText = ({ schematic_text }: Props) => {\n const ct = useCameraTransform()\n const { text, position, anchor } = schematic_text\n const tPos = applyToPoint(ct, position)\n const [boundsRef, bounds] = useMeasure()\n let offset = [0, 0]\n if (anchor === \"center\") {\n offset = [-bounds.width / 2, -bounds.height / 2]\n } else if (anchor === \"left\") {\n offset = [0, -bounds.height / 2]\n } else if (anchor === \"right\") {\n offset = [-bounds.width, -bounds.height / 2]\n }\n\n return (\n <div\n ref={boundsRef}\n style={{\n fontFamily: \"'IBM Plex Mono', monospace\",\n position: \"absolute\",\n left: tPos.x + offset[0],\n top: tPos.y + offset[1],\n }}\n >\n {text}\n </div>\n )\n}\n\nexport default SchematicText\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\nimport RenderError from \"./RenderError\"\n\ninterface Props {\n trace: {\n source: Type.SourceTrace\n schematic: Type.SchematicTrace\n }\n}\n\nexport const SchematicTrace = ({ trace: { source, schematic } }: Props) => {\n const edges = schematic.edges\n if (edges.length === 0) {\n return (\n <RenderError text={`Route with 0 edges (${source.source_trace_id})`} />\n )\n }\n const path = Path()\n for (let i = 0; i < edges.length; i++) {\n path.moveTo(edges[i].from.x, edges[i].from.y)\n path.lineTo(edges[i].to.x, edges[i].to.y)\n }\n const d = path.toString()\n const pathBounds = getSVGPathBounds(d)\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const center = {\n x: pathBounds.minX + pathBounds.width / 2,\n y: pathBounds.minY + pathBounds.height / 2,\n }\n return (\n <SVGPathComponent\n rotation={0}\n center={center}\n size={pathBounds}\n paths={[\n {\n stroke: \"green\",\n strokeWidth: 0.02,\n d,\n },\n ]}\n />\n )\n}\n\nexport default SchematicTrace\n","interface Props {\n text: string\n}\n\nexport default ({ text }: Props) => {\n return (\n <div\n style={{\n position: \"fixed\",\n backgroundColor: \"red\",\n color: \"white\",\n fontSize: 14,\n fontFamily: \"sans-serif\",\n padding: 5,\n right: 0,\n top: 0,\n opacity: 0.75,\n }}\n >\n {text}\n </div>\n )\n}\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport range from \"lodash/range\"\nimport {\n getPortPosition,\n getPortArrangementSize,\n getPortIndices,\n} from \"@tscircuit/builder\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\ninterface Props {\n component: {\n source: Type.SimpleBug\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SchematicBug = ({ component: { source, schematic } }: Props) => {\n const port_arrangement = {\n top_size: 0,\n bottom_size: 0,\n ...schematic.port_arrangement,\n }\n // const port_labels = schematic.port_labels!\n let bugw = schematic.size.width // bug width\n let bugh = schematic.size.height\n const { total_ports, width, height } =\n getPortArrangementSize(port_arrangement)\n const port_indices = getPortIndices(port_arrangement)\n\n // TODO remove, this seems to be due to a builder bug\n if (isNaN(bugw)) bugw = width\n if (isNaN(bugh)) bugh = height\n // TODO throw if schematic.size doesn't match computed port_arrangement size\n\n const paths = [\n {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: `M ${-bugw / 2} ${-bugh / 2} L ${bugw / 2} ${-bugh / 2} L ${\n bugw / 2\n } ${bugh / 2} L ${-bugw / 2} ${bugh / 2}Z`,\n },\n ...port_indices.map((portNum) => {\n const pos = getPortPosition(port_arrangement, portNum)\n\n const x2 =\n pos.side === \"left\"\n ? -bugw / 2\n : pos.side === \"right\"\n ? bugw / 2\n : pos.x\n const y2 =\n pos.side === \"top\"\n ? -bugh / 2\n : pos.side === \"bottom\"\n ? bugh / 2\n : pos.y\n\n return {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: `M ${pos.x} ${pos.y} L ${x2} ${y2}`,\n }\n }),\n ]\n\n const actualSize = getSVGPathBounds(paths.map((p) => p.d).join(\" \"))\n const actualCenter = {\n x: schematic.center.x + (actualSize.minX + actualSize.maxX) / 2,\n y: schematic.center.y + (actualSize.minY + actualSize.maxY) / 2,\n }\n\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={actualCenter}\n size={actualSize}\n paths={paths}\n />\n )\n}\n\nexport default SchematicBug\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimplePowerSource\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimplePowerSource = ({\n component: { source, schematic },\n}: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n d: \"M 0 -17 L 0 -3 M -8 3 L 8 3 M 0 17 L 0 3 M -12 -3 L 12 -3\",\n },\n ]}\n />\n )\n}\n\nexport default SimplePowerSource\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleGround\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleGround = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.7,\n d: \"M -3 3 L 3 3 M -6 0 L 6 0 M -9 -3 L 9 -3 M 0 -3 L 0 -12\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleGround\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleInductor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleInductor = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n // https://commons.wikimedia.org/wiki/File:Electrical_symbols_library.svg\n d: \"m 371,710.41665 h -14 c -0.0421,-16.39898 -14.02104,-16.39898 -14,0 -0.021,-16.399 -14.04182,-16.34072 -14,0 -2.6e-4,-16.45722 -14.04236,-16.45722 -14,0 2.8e-4,-16.3407 -13.97896,-16.39898 -14,0 -0.0421,-16.39898 -13.91338,-16.39898 -13.91338,0 H 273\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleInductor\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleDiode\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleDiode = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n { stroke: \"red\", strokeWidth: 2, d: \"M 0,0 H 21\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,0 H 59\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,0 L 21 14 V -14 Z\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,-14 V 14\" },\n // For LEDs\n // {\n // stroke: \"red\",\n // strokeWidth: 2,\n // d: \"M 35 -32 l 7 5.25 l 1.75 -9.625 z m 3.5 2.625 l -5.25 7\",\n // },\n // {\n // stroke: \"red\",\n // strokeWidth: 2,\n // d: \"M 52 -26 l 7 5.25 l 1.75 -9.625 z m 3.5 2.625 l -5.25 7\",\n // },\n ]}\n />\n )\n}\n\nexport default SimpleDiode\n","import * as Type from \"lib/types\"\nimport * as Component from \"./\"\n\ninterface Props {\n component: {\n source: Type.SourceComponent\n schematic: Type.SchematicComponent\n schematic_children: any[]\n }\n}\n\n/**\n * @deprecated ftype-style rendering is being deprecated in favor of the builder\n * generating schematic lines directly\n */\nexport const SchematicComponent = ({ component }: Props) => {\n const { source, schematic } = component\n switch (source.ftype) {\n case \"simple_resistor\": {\n return <Component.SimpleResistor component={{ source, schematic }} />\n }\n case \"simple_capacitor\": {\n return <Component.SimpleCapacitor component={{ source, schematic }} />\n }\n case \"simple_power_source\": {\n return <Component.SimplePowerSource component={{ source, schematic }} />\n }\n case \"simple_ground\": {\n return <Component.SimpleGround component={{ source, schematic }} />\n }\n case \"simple_inductor\": {\n return <Component.SimpleInductor component={{ source, schematic }} />\n }\n case \"simple_bug\": {\n return <Component.SchematicBug component={{ source, schematic }} />\n }\n case \"simple_diode\": {\n // Replaced by builder\n return null\n // return <Component.SimpleDiode component={{ source, schematic }} />\n }\n default: {\n return <div>unknown ftype: {component.source.ftype}</div>\n }\n }\n}\n\nexport default SchematicComponent\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \"./\"\n\ninterface Props {\n box: {\n schematic: Type.SchematicBox\n }\n}\n\nexport const SchematicBox = ({ box: { schematic } }: Props) => {\n const { width: w, height: h } = schematic\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={schematic}\n size={{ width: schematic.width, height: schematic.height }}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.2,\n d: `M 0 0 l ${w} 0 l 0 ${h} l -${w} 0 z`,\n },\n ]}\n />\n )\n}\n\nexport default SchematicBox\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \".\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\ninterface Props {\n line: {\n schematic: Type.SchematicLine\n }\n}\n\nexport const SchematicLine = ({ line: { schematic } }: Props) => {\n const { x1, x2, y1, y2 } = schematic\n const dx = x2 - x1\n const dy = y2 - y1\n // const width = Math.abs(dx) + 0.1\n // const height = Math.abs(dy) + 0.1\n // const center = { x: x1 + dx / 2, y: y1 + dy / 2 }\n const path = Path()\n path.moveTo(x1, y1)\n path.lineTo(x2, y2)\n const d = path.toString()\n const pathBounds = getSVGPathBounds(d)\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const center = {\n x: pathBounds.minX + pathBounds.width / 2,\n y: pathBounds.minY + pathBounds.height / 2,\n }\n\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={center}\n size={pathBounds}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: d,\n },\n ]}\n />\n )\n}\n\nexport default SchematicLine\n","import { AnyElement } from \"@tscircuit/builder\"\nimport { collectElementRefs } from \"lib/utils/collect-element-refs\"\nimport SchematicComponent from \"./SchematicComponent\"\nimport SchematicPort from \"./SchematicPort\"\nimport SchematicText from \"./SchematicText\"\nimport SchematicBox from \"./SchematicBox\"\nimport SchematicTrace from \"./SchematicTrace\"\nimport SchematicLine from \"./SchematicLine\"\nimport RenderError from \"./RenderError\"\n\n/**\n * Render any @tsbuilder/builder AnyElement that can be put on a schematic.\n */\nexport const SchematicElement = ({\n element,\n allElements,\n}: {\n element: AnyElement\n allElements: AnyElement[]\n}) => {\n // A lot of the split logic for element types into a project is here:\n // https://github.com/tscircuit/builder/blob/7e7bef9c0aadd11999795003b8986f0d244c111f/src/lib/project/create-project-from-elements.ts#L13\n if (element.type === \"schematic_component\") {\n return (\n <SchematicComponent\n component={collectElementRefs(element, allElements) as any}\n />\n )\n }\n\n if (element.type === \"schematic_trace\") {\n return (\n <SchematicTrace trace={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_port\") {\n return (\n <SchematicPort port={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_box\") {\n return (\n <SchematicBox box={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_line\") {\n return (\n <SchematicLine line={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_text\") {\n return <SchematicText schematic_text={element} />\n }\n\n if (element.type === \"source_error\") {\n // TODO use the ids on the source error to put this in the right place\n return <RenderError text={element.message} />\n }\n\n return null\n}\n","import { lazy, Suspense } from \"react\"\n\nconst LazyTableViewer = lazy(() =>\n import(\"@tscircuit/table-viewer\").then((m) => ({\n default: m.SoupTableViewer,\n }))\n)\n\nexport const TableViewer = (params: Parameters<typeof LazyTableViewer>[0]) => (\n <Suspense fallback={<div>Loading...</div>}>\n <LazyTableViewer {...params} />\n </Suspense>\n)\n"],"mappings":"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","names":["useState","useEffect","useDebugValue","error","module","a","c","d","b","e","useRef","useEffect","useMemo","useDebugValue","useSyncExternalStoreWithSelector","module","module","module","mapToEllipse","approxUnitArc","vectorAngle","getArcCenter","arcToBezier","module","module","module","module","module","require_svg_path_generator","module","import_react","import_builder","useSyncExternalStoreExports","expected","found","transform","svgPathBounds","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","createDebounce","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","Path","import_builder","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_svg_path_generator","import_jsx_runtime","Path","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","transform","elements"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/parse-svg-path/index.js","../node_modules/abs-svg-path/index.js","../node_modules/svg-arc-to-cubic-bezier/modules/index.js","../node_modules/normalize-svg-path/index.js","../node_modules/is-svg-path/index.js","../node_modules/svg-path-bounds/index.js","../node_modules/debounce/index.js","../node_modules/svg-path-generator/lib/svg-path-generator.js","../node_modules/svg-path-generator/index.js","../src/index.ts","../src/Schematic.tsx","../src/lib/utils/collect-element-refs.ts","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/index.mjs","../node_modules/transformation-matrix/src/applyToPoint.js","../node_modules/transformation-matrix/src/utils.js","../node_modules/transformation-matrix/src/translate.js","../node_modules/transformation-matrix/src/transform.js","../node_modules/transformation-matrix/src/rotate.js","../node_modules/transformation-matrix/src/scale.js","../node_modules/transformation-matrix/src/skew.js","../node_modules/transformation-matrix/src/fromTransformAttribute.autogenerated.js","../src/lib/render-context/index.ts","../src/lib/utils/get-svg-path-bounds.ts","../src/schematic-components/SVGPathComponent.tsx","../src/schematic-components/SimpleResistor.tsx","../src/schematic-components/SimpleCapacitor.tsx","../src/lib/hooks/use-maybe-promise.ts","../src/schematic-components/ProjectComponent.tsx","../src/lib/utils/direction-to-vec.ts","../src/schematic-components/SchematicPort.tsx","../node_modules/react-use-measure/dist/web.js","../src/schematic-components/SchematicText.tsx","../src/schematic-components/SchematicTrace.tsx","../src/schematic-components/RenderError.tsx","../src/schematic-components/SchematicBug.tsx","../src/schematic-components/SimplePowerSource.tsx","../src/schematic-components/SimpleGround.tsx","../src/schematic-components/SimpleInductor.tsx","../src/schematic-components/SimpleDiode.tsx","../src/schematic-components/SchematicComponent.tsx","../src/schematic-components/SchematicBox.tsx","../src/schematic-components/SchematicLine.tsx","../src/schematic-components/SchematicElement.tsx","../src/schematic-components/TableViewer.tsx"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","\nmodule.exports = parse\n\n/**\n * expected argument lengths\n * @type {Object}\n */\n\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}\n\n/**\n * segment pattern\n * @type {RegExp}\n */\n\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig\n\n/**\n * parse an svg path data string. Generates an Array\n * of commands where each command is an Array of the\n * form `[command, arg1, arg2, ...]`\n *\n * @param {String} path\n * @return {Array}\n */\n\nfunction parse(path) {\n\tvar data = []\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase()\n\t\targs = parseValues(args)\n\n\t\t// overloaded moveTo\n\t\tif (type == 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)))\n\t\t\ttype = 'l'\n\t\t\tcommand = command == 'm' ? 'l' : 'L'\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (args.length == length[type]) {\n\t\t\t\targs.unshift(command)\n\t\t\t\treturn data.push(args)\n\t\t\t}\n\t\t\tif (args.length < length[type]) throw new Error('malformed path data')\n\t\t\tdata.push([command].concat(args.splice(0, length[type])))\n\t\t}\n\t})\n\treturn data\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number)\n\treturn numbers ? numbers.map(Number) : []\n}\n","\nmodule.exports = absolutize\n\n/**\n * redefine `path` with absolute coordinates\n *\n * @param {Array} path\n * @return {Array}\n */\n\nfunction absolutize(path){\n\tvar startX = 0\n\tvar startY = 0\n\tvar x = 0\n\tvar y = 0\n\n\treturn path.map(function(seg){\n\t\tseg = seg.slice()\n\t\tvar type = seg[0]\n\t\tvar command = type.toUpperCase()\n\n\t\t// is relative\n\t\tif (type != command) {\n\t\t\tseg[0] = command\n\t\t\tswitch (type) {\n\t\t\t\tcase 'a':\n\t\t\t\t\tseg[6] += x\n\t\t\t\t\tseg[7] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'v':\n\t\t\t\t\tseg[1] += y\n\t\t\t\t\tbreak\n\t\t\t\tcase 'h':\n\t\t\t\t\tseg[1] += x\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tfor (var i = 1; i < seg.length;) {\n\t\t\t\t\t\tseg[i++] += x\n\t\t\t\t\t\tseg[i++] += y\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update cursor state\n\t\tswitch (command) {\n\t\t\tcase 'Z':\n\t\t\t\tx = startX\n\t\t\t\ty = startY\n\t\t\t\tbreak\n\t\t\tcase 'H':\n\t\t\t\tx = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'V':\n\t\t\t\ty = seg[1]\n\t\t\t\tbreak\n\t\t\tcase 'M':\n\t\t\t\tx = startX = seg[1]\n\t\t\t\ty = startY = seg[2]\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tx = seg[seg.length - 2]\n\t\t\t\ty = seg[seg.length - 1]\n\t\t}\n\n\t\treturn seg\n\t})\n}\n","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar TAU = Math.PI * 2;\n\nvar mapToEllipse = function mapToEllipse(_ref, rx, ry, cosphi, sinphi, centerx, centery) {\n var x = _ref.x,\n y = _ref.y;\n\n x *= rx;\n y *= ry;\n\n var xp = cosphi * x - sinphi * y;\n var yp = sinphi * x + cosphi * y;\n\n return {\n x: xp + centerx,\n y: yp + centery\n };\n};\n\nvar approxUnitArc = function approxUnitArc(ang1, ang2) {\n // If 90 degree circular arc, use a constant\n // as derived from http://spencermortensen.com/articles/bezier-circle\n var a = ang2 === 1.5707963267948966 ? 0.551915024494 : ang2 === -1.5707963267948966 ? -0.551915024494 : 4 / 3 * Math.tan(ang2 / 4);\n\n var x1 = Math.cos(ang1);\n var y1 = Math.sin(ang1);\n var x2 = Math.cos(ang1 + ang2);\n var y2 = Math.sin(ang1 + ang2);\n\n return [{\n x: x1 - y1 * a,\n y: y1 + x1 * a\n }, {\n x: x2 + y2 * a,\n y: y2 - x2 * a\n }, {\n x: x2,\n y: y2\n }];\n};\n\nvar vectorAngle = function vectorAngle(ux, uy, vx, vy) {\n var sign = ux * vy - uy * vx < 0 ? -1 : 1;\n\n var dot = ux * vx + uy * vy;\n\n if (dot > 1) {\n dot = 1;\n }\n\n if (dot < -1) {\n dot = -1;\n }\n\n return sign * Math.acos(dot);\n};\n\nvar getArcCenter = function getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp) {\n var rxsq = Math.pow(rx, 2);\n var rysq = Math.pow(ry, 2);\n var pxpsq = Math.pow(pxp, 2);\n var pypsq = Math.pow(pyp, 2);\n\n var radicant = rxsq * rysq - rxsq * pypsq - rysq * pxpsq;\n\n if (radicant < 0) {\n radicant = 0;\n }\n\n radicant /= rxsq * pypsq + rysq * pxpsq;\n radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n\n var centerxp = radicant * rx / ry * pyp;\n var centeryp = radicant * -ry / rx * pxp;\n\n var centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n var centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n\n var vx1 = (pxp - centerxp) / rx;\n var vy1 = (pyp - centeryp) / ry;\n var vx2 = (-pxp - centerxp) / rx;\n var vy2 = (-pyp - centeryp) / ry;\n\n var ang1 = vectorAngle(1, 0, vx1, vy1);\n var ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n\n if (sweepFlag === 0 && ang2 > 0) {\n ang2 -= TAU;\n }\n\n if (sweepFlag === 1 && ang2 < 0) {\n ang2 += TAU;\n }\n\n return [centerx, centery, ang1, ang2];\n};\n\nvar arcToBezier = function arcToBezier(_ref2) {\n var px = _ref2.px,\n py = _ref2.py,\n cx = _ref2.cx,\n cy = _ref2.cy,\n rx = _ref2.rx,\n ry = _ref2.ry,\n _ref2$xAxisRotation = _ref2.xAxisRotation,\n xAxisRotation = _ref2$xAxisRotation === undefined ? 0 : _ref2$xAxisRotation,\n _ref2$largeArcFlag = _ref2.largeArcFlag,\n largeArcFlag = _ref2$largeArcFlag === undefined ? 0 : _ref2$largeArcFlag,\n _ref2$sweepFlag = _ref2.sweepFlag,\n sweepFlag = _ref2$sweepFlag === undefined ? 0 : _ref2$sweepFlag;\n\n var curves = [];\n\n if (rx === 0 || ry === 0) {\n return [];\n }\n\n var sinphi = Math.sin(xAxisRotation * TAU / 360);\n var cosphi = Math.cos(xAxisRotation * TAU / 360);\n\n var pxp = cosphi * (px - cx) / 2 + sinphi * (py - cy) / 2;\n var pyp = -sinphi * (px - cx) / 2 + cosphi * (py - cy) / 2;\n\n if (pxp === 0 && pyp === 0) {\n return [];\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n var _getArcCenter = getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp),\n _getArcCenter2 = _slicedToArray(_getArcCenter, 4),\n centerx = _getArcCenter2[0],\n centery = _getArcCenter2[1],\n ang1 = _getArcCenter2[2],\n ang2 = _getArcCenter2[3];\n\n // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n // 1.0000000001. This causes `segments` to be greater than one, which is an\n // unecessary split, and adds extra points to the bezier curve. To alleviate\n // this issue, we round to 1.0 when the ratio is close to 1.0.\n\n\n var ratio = Math.abs(ang2) / (TAU / 4);\n if (Math.abs(1.0 - ratio) < 0.0000001) {\n ratio = 1.0;\n }\n\n var segments = Math.max(Math.ceil(ratio), 1);\n\n ang2 /= segments;\n\n for (var i = 0; i < segments; i++) {\n curves.push(approxUnitArc(ang1, ang2));\n ang1 += ang2;\n }\n\n return curves.map(function (curve) {\n var _mapToEllipse = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery),\n x1 = _mapToEllipse.x,\n y1 = _mapToEllipse.y;\n\n var _mapToEllipse2 = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery),\n x2 = _mapToEllipse2.x,\n y2 = _mapToEllipse2.y;\n\n var _mapToEllipse3 = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery),\n x = _mapToEllipse3.x,\n y = _mapToEllipse3.y;\n\n return { x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y };\n });\n};\n\nexport default arcToBezier;","'use strict'\r\n\r\nmodule.exports = normalize\r\n\r\nvar arcToCurve = require('svg-arc-to-cubic-bezier')\r\n\r\nfunction normalize(path){\r\n // init state\r\n var prev\r\n var result = []\r\n var bezierX = 0\r\n var bezierY = 0\r\n var startX = 0\r\n var startY = 0\r\n var quadX = null\r\n var quadY = null\r\n var x = 0\r\n var y = 0\r\n\r\n for (var i = 0, len = path.length; i < len; i++) {\r\n var seg = path[i]\r\n var command = seg[0]\r\n\r\n switch (command) {\r\n case 'M':\r\n startX = seg[1]\r\n startY = seg[2]\r\n break\r\n case 'A':\r\n var curves = arcToCurve({\r\n px: x,\r\n py: y,\r\n cx: seg[6],\r\n cy: seg[7],\r\n rx: seg[1],\r\n ry: seg[2],\r\n xAxisRotation: seg[3],\r\n largeArcFlag: seg[4],\r\n sweepFlag: seg[5]\r\n })\r\n\r\n // null-curves\r\n if (!curves.length) continue\r\n\r\n for (var j = 0, c; j < curves.length; j++) {\r\n c = curves[j]\r\n seg = ['C', c.x1, c.y1, c.x2, c.y2, c.x, c.y]\r\n if (j < curves.length - 1) result.push(seg)\r\n }\r\n\r\n break\r\n case 'S':\r\n // default control point\r\n var cx = x\r\n var cy = y\r\n if (prev == 'C' || prev == 'S') {\r\n cx += cx - bezierX // reflect the previous command's control\r\n cy += cy - bezierY // point relative to the current point\r\n }\r\n seg = ['C', cx, cy, seg[1], seg[2], seg[3], seg[4]]\r\n break\r\n case 'T':\r\n if (prev == 'Q' || prev == 'T') {\r\n quadX = x * 2 - quadX // as with 'S' reflect previous control point\r\n quadY = y * 2 - quadY\r\n } else {\r\n quadX = x\r\n quadY = y\r\n }\r\n seg = quadratic(x, y, quadX, quadY, seg[1], seg[2])\r\n break\r\n case 'Q':\r\n quadX = seg[1]\r\n quadY = seg[2]\r\n seg = quadratic(x, y, seg[1], seg[2], seg[3], seg[4])\r\n break\r\n case 'L':\r\n seg = line(x, y, seg[1], seg[2])\r\n break\r\n case 'H':\r\n seg = line(x, y, seg[1], y)\r\n break\r\n case 'V':\r\n seg = line(x, y, x, seg[1])\r\n break\r\n case 'Z':\r\n seg = line(x, y, startX, startY)\r\n break\r\n }\r\n\r\n // update state\r\n prev = command\r\n x = seg[seg.length - 2]\r\n y = seg[seg.length - 1]\r\n if (seg.length > 4) {\r\n bezierX = seg[seg.length - 4]\r\n bezierY = seg[seg.length - 3]\r\n } else {\r\n bezierX = x\r\n bezierY = y\r\n }\r\n result.push(seg)\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction line(x1, y1, x2, y2){\r\n return ['C', x1, y1, x2, y2, x2, y2]\r\n}\r\n\r\nfunction quadratic(x1, y1, cx, cy, x2, y2){\r\n return [\r\n 'C',\r\n x1/3 + (2/3) * cx,\r\n y1/3 + (2/3) * cy,\r\n x2/3 + (2/3) * cx,\r\n y2/3 + (2/3) * cy,\r\n x2,\r\n y2\r\n ]\r\n}\r\n","'use strict'\r\n\r\nmodule.exports = function isPath(str) {\r\n\tif (typeof str !== 'string') return false\r\n\r\n\tstr = str.trim()\r\n\r\n\t// https://www.w3.org/TR/SVG/paths.html#PathDataBNF\r\n\tif (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) return true\r\n\r\n\treturn false\r\n}\r\n","'use strict'\r\n\r\nvar parse = require('parse-svg-path')\r\nvar abs = require('abs-svg-path')\r\nvar normalize = require('normalize-svg-path')\r\nvar isSvgPath = require('is-svg-path')\r\n\r\nmodule.exports = pathBounds\r\n\r\n\r\nfunction pathBounds(path) {\r\n // ES6 string tpl call\r\n if (Array.isArray(path) && path.length === 1 && typeof path[0] === 'string') path = path[0]\r\n\r\n // svg path string\r\n if (typeof path === 'string') {\r\n if (!isSvgPath(path)) throw Error('String is not an SVG path.')\r\n path = parse(path)\r\n }\r\n\r\n if (!Array.isArray(path)) throw Error('Argument should be a string or an array of path segments.')\r\n\r\n path = abs(path)\r\n path = normalize(path)\r\n\r\n if (!path.length) return [0, 0, 0, 0]\r\n\r\n var bounds = [Infinity, Infinity, -Infinity, -Infinity]\r\n\r\n for (var i = 0, l = path.length; i < l; i++) {\r\n var points = path[i].slice(1)\r\n\r\n for (var j = 0; j < points.length; j += 2) {\r\n if (points[j + 0] < bounds[0]) bounds[0] = points[j + 0]\r\n if (points[j + 1] < bounds[1]) bounds[1] = points[j + 1]\r\n if (points[j + 0] > bounds[2]) bounds[2] = points[j + 0]\r\n if (points[j + 1] > bounds[3]) bounds[3] = points[j + 1]\r\n }\r\n }\r\n\r\n return bounds\r\n}\r\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","\n\nfunction SvgPathGenerator(path) {\n if (!(this instanceof SvgPathGenerator)) {\n return new SvgPathGenerator(path);\n }\n\n this.currentPath = (path || '') + ' ';\n this.isRelative = false;\n}\n\n\nmodule.exports = SvgPathGenerator;\n\n\n\nSvgPathGenerator.prototype.toString = function() {\n return this.end();\n};\n\n\nSvgPathGenerator.prototype.moveTo = function() {\n this._appendData('M', arguments);\n return this;\n};\n\n\nSvgPathGenerator.prototype.close = SvgPathGenerator.prototype.closePath = function() {\n this._appendData('Z', []);\n return this;\n};\n\nSvgPathGenerator.prototype.lineTo = function() {\n this._appendData('L', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.horizontalLineTo = function(x) {\n this._appendData('H', [x]);\n return this;\n};\n\nSvgPathGenerator.prototype.verticalLineTo = function(y) {\n this._appendData('V', [y]);\n return this;\n};\n\nSvgPathGenerator.prototype.curveTo = function() {\n this._appendData('C', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.smoothCurveTo = function() {\n this._appendData('S', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.bezierCurveTo = function() {\n this._appendData('Q', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.smoothBezierCurveTo = function() {\n this._appendData('T', arguments);\n return this;\n};\n\nSvgPathGenerator.prototype.ellipticalArc = function() {\n this._appendData('A', arguments);\n return this;\n};\n\n\nSvgPathGenerator.prototype.relative = function() {\n this.isRelative = true;\n return this;\n};\n\nSvgPathGenerator.prototype.end = function() {\n return this.currentPath.trim();\n};\n\n\nSvgPathGenerator.prototype._appendData = function(symbol, args) {\n\n args = Array.prototype.slice.call(args);\n\n if(this.isRelative) {\n symbol = symbol.toLowerCase();\n this.isRelative = false;\n }\n\n this.currentPath += symbol + ' ' + args.join(' ') + ' ';\n};\n\n\n","\nmodule.exports = require('./lib/svg-path-generator');\n\n","export * from \"./Schematic\"\n","import { useCallback, useEffect, useState } from \"react\"\nimport { ProjectComponent } from \"schematic-components\"\nimport { SuperGrid, toMMSI } from \"react-supergrid\"\nimport {\n AnyElement,\n createProjectBuilder,\n createProjectFromElements,\n findBoundsAndCenter,\n transformSchematicElement,\n} from \"@tscircuit/builder\"\nimport { createRoot } from \"@tscircuit/react-fiber\"\nimport { SchematicElement } from \"schematic-components/SchematicElement\"\nimport { collectElementRefs } from \"lib/utils/collect-element-refs\"\nimport { useMouseMatrixTransform } from \"use-mouse-matrix-transform\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { identity, compose, scale, translate } from \"transformation-matrix\"\nimport { useRenderContext } from \"lib/render-context\"\nimport useMeasure from \"react-use-measure\"\nimport { TableViewer } from \"./schematic-components/TableViewer\"\n\nconst fallbackRender =\n (elm) =>\n ({ error, resetErrorBoundary }: any) => {\n return (\n <div style={{ color: \"red\" }}>\n error rendering {elm.type}: {error.toString()}\n </div>\n )\n }\n\nconst toMMSINeg = (v: number, z: number) =>\n v >= 0 ? toMMSI(v, z) : `-${toMMSI(-v, z)}`\n\nexport const Schematic = ({\n children,\n elements: initialElements,\n soup: initialSoup,\n style,\n showTable,\n}: {\n children?: any\n\n /** @deprecated */\n elements?: any\n\n soup?: any\n\n style?: any\n\n showTable?: boolean\n}) => {\n initialSoup = initialSoup ?? initialElements ?? []\n\n const [elements, setElements] = useState<any>(initialSoup ?? [])\n const [project, setProject] = useState<any>(null)\n const setCameraTransform = useRenderContext((s) => s.setCameraTransform)\n const cameraTransform = useRenderContext((s) => s.camera_transform)\n const [boundsRef, bounds] = useMeasure()\n const { ref, setTransform } = useMouseMatrixTransform({\n onSetTransform: (transform) => {\n setCameraTransform(transform)\n },\n // initialTransform: compose(scale(100, 100, 0, 0)),\n })\n const setElementsAndCamera = useCallback(\n (elements: Array<AnyElement>) => {\n const elmBounds = (ref.current as HTMLDivElement).getBoundingClientRect()\n\n const { center, width, height } = elements.some((e) =>\n e.type.startsWith(\"schematic_\")\n )\n ? findBoundsAndCenter(\n elements.filter((e) => e.type.startsWith(\"schematic_\"))\n )\n : { center: { x: 0, y: 0 }, width: 0.001, height: 0.001 }\n\n const scaleFactor = Math.min(\n (elmBounds.width ?? 0) / width,\n (elmBounds.height ?? 0) / height,\n 100\n )\n setElements(elements)\n setProject(createProjectFromElements(elements))\n setTransform(\n compose(\n translate((elmBounds.width ?? 0) / 2, (elmBounds.height ?? 0) / 2),\n // translate(100, 0),\n scale(scaleFactor, scaleFactor, 0, 0),\n translate(-center.x, -center.y)\n )\n )\n },\n [setElements, setTransform]\n )\n\n useEffect(() => {\n if (initialSoup.length > 0) {\n setElementsAndCamera(initialSoup)\n return\n }\n const projectBuilder = createProjectBuilder()\n createRoot()\n .render(children, projectBuilder as any)\n .then(async (elements) => {\n setElementsAndCamera(elements)\n })\n .catch((e) => {\n console.error(\"ERROR RENDERING CIRCUIT\")\n throw e\n })\n }, [children])\n\n return (\n <>\n <div\n style={{\n width: \"100%\",\n backgroundColor: \"rgba(255,255,255,0)\",\n minHeight: 200,\n overflow: \"hidden\",\n position: \"relative\",\n cursor: \"grab\",\n ...style,\n }}\n ref={(el) => {\n ref.current = el\n boundsRef(el)\n }}\n >\n <SuperGrid\n stringifyCoord={(x, y, z) => {\n if (z === 0) return \"\"\n return `${toMMSINeg(x, z)}, ${toMMSINeg(y, z)}`\n }}\n width={bounds.width}\n height={bounds.height}\n transform={cameraTransform}\n />\n {elements?.map((elm, i) => (\n <ErrorBoundary key={i} fallbackRender={fallbackRender(elm)}>\n <SchematicElement\n element={elm}\n allElements={elements}\n key={JSON.stringify(elm)}\n />\n </ErrorBoundary>\n ))}\n </div>\n {showTable !== false && elements && <TableViewer elements={elements} />}\n </>\n )\n}\n","import { AnyElement } from \"@tscircuit/builder\"\n\nexport const collectElementRefs = (elm: AnyElement, allElms: AnyElement[]) => {\n const source_component = allElms.find(\n (e) =>\n e.type === \"source_component\" &&\n e.source_component_id === (elm as any).source_component_id\n )\n if (\n [\n \"schematic_component\",\n \"schematic_trace\",\n \"schematic_port\",\n \"schematic_box\",\n \"schematic_line\",\n ].includes(elm.type)\n ) {\n const schematic_children = allElms.filter(\n (e) =>\n \"schematic_component_id\" in e &&\n e.schematic_component_id === (elm as any).schematic_component_id\n )\n\n return {\n schematic_children,\n schematic: elm,\n source: source_component,\n }\n }\n return null\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (nextState !== state) {\n const previousState = state;\n state = replace ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => listeners.clear();\n const api = { setState, getState, subscribe, destroy };\n state = createState(\n setState,\n getState,\n api\n );\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore as default };\n","import createStore__default from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nexport { default as createStore } from 'zustand/vanilla';\nimport { useDebugValue } from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = typeof createState === \"function\" ? createStore__default(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar create$1 = create;\n\nexport { create$1 as default, useStore };\n","/**\n * Calculate a point transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param point {Point} Point\n * @returns {Point} Point\n */\nexport function applyToPoint (matrix, point) {\n return Array.isArray(point)\n ? [\n matrix.a * point[0] + matrix.c * point[1] + matrix.e,\n matrix.b * point[0] + matrix.d * point[1] + matrix.f\n ]\n : {\n x: matrix.a * point.x + matrix.c * point.y + matrix.e,\n y: matrix.b * point.x + matrix.d * point.y + matrix.f\n }\n}\n\n/**\n * Calculate an array of points transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param points {Point[]} Array of point\n * @returns {Point[]} Array of point\n */\nexport function applyToPoints (matrix, points) {\n return points.map(point => applyToPoint(matrix, point))\n}\n","export function isUndefined (val) {\n return typeof val === 'undefined'\n}\n\nexport function isNumeric (n) {\n return typeof n === 'number' &&\n !Number.isNaN(n) &&\n Number.isFinite(n)\n}\n\nexport function isObject (obj) {\n return typeof obj === 'object' &&\n obj !== null &&\n !Array.isArray(obj)\n}\n\nexport function matchesShape (obj, keys) {\n return keys.every(key => key in obj)\n}\n","/**\n * Calculate a translate matrix\n * @param tx {number} Translation on axis x\n * @param [ty = 0] {number} Translation on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function translate (tx, ty = 0) {\n return {\n a: 1,\n c: 0,\n e: tx,\n b: 0,\n d: 1,\n f: ty\n }\n}\n","/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function transform (...matrices) {\n matrices = Array.isArray(matrices[0]) ? matrices[0] : matrices\n\n const multiply = (m1, m2) => {\n return {\n a: m1.a * m2.a + m1.c * m2.b,\n c: m1.a * m2.c + m1.c * m2.d,\n e: m1.a * m2.e + m1.c * m2.f + m1.e,\n b: m1.b * m2.a + m1.d * m2.b,\n d: m1.b * m2.c + m1.d * m2.d,\n f: m1.b * m2.e + m1.d * m2.f + m1.f\n }\n }\n\n switch (matrices.length) {\n case 0:\n throw new Error('no matrices provided')\n\n case 1:\n return matrices[0]\n\n case 2:\n return multiply(matrices[0], matrices[1])\n\n default: {\n const [m1, m2, ...rest] = matrices\n const m = multiply(m1, m2)\n return transform(m, ...rest)\n }\n }\n}\n\n/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function compose (...matrices) {\n return transform(...matrices)\n}\n","import { isUndefined } from './utils'\nimport { translate } from './translate'\nimport { transform } from './transform'\n\nconst { cos, sin, PI } = Math\n/**\n * Calculate a rotation matrix\n * @param angle {number} Angle in radians\n * @param [cx] {number} If (cx,cy) are supplied the rotate is about this point\n * @param [cy] {number} If (cx,cy) are supplied the rotate is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function rotate (angle, cx, cy) {\n const cosAngle = cos(angle)\n const sinAngle = sin(angle)\n const rotationMatrix = {\n a: cosAngle,\n c: -sinAngle,\n e: 0,\n b: sinAngle,\n d: cosAngle,\n f: 0\n }\n if (isUndefined(cx) || isUndefined(cy)) {\n return rotationMatrix\n }\n\n return transform([\n translate(cx, cy),\n rotationMatrix,\n translate(-cx, -cy)\n ])\n}\n\n/**\n * Calculate a rotation matrix with a DEG angle\n * @param angle {number} Angle in degree\n * @param [cx] {number} If (cx,cy) are supplied the rotate is about this point\n * @param [cy] {number} If (cx,cy) are supplied the rotate is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function rotateDEG (angle, cx = undefined, cy = undefined) {\n return rotate(angle * PI / 180, cx, cy)\n}\n","import { isUndefined } from './utils'\nimport { translate } from './translate'\nimport { transform } from './transform'\n\n/**\n * Calculate a scaling matrix\n * @param sx {number} Scaling on axis x\n * @param [sy = sx] {number} Scaling on axis y (default sx)\n * @param [cx] {number} If (cx,cy) are supplied the scaling is about this point\n * @param [cy] {number} If (cx,cy) are supplied the scaling is about this point\n * @returns {Matrix} Affine Matrix\n */\nexport function scale (sx, sy = undefined, cx = undefined, cy = undefined) {\n if (isUndefined(sy)) sy = sx\n\n const scaleMatrix = {\n a: sx,\n c: 0,\n e: 0,\n b: 0,\n d: sy,\n f: 0\n }\n\n if (isUndefined(cx) || isUndefined(cy)) {\n return scaleMatrix\n }\n\n return transform([\n translate(cx, cy),\n scaleMatrix,\n translate(-cx, -cy)\n ])\n}\n","// https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew\nconst { tan } = Math\n\n/**\n * Calculate a skew matrix\n * @param ax {number} Skew on axis x\n * @param ay {number} Skew on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function skew (ax, ay) {\n return {\n a: 1,\n c: tan(ax),\n e: 0,\n b: tan(ay),\n d: 1,\n f: 0\n }\n}\n\n/**\n * Calculate a skew matrix using DEG angles\n * @param ax {number} Skew on axis x\n * @param ay {number} Skew on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function skewDEG (ax, ay) {\n return skew(ax * Math.PI / 180, ay * Math.PI / 180)\n}\n","// Generated by Peggy 3.0.0.\n//\n// https://peggyjs.org/\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { transformList: peg$parsetransformList };\n var peg$startRuleFunction = peg$parsetransformList;\n\n var peg$c0 = \"matrix\";\n var peg$c1 = \"(\";\n var peg$c2 = \")\";\n var peg$c3 = \"translate\";\n var peg$c4 = \"scale\";\n var peg$c5 = \"rotate\";\n var peg$c6 = \"skewX\";\n var peg$c7 = \"skewY\";\n var peg$c8 = \",\";\n var peg$c9 = \".\";\n\n var peg$r0 = /^[eE]/;\n var peg$r1 = /^[+\\-]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"matrix\", false);\n var peg$e1 = peg$literalExpectation(\"(\", false);\n var peg$e2 = peg$literalExpectation(\")\", false);\n var peg$e3 = peg$literalExpectation(\"translate\", false);\n var peg$e4 = peg$literalExpectation(\"scale\", false);\n var peg$e5 = peg$literalExpectation(\"rotate\", false);\n var peg$e6 = peg$literalExpectation(\"skewX\", false);\n var peg$e7 = peg$literalExpectation(\"skewY\", false);\n var peg$e8 = peg$literalExpectation(\",\", false);\n var peg$e9 = peg$otherExpectation(\"fractionalConstant\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$classExpectation([\"e\", \"E\"], false, false);\n var peg$e12 = peg$classExpectation([\"+\", \"-\"], false, false);\n var peg$e13 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e14 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(ts) { return ts; };\n var peg$f1 = function(t, ts) { return t.concat(ts) };\n var peg$f2 = function(a, b, c, d, e, f) {\n return [{type: 'matrix', a: a, b: b, c: c, d: d, e: e, f: f}];\n };\n var peg$f3 = function(tx, ty) {\n var t = {type: 'translate', tx: tx};\n if (ty) t.ty = ty;\n return [t];\n };\n var peg$f4 = function(sx, sy) {\n var s = {type:'scale', sx: sx};\n if (sy) s.sy = sy;\n return [s];\n };\n var peg$f5 = function(angle, c) {\n var r = {type:'rotate', angle: angle};\n if (c) {\n r.cx = c[0];\n r.cy = c[1];\n }\n return [r];\n };\n var peg$f6 = function(angle) {\n return [{type: 'skewX', angle: angle}];\n };\n var peg$f7 = function(angle) {\n return [{type: 'skewY', angle: angle}];\n };\n var peg$f8 = function(f) { return parseFloat(f.join(\"\")); };\n var peg$f9 = function(i) { return parseInt(i.join(\"\")); };\n var peg$f10 = function(n) { return n; };\n var peg$f11 = function(n1, n2) { return [n1, n2]; };\n var peg$f12 = function(ds) { return ds.join(\"\"); };\n var peg$f13 = function(f, e) { return [f, e || null].join(\"\")};\n var peg$f14 = function(d, e) { return [d, e].join(\"\")};\n var peg$f15 = function(d1, d2) { return [d1 ? d1.join(\"\") : null, \".\", d2.join(\"\")].join(\"\"); };\n var peg$f16 = function(d) { return d.join(\"\"); };\n var peg$f17 = function(s, d) { return ['e', s, d.join(\"\")].join(\"\") };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsetransformList() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n s2 = peg$parsetransforms();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n\n return s0;\n }\n\n function peg$parsetransforms() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsetransform();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsecommaWsp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsecommaWsp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetransforms();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsetransform();\n }\n\n return s0;\n }\n\n function peg$parsetransform() {\n var s0;\n\n s0 = peg$parsematrix();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetranslate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsescale();\n if (s0 === peg$FAILED) {\n s0 = peg$parserotate();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewX();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewY();\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsematrix() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWsp();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsenumber();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsecommaWsp();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsenumber();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsecommaWsp();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsenumber();\n if (s11 !== peg$FAILED) {\n s12 = peg$parsecommaWsp();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsenumber();\n if (s13 !== peg$FAILED) {\n s14 = peg$parsecommaWsp();\n if (s14 !== peg$FAILED) {\n s15 = peg$parsenumber();\n if (s15 !== peg$FAILED) {\n s16 = [];\n s17 = peg$parsewsp();\n while (s17 !== peg$FAILED) {\n s16.push(s17);\n s17 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s17 = peg$c2;\n peg$currPos++;\n } else {\n s17 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s17 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s5, s7, s9, s11, s13, s15);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetranslate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c3) {\n s1 = peg$c3;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsescale() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c4) {\n s1 = peg$c4;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserotate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c5) {\n s1 = peg$c5;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspTwoNumbers();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c2;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseskewX() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseskewY() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsefloatingPointConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parseintegerConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsecommaWspNumber() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecommaWspTwoNumbers() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecommaWsp();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsenumber();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecommaWsp() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecomma();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomma();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsecomma() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s0 = peg$c8;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parseintegerConstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsefloatingPointConstant() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsefractionalConstant();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseexponent();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseexponent();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsefractionalConstant() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedigitSequence();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parseexponent() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsedigitSequence();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesign() {\n var s0;\n\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n\n return s0;\n }\n\n function peg$parsedigitSequence() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parsedigit();\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedigit();\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedigit() {\n var s0;\n\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parsewsp() {\n var s0;\n\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import createStore from \"zustand\"\nimport { Matrix, compose, scale } from \"transformation-matrix\"\n\ninterface RenderContextState {\n camera_transform: Matrix\n setCameraTransform: (transform: Matrix) => void\n}\n\nexport const useRenderContext = createStore<RenderContextState>((set, get) => ({\n camera_transform: compose(scale(100, 100, 0, 0)),\n setCameraTransform: (transform: Matrix) =>\n set({ camera_transform: transform }),\n}))\n\nexport const useCameraTransform = () =>\n useRenderContext((s) => s.camera_transform)\n","import svgPathBounds from \"svg-path-bounds\"\n\nexport function getSVGPathBounds(ds: string[] | string) {\n if (typeof ds === \"string\") ds = [ds]\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity\n\n for (const d of ds) {\n const [left, top, right, bottom] = svgPathBounds(d)\n\n minX = Math.min(left, minX)\n maxX = Math.max(right, maxX)\n minY = Math.min(top, minY)\n maxY = Math.max(bottom, maxY)\n }\n\n return { minX, maxX, minY, maxY, width: maxX - minX, height: maxY - minY }\n}\n\nexport default getSVGPathBounds\n","import { useCameraTransform } from \"lib/render-context\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\nimport { applyToPoint } from \"transformation-matrix\"\n\ninterface Props {\n rotation: number\n center: { x: number; y: number }\n size: { width: number; height: number }\n paths: Array<{\n strokeWidth: number\n stroke: string\n d: string\n }>\n}\n\nexport const SVGPathComponent = ({ size, center, rotation, paths }: Props) => {\n const ct = useCameraTransform()\n const pathBounds = getSVGPathBounds(paths.map((p) => p.d))\n // Margin in SVG Space\n const badRatio =\n Math.abs(pathBounds.width / pathBounds.height - size.width / size.height) >\n 0.01\n if (badRatio) {\n // console.warn(\n // `Ratio doesn't match for component. ${pathBounds.width}:${pathBounds.height} is not close to ${size.width}:${size.height}`\n // )\n }\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const absoluteCenter = applyToPoint(ct, center)\n const absoluteSize = {\n width: Math.max(1, size.width * ct.a),\n height: Math.max(1, size.height * ct.d),\n }\n\n return (\n <svg\n style={{\n position: \"absolute\",\n transform: rotation === 0 ? \"\" : `rotate(${rotation}rad)`,\n left: absoluteCenter.x - absoluteSize.width / 2,\n top: absoluteCenter.y - absoluteSize.height / 2,\n // backgroundColor: badRatio ? \"rgba(255, 0, 0, 0.5)\" : \"transparent\",\n }}\n overflow=\"visible\"\n width={absoluteSize.width}\n height={absoluteSize.height}\n viewBox={`${pathBounds.minX} ${pathBounds.minY} ${pathBounds.width} ${pathBounds.height}`}\n >\n {paths.map((p, i) => (\n <path\n key={i}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeWidth={2 * (p.strokeWidth || 1)}\n stroke={p.stroke || \"red\"}\n d={p.d}\n />\n ))}\n </svg>\n )\n}\n\nexport default SVGPathComponent\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleResistor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleResistor = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n d: \"M 0 15 l 10 0 l 0 -6 l 20 0 l 0 12 l -20 0 l 0 -6 m 20 0 l 10 0\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleResistor\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleCapacitor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleCapacitor = ({\n component: { source, schematic },\n}: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n { stroke: \"red\", strokeWidth: 1, d: \"M 0 15 l 12 0\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 12 0 l 0 30\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 18 0 l 0 30\" },\n { stroke: \"red\", strokeWidth: 1, d: \"M 18 15 l 12 0\" },\n ]}\n />\n )\n}\n\nexport default SimpleCapacitor\n","import { useEffect, useState } from \"react\"\n\nexport const useMaybePromise = <T>(promise: Promise<T> | T): T | null => {\n const [state, setState] = useState<T | null>(null)\n useEffect(() => {\n if (promise instanceof Promise) {\n promise.then(setState)\n } else {\n setState(promise)\n }\n }, [promise])\n return state\n}\nexport default useMaybePromise\n","import { useMaybePromise } from \"lib/hooks\"\nimport { ProjectClass } from \"@tscircuit/builder\"\nimport * as Types from \"lib/types\"\nimport * as Components from \"./\"\n\ninterface Props {\n project: Types.Project | Promise<Types.Project>\n}\n\n/**\n * @deprecated use SchematicElement instead because we're most likely\n * deprecating projects\n */\nexport const ProjectComponent = ({ project: $project }: Props) => {\n const project = useMaybePromise($project)\n\n if (!project) return <span>loading</span>\n\n const projectClass = new ProjectClass(project as any)\n\n return (\n <>\n {project.schematic_components.map((schematic_component) => (\n <Components.SchematicComponent\n key={schematic_component.schematic_component_id}\n component={{\n source: projectClass.getSourceComponent(\n schematic_component.source_component_id\n ),\n schematic: schematic_component,\n }}\n />\n ))}\n {project.schematic_ports.map((schematic_port) => (\n <Components.SchematicPort\n key={schematic_port.schematic_port_id}\n port={{\n source: projectClass.getSourcePort(\n schematic_port.schematic_port_id\n ),\n schematic: schematic_port,\n }}\n />\n ))}\n {project.schematic_traces.map((schematic_trace) => (\n <Components.SchematicTrace\n key={schematic_trace.schematic_trace_id}\n trace={{\n source: projectClass.getSourceTrace(\n schematic_trace.source_trace_id\n ),\n schematic: schematic_trace,\n }}\n />\n ))}\n {project.schematic_texts.map((schematic_text) => (\n <Components.SchematicText\n key={schematic_text.schematic_text_id}\n schematic_text={schematic_text}\n />\n ))}\n </>\n )\n}\n\nexport default ProjectComponent\n","export const directionToVec = (direction: \"up\" | \"down\" | \"left\" | \"right\") => {\n if (direction === \"up\") return { x: 0, y: -1 }\n else if (direction === \"down\") return { x: 0, y: 1 }\n else if (direction === \"left\") return { x: -1, y: 0 }\n else if (direction === \"right\") return { x: 1, y: 0 }\n else throw new Error(\"Invalid direction\")\n}\n\nexport const vecToDirection = ({ x, y }: { x: number; y: number }) => {\n if (x > y) y = 0\n if (y > x) x = 0\n if (x > 0 && y === 0) return \"right\"\n else if (x < 0 && y === 0) return \"left\"\n else if (x === 0 && y > 0) return \"down\"\n else if (x === 0 && y < 0) return \"up\"\n else throw new Error(`Invalid vector for direction conversion (${x}, ${y})`)\n}\n\nexport const rotateClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"right\"\n else if (direction === \"right\") return \"down\"\n else if (direction === \"down\") return \"left\"\n else if (direction === \"left\") return \"up\"\n}\n\nexport const rotateCounterClockwise = (\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n) => {\n if (direction === \"up\") return \"left\"\n else if (direction === \"left\") return \"down\"\n else if (direction === \"down\") return \"right\"\n else if (direction === \"right\") return \"up\"\n}\n\nexport const rotateDirection = (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n num90DegreeClockwiseTurns: number\n) => {\n while (num90DegreeClockwiseTurns > 0) {\n direction = rotateClockwise(direction)\n num90DegreeClockwiseTurns--\n }\n while (num90DegreeClockwiseTurns < 0) {\n direction = rotateCounterClockwise(direction)\n num90DegreeClockwiseTurns++\n }\n return direction\n}\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \"./\"\n\ninterface Props {\n port: {\n source: Type.SourcePort\n schematic: Type.SchematicPort\n }\n}\n\nexport const SchematicPort = ({ port: { source, schematic } }: Props) => {\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={schematic.center}\n size={{ width: 0.2, height: 0.2 }}\n paths={[\n {\n stroke: \"blue\",\n strokeWidth: 1,\n d: \"M 0 0 l 10 0 l 0 10 l -10 0 z\",\n },\n schematic.facing_direction\n ? {\n stroke: \"blue\",\n strokeWidth: 0.5,\n d: `M 5 5 l ${directionToVec(schematic.facing_direction).x * 7} ${\n directionToVec(schematic.facing_direction).y * 7\n }`,\n }\n : null,\n ].filter(Boolean)}\n />\n )\n}\n\nexport default SchematicPort\n","import { useState, useRef, useEffect, useMemo } from 'react';\nimport createDebounce from 'debounce';\n\nfunction useMeasure(_temp) {\n let {\n debounce,\n scroll,\n polyfill,\n offsetSize\n } = _temp === void 0 ? {\n debounce: 0,\n scroll: false,\n offsetSize: false\n } : _temp;\n const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);\n\n if (!ResizeObserver) {\n throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');\n }\n\n const [bounds, set] = useState({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0\n }); // keep all state in a ref\n\n const state = useRef({\n element: null,\n scrollContainers: null,\n resizeObserver: null,\n lastBounds: bounds\n }); // set actual debounce values early, so effects know if they should react accordingly\n\n const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;\n const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted\n\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return () => void (mounted.current = false);\n }); // memoize handlers, so event-listeners know when they should update\n\n const [forceRefresh, resizeChange, scrollChange] = useMemo(() => {\n const callback = () => {\n if (!state.current.element) return;\n const {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n } = state.current.element.getBoundingClientRect();\n const size = {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n };\n\n if (state.current.element instanceof HTMLElement && offsetSize) {\n size.height = state.current.element.offsetHeight;\n size.width = state.current.element.offsetWidth;\n }\n\n Object.freeze(size);\n if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);\n };\n\n return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];\n }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers\n\n function removeListeners() {\n if (state.current.scrollContainers) {\n state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));\n state.current.scrollContainers = null;\n }\n\n if (state.current.resizeObserver) {\n state.current.resizeObserver.disconnect();\n state.current.resizeObserver = null;\n }\n } // add scroll-listeners / observers\n\n\n function addListeners() {\n if (!state.current.element) return;\n state.current.resizeObserver = new ResizeObserver(scrollChange);\n state.current.resizeObserver.observe(state.current.element);\n\n if (scroll && state.current.scrollContainers) {\n state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {\n capture: true,\n passive: true\n }));\n }\n } // the ref we expose to the user\n\n\n const ref = node => {\n if (!node || node === state.current.element) return;\n removeListeners();\n state.current.element = node;\n state.current.scrollContainers = findScrollContainers(node);\n addListeners();\n }; // add general event listeners\n\n\n useOnWindowScroll(scrollChange, Boolean(scroll));\n useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners\n\n useEffect(() => {\n removeListeners();\n addListeners();\n }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts\n\n useEffect(() => removeListeners, []);\n return [ref, bounds, forceRefresh];\n} // Adds native resize listener to window\n\n\nfunction useOnWindowResize(onWindowResize) {\n useEffect(() => {\n const cb = onWindowResize;\n window.addEventListener('resize', cb);\n return () => void window.removeEventListener('resize', cb);\n }, [onWindowResize]);\n}\n\nfunction useOnWindowScroll(onScroll, enabled) {\n useEffect(() => {\n if (enabled) {\n const cb = onScroll;\n window.addEventListener('scroll', cb, {\n capture: true,\n passive: true\n });\n return () => void window.removeEventListener('scroll', cb, true);\n }\n }, [onScroll, enabled]);\n} // Returns a list of scroll offsets\n\n\nfunction findScrollContainers(element) {\n const result = [];\n if (!element || element === document.body) return result;\n const {\n overflow,\n overflowX,\n overflowY\n } = window.getComputedStyle(element);\n if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);\n return [...result, ...findScrollContainers(element.parentElement)];\n} // Checks if element boundaries are equal\n\n\nconst keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];\n\nconst areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);\n\nexport { useMeasure as default };\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\nimport { useCameraTransform } from \"lib/render-context\"\nimport { applyToPoint } from \"transformation-matrix\"\nimport useMeasure from \"react-use-measure\"\n\ninterface Props {\n schematic_text: Type.SchematicText\n}\n\nexport const SchematicText = ({ schematic_text }: Props) => {\n const ct = useCameraTransform()\n const { text, position, anchor } = schematic_text\n const tPos = applyToPoint(ct, position)\n const [boundsRef, bounds] = useMeasure()\n let offset = [0, 0]\n if (anchor === \"center\") {\n offset = [-bounds.width / 2, -bounds.height / 2]\n } else if (anchor === \"left\") {\n offset = [0, -bounds.height / 2]\n } else if (anchor === \"right\") {\n offset = [-bounds.width, -bounds.height / 2]\n }\n\n return (\n <div\n ref={boundsRef}\n style={{\n fontFamily: \"'IBM Plex Mono', monospace\",\n position: \"absolute\",\n left: tPos.x + offset[0],\n top: tPos.y + offset[1],\n }}\n >\n {text}\n </div>\n )\n}\n\nexport default SchematicText\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\nimport RenderError from \"./RenderError\"\n\ninterface Props {\n trace: {\n source: Type.SourceTrace\n schematic: Type.SchematicTrace\n }\n}\n\nexport const SchematicTrace = ({ trace: { source, schematic } }: Props) => {\n const edges = schematic.edges\n if (edges.length === 0) {\n return (\n <RenderError text={`Route with 0 edges (${source.source_trace_id})`} />\n )\n }\n const path = Path()\n for (let i = 0; i < edges.length; i++) {\n path.moveTo(edges[i].from.x, edges[i].from.y)\n path.lineTo(edges[i].to.x, edges[i].to.y)\n }\n const d = path.toString()\n const pathBounds = getSVGPathBounds(d)\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const center = {\n x: pathBounds.minX + pathBounds.width / 2,\n y: pathBounds.minY + pathBounds.height / 2,\n }\n return (\n <SVGPathComponent\n rotation={0}\n center={center}\n size={pathBounds}\n paths={[\n {\n stroke: \"green\",\n strokeWidth: 0.02,\n d,\n },\n ]}\n />\n )\n}\n\nexport default SchematicTrace\n","interface Props {\n text: string\n}\n\nexport default ({ text }: Props) => {\n return (\n <div\n style={{\n position: \"fixed\",\n backgroundColor: \"red\",\n color: \"white\",\n fontSize: 14,\n fontFamily: \"sans-serif\",\n padding: 5,\n right: 0,\n top: 0,\n opacity: 0.75,\n }}\n >\n {text}\n </div>\n )\n}\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\nimport range from \"lodash/range\"\nimport {\n getPortPosition,\n getPortArrangementSize,\n getPortIndices,\n} from \"@tscircuit/builder\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\ninterface Props {\n component: {\n source: Type.SimpleBug\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SchematicBug = ({ component: { source, schematic } }: Props) => {\n const port_arrangement = {\n top_size: 0,\n bottom_size: 0,\n ...schematic.port_arrangement,\n }\n // const port_labels = schematic.port_labels!\n let bugw = schematic.size.width // bug width\n let bugh = schematic.size.height\n const { total_ports, width, height } =\n getPortArrangementSize(port_arrangement)\n const port_indices = getPortIndices(port_arrangement)\n\n // TODO remove, this seems to be due to a builder bug\n if (isNaN(bugw)) bugw = width\n if (isNaN(bugh)) bugh = height\n // TODO throw if schematic.size doesn't match computed port_arrangement size\n\n const paths = [\n {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: `M ${-bugw / 2} ${-bugh / 2} L ${bugw / 2} ${-bugh / 2} L ${\n bugw / 2\n } ${bugh / 2} L ${-bugw / 2} ${bugh / 2}Z`,\n },\n ...port_indices.map((portNum) => {\n const pos = getPortPosition(port_arrangement, portNum)\n\n const x2 =\n pos.side === \"left\"\n ? -bugw / 2\n : pos.side === \"right\"\n ? bugw / 2\n : pos.x\n const y2 =\n pos.side === \"top\"\n ? -bugh / 2\n : pos.side === \"bottom\"\n ? bugh / 2\n : pos.y\n\n return {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: `M ${pos.x} ${pos.y} L ${x2} ${y2}`,\n }\n }),\n ]\n\n const actualSize = getSVGPathBounds(paths.map((p) => p.d).join(\" \"))\n const actualCenter = {\n x: schematic.center.x + (actualSize.minX + actualSize.maxX) / 2,\n y: schematic.center.y + (actualSize.minY + actualSize.maxY) / 2,\n }\n\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={actualCenter}\n size={actualSize}\n paths={paths}\n />\n )\n}\n\nexport default SchematicBug\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimplePowerSource\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimplePowerSource = ({\n component: { source, schematic },\n}: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n d: \"M 0 -17 L 0 -3 M -8 3 L 8 3 M 0 17 L 0 3 M -12 -3 L 12 -3\",\n },\n ]}\n />\n )\n}\n\nexport default SimplePowerSource\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleGround\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleGround = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.7,\n d: \"M -3 3 L 3 3 M -6 0 L 6 0 M -9 -3 L 9 -3 M 0 -3 L 0 -12\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleGround\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleInductor\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleInductor = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 1,\n // https://commons.wikimedia.org/wiki/File:Electrical_symbols_library.svg\n d: \"m 371,710.41665 h -14 c -0.0421,-16.39898 -14.02104,-16.39898 -14,0 -0.021,-16.399 -14.04182,-16.34072 -14,0 -2.6e-4,-16.45722 -14.04236,-16.45722 -14,0 2.8e-4,-16.3407 -13.97896,-16.39898 -14,0 -0.0421,-16.39898 -13.91338,-16.39898 -13.91338,0 H 273\",\n },\n ]}\n />\n )\n}\n\nexport default SimpleInductor\n","import * as Type from \"lib/types\"\nimport SVGPathComponent from \"./SVGPathComponent\"\n\ninterface Props {\n component: {\n source: Type.SimpleDiode\n schematic: Type.SchematicComponent\n }\n}\n\nexport const SimpleDiode = ({ component: { source, schematic } }: Props) => {\n return (\n <SVGPathComponent\n rotation={schematic.rotation}\n center={schematic.center}\n size={schematic.size}\n paths={[\n { stroke: \"red\", strokeWidth: 2, d: \"M 0,0 H 21\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,0 H 59\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,0 L 21 14 V -14 Z\" },\n { stroke: \"red\", strokeWidth: 2, d: \"M 49,-14 V 14\" },\n // For LEDs\n // {\n // stroke: \"red\",\n // strokeWidth: 2,\n // d: \"M 35 -32 l 7 5.25 l 1.75 -9.625 z m 3.5 2.625 l -5.25 7\",\n // },\n // {\n // stroke: \"red\",\n // strokeWidth: 2,\n // d: \"M 52 -26 l 7 5.25 l 1.75 -9.625 z m 3.5 2.625 l -5.25 7\",\n // },\n ]}\n />\n )\n}\n\nexport default SimpleDiode\n","import * as Type from \"lib/types\"\nimport * as Component from \"./\"\n\ninterface Props {\n component: {\n source: Type.SourceComponent\n schematic: Type.SchematicComponent\n schematic_children: any[]\n }\n}\n\n/**\n * @deprecated ftype-style rendering is being deprecated in favor of the builder\n * generating schematic lines directly\n */\nexport const SchematicComponent = ({ component }: Props) => {\n const { source, schematic } = component\n switch (source.ftype) {\n case \"simple_resistor\": {\n return <Component.SimpleResistor component={{ source, schematic }} />\n }\n case \"simple_capacitor\": {\n return <Component.SimpleCapacitor component={{ source, schematic }} />\n }\n case \"simple_power_source\": {\n return <Component.SimplePowerSource component={{ source, schematic }} />\n }\n case \"simple_ground\": {\n return <Component.SimpleGround component={{ source, schematic }} />\n }\n case \"simple_inductor\": {\n return <Component.SimpleInductor component={{ source, schematic }} />\n }\n case \"simple_bug\": {\n return <Component.SchematicBug component={{ source, schematic }} />\n }\n case \"simple_diode\": {\n // Replaced by builder\n return null\n // return <Component.SimpleDiode component={{ source, schematic }} />\n }\n default: {\n return <div>unknown ftype: {component.source.ftype}</div>\n }\n }\n}\n\nexport default SchematicComponent\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \"./\"\n\ninterface Props {\n box: {\n schematic: Type.SchematicBox\n }\n}\n\nexport const SchematicBox = ({ box: { schematic } }: Props) => {\n const { width: w, height: h } = schematic\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={schematic}\n size={{ width: schematic.width, height: schematic.height }}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.2,\n d: `M 0 0 l ${w} 0 l 0 ${h} l -${w} 0 z`,\n },\n ]}\n />\n )\n}\n\nexport default SchematicBox\n","import * as Type from \"lib/types\"\nimport { directionToVec } from \"lib/utils/direction-to-vec\"\nimport * as Component from \".\"\nimport Path from \"svg-path-generator\"\nimport getSVGPathBounds from \"lib/utils/get-svg-path-bounds\"\n\ninterface Props {\n line: {\n schematic: Type.SchematicLine\n }\n}\n\nexport const SchematicLine = ({ line: { schematic } }: Props) => {\n const { x1, x2, y1, y2 } = schematic\n const dx = x2 - x1\n const dy = y2 - y1\n // const width = Math.abs(dx) + 0.1\n // const height = Math.abs(dy) + 0.1\n // const center = { x: x1 + dx / 2, y: y1 + dy / 2 }\n const path = Path()\n path.moveTo(x1, y1)\n path.lineTo(x2, y2)\n const d = path.toString()\n const pathBounds = getSVGPathBounds(d)\n pathBounds.height = Math.max(pathBounds.height, 1)\n pathBounds.width = Math.max(pathBounds.width, 1)\n const center = {\n x: pathBounds.minX + pathBounds.width / 2,\n y: pathBounds.minY + pathBounds.height / 2,\n }\n\n return (\n <Component.SVGPathComponent\n rotation={0}\n center={center}\n size={pathBounds}\n paths={[\n {\n stroke: \"red\",\n strokeWidth: 0.02,\n d: d,\n },\n ]}\n />\n )\n}\n\nexport default SchematicLine\n","import { AnyElement } from \"@tscircuit/builder\"\nimport { collectElementRefs } from \"lib/utils/collect-element-refs\"\nimport SchematicComponent from \"./SchematicComponent\"\nimport SchematicPort from \"./SchematicPort\"\nimport SchematicText from \"./SchematicText\"\nimport SchematicBox from \"./SchematicBox\"\nimport SchematicTrace from \"./SchematicTrace\"\nimport SchematicLine from \"./SchematicLine\"\nimport RenderError from \"./RenderError\"\n\n/**\n * Render any @tsbuilder/builder AnyElement that can be put on a schematic.\n */\nexport const SchematicElement = ({\n element,\n allElements,\n}: {\n element: AnyElement\n allElements: AnyElement[]\n}) => {\n // A lot of the split logic for element types into a project is here:\n // https://github.com/tscircuit/builder/blob/7e7bef9c0aadd11999795003b8986f0d244c111f/src/lib/project/create-project-from-elements.ts#L13\n if (element.type === \"schematic_component\") {\n return (\n <SchematicComponent\n component={collectElementRefs(element, allElements) as any}\n />\n )\n }\n\n if (element.type === \"schematic_trace\") {\n return (\n <SchematicTrace trace={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_port\") {\n return (\n <SchematicPort port={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_box\") {\n return (\n <SchematicBox box={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_line\") {\n return (\n <SchematicLine line={collectElementRefs(element, allElements) as any} />\n )\n }\n\n if (element.type === \"schematic_text\") {\n return <SchematicText schematic_text={element} />\n }\n\n if (element.type === \"source_error\") {\n // TODO use the ids on the source error to put this in the right place\n return <RenderError text={element.message} />\n }\n\n return null\n}\n","import { lazy, Suspense } from \"react\"\n\nconst LazyTableViewer = lazy(() =>\n import(\"@tscircuit/table-viewer\").then((m) => ({\n default: m.SoupTableViewer,\n }))\n)\n\nexport const TableViewer = (params: Parameters<typeof LazyTableViewer>[0]) => (\n <Suspense fallback={<div>Loading...</div>}>\n <LazyTableViewer {...params} />\n </Suspense>\n)\n"],"mappings":"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","names":["useState","useEffect","useDebugValue","error","module","a","c","d","b","e","useRef","useEffect","useMemo","useDebugValue","useSyncExternalStoreWithSelector","module","module","module","mapToEllipse","approxUnitArc","vectorAngle","getArcCenter","arcToBezier","module","module","module","module","module","require_svg_path_generator","module","import_react","import_builder","useSyncExternalStoreExports","expected","found","transform","svgPathBounds","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","createDebounce","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","Path","import_builder","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_svg_path_generator","import_jsx_runtime","Path","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","transform","elements"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tscircuit/schematic-viewer",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "tscircuit/schematic-viewer",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@storybook/react": "^7.4.0",
|
|
34
34
|
"@storybook/testing-library": "^0.0.14-next.2",
|
|
35
35
|
"@tscircuit/builder": "^1.5.5",
|
|
36
|
-
"@tscircuit/react-fiber": "^1.0.
|
|
36
|
+
"@tscircuit/react-fiber": "^1.0.7",
|
|
37
37
|
"@tscircuit/routing": "^1.3.0",
|
|
38
38
|
"@tscircuit/table-viewer": "^0.0.6",
|
|
39
39
|
"@types/node": "^18.6.0",
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Schematic } from "Schematic"
|
|
2
|
+
|
|
3
|
+
const OneSidedBugExample = () => (
|
|
4
|
+
<bug
|
|
5
|
+
name="U2"
|
|
6
|
+
port_arrangement={{
|
|
7
|
+
left_size: 0,
|
|
8
|
+
right_size: 4,
|
|
9
|
+
}}
|
|
10
|
+
center={[-10, 0]}
|
|
11
|
+
port_labels={{
|
|
12
|
+
"1": "GND",
|
|
13
|
+
"2": "VBUS",
|
|
14
|
+
"3": "D-",
|
|
15
|
+
"4": "D+",
|
|
16
|
+
}}
|
|
17
|
+
/>
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
export const OneSidedBug = () => {
|
|
21
|
+
return (
|
|
22
|
+
<Schematic style={{ height: 600 }}>
|
|
23
|
+
<OneSidedBugExample />
|
|
24
|
+
</Schematic>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default {
|
|
29
|
+
title: "OneSidedBug",
|
|
30
|
+
component: OneSidedBug,
|
|
31
|
+
}
|