@skillpet/circuit 0.5.0

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 (332) hide show
  1. package/README.md +131 -0
  2. package/dist/circuit.bundle.js +31103 -0
  3. package/dist/circuit.bundle.js.map +7 -0
  4. package/dist/circuit.bundle.min.js +273 -0
  5. package/dist/circuit.bundle.min.js.map +7 -0
  6. package/dist/circuit.esm.js +31069 -0
  7. package/dist/circuit.esm.js.map +7 -0
  8. package/dist/config.d.ts +26 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +23 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/container.d.ts +32 -0
  13. package/dist/container.d.ts.map +1 -0
  14. package/dist/container.js +101 -0
  15. package/dist/container.js.map +1 -0
  16. package/dist/drawing-gradient.d.ts +13 -0
  17. package/dist/drawing-gradient.d.ts.map +1 -0
  18. package/dist/drawing-gradient.js +39 -0
  19. package/dist/drawing-gradient.js.map +1 -0
  20. package/dist/drawing-stack.d.ts +16 -0
  21. package/dist/drawing-stack.d.ts.map +1 -0
  22. package/dist/drawing-stack.js +32 -0
  23. package/dist/drawing-stack.js.map +1 -0
  24. package/dist/drawing-transition.d.ts +34 -0
  25. package/dist/drawing-transition.d.ts.map +1 -0
  26. package/dist/drawing-transition.js +181 -0
  27. package/dist/drawing-transition.js.map +1 -0
  28. package/dist/drawing.d.ts +117 -0
  29. package/dist/drawing.d.ts.map +1 -0
  30. package/dist/drawing.js +337 -0
  31. package/dist/drawing.js.map +1 -0
  32. package/dist/element-label.d.ts +54 -0
  33. package/dist/element-label.d.ts.map +1 -0
  34. package/dist/element-label.js +377 -0
  35. package/dist/element-label.js.map +1 -0
  36. package/dist/element-style.d.ts +34 -0
  37. package/dist/element-style.d.ts.map +1 -0
  38. package/dist/element-style.js +51 -0
  39. package/dist/element-style.js.map +1 -0
  40. package/dist/element.d.ts +114 -0
  41. package/dist/element.d.ts.map +1 -0
  42. package/dist/element.js +514 -0
  43. package/dist/element.js.map +1 -0
  44. package/dist/element2term.d.ts +25 -0
  45. package/dist/element2term.d.ts.map +1 -0
  46. package/dist/element2term.js +245 -0
  47. package/dist/element2term.js.map +1 -0
  48. package/dist/elements/cables.d.ts +22 -0
  49. package/dist/elements/cables.d.ts.map +1 -0
  50. package/dist/elements/cables.js +100 -0
  51. package/dist/elements/cables.js.map +1 -0
  52. package/dist/elements/capacitor.d.ts +23 -0
  53. package/dist/elements/capacitor.d.ts.map +1 -0
  54. package/dist/elements/capacitor.js +93 -0
  55. package/dist/elements/capacitor.js.map +1 -0
  56. package/dist/elements/compound.d.ts +41 -0
  57. package/dist/elements/compound.d.ts.map +1 -0
  58. package/dist/elements/compound.js +266 -0
  59. package/dist/elements/compound.js.map +1 -0
  60. package/dist/elements/connectors.d.ts +81 -0
  61. package/dist/elements/connectors.d.ts.map +1 -0
  62. package/dist/elements/connectors.js +578 -0
  63. package/dist/elements/connectors.js.map +1 -0
  64. package/dist/elements/crystal.d.ts +8 -0
  65. package/dist/elements/crystal.d.ts.map +1 -0
  66. package/dist/elements/crystal.js +31 -0
  67. package/dist/elements/crystal.js.map +1 -0
  68. package/dist/elements/diode-more.d.ts +36 -0
  69. package/dist/elements/diode-more.d.ts.map +1 -0
  70. package/dist/elements/diode-more.js +233 -0
  71. package/dist/elements/diode-more.js.map +1 -0
  72. package/dist/elements/diode.d.ts +14 -0
  73. package/dist/elements/diode.d.ts.map +1 -0
  74. package/dist/elements/diode.js +58 -0
  75. package/dist/elements/diode.js.map +1 -0
  76. package/dist/elements/element-compound.d.ts +16 -0
  77. package/dist/elements/element-compound.d.ts.map +1 -0
  78. package/dist/elements/element-compound.js +68 -0
  79. package/dist/elements/element-compound.js.map +1 -0
  80. package/dist/elements/element-drawing.d.ts +10 -0
  81. package/dist/elements/element-drawing.d.ts.map +1 -0
  82. package/dist/elements/element-drawing.js +16 -0
  83. package/dist/elements/element-drawing.js.map +1 -0
  84. package/dist/elements/ground.d.ts +6 -0
  85. package/dist/elements/ground.d.ts.map +1 -0
  86. package/dist/elements/ground.js +30 -0
  87. package/dist/elements/ground.js.map +1 -0
  88. package/dist/elements/ic.d.ts +169 -0
  89. package/dist/elements/ic.d.ts.map +1 -0
  90. package/dist/elements/ic.js +816 -0
  91. package/dist/elements/ic.js.map +1 -0
  92. package/dist/elements/image.d.ts +9 -0
  93. package/dist/elements/image.d.ts.map +1 -0
  94. package/dist/elements/image.js +27 -0
  95. package/dist/elements/image.js.map +1 -0
  96. package/dist/elements/inductor.d.ts +15 -0
  97. package/dist/elements/inductor.d.ts.map +1 -0
  98. package/dist/elements/inductor.js +111 -0
  99. package/dist/elements/inductor.js.map +1 -0
  100. package/dist/elements/line.d.ts +8 -0
  101. package/dist/elements/line.d.ts.map +1 -0
  102. package/dist/elements/line.js +14 -0
  103. package/dist/elements/line.js.map +1 -0
  104. package/dist/elements/lines-arc-labels.d.ts +223 -0
  105. package/dist/elements/lines-arc-labels.d.ts.map +1 -0
  106. package/dist/elements/lines-arc-labels.js +822 -0
  107. package/dist/elements/lines-arc-labels.js.map +1 -0
  108. package/dist/elements/lines-elements.d.ts +89 -0
  109. package/dist/elements/lines-elements.d.ts.map +1 -0
  110. package/dist/elements/lines-elements.js +271 -0
  111. package/dist/elements/lines-elements.js.map +1 -0
  112. package/dist/elements/misc-elements.d.ts +25 -0
  113. package/dist/elements/misc-elements.d.ts.map +1 -0
  114. package/dist/elements/misc-elements.js +160 -0
  115. package/dist/elements/misc-elements.js.map +1 -0
  116. package/dist/elements/oneterm.d.ts +29 -0
  117. package/dist/elements/oneterm.d.ts.map +1 -0
  118. package/dist/elements/oneterm.js +163 -0
  119. package/dist/elements/oneterm.js.map +1 -0
  120. package/dist/elements/opamp.d.ts +11 -0
  121. package/dist/elements/opamp.d.ts.map +1 -0
  122. package/dist/elements/opamp.js +72 -0
  123. package/dist/elements/opamp.js.map +1 -0
  124. package/dist/elements/outlets.d.ts +39 -0
  125. package/dist/elements/outlets.d.ts.map +1 -0
  126. package/dist/elements/outlets.js +285 -0
  127. package/dist/elements/outlets.js.map +1 -0
  128. package/dist/elements/resistor-more.d.ts +42 -0
  129. package/dist/elements/resistor-more.d.ts.map +1 -0
  130. package/dist/elements/resistor-more.js +171 -0
  131. package/dist/elements/resistor-more.js.map +1 -0
  132. package/dist/elements/resistor.d.ts +6 -0
  133. package/dist/elements/resistor.d.ts.map +1 -0
  134. package/dist/elements/resistor.js +22 -0
  135. package/dist/elements/resistor.js.map +1 -0
  136. package/dist/elements/source-v.d.ts +3 -0
  137. package/dist/elements/source-v.d.ts.map +1 -0
  138. package/dist/elements/source-v.js +3 -0
  139. package/dist/elements/source-v.js.map +1 -0
  140. package/dist/elements/sources.d.ts +111 -0
  141. package/dist/elements/sources.d.ts.map +1 -0
  142. package/dist/elements/sources.js +519 -0
  143. package/dist/elements/sources.js.map +1 -0
  144. package/dist/elements/switches.d.ts +66 -0
  145. package/dist/elements/switches.d.ts.map +1 -0
  146. package/dist/elements/switches.js +328 -0
  147. package/dist/elements/switches.js.map +1 -0
  148. package/dist/elements/transformer.d.ts +17 -0
  149. package/dist/elements/transformer.d.ts.map +1 -0
  150. package/dist/elements/transformer.js +184 -0
  151. package/dist/elements/transformer.js.map +1 -0
  152. package/dist/elements/transistors.d.ts +197 -0
  153. package/dist/elements/transistors.d.ts.map +1 -0
  154. package/dist/elements/transistors.js +1009 -0
  155. package/dist/elements/transistors.js.map +1 -0
  156. package/dist/elements/tubes.d.ts +70 -0
  157. package/dist/elements/tubes.d.ts.map +1 -0
  158. package/dist/elements/tubes.js +386 -0
  159. package/dist/elements/tubes.js.map +1 -0
  160. package/dist/elements/twoports.d.ts +47 -0
  161. package/dist/elements/twoports.d.ts.map +1 -0
  162. package/dist/elements/twoports.js +231 -0
  163. package/dist/elements/twoports.js.map +1 -0
  164. package/dist/elements/twoterm-extras.d.ts +50 -0
  165. package/dist/elements/twoterm-extras.d.ts.map +1 -0
  166. package/dist/elements/twoterm-extras.js +243 -0
  167. package/dist/elements/twoterm-extras.js.map +1 -0
  168. package/dist/elements/twoterm.d.ts +4 -0
  169. package/dist/elements/twoterm.d.ts.map +1 -0
  170. package/dist/elements/twoterm.js +4 -0
  171. package/dist/elements/twoterm.js.map +1 -0
  172. package/dist/geometry/point.d.ts +28 -0
  173. package/dist/geometry/point.d.ts.map +1 -0
  174. package/dist/geometry/point.js +99 -0
  175. package/dist/geometry/point.js.map +1 -0
  176. package/dist/geometry/roundcorners.d.ts +7 -0
  177. package/dist/geometry/roundcorners.d.ts.map +1 -0
  178. package/dist/geometry/roundcorners.js +64 -0
  179. package/dist/geometry/roundcorners.js.map +1 -0
  180. package/dist/geometry/transform.d.ts +14 -0
  181. package/dist/geometry/transform.d.ts.map +1 -0
  182. package/dist/geometry/transform.js +33 -0
  183. package/dist/geometry/transform.js.map +1 -0
  184. package/dist/geometry/util.d.ts +12 -0
  185. package/dist/geometry/util.d.ts.map +1 -0
  186. package/dist/geometry/util.js +36 -0
  187. package/dist/geometry/util.js.map +1 -0
  188. package/dist/index.cjs +31456 -0
  189. package/dist/index.cjs.map +7 -0
  190. package/dist/index.d.ts +77 -0
  191. package/dist/index.d.ts.map +1 -0
  192. package/dist/index.js +68 -0
  193. package/dist/index.js.map +1 -0
  194. package/dist/json/anchor-ref.d.ts +5 -0
  195. package/dist/json/anchor-ref.d.ts.map +1 -0
  196. package/dist/json/anchor-ref.js +35 -0
  197. package/dist/json/anchor-ref.js.map +1 -0
  198. package/dist/json/mount.d.ts +60 -0
  199. package/dist/json/mount.d.ts.map +1 -0
  200. package/dist/json/mount.js +369 -0
  201. package/dist/json/mount.js.map +1 -0
  202. package/dist/json/registry.d.ts +7 -0
  203. package/dist/json/registry.d.ts.map +1 -0
  204. package/dist/json/registry.js +323 -0
  205. package/dist/json/registry.js.map +1 -0
  206. package/dist/json/render.d.ts +59 -0
  207. package/dist/json/render.d.ts.map +1 -0
  208. package/dist/json/render.js +113 -0
  209. package/dist/json/render.js.map +1 -0
  210. package/dist/json/theme.d.ts +18 -0
  211. package/dist/json/theme.d.ts.map +1 -0
  212. package/dist/json/theme.js +57 -0
  213. package/dist/json/theme.js.map +1 -0
  214. package/dist/json/types.d.ts +42 -0
  215. package/dist/json/types.d.ts.map +1 -0
  216. package/dist/json/types.js +2 -0
  217. package/dist/json/types.js.map +1 -0
  218. package/dist/json/validate.d.ts +11 -0
  219. package/dist/json/validate.d.ts.map +1 -0
  220. package/dist/json/validate.js +77 -0
  221. package/dist/json/validate.js.map +1 -0
  222. package/dist/label-hint.d.ts +11 -0
  223. package/dist/label-hint.d.ts.map +1 -0
  224. package/dist/label-hint.js +2 -0
  225. package/dist/label-hint.js.map +1 -0
  226. package/dist/logic/and.d.ts +13 -0
  227. package/dist/logic/and.d.ts.map +1 -0
  228. package/dist/logic/and.js +63 -0
  229. package/dist/logic/and.js.map +1 -0
  230. package/dist/logic/bitfield.d.ts +32 -0
  231. package/dist/logic/bitfield.d.ts.map +1 -0
  232. package/dist/logic/bitfield.js +271 -0
  233. package/dist/logic/bitfield.js.map +1 -0
  234. package/dist/logic/buffer.d.ts +11 -0
  235. package/dist/logic/buffer.d.ts.map +1 -0
  236. package/dist/logic/buffer.js +46 -0
  237. package/dist/logic/buffer.js.map +1 -0
  238. package/dist/logic/extras.d.ts +36 -0
  239. package/dist/logic/extras.d.ts.map +1 -0
  240. package/dist/logic/extras.js +211 -0
  241. package/dist/logic/extras.js.map +1 -0
  242. package/dist/logic/kmap.d.ts +16 -0
  243. package/dist/logic/kmap.d.ts.map +1 -0
  244. package/dist/logic/kmap.js +163 -0
  245. package/dist/logic/kmap.js.map +1 -0
  246. package/dist/logic/or.d.ts +18 -0
  247. package/dist/logic/or.d.ts.map +1 -0
  248. package/dist/logic/or.js +117 -0
  249. package/dist/logic/or.js.map +1 -0
  250. package/dist/logic/timing.d.ts +44 -0
  251. package/dist/logic/timing.d.ts.map +1 -0
  252. package/dist/logic/timing.js +791 -0
  253. package/dist/logic/timing.js.map +1 -0
  254. package/dist/logic/tristate.d.ts +11 -0
  255. package/dist/logic/tristate.d.ts.map +1 -0
  256. package/dist/logic/tristate.js +48 -0
  257. package/dist/logic/tristate.js.map +1 -0
  258. package/dist/math-render.d.ts +9 -0
  259. package/dist/math-render.d.ts.map +1 -0
  260. package/dist/math-render.js +53 -0
  261. package/dist/math-render.js.map +1 -0
  262. package/dist/package-api.d.ts +20 -0
  263. package/dist/package-api.d.ts.map +1 -0
  264. package/dist/package-api.js +75 -0
  265. package/dist/package-api.js.map +1 -0
  266. package/dist/params.d.ts +6 -0
  267. package/dist/params.d.ts.map +1 -0
  268. package/dist/params.js +35 -0
  269. package/dist/params.js.map +1 -0
  270. package/dist/react/index.d.ts +22 -0
  271. package/dist/react/index.d.ts.map +1 -0
  272. package/dist/react/index.js +52 -0
  273. package/dist/react/index.js.map +1 -0
  274. package/dist/schemdraw-ts.bundle.js +30448 -0
  275. package/dist/schemdraw-ts.bundle.js.map +7 -0
  276. package/dist/segment.d.ts +267 -0
  277. package/dist/segment.d.ts.map +1 -0
  278. package/dist/segment.js +844 -0
  279. package/dist/segment.js.map +1 -0
  280. package/dist/style.d.ts +18 -0
  281. package/dist/style.d.ts.map +1 -0
  282. package/dist/style.js +230 -0
  283. package/dist/style.js.map +1 -0
  284. package/dist/subsystems/dsp.d.ts +65 -0
  285. package/dist/subsystems/dsp.d.ts.map +1 -0
  286. package/dist/subsystems/dsp.js +267 -0
  287. package/dist/subsystems/dsp.js.map +1 -0
  288. package/dist/subsystems/flow.d.ts +92 -0
  289. package/dist/subsystems/flow.d.ts.map +1 -0
  290. package/dist/subsystems/flow.js +315 -0
  291. package/dist/subsystems/flow.js.map +1 -0
  292. package/dist/subsystems/index.d.ts +22 -0
  293. package/dist/subsystems/index.d.ts.map +1 -0
  294. package/dist/subsystems/index.js +22 -0
  295. package/dist/subsystems/index.js.map +1 -0
  296. package/dist/subsystems/parsing.d.ts +41 -0
  297. package/dist/subsystems/parsing.d.ts.map +1 -0
  298. package/dist/subsystems/parsing.js +456 -0
  299. package/dist/subsystems/parsing.js.map +1 -0
  300. package/dist/subsystems/pictorial.d.ts +73 -0
  301. package/dist/subsystems/pictorial.d.ts.map +1 -0
  302. package/dist/subsystems/pictorial.js +469 -0
  303. package/dist/subsystems/pictorial.js.map +1 -0
  304. package/dist/svg/constants.d.ts +5 -0
  305. package/dist/svg/constants.d.ts.map +1 -0
  306. package/dist/svg/constants.js +5 -0
  307. package/dist/svg/constants.js.map +1 -0
  308. package/dist/svg/figure.d.ts +157 -0
  309. package/dist/svg/figure.d.ts.map +1 -0
  310. package/dist/svg/figure.js +634 -0
  311. package/dist/svg/figure.js.map +1 -0
  312. package/dist/svg/fmt.d.ts +2 -0
  313. package/dist/svg/fmt.d.ts.map +1 -0
  314. package/dist/svg/fmt.js +7 -0
  315. package/dist/svg/fmt.js.map +1 -0
  316. package/dist/svg/svg-style.d.ts +15 -0
  317. package/dist/svg/svg-style.d.ts.map +1 -0
  318. package/dist/svg/svg-style.js +46 -0
  319. package/dist/svg/svg-style.js.map +1 -0
  320. package/dist/types.d.ts +39 -0
  321. package/dist/types.d.ts.map +1 -0
  322. package/dist/types.js +21 -0
  323. package/dist/types.js.map +1 -0
  324. package/dist/version.d.ts +3 -0
  325. package/dist/version.d.ts.map +1 -0
  326. package/dist/version.js +3 -0
  327. package/dist/version.js.map +1 -0
  328. package/dist/vue/index.d.ts +43 -0
  329. package/dist/vue/index.d.ts.map +1 -0
  330. package/dist/vue/index.js +55 -0
  331. package/dist/vue/index.js.map +1 -0
  332. package/package.json +71 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Drawing canvas — aligned with Python `schemdraw.Drawing` (SVG subset).
