@vessel-dsp/core 0.5.0 → 0.6.1

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.
Files changed (241) hide show
  1. package/README.md +10 -0
  2. package/dist/editor/commands.d.ts +48 -0
  3. package/dist/editor/commands.d.ts.map +1 -0
  4. package/{src/editor/commands.ts → dist/editor/commands.js} +44 -91
  5. package/dist/editor/commands.js.map +1 -0
  6. package/dist/editor/factory.d.ts +10 -0
  7. package/dist/editor/factory.d.ts.map +1 -0
  8. package/{src/editor/factory.ts → dist/editor/factory.js} +11 -27
  9. package/dist/editor/factory.js.map +1 -0
  10. package/dist/editor/history.d.ts +29 -0
  11. package/dist/editor/history.d.ts.map +1 -0
  12. package/{src/editor/history.ts → dist/editor/history.js} +12 -42
  13. package/dist/editor/history.js.map +1 -0
  14. package/{src/editor/index.ts → dist/editor/index.d.ts} +1 -3
  15. package/dist/editor/index.d.ts.map +1 -0
  16. package/dist/editor/index.js +5 -0
  17. package/dist/editor/index.js.map +1 -0
  18. package/dist/editor/layout.d.ts +8 -0
  19. package/dist/editor/layout.d.ts.map +1 -0
  20. package/{src/editor/layout.ts → dist/editor/layout.js} +36 -90
  21. package/dist/editor/layout.js.map +1 -0
  22. package/dist/formats/circuit-json/serializer.d.ts +86 -0
  23. package/dist/formats/circuit-json/serializer.d.ts.map +1 -0
  24. package/{src/formats/circuit-json/serializer.ts → dist/formats/circuit-json/serializer.js} +114 -414
  25. package/dist/formats/circuit-json/serializer.js.map +1 -0
  26. package/dist/formats/document.d.ts +64 -0
  27. package/dist/formats/document.d.ts.map +1 -0
  28. package/dist/formats/document.js +300 -0
  29. package/dist/formats/document.js.map +1 -0
  30. package/dist/formats/interchange/parser.d.ts +3 -0
  31. package/dist/formats/interchange/parser.d.ts.map +1 -0
  32. package/{src/formats/interchange/parser.ts → dist/formats/interchange/parser.js} +651 -299
  33. package/dist/formats/interchange/parser.js.map +1 -0
  34. package/dist/formats/interchange/serializer.d.ts +9 -0
  35. package/dist/formats/interchange/serializer.d.ts.map +1 -0
  36. package/{src/formats/interchange/serializer.ts → dist/formats/interchange/serializer.js} +151 -158
  37. package/dist/formats/interchange/serializer.js.map +1 -0
  38. package/dist/formats/ltspice/catalog.d.ts +19 -0
  39. package/dist/formats/ltspice/catalog.d.ts.map +1 -0
  40. package/{src/formats/ltspice/catalog.ts → dist/formats/ltspice/catalog.js} +18 -52
  41. package/dist/formats/ltspice/catalog.js.map +1 -0
  42. package/dist/formats/ltspice/encoding.d.ts +2 -0
  43. package/dist/formats/ltspice/encoding.d.ts.map +1 -0
  44. package/{src/formats/ltspice/encoding.ts → dist/formats/ltspice/encoding.js} +17 -41
  45. package/dist/formats/ltspice/encoding.js.map +1 -0
  46. package/dist/formats/ltspice/parser.d.ts +3 -0
  47. package/dist/formats/ltspice/parser.d.ts.map +1 -0
  48. package/{src/formats/ltspice/parser.ts → dist/formats/ltspice/parser.js} +39 -141
  49. package/dist/formats/ltspice/parser.js.map +1 -0
  50. package/dist/formats/ltspice/serializer.d.ts +7 -0
  51. package/dist/formats/ltspice/serializer.d.ts.map +1 -0
  52. package/{src/formats/ltspice/serializer.ts → dist/formats/ltspice/serializer.js} +18 -45
  53. package/dist/formats/ltspice/serializer.js.map +1 -0
  54. package/dist/formats/schx/catalog.d.ts +19 -0
  55. package/dist/formats/schx/catalog.d.ts.map +1 -0
  56. package/{src/formats/schx/catalog.ts → dist/formats/schx/catalog.js} +48 -101
  57. package/dist/formats/schx/catalog.js.map +1 -0
  58. package/dist/formats/schx/parser.d.ts +3 -0
  59. package/dist/formats/schx/parser.d.ts.map +1 -0
  60. package/{src/formats/schx/parser.ts → dist/formats/schx/parser.js} +31 -86
  61. package/dist/formats/schx/parser.js.map +1 -0
  62. package/dist/formats/schx/runtime-descriptors.d.ts +3 -0
  63. package/dist/formats/schx/runtime-descriptors.d.ts.map +1 -0
  64. package/{src/formats/schx/runtime-descriptors.ts → dist/formats/schx/runtime-descriptors.js} +36 -123
  65. package/dist/formats/schx/runtime-descriptors.js.map +1 -0
  66. package/dist/formats/schx/serializer.d.ts +5 -0
  67. package/dist/formats/schx/serializer.d.ts.map +1 -0
  68. package/{src/formats/schx/serializer.ts → dist/formats/schx/serializer.js} +17 -42
  69. package/dist/formats/schx/serializer.js.map +1 -0
  70. package/dist/formats/schx/transforms.d.ts +4 -0
  71. package/dist/formats/schx/transforms.d.ts.map +1 -0
  72. package/{src/formats/schx/transforms.ts → dist/formats/schx/transforms.js} +6 -10
  73. package/dist/formats/schx/transforms.js.map +1 -0
  74. package/dist/formats/spice/parser.d.ts +3 -0
  75. package/dist/formats/spice/parser.d.ts.map +1 -0
  76. package/{src/formats/spice/parser.ts → dist/formats/spice/parser.js} +50 -96
  77. package/dist/formats/spice/parser.js.map +1 -0
  78. package/dist/formats/spice/serializer.d.ts +3 -0
  79. package/dist/formats/spice/serializer.d.ts.map +1 -0
  80. package/{src/formats/spice/serializer.ts → dist/formats/spice/serializer.js} +8 -13
  81. package/dist/formats/spice/serializer.js.map +1 -0
  82. package/dist/index.d.ts +47 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +32 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/model/connectivity.d.ts +16 -0
  87. package/dist/model/connectivity.d.ts.map +1 -0
  88. package/{src/model/connectivity.ts → dist/model/connectivity.js} +28 -63
  89. package/dist/model/connectivity.js.map +1 -0
  90. package/dist/model/netlist.d.ts +24 -0
  91. package/dist/model/netlist.d.ts.map +1 -0
  92. package/{src/model/netlist.ts → dist/model/netlist.js} +42 -110
  93. package/dist/model/netlist.js.map +1 -0
  94. package/dist/model/properties.d.ts +9 -0
  95. package/dist/model/properties.d.ts.map +1 -0
  96. package/{src/model/properties.ts → dist/model/properties.js} +10 -18
  97. package/dist/model/properties.js.map +1 -0
  98. package/dist/model/quantity.d.ts +3 -0
  99. package/dist/model/quantity.d.ts.map +1 -0
  100. package/{src/model/quantity.ts → dist/model/quantity.js} +7 -30
  101. package/dist/model/quantity.js.map +1 -0
  102. package/dist/model/types.d.ts +431 -0
  103. package/dist/model/types.d.ts.map +1 -0
  104. package/dist/model/types.js +10 -0
  105. package/dist/model/types.js.map +1 -0
  106. package/dist/model/validation.d.ts +32 -0
  107. package/dist/model/validation.d.ts.map +1 -0
  108. package/{src/model/validation.ts → dist/model/validation.js} +420 -323
  109. package/dist/model/validation.js.map +1 -0
  110. package/dist/model/wires.d.ts +3 -0
  111. package/dist/model/wires.d.ts.map +1 -0
  112. package/{src/model/wires.ts → dist/model/wires.js} +10 -16
  113. package/dist/model/wires.js.map +1 -0
  114. package/dist/panel/extract.d.ts +5 -0
  115. package/dist/panel/extract.d.ts.map +1 -0
  116. package/{src/panel/extract.ts → dist/panel/extract.js} +146 -235
  117. package/dist/panel/extract.js.map +1 -0
  118. package/dist/panel/index.d.ts +6 -0
  119. package/dist/panel/index.d.ts.map +1 -0
  120. package/dist/panel/index.js +5 -0
  121. package/dist/panel/index.js.map +1 -0
  122. package/dist/panel/knobs.d.ts +7 -0
  123. package/dist/panel/knobs.d.ts.map +1 -0
  124. package/{src/panel/knobs.ts → dist/panel/knobs.js} +7 -18
  125. package/dist/panel/knobs.js.map +1 -0
  126. package/dist/panel/protocol.d.ts +9 -0
  127. package/dist/panel/protocol.d.ts.map +1 -0
  128. package/{src/panel/protocol.ts → dist/panel/protocol.js} +10 -26
  129. package/dist/panel/protocol.js.map +1 -0
  130. package/{src/panel/types.ts → dist/panel/types.d.ts} +50 -89
  131. package/dist/panel/types.d.ts.map +1 -0
  132. package/dist/panel/types.js +2 -0
  133. package/dist/panel/types.js.map +1 -0
  134. package/dist/preview/bounds.d.ts +12 -0
  135. package/dist/preview/bounds.d.ts.map +1 -0
  136. package/{src/preview/bounds.ts → dist/preview/bounds.js} +15 -29
  137. package/dist/preview/bounds.js.map +1 -0
  138. package/dist/preview/box-layout.d.ts +4 -0
  139. package/dist/preview/box-layout.d.ts.map +1 -0
  140. package/{src/preview/box-layout.ts → dist/preview/box-layout.js} +2 -6
  141. package/dist/preview/box-layout.js.map +1 -0
  142. package/dist/preview/colors.d.ts +3 -0
  143. package/dist/preview/colors.d.ts.map +1 -0
  144. package/{src/preview/colors.ts → dist/preview/colors.js} +3 -5
  145. package/dist/preview/colors.js.map +1 -0
  146. package/dist/preview/hanging.d.ts +8 -0
  147. package/dist/preview/hanging.d.ts.map +1 -0
  148. package/{src/preview/hanging.ts → dist/preview/hanging.js} +9 -28
  149. package/dist/preview/hanging.js.map +1 -0
  150. package/dist/preview/junctions.d.ts +3 -0
  151. package/dist/preview/junctions.d.ts.map +1 -0
  152. package/{src/preview/junctions.ts → dist/preview/junctions.js} +9 -24
  153. package/dist/preview/junctions.js.map +1 -0
  154. package/dist/preview/label-layout.d.ts +12 -0
  155. package/dist/preview/label-layout.d.ts.map +1 -0
  156. package/{src/preview/label-layout.ts → dist/preview/label-layout.js} +15 -36
  157. package/dist/preview/label-layout.js.map +1 -0
  158. package/dist/preview/ports.d.ts +17 -0
  159. package/dist/preview/ports.d.ts.map +1 -0
  160. package/{src/preview/ports.ts → dist/preview/ports.js} +10 -37
  161. package/dist/preview/ports.js.map +1 -0
  162. package/dist/preview/renderable-wires.d.ts +3 -0
  163. package/dist/preview/renderable-wires.d.ts.map +1 -0
  164. package/{src/preview/renderable-wires.ts → dist/preview/renderable-wires.js} +12 -29
  165. package/dist/preview/renderable-wires.js.map +1 -0
  166. package/dist/preview/routing.d.ts +4 -0
  167. package/dist/preview/routing.d.ts.map +1 -0
  168. package/dist/preview/routing.js +13 -0
  169. package/dist/preview/routing.js.map +1 -0
  170. package/dist/preview/snap.d.ts +9 -0
  171. package/dist/preview/snap.d.ts.map +1 -0
  172. package/{src/preview/snap.ts → dist/preview/snap.js} +9 -31
  173. package/dist/preview/snap.js.map +1 -0
  174. package/dist/preview/symbols/svg-content.d.ts +7 -0
  175. package/dist/preview/symbols/svg-content.d.ts.map +1 -0
  176. package/{src/preview/symbols/svg-content.ts → dist/preview/symbols/svg-content.js} +3 -6
  177. package/dist/preview/symbols/svg-content.js.map +1 -0
  178. package/dist/preview/symbols.d.ts +7 -0
  179. package/dist/preview/symbols.d.ts.map +1 -0
  180. package/{src/preview/symbols.ts → dist/preview/symbols.js} +18 -43
  181. package/dist/preview/symbols.js.map +1 -0
  182. package/dist/preview/wire-chains.d.ts +4 -0
  183. package/dist/preview/wire-chains.d.ts.map +1 -0
  184. package/{src/preview/wire-chains.ts → dist/preview/wire-chains.js} +37 -37
  185. package/dist/preview/wire-chains.js.map +1 -0
  186. package/package.json +3 -3
  187. package/src/formats/document.ts +0 -274
  188. package/src/index.ts +0 -205
  189. package/src/model/types.ts +0 -309
  190. package/src/panel/index.ts +0 -39
  191. package/src/preview/routing.ts +0 -15
  192. package/src/preview/symbols/analog-switch.svg +0 -17
  193. package/src/preview/symbols/battery.svg +0 -16
  194. package/src/preview/symbols/bbd.svg +0 -21
  195. package/src/preview/symbols/bjt-npn.svg +0 -16
  196. package/src/preview/symbols/bjt-pnp.svg +0 -17
  197. package/src/preview/symbols/capacitor-electrolytic.svg +0 -13
  198. package/src/preview/symbols/capacitor.svg +0 -12
  199. package/src/preview/symbols/current-source.svg +0 -14
  200. package/src/preview/symbols/delay-ic.svg +0 -22
  201. package/src/preview/symbols/diode-schottky.svg +0 -12
  202. package/src/preview/symbols/diode-zener.svg +0 -12
  203. package/src/preview/symbols/diode.svg +0 -13
  204. package/src/preview/symbols/flipflop.svg +0 -20
  205. package/src/preview/symbols/ground.svg +0 -12
  206. package/src/preview/symbols/ic-block.svg +0 -20
  207. package/src/preview/symbols/ic.svg +0 -19
  208. package/src/preview/symbols/inductor.svg +0 -11
  209. package/src/preview/symbols/jack-input.svg +0 -16
  210. package/src/preview/symbols/jack-output.svg +0 -16
  211. package/src/preview/symbols/jfet-junction-n.svg +0 -17
  212. package/src/preview/symbols/jfet-n.svg +0 -17
  213. package/src/preview/symbols/jfet-p.svg +0 -17
  214. package/src/preview/symbols/label.svg +0 -8
  215. package/src/preview/symbols/led.svg +0 -18
  216. package/src/preview/symbols/mosfet-n.svg +0 -21
  217. package/src/preview/symbols/mosfet-p.svg +0 -21
  218. package/src/preview/symbols/named-wire.svg +0 -11
  219. package/src/preview/symbols/opamp.svg +0 -21
  220. package/src/preview/symbols/optocoupler.svg +0 -30
  221. package/src/preview/symbols/ota.svg +0 -20
  222. package/src/preview/symbols/pentode.svg +0 -25
  223. package/src/preview/symbols/photoresistor.svg +0 -19
  224. package/src/preview/symbols/port.svg +0 -8
  225. package/src/preview/symbols/potentiometer.svg +0 -15
  226. package/src/preview/symbols/power-amp.svg +0 -20
  227. package/src/preview/symbols/rail.svg +0 -11
  228. package/src/preview/symbols/regulator.svg +0 -13
  229. package/src/preview/symbols/relay.svg +0 -20
  230. package/src/preview/symbols/resistor.svg +0 -11
  231. package/src/preview/symbols/switch-3pdt.svg +0 -32
  232. package/src/preview/symbols/switch-rotary.svg +0 -23
  233. package/src/preview/symbols/switch-spdt.svg +0 -16
  234. package/src/preview/symbols/switch-spst.svg +0 -14
  235. package/src/preview/symbols/switch-toggle.svg +0 -14
  236. package/src/preview/symbols/transformer.svg +0 -17
  237. package/src/preview/symbols/triode.svg +0 -17
  238. package/src/preview/symbols/tube-diode.svg +0 -13
  239. package/src/preview/symbols/unsupported.svg +0 -8
  240. package/src/preview/symbols/variable-resistor.svg +0 -13
  241. package/src/preview/symbols/voltage-source.svg +0 -15