3
+ */
4
+ import { ImageFormat, type BBox, type ImageType } from "./types.js";
5
+ import { type SchemdrawStyle } from "./config.js";
6
+ import { Point, type XY } from "./geometry/point.js";
7
+ import { Container } from "./container.js";
8
+ import { Element } from "./element.js";
9
+ import type { SegmentLike } from "./segment.js";
10
+ /** Metadata attached to an element for interactive / introspection use. */
11
+ export interface ElementMeta {
12
+ id: string;
13
+ type: string;
14
+ tooltip?: string;
15
+ }
16
+ /**
17
+ * 电路画布。构造返回的实例经 `Proxy` 支持 Python 式锚点:`drawing.foo` 在已 `setAnchor('foo')` 且不与成员名冲突时得到 {@link Point}。
18
+ * TypeScript 若报「无此属性」,可用 {@link Drawing.getAnchor} 或 `anchors['foo']`。
19
+ */
20
+ export declare class Drawing {
21
+ readonly elements: Element[];
22
+ /** Named positions in drawing coordinates (`set_anchor` / Python `Drawing.anchors`). */
23
+ anchors: Record<string, [number, number]>;
24
+ /** Extra SVG `<defs>` fragments (Python `Drawing.svgdefs`). */
25
+ readonly svgdefs: string[];
26
+ dwgparams: Record<string, unknown>;
27
+ _here: Point;
28
+ _theta: number;
29
+ private readonly _state;
30
+ outfile?: string;
31
+ private readonly _elementMeta;
32
+ setElementMeta(el: Element, meta: ElementMeta): void;
33
+ getElementMeta(el: Element): ElementMeta | undefined;
34
+ /**
35
+ * Current placement position (Python `Drawing.here` / `_here`).
36
+ * Get/set both call `push_element(None)` like Python — flushes any pending implicit `add`.
37
+ */
38
+ get here(): Point;
39
+ set here(v: Point | XY);
40
+ /** Current drawing direction in degrees (Python `Drawing.theta`). Getter flushes implicit stack. */
41
+ get theta(): number;
42
+ set theta(v: number);
43
+ /** Two-terminal default length (Python `Drawing.unit`). */
44
+ get unit(): number;
45
+ set unit(v: number);
46
+ constructor(opts?: Partial<SchemdrawStyle> & {
47
+ file?: string;
48
+ });
49
+ /**
50
+ * Typed read of a named anchor (same coordinates as Python `drawing.name` after `set_anchor`).
51
+ * Dot access `drawing.name` also works on instances returned by `new Drawing()` / `withDrawing`.
52
+ */
53
+ getAnchor(name: string): Point | undefined;
54
+ enter(): void;
55
+ exit(): void;
56
+ containsElement(el: Element): boolean;
57
+ add(el: Element): Element;
58
+ /** Remove last element; restore `here` / `theta` from last remaining (Python `Drawing.undo`). */
59
+ undo(): void;
60
+ /** Merge drawing defaults (Python `Drawing.config`). */
61
+ config(partial: Partial<SchemdrawStyle>): void;
62
+ /** Append multiple elements (Python `Drawing.add_elements`). */
63
+ addElements(...els: Element[]): void;
64
+ /**
65
+ * Grouping box for implicit `add` stack (Python `Drawing.container()` / `with drawing.container():`).
66
+ * Call {@link Container.enter} before child elements and {@link Container.exit} after, then {@link add} the container.
67
+ */
68
+ container(opts?: {
69
+ cornerradius?: number;
70
+ padx?: number;
71
+ pady?: number;
72
+ }): Container;
73
+ /** Offset the current placement position (Python `Drawing.move`). */
74
+ move(dx?: number, dy?: number): void;
75
+ /** Set placement position relative to `ref` (Python `Drawing.move_from`). */
76
+ moveFrom(ref: Point, dx?: number, dy?: number, theta?: number): void;
77
+ /** Save `here` / `theta` on a stack (Python `Drawing.push`). */
78
+ push(): void;
79
+ /** Restore last pushed `here` / `theta` (Python `Drawing.pop`). */
80
+ pop(): void;
81
+ /**
82
+ * Save / restore `here` and `theta` around a callback — same stack as `push`/`pop`
83
+ * (Python `with drawing.hold():`).
84
+ */
85
+ withHold<T>(fn: () => T): T;
86
+ /**
87
+ * Manual alternative to `withHold`: call `hold()` then `close()` when done
88
+ * (Python `HoldState` context manager).
89
+ */
90
+ hold(): {
91
+ close: () => void;
92
+ };
93
+ /** Append raw XML inside `<defs>` (Python `Drawing.add_svgdef`). */
94
+ addSvgDef(svgdef: string): void;
95
+ /** Record a named anchor at the current position (Python `Drawing.set_anchor`). */
96
+ setAnchor(name: string): void;
97
+ /**
98
+ * Flattened transformed segments — `params` = user ∪ elm ∪ defaults (**no** drawing `_dwgparams`),
99
+ * aligned with Python `Drawing.get_segments`.
100
+ */
101
+ getSegments(): SegmentLike[];
102
+ /**
103
+ * Write SVG to a file (Node only). Extension should be `.svg`.
104
+ * In browser environments this method throws — use {@link toSvgString} instead.
105
+ */
106
+ save(path: string): Promise<void>;
107
+ getBBox(): BBox;
108
+ /** Render to SVG string (user units, SVG backend). */
109
+ toSvgString(): string;
110
+ /**
111
+ * Python `Drawing.get_imagedata` — 当前构建仅支持 SVG(UTF-8 字节);PNG 等栅格格式未接入。
112
+ */
113
+ getImageData(fmt?: ImageFormat | ImageType | string): Uint8Array;
114
+ }
115
+ /** Run `fn` with drawing stack (implicit `add` for elements created inside). */
116
+ export declare function withDrawing(fn: (d: Drawing) => void, opts?: Partial<SchemdrawStyle>): Drawing;
117
+ //# sourceMappingURL=drawing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawing.d.ts","sourceRoot":"","sources":["../src/drawing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Drawing canvas — aligned with Python `schemdraw.Drawing` (SVG subset).
3
+ */
4
+ import { ImageFormat, bbox } from "./types.js";
5
+ import { getGlobalStyle } from "./config.js";
6
+ import { mergeParams, mergeParamsFirstWins } from "./params.js";
7
+ import { Point } from "./geometry/point.js";
8
+ import { popDrawing, pushDrawing, pushElement } from "./drawing-stack.js";
9
+ import { Container } from "./container.js";
10
+ import { SvgFigure } from "./svg/figure.js";
11
+ import { assignGradientFillIds } from "./drawing-gradient.js";
12
+ import { buildConnectionGraph, assignLeadTransitionIds } from "./drawing-transition.js";
13
+ import { PT_PER_IN } from "./svg/constants.js";
14
+ /** True if `prop` is a real field/getter/method on `Drawing` (not a dynamic anchor name). */
15
+ function drawingHasProperty(obj, prop) {
16
+ let o = obj;
17
+ while (o) {
18
+ if (Object.prototype.hasOwnProperty.call(o, prop)) {
19
+ return true;
20
+ }
21
+ if (Object.getOwnPropertyDescriptor(o, prop) !== undefined) {
22
+ return true;
23
+ }
24
+ o = Object.getPrototypeOf(o);
25
+ }
26
+ return false;
27
+ }
28
+ /**
29
+ * 电路画布。构造返回的实例经 `Proxy` 支持 Python 式锚点:`drawing.foo` 在已 `setAnchor('foo')` 且不与成员名冲突时得到 {@link Point}。
30
+ * TypeScript 若报「无此属性」,可用 {@link Drawing.getAnchor} 或 `anchors['foo']`。
31
+ */
32
+ export class Drawing {
33
+ elements = [];
34
+ /** Named positions in drawing coordinates (`set_anchor` / Python `Drawing.anchors`). */
35
+ anchors = {};
36
+ /** Extra SVG `<defs>` fragments (Python `Drawing.svgdefs`). */
37
+ svgdefs = [];
38
+ dwgparams = {};
39
+ _here = new Point(0, 0);
40
+ _theta = 0;
41
+ _state = [];
42
+ outfile;
43
+ _elementMeta = new Map();
44
+ setElementMeta(el, meta) {
45
+ this._elementMeta.set(el, meta);
46
+ }
47
+ getElementMeta(el) {
48
+ return this._elementMeta.get(el);
49
+ }
50
+ /**
51
+ * Current placement position (Python `Drawing.here` / `_here`).
52
+ * Get/set both call `push_element(None)` like Python — flushes any pending implicit `add`.
53
+ */
54
+ get here() {
55
+ pushElement(null);
56
+ return this._here;
57
+ }
58
+ set here(v) {
59
+ pushElement(null);
60
+ this._here = v instanceof Point ? v : Point.fromXY(v);
61
+ }
62
+ /** Current drawing direction in degrees (Python `Drawing.theta`). Getter flushes implicit stack. */
63
+ get theta() {
64
+ pushElement(null);
65
+ return this._theta;
66
+ }
67
+ set theta(v) {
68
+ this._theta = v;
69
+ }
70
+ /** Two-terminal default length (Python `Drawing.unit`). */
71
+ get unit() {
72
+ return this.dwgparams.unit ?? 3;
73
+ }
74
+ set unit(v) {
75
+ this.dwgparams.unit = v;
76
+ }
77
+ constructor(opts = {}) {
78
+ const g = getGlobalStyle();
79
+ this.dwgparams = mergeParams(g, opts);
80
+ if (opts.file !== undefined) {
81
+ this.outfile = opts.file;
82
+ }
83
+ return drawingProxy(this);
84
+ }
85
+ /**
86
+ * Typed read of a named anchor (same coordinates as Python `drawing.name` after `set_anchor`).
87
+ * Dot access `drawing.name` also works on instances returned by `new Drawing()` / `withDrawing`.
88
+ */
89
+ getAnchor(name) {
90
+ const xy = this.anchors[name];
91
+ return xy === undefined ? undefined : new Point(xy[0], xy[1]);
92
+ }
93
+ enter() {
94
+ pushDrawing(this);
95
+ }
96
+ exit() {
97
+ pushElement(null);
98
+ popDrawing(this);
99
+ }
100
+ containsElement(el) {
101
+ return this.elements.includes(el);
102
+ }
103
+ add(el) {
104
+ const r = el._place(this._here.toTuple(), this._theta, this.dwgparams);
105
+ this.elements.push(el);
106
+ this._here = r.point;
107
+ this._theta = r.theta;
108
+ return el;
109
+ }
110
+ /** Remove last element; restore `here` / `theta` from last remaining (Python `Drawing.undo`). */
111
+ undo() {
112
+ this.elements.pop();
113
+ if (this.elements.length > 0) {
114
+ const last = this.elements[this.elements.length - 1];
115
+ this._here = last.absdrop.point;
116
+ this._theta = last.absdrop.theta;
117
+ }
118
+ else {
119
+ this._here = new Point(0, 0);
120
+ this._theta = 0;
121
+ }
122
+ }
123
+ /** Merge drawing defaults (Python `Drawing.config`). */
124
+ config(partial) {
125
+ this.dwgparams = mergeParams(this.dwgparams, partial);
126
+ }
127
+ /** Append multiple elements (Python `Drawing.add_elements`). */
128
+ addElements(...els) {
129
+ for (const el of els) {
130
+ this.add(el);
131
+ }
132
+ }
133
+ /**
134
+ * Grouping box for implicit `add` stack (Python `Drawing.container()` / `with drawing.container():`).
135
+ * Call {@link Container.enter} before child elements and {@link Container.exit} after, then {@link add} the container.
136
+ */
137
+ container(opts) {
138
+ return new Container(this, { ...(opts ?? {}) });
139
+ }
140
+ /** Offset the current placement position (Python `Drawing.move`). */
141
+ move(dx = 0, dy = 0) {
142
+ this._here = this._here.add([dx, dy]);
143
+ }
144
+ /** Set placement position relative to `ref` (Python `Drawing.move_from`). */
145
+ moveFrom(ref, dx = 0, dy = 0, theta) {
146
+ this._here = ref.add([dx, dy]);
147
+ if (theta !== undefined) {
148
+ this._theta = theta;
149
+ }
150
+ }
151
+ /** Save `here` / `theta` on a stack (Python `Drawing.push`). */
152
+ push() {
153
+ this._state.push([new Point(this._here.x, this._here.y), this._theta]);
154
+ }
155
+ /** Restore last pushed `here` / `theta` (Python `Drawing.pop`). */
156
+ pop() {
157
+ const s = this._state.pop();
158
+ if (s !== undefined) {
159
+ this._here = s[0];
160
+ this._theta = s[1];
161
+ }
162
+ }
163
+ /**
164
+ * Save / restore `here` and `theta` around a callback — same stack as `push`/`pop`
165
+ * (Python `with drawing.hold():`).
166
+ */
167
+ withHold(fn) {
168
+ this.push();
169
+ try {
170
+ return fn();
171
+ }
172
+ finally {
173
+ this.pop();
174
+ }
175
+ }
176
+ /**
177
+ * Manual alternative to `withHold`: call `hold()` then `close()` when done
178
+ * (Python `HoldState` context manager).
179
+ */
180
+ hold() {
181
+ this.push();
182
+ const d = this;
183
+ return {
184
+ close: () => {
185
+ d.pop();
186
+ },
187
+ };
188
+ }
189
+ /** Append raw XML inside `<defs>` (Python `Drawing.add_svgdef`). */
190
+ addSvgDef(svgdef) {
191
+ this.svgdefs.push(svgdef);
192
+ }
193
+ /** Record a named anchor at the current position (Python `Drawing.set_anchor`). */
194
+ setAnchor(name) {
195
+ this.anchors[name] = this._here.toTuple();
196
+ }
197
+ /**
198
+ * Flattened transformed segments — `params` = user ∪ elm ∪ defaults (**no** drawing `_dwgparams`),
199
+ * aligned with Python `Drawing.get_segments`.
200
+ */
201
+ getSegments() {
202
+ const out = [];
203
+ for (const el of this.elements) {
204
+ const params = mergeParamsFirstWins(el.userParams, el.elmParams, el.defaults);
205
+ for (const s of el.segments) {
206
+ out.push(s.xform(el.transform, params));
207
+ }
208
+ }
209
+ return out;
210
+ }
211
+ /**
212
+ * Write SVG to a file (Node only). Extension should be `.svg`.
213
+ * In browser environments this method throws — use {@link toSvgString} instead.
214
+ */
215
+ async save(path) {
216
+ try {
217
+ const { writeFileSync } = await import("node:fs");
218
+ writeFileSync(path, this.toSvgString(), "utf8");
219
+ }
220
+ catch (err) {
221
+ if (err instanceof Error && /Cannot find module|not supported|Failed to resolve|dynamically imported module|Module not found/.test(err.message)) {
222
+ throw new Error("Drawing.save() requires Node.js. In the browser, use drawing.toSvgString() instead.");
223
+ }
224
+ throw err;
225
+ }
226
+ }
227
+ getBBox() {
228
+ let xmin = Infinity;
229
+ let ymin = Infinity;
230
+ let xmax = -Infinity;
231
+ let ymax = -Infinity;
232
+ for (const el of this.elements) {
233
+ /** Include label segments so `toSvgString` viewBox matches Python (geometry + text). */
234
+ const b = el.getBBox(true, true);
235
+ xmin = Math.min(xmin, b.xmin);
236
+ ymin = Math.min(ymin, b.ymin);
237
+ xmax = Math.max(xmax, b.xmax);
238
+ ymax = Math.max(ymax, b.ymax);
239
+ }
240
+ if (!Number.isFinite(xmin)) {
241
+ return bbox(0, 0, 0, 0);
242
+ }
243
+ return bbox(xmin, ymin, xmax, ymax);
244
+ }
245
+ /** Render to SVG string (user units, SVG backend). */
246
+ toSvgString() {
247
+ const bb = this.getBBox();
248
+ const { defsXml, cleanup } = assignGradientFillIds(this.elements);
249
+ let transDefsXml = "";
250
+ let transCleanup = () => { };
251
+ if (this.dwgparams.colorTransition) {
252
+ const ipu = this.dwgparams.inches_per_unit ?? 0.5;
253
+ const scale = PT_PER_IN * ipu;
254
+ const edges = buildConnectionGraph(this.elements);
255
+ const trans = assignLeadTransitionIds(this.elements, edges, scale);
256
+ transDefsXml = trans.defsXml;
257
+ transCleanup = trans.cleanup;
258
+ }
259
+ try {
260
+ const defsParts = [this.svgdefs.join(""), defsXml, transDefsXml].filter((s) => s.length > 0);
261
+ const fig = new SvgFigure(bb, {
262
+ inchesPerUnit: this.dwgparams.inches_per_unit,
263
+ margin: this.dwgparams.margin,
264
+ extraDefs: defsParts.length > 0 ? defsParts.join("") : undefined,
265
+ });
266
+ const bg = this.dwgparams.bgcolor;
267
+ if (bg) {
268
+ fig.bgcolor(bg);
269
+ }
270
+ for (const el of this.elements) {
271
+ const meta = this._elementMeta.get(el);
272
+ if (this.dwgparams.interactive && meta) {
273
+ const attrs = {
274
+ 'data-id': meta.id,
275
+ 'data-type': meta.type,
276
+ 'class': 'sd-el',
277
+ };
278
+ if (meta.tooltip) {
279
+ attrs['data-tooltip'] = meta.tooltip;
280
+ }
281
+ const titleText = meta.tooltip || `${meta.id} — ${meta.type}`;
282
+ fig.beginGroup(attrs, titleText);
283
+ }
284
+ el._draw(fig);
285
+ if (this.dwgparams.interactive && meta) {
286
+ fig.endGroup();
287
+ }
288
+ }
289
+ return fig.toSvgString();
290
+ }
291
+ finally {
292
+ cleanup();
293
+ transCleanup();
294
+ }
295
+ }
296
+ /**
297
+ * Python `Drawing.get_imagedata` — 当前构建仅支持 SVG(UTF-8 字节);PNG 等栅格格式未接入。
298
+ */
299
+ getImageData(fmt = ImageFormat.SVG) {
300
+ const s = typeof fmt === "string" ? fmt.toLowerCase() : String(fmt).toLowerCase();
301
+ if (s !== "svg") {
302
+ throw new Error(`@skillpet/circuit: getImageData('${fmt}') is not supported; only SVG bytes are available in this build.`);
303
+ }
304
+ return new TextEncoder().encode(this.toSvgString());
305
+ }
306
+ }
307
+ /**
308
+ * Python `Drawing.__getattr__`: `drawing.anchorName` resolves to `Point` when `anchorName` is in `anchors`
309
+ * and is not a real `Drawing` member (methods, `elements`, `anchors`, etc.).
310
+ */
311
+ function drawingProxy(drawing) {
312
+ return new Proxy(drawing, {
313
+ get(target, prop, receiver) {
314
+ if (typeof prop === "symbol") {
315
+ return Reflect.get(target, prop, receiver);
316
+ }
317
+ if (!drawingHasProperty(target, prop) && prop in target.anchors) {
318
+ const xy = target.anchors[prop];
319
+ return new Point(xy[0], xy[1]);
320
+ }
321
+ return Reflect.get(target, prop, receiver);
322
+ },
323
+ });
324
+ }
325
+ /** Run `fn` with drawing stack (implicit `add` for elements created inside). */
326
+ export function withDrawing(fn, opts) {
327
+ const d = new Drawing(opts ?? {});
328
+ d.enter();
329
+ try {
330
+ fn(d);
331
+ }
332
+ finally {
333
+ d.exit();
334
+ }
335
+ return d;
336
+ }
337
+ //# sourceMappingURL=drawing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawing.js","sourceRoot":"","sources":["../src/drawing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * User label placement — subset aligned with Python `Element._place_label` / `Label`.
3
+ */
4
+ import { Point, type XY } from "./geometry/point.js";
5
+ import type { Element } from "./element.js";
6
+ export interface ElementLabelSpec {
7
+ /** Single line or list (list → distributed along `loc` like Python). */
8
+ text: string | readonly string[];
9
+ loc?: string | null;
10
+ ofst?: number | XY;
11
+ halign?: "left" | "center" | "right";
12
+ valign?: "top" | "center" | "bottom" | "base";
13
+ /** `true` = rotate with element (`theta`); number = extra local degrees. */
14
+ rotate?: boolean | number;
15
+ fontsize?: number;
16
+ font?: string;
17
+ mathfont?: string;
18
+ color?: string;
19
+ href?: string | null;
20
+ decoration?: string | null;
21
+ }
22
+ type Halign = "left" | "center" | "right";
23
+ type Valign = "top" | "center" | "bottom" | "base";
24
+ /**
25
+ * Python `Element._position_label`: when drawing angle is in (90°, 270°], swap edge `loc`
26
+ * so a logical "top" label stays visually above the body (see `elements.py`).
27
+ */
28
+ export declare function swapLabelLocForTheta(loc: string, thetaDeg: number): string;
29
+ /** Python `_position_label` rotation part (degrees) for `_align_label` (`th = theta - label.rotate`). */
30
+ export declare function resolveLabelRotateDeg(spec: ElementLabelSpec, thetaDeg: number): number;
31
+ export type BBoxLike = {
32
+ xmin: number;
33
+ xmax: number;
34
+ ymin: number;
35
+ ymax: number;
36
+ };
37
+ /**
38
+ * Python `Element._align_label` (subset): suggested `halign`/`valign`/`ofst` Point in local coords.
39
+ * Caller supplies `loc` after `_position_label` (e.g. `swapLabelLocForTheta`), bbox without text, and
40
+ * `ofstIn` after flip/reverse on tuple and default fill (scalar lblofst when undefined).
41
+ */
42
+ export declare function alignLabelForPlace(el: Element, loc: string, thetaDeg: number, labelRotateDeg: number, ofstIn: number | XY, bb: BBoxLike): {
43
+ halign: Halign;
44
+ valign: Valign;
45
+ ofst: Point;
46
+ };
47
+ /**
48
+ * Append `SegmentText` for user labels (local coords). Caller must truncate segments first.
49
+ */
50
+ export declare function placeElementLabels(el: Element, thetaDeg: number, specs: readonly ElementLabelSpec[]): void;
51
+ /** Build `ElementLabelSpec[]` from constructor params (Python `toplabel` / `label` / …). */
52
+ export declare function buildLabelSpecsFromParams(params: Record<string, unknown>, _thetaDeg: number): ElementLabelSpec[];
53
+ export {};
54
+ //# sourceMappingURL=element-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-label.d.ts","sourceRoot":"","sources":["../src/element-label.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1C,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAenD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB1E;AAED,yGAAyG;AACzG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAetF;AAcD,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GAAG,EAAE,EACnB,EAAE,EAAE,QAAQ,GACX;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAuFjD;AAgBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAwJ1G;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAuDhH"}