package/README.md CHANGED
@@ -4,3 +4,13 @@ Headless Vessel DSP circuit, device, format conversion, and layout model APIs.
4
4
 
5
5
  This package has no React, DOM rendering, AudioContext, or AudioWorklet
6
6
  dependency.
7
+
8
+ `.vdsp` parsing supports `circuit-interchange/v2` and `circuit-interchange/v3`.
9
+ V3 documents preserve reviewed physical build metadata such as build scope,
10
+ mechanical envelopes, BOM rows, embedded part and footprint catalogs,
11
+ off-board wiring, panel drill placement, and board realizations for stripboard,
12
+ perfboard, breadboard-pattern protoboard, and fabricated PCB.
13
+
14
+ Conversions from v3 `.vdsp` to formats that cannot represent those physical
15
+ fields throw by default. Use `convertCircuitDocumentFileWithReport()` with
16
+ `lossPolicy: 'drop-with-diagnostics'` when intentional lossy export is needed.
@@ -0,0 +1,48 @@
1
+ import type { CircuitDocument, ComponentKind, Point } from '../model/types';
2
+ export type DocumentCommand = Readonly<{
3
+ type: 'delete-component';
4
+ componentId: string;
5
+ }> | Readonly<{
6
+ type: 'rename-component';
7
+ componentId: string;
8
+ newName: string;
9
+ }> | Readonly<{
10
+ type: 'set-property';
11
+ componentId: string;
12
+ propertyName: string;
13
+ value: string;
14
+ }> | Readonly<{
15
+ type: 'remove-property';
16
+ componentId: string;
17
+ propertyName: string;
18
+ }> | Readonly<{
19
+ type: 'move-component';
20
+ componentId: string;
21
+ origin: Point;
22
+ }> | Readonly<{
23
+ type: 'delete-wire';
24
+ wireId: string;
25
+ }> | Readonly<{
26
+ type: 'delete-wires';
27
+ wireIds: readonly string[];
28
+ }> | Readonly<{
29
+ type: 'add-wire';
30
+ from: Point;
31
+ to: Point;
32
+ }> | Readonly<{
33
+ type: 'split-wire';
34
+ wireId: string;
35
+ at: Point;
36
+ }> | Readonly<{
37
+ type: 'merge-wires';
38
+ at: Point;
39
+ }> | Readonly<{
40
+ type: 'tidy-layout';
41
+ }> | Readonly<{
42
+ type: 'add-component';
43
+ kind: ComponentKind;
44
+ origin: Point;
45
+ sourceTypeName?: string | null;
46
+ }>;
47
+ export declare function applyDocumentCommand(doc: CircuitDocument, command: DocumentCommand): CircuitDocument;
48
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/editor/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAa,aAAa,EAAE,KAAK,EAAiB,MAAM,gBAAgB,CAAC;AAKtG,MAAM,MAAM,eAAe,GACrB,QAAQ,CAAC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3D,QAAQ,CAAC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5E,QAAQ,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5F,QAAQ,CAAC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,GAChF,QAAQ,CAAC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,GACxE,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,QAAQ,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,GAC9D,QAAQ,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,GACtD,QAAQ,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,GAC3D,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,GAC5C,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,GACjC,QAAQ,CAAC;IACP,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC,CAAC;AAEP,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,eAAe,CA2BpG"}
@@ -1,29 +1,8 @@
1
- import { parseQuantity } from '../model/quantity';
2
- import type { CircuitDocument, Component, ComponentKind, Point, PropertyValue } from '../model/types';
3
- import { isParsedQuantity } from '../model/properties';
4
- import { buildComponent } from './factory';
5
- import { tidyDocumentLayout } from './layout';
6
-
7
- export type DocumentCommand =
8
- | Readonly<{ type: 'delete-component'; componentId: string }>
9
- | Readonly<{ type: 'rename-component'; componentId: string; newName: string }>
10
- | Readonly<{ type: 'set-property'; componentId: string; propertyName: string; value: string }>
11
- | Readonly<{ type: 'remove-property'; componentId: string; propertyName: string }>
12
- | Readonly<{ type: 'move-component'; componentId: string; origin: Point }>
13
- | Readonly<{ type: 'delete-wire'; wireId: string }>
14
- | Readonly<{ type: 'delete-wires'; wireIds: readonly string[] }>
15
- | Readonly<{ type: 'add-wire'; from: Point; to: Point }>
16
- | Readonly<{ type: 'split-wire'; wireId: string; at: Point }>
17
- | Readonly<{ type: 'merge-wires'; at: Point }>
18
- | Readonly<{ type: 'tidy-layout' }>
19
- | Readonly<{
20
- type: 'add-component';
21
- kind: ComponentKind;
22
- origin: Point;
23
- sourceTypeName?: string | null;
24
- }>;
25
-
26
- export function applyDocumentCommand(doc: CircuitDocument, command: DocumentCommand): CircuitDocument {
1
+ import { parseQuantity } from '../model/quantity.js';
2
+ import { isParsedQuantity } from '../model/properties.js';
3
+ import { buildComponent } from './factory.js';
4
+ import { tidyDocumentLayout } from './layout.js';
5
+ export function applyDocumentCommand(doc, command) {
27
6
  switch (command.type) {
28
7
  case 'delete-component':
29
8
  return deleteComponent(doc, command.componentId);
@@ -51,31 +30,23 @@ export function applyDocumentCommand(doc: CircuitDocument, command: DocumentComm
51
30
  return addComponent(doc, command.kind, command.origin, command.sourceTypeName ?? null);
52
31
  }
53
32
  }
54
-
55
- function addComponent(
56
- doc: CircuitDocument,
57
- kind: ComponentKind,
58
- origin: Point,
59
- sourceTypeName: string | null,
60
- ): CircuitDocument {
33
+ function addComponent(doc, kind, origin, sourceTypeName) {
61
34
  const existingIds = new Set(doc.components.map((c) => c.id));
62
35
  const component = buildComponent({ kind, origin, sourceTypeName, existingIds });
63
36
  return { ...doc, components: [...doc.components, component] };
64
37
  }
65
-
66
- function moveComponent(doc: CircuitDocument, componentId: string, origin: Point): CircuitDocument {
38
+ function moveComponent(doc, componentId, origin) {
67
39
  const target = doc.components.find((c) => c.id === componentId);
68
40
  if (target === undefined || (target.origin.x === origin.x && target.origin.y === origin.y)) {
69
41
  return doc;
70
42
  }
71
43
  const dx = origin.x - target.origin.x;
72
44
  const dy = origin.y - target.origin.y;
73
- const terminalMoves = new Map<string, Point>();
45
+ const terminalMoves = new Map();
74
46
  for (const terminal of target.terminals) {
75
47
  const newPosition = { x: terminal.position.x + dx, y: terminal.position.y + dy };
76
48
  terminalMoves.set(pointKey(terminal.position), newPosition);
77
49
  }
78
-
79
50
  const components = doc.components.map((c) => {
80
51
  if (c.id !== componentId) {
81
52
  return c;
@@ -86,7 +57,6 @@ function moveComponent(doc: CircuitDocument, componentId: string, origin: Point)
86
57
  }));
87
58
  return { ...c, origin, terminals };
88
59
  });
89
-
90
60
  const wires = doc.wires.map((w) => {
91
61
  const newA = terminalMoves.get(pointKey(w.endpoints[0]));
92
62
  const newB = terminalMoves.get(pointKey(w.endpoints[1]));
@@ -95,34 +65,29 @@ function moveComponent(doc: CircuitDocument, componentId: string, origin: Point)
95
65
  }
96
66
  return {
97
67
  ...w,
98
- endpoints: [newA ?? w.endpoints[0], newB ?? w.endpoints[1]] as readonly [Point, Point],
68
+ endpoints: [newA ?? w.endpoints[0], newB ?? w.endpoints[1]],
99
69
  };
100
70
  });
101
-
102
71
  return { ...doc, components, wires };
103
72
  }
104
-
105
- function pointKey(p: Point): string {
73
+ function pointKey(p) {
106
74
  return `${p.x},${p.y}`;
107
75
  }
108
-
109
- function deleteComponent(doc: CircuitDocument, componentId: string): CircuitDocument {
76
+ function deleteComponent(doc, componentId) {
110
77
  const components = doc.components.filter((c) => c.id !== componentId);
111
78
  if (components.length === doc.components.length) {
112
79
  return doc;
113
80
  }
114
81
  return { ...doc, components };
115
82
  }
116
-
117
- function deleteWire(doc: CircuitDocument, wireId: string): CircuitDocument {
83
+ function deleteWire(doc, wireId) {
118
84
  const wires = doc.wires.filter((w) => w.id !== wireId);
119
85
  if (wires.length === doc.wires.length) {
120
86
  return doc;
121
87
  }
122
88
  return { ...doc, wires };
123
89
  }
124
-
125
- function deleteWires(doc: CircuitDocument, wireIds: readonly string[]): CircuitDocument {
90
+ function deleteWires(doc, wireIds) {
126
91
  if (wireIds.length === 0) {
127
92
  return doc;
128
93
  }
@@ -133,17 +98,15 @@ function deleteWires(doc: CircuitDocument, wireIds: readonly string[]): CircuitD
133
98
  }
134
99
  return { ...doc, wires };
135
100
  }
136
-
137
- function addWire(doc: CircuitDocument, from: Point, to: Point): CircuitDocument {
101
+ function addWire(doc, from, to) {
138
102
  if (from.x === to.x && from.y === to.y) {
139
103
  return doc;
140
104
  }
141
105
  const id = uniqueWireId(doc);
142
- const wire = { id, endpoints: [from, to] as const };
106
+ const wire = { id, endpoints: [from, to] };
143
107
  return { ...doc, wires: [...doc.wires, wire] };
144
108
  }
145
-
146
- function splitWire(doc: CircuitDocument, wireId: string, at: Point): CircuitDocument {
109
+ function splitWire(doc, wireId, at) {
147
110
  const target = doc.wires.find((w) => w.id === wireId);
148
111
  if (target === undefined) {
149
112
  return doc;
@@ -159,15 +122,14 @@ function splitWire(doc: CircuitDocument, wireId: string, at: Point): CircuitDocu
159
122
  taken.add(firstId);
160
123
  const secondId = uniqueWireIdFromSet(taken);
161
124
  const replacement = [
162
- { id: firstId, endpoints: [a, snapped] as const },
163
- { id: secondId, endpoints: [snapped, b] as const },
125
+ { id: firstId, endpoints: [a, snapped] },
126
+ { id: secondId, endpoints: [snapped, b] },
164
127
  ];
165
128
  const wires = doc.wires.flatMap((w) => (w.id === wireId ? replacement : [w]));
166
129
  return { ...doc, wires };
167
130
  }
168
-
169
- function mergeWires(doc: CircuitDocument, at: Point): CircuitDocument {
170
- const meeting: typeof doc.wires[number][] = [];
131
+ function mergeWires(doc, at) {
132
+ const meeting = [];
171
133
  for (const wire of doc.wires) {
172
134
  if (pointEquals(wire.endpoints[0], at) || pointEquals(wire.endpoints[1], at)) {
173
135
  meeting.push(wire);
@@ -185,12 +147,13 @@ function mergeWires(doc: CircuitDocument, at: Point): CircuitDocument {
185
147
  }
186
148
  // Reject if another wire's body crosses the corner — that's a T-junction.
187
149
  for (const wire of doc.wires) {
188
- if (wire === meeting[0] || wire === meeting[1]) continue;
150
+ if (wire === meeting[0] || wire === meeting[1])
151
+ continue;
189
152
  if (pointOnSegmentInterior(at, wire.endpoints[0], wire.endpoints[1])) {
190
153
  return doc;
191
154
  }
192
155
  }
193
- const [w1, w2] = meeting as [typeof doc.wires[number], typeof doc.wires[number]];
156
+ const [w1, w2] = meeting;
194
157
  const outer1 = pointEquals(w1.endpoints[0], at) ? w1.endpoints[1] : w1.endpoints[0];
195
158
  const outer2 = pointEquals(w2.endpoints[0], at) ? w2.endpoints[1] : w2.endpoints[0];
196
159
  if (pointEquals(outer1, outer2)) {
@@ -202,15 +165,14 @@ function mergeWires(doc: CircuitDocument, at: Point): CircuitDocument {
202
165
  taken.delete(w1.id);
203
166
  taken.delete(w2.id);
204
167
  const newId = uniqueWireIdFromSet(taken);
205
- const replacement = { id: newId, endpoints: [outer1, outer2] as const };
168
+ const replacement = { id: newId, endpoints: [outer1, outer2] };
206
169
  const seen = new Set([w1.id, w2.id]);
207
170
  const wires = doc.wires
208
171
  .filter((w) => !seen.has(w.id))
209
172
  .concat([replacement]);
210
173
  return { ...doc, wires };
211
174
  }
212
-
213
- function projectOntoSegment(p: Point, a: Point, b: Point): Point {
175
+ function projectOntoSegment(p, a, b) {
214
176
  const dx = b.x - a.x;
215
177
  const dy = b.y - a.y;
216
178
  if (dx === 0 && dy === 0) {
@@ -223,39 +185,38 @@ function projectOntoSegment(p: Point, a: Point, b: Point): Point {
223
185
  y: Math.round(a.y + clamped * dy),
224
186
  };
225
187
  }
226
-
227
- function pointEquals(a: Point, b: Point): boolean {
188
+ function pointEquals(a, b) {
228
189
  return a.x === b.x && a.y === b.y;
229
190
  }
230
-
231
- function pointOnSegmentInterior(p: Point, a: Point, b: Point): boolean {
191
+ function pointOnSegmentInterior(p, a, b) {
232
192
  const cross = (p.x - a.x) * (b.y - a.y) - (p.y - a.y) * (b.x - a.x);
233
- if (cross !== 0) return false;
193
+ if (cross !== 0)
194
+ return false;
234
195
  const minX = Math.min(a.x, b.x);
235
196
  const maxX = Math.max(a.x, b.x);
236
197
  const minY = Math.min(a.y, b.y);
237
198
  const maxY = Math.max(a.y, b.y);
238
- if (minX === maxX && minY === maxY) return false;
199
+ if (minX === maxX && minY === maxY)
200
+ return false;
239
201
  const inX = p.x > minX && p.x < maxX;
240
202
  const inY = p.y > minY && p.y < maxY;
241
- if (minX === maxX) return inY;
242
- if (minY === maxY) return inX;
203
+ if (minX === maxX)
204
+ return inY;
205
+ if (minY === maxY)
206
+ return inX;
243
207
  return inX && inY;
244
208
  }
245
-
246
- function uniqueWireId(doc: CircuitDocument): string {
209
+ function uniqueWireId(doc) {
247
210
  return uniqueWireIdFromSet(new Set(doc.wires.map((w) => w.id)));
248
211
  }
249
-
250
- function uniqueWireIdFromSet(taken: Set<string>): string {
212
+ function uniqueWireIdFromSet(taken) {
251
213
  let n = taken.size + 1;
252
214
  while (taken.has(`wire-${n}`)) {
253
215
  n += 1;
254
216
  }
255
217
  return `wire-${n}`;
256
218
  }
257
-
258
- function renameComponent(doc: CircuitDocument, componentId: string, newName: string): CircuitDocument {
219
+ function renameComponent(doc, componentId, newName) {
259
220
  const trimmed = newName.trim();
260
221
  if (trimmed.length === 0) {
261
222
  return doc;
@@ -270,13 +231,7 @@ function renameComponent(doc: CircuitDocument, componentId: string, newName: str
270
231
  });
271
232
  return changed ? { ...doc, components } : doc;
272
233
  }
273
-
274
- function setProperty(
275
- doc: CircuitDocument,
276
- componentId: string,
277
- propertyName: string,
278
- rawValue: string,
279
- ): CircuitDocument {
234
+ function setProperty(doc, componentId, propertyName, rawValue) {
280
235
  const trimmedName = propertyName.trim();
281
236
  if (trimmedName.length === 0) {
282
237
  return doc;
@@ -286,7 +241,7 @@ function setProperty(
286
241
  if (c.id !== componentId) {
287
242
  return c;
288
243
  }
289
- const next: PropertyValue = nextValue(c, trimmedName, rawValue);
244
+ const next = nextValue(c, trimmedName, rawValue);
290
245
  if (propertyEquals(c.properties[trimmedName], next)) {
291
246
  return c;
292
247
  }
@@ -295,8 +250,7 @@ function setProperty(
295
250
  });
296
251
  return changed ? { ...doc, components } : doc;
297
252
  }
298
-
299
- function removeProperty(doc: CircuitDocument, componentId: string, propertyName: string): CircuitDocument {
253
+ function removeProperty(doc, componentId, propertyName) {
300
254
  let changed = false;
301
255
  const components = doc.components.map((c) => {
302
256
  if (c.id !== componentId || c.properties[propertyName] === undefined) {
@@ -308,8 +262,7 @@ function removeProperty(doc: CircuitDocument, componentId: string, propertyName:
308
262
  });
309
263
  return changed ? { ...doc, components } : doc;
310
264
  }
311
-
312
- function nextValue(component: Component, propertyName: string, rawValue: string): PropertyValue {
265
+ function nextValue(component, propertyName, rawValue) {
313
266
  const existing = component.properties[propertyName];
314
267
  const existingWasQuantity = isParsedQuantity(existing);
315
268
  if (existingWasQuantity) {
@@ -325,8 +278,7 @@ function nextValue(component: Component, propertyName: string, rawValue: string)
325
278
  }
326
279
  return rawValue;
327
280
  }
328
-
329
- function propertyEquals(a: PropertyValue | undefined, b: PropertyValue): boolean {
281
+ function propertyEquals(a, b) {
330
282
  if (a === undefined) {
331
283
  return false;
332
284
  }
@@ -342,3 +294,4 @@ function propertyEquals(a: PropertyValue | undefined, b: PropertyValue): boolean
342
294
  }
343
295
  return false;
344
296
  }
297
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/editor/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Component, ComponentKind, Point } from '../model/types';
2
+ export type CreateComponentArgs = Readonly<{
3
+ kind: ComponentKind;
4
+ origin: Point;
5
+ sourceTypeName?: string | null;
6
+ existingIds?: ReadonlySet<string>;
7
+ name?: string;
8
+ }>;
9
+ export declare function buildComponent(args: CreateComponentArgs): Component;
10
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/editor/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,CAkBnE"}
@@ -1,16 +1,6 @@
1
- import { defaultDefForKind, lookupSchxDef, type SchxComponentDef } from '../formats/schx/catalog';
2
- import { mapTerminal } from '../formats/schx/transforms';
3
- import type { Component, ComponentKind, Point } from '../model/types';
4
-
5
- export type CreateComponentArgs = Readonly<{
6
- kind: ComponentKind;
7
- origin: Point;
8
- sourceTypeName?: string | null;
9
- existingIds?: ReadonlySet<string>;
10
- name?: string;
11
- }>;
12
-
13
- export function buildComponent(args: CreateComponentArgs): Component {
1
+ import { defaultDefForKind, lookupSchxDef } from '../formats/schx/catalog.js';
2
+ import { mapTerminal } from '../formats/schx/transforms.js';
3
+ export function buildComponent(args) {
14
4
  const def = resolveDef(args.kind, args.sourceTypeName ?? null);
15
5
  const terminals = def.terminals.map((t) => ({
16
6
  name: t.name,
@@ -29,8 +19,7 @@ export function buildComponent(args: CreateComponentArgs): Component {
29
19
  sourceTypeName: args.sourceTypeName ?? null,
30
20
  };
31
21
  }
32
-
33
- function defaultPropertiesForKind(kind: ComponentKind): Readonly<Record<string, string>> {
22
+ function defaultPropertiesForKind(kind) {
34
23
  // Labels are pure annotation — without a Text property they render their
35
24
  // auto-generated id (e.g. "LBL1") which is confusing. Seed Text so the
36
25
  // Inspector has something editable the moment the label lands.
@@ -39,8 +28,7 @@ function defaultPropertiesForKind(kind: ComponentKind): Readonly<Record<string,
39
28
  }
40
29
  return {};
41
30
  }
42
-
43
- function resolveDef(kind: ComponentKind, sourceTypeName: string | null): SchxComponentDef {
31
+ function resolveDef(kind, sourceTypeName) {
44
32
  const short = shortName(sourceTypeName);
45
33
  if (short !== null) {
46
34
  const byShort = lookupSchxDef(short);
@@ -58,8 +46,7 @@ function resolveDef(kind: ComponentKind, sourceTypeName: string | null): SchxCom
58
46
  }
59
47
  return FALLBACK_DEF;
60
48
  }
61
-
62
- function shortName(fullType: string | null): string | null {
49
+ function shortName(fullType) {
63
50
  if (fullType === null) {
64
51
  return null;
65
52
  }
@@ -69,8 +56,7 @@ function shortName(fullType: string | null): string | null {
69
56
  }
70
57
  return fullType;
71
58
  }
72
-
73
- const ID_PREFIX: Readonly<Record<ComponentKind, string>> = {
59
+ const ID_PREFIX = {
74
60
  resistor: 'R',
75
61
  capacitor: 'C',
76
62
  inductor: 'L',
@@ -107,8 +93,7 @@ const ID_PREFIX: Readonly<Record<ComponentKind, string>> = {
107
93
  port: 'P',
108
94
  unsupported: 'X',
109
95
  };
110
-
111
- function uniqueId(kind: ComponentKind, existing: ReadonlySet<string>): string {
96
+ function uniqueId(kind, existing) {
112
97
  const prefix = ID_PREFIX[kind];
113
98
  let n = 1;
114
99
  while (existing.has(`${prefix}${n}`)) {
@@ -116,15 +101,13 @@ function uniqueId(kind: ComponentKind, existing: ReadonlySet<string>): string {
116
101
  }
117
102
  return `${prefix}${n}`;
118
103
  }
119
-
120
- const FALLBACK_DEF: SchxComponentDef = {
104
+ const FALLBACK_DEF = {
121
105
  shortType: 'Unknown',
122
106
  kind: 'unsupported',
123
107
  terminals: [],
124
108
  quantityProps: [],
125
109
  };
126
-
127
- const EDITOR_DEFAULT_DEFS: Partial<Record<ComponentKind, SchxComponentDef>> = {
110
+ const EDITOR_DEFAULT_DEFS = {
128
111
  led: {
129
112
  shortType: 'LED',
130
113
  kind: 'led',
@@ -146,3 +129,4 @@ const EDITOR_DEFAULT_DEFS: Partial<Record<ComponentKind, SchxComponentDef>> = {
146
129
  quantityProps: [],
147
130
  },
148
131
  };
132
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/editor/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { CircuitDocument } from '../model/types';
2
+ import { type DocumentCommand } from './commands';
3
+ export type EditorState = Readonly<{
4
+ document: CircuitDocument;
5
+ selectedId: string | null;
6
+ selectedWireId: string | null;
7
+ past: readonly CircuitDocument[];
8
+ future: readonly CircuitDocument[];
9
+ }>;
10
+ export type EditorCommand = DocumentCommand | Readonly<{
11
+ type: 'replace-document';
12
+ document: CircuitDocument;
13
+ }> | Readonly<{
14
+ type: 'select';
15
+ componentId: string | null;
16
+ }> | Readonly<{
17
+ type: 'select-wire';
18
+ wireId: string | null;
19
+ }> | Readonly<{
20
+ type: 'undo';
21
+ }> | Readonly<{
22
+ type: 'redo';
23
+ }>;
24
+ export declare function createEditorState(document: CircuitDocument): EditorState;
25
+ export declare function applyEditorCommand(state: EditorState, command: EditorCommand): EditorState;
26
+ export declare function canUndo(state: EditorState): boolean;
27
+ export declare function canRedo(state: EditorState): boolean;
28
+ export declare function resetEditorState(document: CircuitDocument): EditorState;
29
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/editor/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,SAAS,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GACnB,eAAe,GACf,QAAQ,CAAC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,GACjE,QAAQ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1B,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIjC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAQxE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,CAqB1F;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAEnD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEvE"}
@@ -1,25 +1,6 @@
1
- import type { CircuitDocument } from '../model/types';
2
- import { applyDocumentCommand, type DocumentCommand } from './commands';
3
-
4
- export type EditorState = Readonly<{
5
- document: CircuitDocument;
6
- selectedId: string | null;
7
- selectedWireId: string | null;
8
- past: readonly CircuitDocument[];
9
- future: readonly CircuitDocument[];
10
- }>;
11
-
12
- export type EditorCommand =
13
- | DocumentCommand
14
- | Readonly<{ type: 'replace-document'; document: CircuitDocument }>
15
- | Readonly<{ type: 'select'; componentId: string | null }>
16
- | Readonly<{ type: 'select-wire'; wireId: string | null }>
17
- | Readonly<{ type: 'undo' }>
18
- | Readonly<{ type: 'redo' }>;
19
-
1
+ import { applyDocumentCommand } from './commands.js';
20
2
  const HISTORY_LIMIT = 200;
21
-
22
- export function createEditorState(document: CircuitDocument): EditorState {
3
+ export function createEditorState(document) {
23
4
  return {
24
5
  document,
25
6
  selectedId: null,
@@ -28,8 +9,7 @@ export function createEditorState(document: CircuitDocument): EditorState {
28
9
  future: [],
29
10
  };
30
11
  }
31
-
32
- export function applyEditorCommand(state: EditorState, command: EditorCommand): EditorState {
12
+ export function applyEditorCommand(state, command) {
33
13
  switch (command.type) {
34
14
  case 'select':
35
15
  if (state.selectedId === command.componentId && state.selectedWireId === null) {
@@ -51,20 +31,16 @@ export function applyEditorCommand(state: EditorState, command: EditorCommand):
51
31
  return applyAndPush(state, command);
52
32
  }
53
33
  }
54
-
55
- export function canUndo(state: EditorState): boolean {
34
+ export function canUndo(state) {
56
35
  return state.past.length > 0;
57
36
  }
58
-
59
- export function canRedo(state: EditorState): boolean {
37
+ export function canRedo(state) {
60
38
  return state.future.length > 0;
61
39
  }
62
-
63
- export function resetEditorState(document: CircuitDocument): EditorState {
40
+ export function resetEditorState(document) {
64
41
  return createEditorState(document);
65
42
  }
66
-
67
- function applyAndPush(state: EditorState, command: DocumentCommand): EditorState {
43
+ function applyAndPush(state, command) {
68
44
  const nextDocument = applyDocumentCommand(state.document, command);
69
45
  if (nextDocument === state.document) {
70
46
  return state;
@@ -82,8 +58,7 @@ function applyAndPush(state: EditorState, command: DocumentCommand): EditorState
82
58
  future: [],
83
59
  };
84
60
  }
85
-
86
- function replaceDocument(state: EditorState, document: CircuitDocument): EditorState {
61
+ function replaceDocument(state, document) {
87
62
  if (document === state.document) {
88
63
  return state;
89
64
  }
@@ -96,11 +71,7 @@ function replaceDocument(state: EditorState, document: CircuitDocument): EditorS
96
71
  future: [],
97
72
  };
98
73
  }
99
-
100
- function wireSelectionAfterCommand(
101
- selectedWireId: string | null,
102
- command: DocumentCommand,
103
- ): string | null {
74
+ function wireSelectionAfterCommand(selectedWireId, command) {
104
75
  if (selectedWireId === null) {
105
76
  return null;
106
77
  }
@@ -112,8 +83,7 @@ function wireSelectionAfterCommand(
112
83
  }
113
84
  return selectedWireId;
114
85
  }
115
-
116
- function undo(state: EditorState): EditorState {
86
+ function undo(state) {
117
87
  const previous = state.past[state.past.length - 1];
118
88
  if (previous === undefined) {
119
89
  return state;
@@ -126,8 +96,7 @@ function undo(state: EditorState): EditorState {
126
96
  future: [state.document, ...state.future],
127
97
  };
128
98
  }
129
-
130
- function redo(state: EditorState): EditorState {
99
+ function redo(state) {
131
100
  const next = state.future[0];
132
101
  if (next === undefined) {
133
102
  return state;
@@ -140,3 +109,4 @@ function redo(state: EditorState): EditorState {
140
109
  future: state.future.slice(1),
141
110
  };
142
111
  }
112
+ //# sourceMappingURL=history.js.map