schematic-symbols 0.0.120 → 0.0.122

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. package/dist/index.d.ts +25 -5
  2. package/dist/index.js +1658 -704
  3. package/dist/index.js.map +1 -1
  4. package/package.json +2 -5
  5. package/drawing/arc.ts +0 -31
  6. package/drawing/arrow.ts +0 -41
  7. package/drawing/box.ts +0 -5
  8. package/drawing/circle.ts +0 -7
  9. package/drawing/cubicBezierCurveArc.ts +0 -28
  10. package/drawing/defineSymbol.ts +0 -16
  11. package/drawing/getSvg.ts +0 -199
  12. package/drawing/index.ts +0 -10
  13. package/drawing/mapColor.ts +0 -10
  14. package/drawing/modify-symbol/modify-symbol.ts +0 -97
  15. package/drawing/ninePointAnchorToSvgAnchor.ts +0 -11
  16. package/drawing/path.ts +0 -5
  17. package/drawing/pathToSvgD.ts +0 -22
  18. package/drawing/resizeSymbol.ts +0 -67
  19. package/drawing/rotateSymbol.ts +0 -324
  20. package/drawing/svgPathToPoints.ts +0 -109
  21. package/drawing/text.ts +0 -8
  22. package/drawing/typeguards.ts +0 -155
  23. package/drawing/types.ts +0 -93
  24. package/drawing/utils/getBoundsOfPrimitives.ts +0 -51
  25. package/drawing/utils/makeYUpPositive.ts +0 -46
  26. package/index.ts +0 -24
  27. package/symbols/SPDT_switch_horz.ts +0 -22
  28. package/symbols/SPDT_switch_vert.ts +0 -20
  29. package/symbols/SPST_switch_horz.ts +0 -12
  30. package/symbols/SPST_switch_vert.ts +0 -20
  31. package/symbols/ac_voltmeter_horz.ts +0 -31
  32. package/symbols/ac_voltmeter_vert.ts +0 -8
  33. package/symbols/avalanche_diode_horz.ts +0 -19
  34. package/symbols/avalanche_diode_vert.ts +0 -10
  35. package/symbols/battery_horz.ts +0 -20
  36. package/symbols/battery_vert.ts +0 -6
  37. package/symbols/boxresistor_down.ts +0 -33
  38. package/symbols/boxresistor_left.ts +0 -33
  39. package/symbols/boxresistor_right.ts +0 -33
  40. package/symbols/boxresistor_up.ts +0 -33
  41. package/symbols/capacitor_down.ts +0 -34
  42. package/symbols/capacitor_left.ts +0 -11
  43. package/symbols/capacitor_polarized_down.ts +0 -34
  44. package/symbols/capacitor_polarized_left.ts +0 -10
  45. package/symbols/capacitor_polarized_right.ts +0 -10
  46. package/symbols/capacitor_polarized_up.ts +0 -34
  47. package/symbols/capacitor_right.ts +0 -10
  48. package/symbols/capacitor_up.ts +0 -34
  49. package/symbols/constant_current_diode_horz.ts +0 -9
  50. package/symbols/constant_current_diode_vert.ts +0 -11
  51. package/symbols/crystal_4pin_horz.ts +0 -11
  52. package/symbols/crystal_4pin_vert.ts +0 -10
  53. package/symbols/crystal_horz.ts +0 -9
  54. package/symbols/crystal_vert.ts +0 -10
  55. package/symbols/darlington_pair_transistor_horz.ts +0 -10
  56. package/symbols/darlington_pair_transistor_vert.ts +0 -12
  57. package/symbols/dc_ammeter_horz.ts +0 -32
  58. package/symbols/dc_ammeter_vert.ts +0 -51
  59. package/symbols/dc_voltmeter_horz.ts +0 -31
  60. package/symbols/dc_voltmeter_vert.ts +0 -19
  61. package/symbols/diac_horz.ts +0 -9
  62. package/symbols/diac_vert.ts +0 -16
  63. package/symbols/diode_down.ts +0 -4
  64. package/symbols/diode_left.ts +0 -4
  65. package/symbols/diode_right.ts +0 -9
  66. package/symbols/diode_up.ts +0 -4
  67. package/symbols/dpdt_switch_horz.ts +0 -26
  68. package/symbols/dpdt_switch_vert.ts +0 -20
  69. package/symbols/dpst_switch_horz.ts +0 -23
  70. package/symbols/dpst_switch_vert.ts +0 -20
  71. package/symbols/filled_diode_horz.ts +0 -9
  72. package/symbols/filled_diode_vert.ts +0 -4
  73. package/symbols/frequency_meter_horz.ts +0 -32
  74. package/symbols/frequency_meter_vert.ts +0 -19
  75. package/symbols/fuse_horz.ts +0 -24
  76. package/symbols/fuse_vert.ts +0 -4
  77. package/symbols/ground_horz.ts +0 -37
  78. package/symbols/ground_vert.ts +0 -4
  79. package/symbols/gunn_diode_horz.ts +0 -11
  80. package/symbols/gunn_diode_vert.ts +0 -11
  81. package/symbols/icled_down.ts +0 -4
  82. package/symbols/icled_left.ts +0 -4
  83. package/symbols/icled_right.ts +0 -11
  84. package/symbols/icled_up.ts +0 -27
  85. package/symbols/igbt_transistor_horz.ts +0 -10
  86. package/symbols/igbt_transistor_vert.ts +0 -21
  87. package/symbols/illuminated_push_button_normally_open_horz.ts +0 -9
  88. package/symbols/illuminated_push_button_normally_open_vert.ts +0 -20
  89. package/symbols/inductor_down.ts +0 -4
  90. package/symbols/inductor_left.ts +0 -4
  91. package/symbols/inductor_right.ts +0 -20
  92. package/symbols/inductor_up.ts +0 -4
  93. package/symbols/laser_diode_horz.ts +0 -10
  94. package/symbols/laser_diode_vert.ts +0 -13
  95. package/symbols/led_down.ts +0 -4
  96. package/symbols/led_left.ts +0 -4
  97. package/symbols/led_right.ts +0 -20
  98. package/symbols/led_up.ts +0 -27
  99. package/symbols/light_dependent_resistor_horz.ts +0 -20
  100. package/symbols/light_dependent_resistor_vert.ts +0 -20
  101. package/symbols/mosfet_depletion_normally_on_horz.ts +0 -19
  102. package/symbols/mosfet_depletion_normally_on_vert.ts +0 -21
  103. package/symbols/mushroom_head_normally_open_momentary_horz.ts +0 -20
  104. package/symbols/mushroom_head_normally_open_momentary_vert.ts +0 -23
  105. package/symbols/n_channel_d_mosfet_transistor_horz.ts +0 -20
  106. package/symbols/n_channel_d_mosfet_transistor_vert.ts +0 -20
  107. package/symbols/n_channel_e_mosfet_transistor_horz.ts +0 -21
  108. package/symbols/n_channel_e_mosfet_transistor_vert.ts +0 -20
  109. package/symbols/njfet_transistor_horz.ts +0 -20
  110. package/symbols/njfet_transistor_vert.ts +0 -20
  111. package/symbols/npn_bipolar_transistor_horz.ts +0 -11
  112. package/symbols/npn_bipolar_transistor_vert.ts +0 -21
  113. package/symbols/opamp_no_power_down.ts +0 -4
  114. package/symbols/opamp_no_power_left.ts +0 -4
  115. package/symbols/opamp_no_power_right.ts +0 -10
  116. package/symbols/opamp_no_power_up.ts +0 -4
  117. package/symbols/opamp_with_power_down.ts +0 -4
  118. package/symbols/opamp_with_power_left.ts +0 -4
  119. package/symbols/opamp_with_power_right.ts +0 -12
  120. package/symbols/opamp_with_power_up.ts +0 -4
  121. package/symbols/p_channel_d_mosfet_transistor_horz.ts +0 -20
  122. package/symbols/p_channel_d_mosfet_transistor_vert.ts +0 -20
  123. package/symbols/p_channel_e_mosfet_transistor_horz.ts +0 -20
  124. package/symbols/p_channel_e_mosfet_transistor_vert.ts +0 -20
  125. package/symbols/photodiode_horz.ts +0 -9
  126. package/symbols/photodiode_vert.ts +0 -13
  127. package/symbols/pjfet_transistor_horz.ts +0 -20
  128. package/symbols/pjfet_transistor_vert.ts +0 -20
  129. package/symbols/pnp_bipolar_transistor_horz.ts +0 -10
  130. package/symbols/pnp_bipolar_transistor_vert.ts +0 -20
  131. package/symbols/potentiometer2_horz.ts +0 -18
  132. package/symbols/potentiometer2_vert.ts +0 -14
  133. package/symbols/potentiometer3_down.ts +0 -4
  134. package/symbols/potentiometer3_left.ts +0 -4
  135. package/symbols/potentiometer3_right.ts +0 -10
  136. package/symbols/potentiometer3_up.ts +0 -4
  137. package/symbols/potentiometer_horz.ts +0 -18
  138. package/symbols/potentiometer_vert.ts +0 -6
  139. package/symbols/power_factor_meter_horz.ts +0 -42
  140. package/symbols/power_factor_meter_vert.ts +0 -19
  141. package/symbols/push_button_normally_closed_momentary_horz.ts +0 -20
  142. package/symbols/push_button_normally_closed_momentary_vert.ts +0 -4
  143. package/symbols/push_button_normally_open_momentary_horz.ts +0 -20
  144. package/symbols/push_button_normally_open_momentary_vert.ts +0 -4
  145. package/symbols/rectifier_diode_horz.ts +0 -21
  146. package/symbols/rectifier_diode_vert.ts +0 -17
  147. package/symbols/resonator_horz.ts +0 -34
  148. package/symbols/resonator_vert.ts +0 -4
  149. package/symbols/schottky_diode_horz.ts +0 -10
  150. package/symbols/schottky_diode_vert.ts +0 -18
  151. package/symbols/silicon_controlled_rectifier_horz.ts +0 -13
  152. package/symbols/silicon_controlled_rectifier_vert.ts +0 -15
  153. package/symbols/step_recovery_diode_horz.ts +0 -11
  154. package/symbols/step_recovery_diode_vert.ts +0 -4
  155. package/symbols/tachometer_horz.ts +0 -32
  156. package/symbols/tachometer_vert.ts +0 -19
  157. package/symbols/triac_horz.ts +0 -13
  158. package/symbols/triac_vert.ts +0 -16
  159. package/symbols/tunnel_diode_horz.ts +0 -19
  160. package/symbols/tunnel_diode_vert.ts +0 -18
  161. package/symbols/unijunction_transistor_horz.ts +0 -20
  162. package/symbols/unijunction_transistor_vert.ts +0 -19
  163. package/symbols/var_meter_horz.ts +0 -30
  164. package/symbols/var_meter_vert.ts +0 -4
  165. package/symbols/varactor_diode_horz.ts +0 -19
  166. package/symbols/varactor_diode_vert.ts +0 -18
  167. package/symbols/varistor_horz.ts +0 -24
  168. package/symbols/varistor_vert.ts +0 -4
  169. package/symbols/varmeter_horz.ts +0 -32
  170. package/symbols/varmeter_vert.ts +0 -19
  171. package/symbols/volt_meter_horz.ts +0 -10
  172. package/symbols/volt_meter_vert.ts +0 -4
  173. package/symbols/watt_hour_meter_horz.ts +0 -32
  174. package/symbols/watt_hour_meter_vert.ts +0 -19
  175. package/symbols/wattmeter_horz.ts +0 -32
  176. package/symbols/wattmeter_vert.ts +0 -19
  177. package/symbols/zener_diode_horz.ts +0 -19
  178. package/symbols/zener_diode_vert.ts +0 -17
@@ -1,324 +0,0 @@
1
- import { rotate, applyToPoint, transform, scale } from "transformation-matrix"
2
- import type {
3
- SchSymbol,
4
- Primitive,
5
- Point,
6
- Port,
7
- NinePointAnchor,
8
- } from "./types"
9
- import { getBoundsOfPrimitives } from "./utils/getBoundsOfPrimitives"
10
-
11
- // Update rotateAnchor to handle all anchor rotations based on orientation
12
- const rotateRightFacingAnchor = (
13
- anchor: NinePointAnchor,
14
- newOrientation: "up" | "down" | "left" | "right" = "right",
15
- ): NinePointAnchor => {
16
- switch (newOrientation) {
17
- case "down":
18
- switch (anchor) {
19
- case "middle_top":
20
- return "middle_right"
21
- case "middle_bottom":
22
- return "middle_left"
23
- case "middle_left":
24
- return "middle_bottom"
25
- case "middle_right":
26
- return "middle_top"
27
- }
28
- break
29
- case "up":
30
- switch (anchor) {
31
- case "middle_top":
32
- return "middle_left"
33
- case "middle_bottom":
34
- return "middle_right"
35
- case "middle_left":
36
- return "middle_top"
37
- case "middle_right":
38
- return "middle_bottom"
39
- }
40
- break
41
- case "left":
42
- switch (anchor) {
43
- case "middle_top":
44
- return "middle_bottom"
45
- case "middle_bottom":
46
- return "middle_top"
47
- case "middle_left":
48
- return "middle_right"
49
- case "middle_right":
50
- return "middle_left"
51
- }
52
- break
53
- case "right":
54
- return anchor // No change if orientation is "right"
55
- }
56
- return anchor
57
- }
58
-
59
- export const flipSymbolOverXAxis = (
60
- symbol: SchSymbol,
61
- overrides?: Partial<SchSymbol>,
62
- ): SchSymbol => {
63
- const { primitives, center, ports, size } = symbol
64
- const transformMatrix = transform({
65
- a: 1,
66
- b: 0,
67
- c: 0,
68
- d: -1,
69
- e: 0,
70
- f: 2 * center.y,
71
- })
72
-
73
- const flippedPrimitives = primitives.map((primitive): Primitive => {
74
- primitive = { ...primitive }
75
- switch (primitive.type) {
76
- case "path":
77
- return {
78
- ...primitive,
79
- points: primitive.points.map(
80
- (point) => applyToPoint(transformMatrix, point) as Point,
81
- ),
82
- }
83
- case "text":
84
- const flippedPoint = applyToPoint(transformMatrix, {
85
- x: primitive.x,
86
- y: primitive.y,
87
- }) as Point
88
-
89
- // Flip text anchors vertically
90
- const anchorMap: Record<NinePointAnchor, NinePointAnchor> = {
91
- top_left: "bottom_left",
92
- top_right: "bottom_right",
93
- bottom_left: "top_left",
94
- bottom_right: "top_right",
95
- center: "center",
96
- middle_top: "middle_bottom",
97
- middle_bottom: "middle_top",
98
- middle_left: "middle_left",
99
- middle_right: "middle_right",
100
- }
101
-
102
- return {
103
- ...primitive,
104
- x: flippedPoint.x,
105
- y: flippedPoint.y,
106
- anchor: anchorMap[primitive.anchor],
107
- }
108
- case "circle":
109
- case "box":
110
- const flippedCenter = applyToPoint(transformMatrix, {
111
- x: primitive.x,
112
- y: primitive.y,
113
- }) as Point
114
- return {
115
- ...primitive,
116
- x: flippedCenter.x,
117
- y: flippedCenter.y,
118
- }
119
- }
120
- })
121
-
122
- const flippedPorts = ports.map(
123
- (port): Port => ({
124
- ...port,
125
- ...(applyToPoint(transformMatrix, port) as Point),
126
- }),
127
- )
128
-
129
- return {
130
- primitives: flippedPrimitives,
131
- center,
132
- ports: flippedPorts,
133
- size,
134
- ...overrides,
135
- }
136
- }
137
-
138
- export const flipSymbolOverYAxis = (
139
- symbol: SchSymbol,
140
- overrides?: Partial<SchSymbol>,
141
- ): SchSymbol => {
142
- const { primitives, center, ports, size } = symbol
143
- const transformMatrix = transform({
144
- a: -1,
145
- b: 0,
146
- c: 0,
147
- d: 1,
148
- e: 0,
149
- f: 2 * center.x,
150
- })
151
-
152
- const flippedPrimitives = primitives.map((primitive): Primitive => {
153
- primitive = { ...primitive }
154
- switch (primitive.type) {
155
- case "path":
156
- return {
157
- ...primitive,
158
- points: primitive.points.map(
159
- (point) => applyToPoint(transformMatrix, point) as Point,
160
- ),
161
- }
162
- case "text":
163
- const flippedPoint = applyToPoint(transformMatrix, {
164
- x: primitive.x,
165
- y: primitive.y,
166
- }) as Point
167
-
168
- // Flip text anchors horizontally
169
- const anchorMap: Record<NinePointAnchor, NinePointAnchor> = {
170
- top_left: "top_right",
171
- top_right: "top_left",
172
- bottom_left: "bottom_right",
173
- bottom_right: "bottom_left",
174
- center: "center",
175
- middle_top: "middle_top",
176
- middle_bottom: "middle_bottom",
177
- middle_left: "middle_right",
178
- middle_right: "middle_left",
179
- }
180
-
181
- return {
182
- ...primitive,
183
- x: flippedPoint.x,
184
- y: flippedPoint.y,
185
- anchor: anchorMap[primitive.anchor],
186
- }
187
- case "circle":
188
- case "box":
189
- const flippedCenter = applyToPoint(transformMatrix, {
190
- x: primitive.x,
191
- y: primitive.y,
192
- }) as Point
193
- return {
194
- ...primitive,
195
- x: flippedCenter.x,
196
- y: flippedCenter.y,
197
- }
198
- }
199
- })
200
-
201
- const flippedPorts = ports.map(
202
- (port): Port => ({
203
- ...port,
204
- ...(applyToPoint(transformMatrix, port) as Point),
205
- }),
206
- )
207
-
208
- return {
209
- primitives: flippedPrimitives,
210
- center,
211
- ports: flippedPorts,
212
- size,
213
- ...overrides,
214
- }
215
- }
216
-
217
- export const rotateRightFacingSymbol = (
218
- symbol: SchSymbol,
219
- opts: {
220
- newOrientation?: "up" | "down" | "left" | "right"
221
- overrides?: Partial<SchSymbol>
222
- },
223
- ): SchSymbol => {
224
- const { newOrientation, overrides } = opts
225
- // Assuming the default orientation is "right"
226
- const angleMap = {
227
- up: Math.PI / 2,
228
- right: 0,
229
- down: -Math.PI / 2,
230
- left: -Math.PI,
231
- }
232
-
233
- const transform = rotate(
234
- newOrientation ? angleMap[newOrientation] : Math.PI / 2,
235
- symbol.center.x,
236
- symbol.center.y,
237
- )
238
-
239
- const { primitives, center, size, ports } = symbol
240
-
241
- const rotatedPrimitives = primitives.map((primitive): Primitive => {
242
- primitive = { ...primitive }
243
- switch (primitive.type) {
244
- case "path":
245
- return {
246
- ...primitive,
247
- points: primitive.points.map(
248
- (point) => applyToPoint(transform, point) as Point,
249
- ),
250
- }
251
- case "text":
252
- const rotatedPoint = applyToPoint(transform, {
253
- x: primitive.x,
254
- y: primitive.y,
255
- }) as Point
256
-
257
- primitive.anchor = rotateRightFacingAnchor(
258
- primitive.anchor,
259
- newOrientation ?? "right",
260
- )
261
-
262
- return {
263
- ...primitive,
264
- x: rotatedPoint.x,
265
- y: rotatedPoint.y,
266
- }
267
- case "circle":
268
- const rotatedCenter = applyToPoint(transform, {
269
- x: primitive.x,
270
- y: primitive.y,
271
- }) as Point
272
- return {
273
- ...primitive,
274
- x: rotatedCenter.x,
275
- y: rotatedCenter.y,
276
- }
277
- case "box":
278
- const rotatedCorner = applyToPoint(transform, {
279
- x: primitive.x,
280
- y: primitive.y,
281
- }) as Point
282
- return {
283
- ...primitive,
284
- x: rotatedCorner.x,
285
- y: rotatedCorner.y,
286
- width: primitive.height,
287
- height: primitive.width,
288
- }
289
- }
290
- })
291
-
292
- const rotatedPorts = ports.map(
293
- (port): Port => ({
294
- ...port,
295
- ...(applyToPoint(transform, port) as Point),
296
- }),
297
- )
298
-
299
- const bounds = getBoundsOfPrimitives(rotatedPrimitives)
300
-
301
- return {
302
- primitives: rotatedPrimitives,
303
- center,
304
- ports: rotatedPorts,
305
- size: {
306
- width: bounds.maxX - bounds.minX,
307
- height: bounds.maxY - bounds.minY,
308
- },
309
- ...overrides,
310
- }
311
- }
312
-
313
- /**
314
- * @deprecated use rotateRightFacingSymbol instead
315
- */
316
- export const rotateSymbol = (
317
- symbol: SchSymbol,
318
- orientation: "up" | "down" | "left" | "right" = "down",
319
- overrides: Partial<SchSymbol> = {},
320
- ): SchSymbol =>
321
- rotateRightFacingSymbol(symbol, {
322
- newOrientation: orientation,
323
- overrides,
324
- })
@@ -1,109 +0,0 @@
1
- import type { Point } from "./types"
2
- import { approximateArc } from "./arc"
3
- import { approximateBezier } from "./cubicBezierCurveArc"
4
-
5
- export function svgPathToPoints(pathString: string): Point[] {
6
- const points: Point[] = []
7
- const commands =
8
- pathString.match(/[MmLlHhVvCcSsQqTtAaZz][^MmLlHhVvCcSsQqTtAaZz]*/g) || []
9
- let currentX = 0
10
- let currentY = 0
11
-
12
- function addPoint(x: number, y: number) {
13
- points.push({ x, y })
14
- currentX = x
15
- currentY = y
16
- }
17
-
18
- for (const command of commands) {
19
- const type = command[0]
20
- const args = command
21
- .slice(1)
22
- .trim()
23
- .split(/[\s,]+/)
24
- .map(Number.parseFloat)
25
-
26
- switch (type.toUpperCase()) {
27
- case "M":
28
- addPoint(args[0], args[1])
29
- break
30
- case "L":
31
- addPoint(args[0], args[1])
32
- break
33
- case "H":
34
- addPoint(args[0], currentY)
35
- break
36
- case "V":
37
- addPoint(currentX, args[0])
38
- break
39
- case "C": {
40
- const [x1, y1, x2, y2, x, y] = args
41
-
42
- // Approximate the cubic Bézier curve
43
- const bezierPoints = approximateBezier(
44
- { x: currentX, y: currentY }, // Start point
45
- { x: x1, y: y1 }, // Control point 1
46
- { x: x2, y: y2 }, // Control point 2
47
- { x, y }, // End point
48
- )
49
-
50
- points.push(...bezierPoints)
51
- addPoint(x, y) // Update the current position
52
- break
53
- }
54
- case "Q":
55
- // For Q command, we add both the control point and the end point
56
- points.push({ x: args[0], y: args[1] }) // Control point
57
- addPoint(args[2], args[3]) // End point
58
- break
59
- case "Z":
60
- // Close path - no new point
61
- break
62
- case "A":
63
- // For A command, we add the end point and intermediate points to approximate the arc
64
- const [rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y] = args
65
- const arcPoints = approximateArc(
66
- currentX,
67
- currentY,
68
- rx,
69
- ry,
70
- largeArcFlag,
71
- sweepFlag,
72
- x,
73
- y,
74
- )
75
- arcPoints.forEach((point) => points.push(point))
76
- addPoint(x, y)
77
- break
78
- // Add cases for other commands (S, T) if needed
79
- default:
80
- console.warn(`Unsupported SVG command: ${type}`)
81
- }
82
-
83
- // Handle relative commands
84
- if (type === type.toLowerCase() && type !== "z" && type !== "a") {
85
- if (type === "c") {
86
- // For relative c, adjust both control points and end point
87
- points[points.length - 3].x += currentX
88
- points[points.length - 3].y += currentY
89
- points[points.length - 2].x += currentX
90
- points[points.length - 2].y += currentY
91
- points[points.length - 1].x += currentX
92
- points[points.length - 1].y += currentY
93
- } else if (type === "q") {
94
- // For relative q, adjust both control point and end point
95
- points[points.length - 2].x += currentX
96
- points[points.length - 2].y += currentY
97
- points[points.length - 1].x += currentX
98
- points[points.length - 1].y += currentY
99
- } else {
100
- points[points.length - 1].x += currentX
101
- points[points.length - 1].y += currentY
102
- }
103
- currentX = points[points.length - 1].x
104
- currentY = points[points.length - 1].y
105
- }
106
- }
107
-
108
- return points
109
- }
package/drawing/text.ts DELETED
@@ -1,8 +0,0 @@
1
- import type { TextPrimitive } from "drawing"
2
-
3
- export function text(
4
- text: string,
5
- options: Omit<TextPrimitive, "type" | "text">,
6
- ): TextPrimitive {
7
- return { type: "text", text, ...options }
8
- }
@@ -1,155 +0,0 @@
1
- import {
2
- PathPrimitive,
3
- TextPrimitive,
4
- CirclePrimitive,
5
- BoxPrimitive,
6
- Primitive,
7
- NinePointAnchor,
8
- Point,
9
- SchSymbol,
10
- Port,
11
- SvgData,
12
- Bounds,
13
- } from "./types"
14
-
15
- // Basic types
16
- function isPoint(value: any): value is Point {
17
- return (
18
- typeof value === "object" &&
19
- value !== null &&
20
- typeof value.x === "number" &&
21
- typeof value.y === "number"
22
- )
23
- }
24
-
25
- export function isNinePointAnchor(value: any): value is NinePointAnchor {
26
- return [
27
- "top_left",
28
- "top_right",
29
- "bottom_left",
30
- "bottom_right",
31
- "center",
32
- "middle_top",
33
- "middle_bottom",
34
- "middle_left",
35
- "middle_right",
36
- ].includes(value)
37
- }
38
-
39
- // Primitive types
40
- export function isPathPrimitive(value: any): value is PathPrimitive {
41
- return (
42
- typeof value === "object" &&
43
- value !== null &&
44
- value.type === "path" &&
45
- Array.isArray(value.points) &&
46
- value.points.every(isPoint) &&
47
- typeof value.color === "string"
48
- )
49
- }
50
-
51
- export function isTextPrimitive(value: any): value is TextPrimitive {
52
- return (
53
- typeof value === "object" &&
54
- value !== null &&
55
- value.type === "text" &&
56
- typeof value.text === "string" &&
57
- typeof value.x === "number" &&
58
- typeof value.y === "number" &&
59
- isNinePointAnchor(value.anchor)
60
- )
61
- }
62
-
63
- export function isCirclePrimitive(value: any): value is CirclePrimitive {
64
- return (
65
- typeof value === "object" &&
66
- value !== null &&
67
- value.type === "circle" &&
68
- typeof value.x === "number" &&
69
- typeof value.y === "number" &&
70
- typeof value.radius === "number" &&
71
- typeof value.fill === "boolean" &&
72
- typeof value.color === "string"
73
- )
74
- }
75
-
76
- export function isBoxPrimitive(value: any): value is BoxPrimitive {
77
- return (
78
- typeof value === "object" &&
79
- value !== null &&
80
- value.type === "box" &&
81
- typeof value.x === "number" &&
82
- typeof value.y === "number" &&
83
- typeof value.width === "number" &&
84
- typeof value.height === "number" &&
85
- isNinePointAnchor(value.anchor)
86
- )
87
- }
88
-
89
- export function isPrimitive(value: any): value is Primitive {
90
- return (
91
- isPathPrimitive(value) ||
92
- isTextPrimitive(value) ||
93
- isCirclePrimitive(value) ||
94
- isBoxPrimitive(value)
95
- )
96
- }
97
-
98
- // Complex types
99
- export function isPort(value: any): value is Port {
100
- return (
101
- typeof value === "object" &&
102
- value !== null &&
103
- typeof value.x === "number" &&
104
- typeof value.y === "number" &&
105
- Array.isArray(value.labels) &&
106
- value.labels.every((label: any) => typeof label === "string")
107
- )
108
- }
109
-
110
- export function isSchSymbol(value: any): value is SchSymbol {
111
- return (
112
- typeof value === "object" &&
113
- value !== null &&
114
- Array.isArray(value.primitives) &&
115
- value.primitives.every(isPrimitive) &&
116
- isPoint(value.center) &&
117
- Array.isArray(value.ports) &&
118
- value.ports.every(isPort) &&
119
- typeof value.size === "object" &&
120
- value.size !== null &&
121
- typeof value.size.width === "number" &&
122
- typeof value.size.height === "number"
123
- )
124
- }
125
-
126
- export function isBounds(value: any): value is Bounds {
127
- return (
128
- typeof value === "object" &&
129
- value !== null &&
130
- typeof value.minX === "number" &&
131
- typeof value.maxX === "number" &&
132
- typeof value.minY === "number" &&
133
- typeof value.maxY === "number" &&
134
- typeof value.width === "number" &&
135
- typeof value.height === "number" &&
136
- typeof value.centerX === "number" &&
137
- typeof value.centerY === "number"
138
- )
139
- }
140
-
141
- export function isSvgData(value: any): value is SvgData {
142
- return (
143
- typeof value === "object" &&
144
- value !== null &&
145
- typeof value.paths === "object" &&
146
- Object.values(value.paths).every(isPathPrimitive) &&
147
- typeof value.texts === "object" &&
148
- Object.values(value.texts).every(isTextPrimitive) &&
149
- typeof value.refblocks === "object" &&
150
- Object.values(value.refblocks).every(isPoint) &&
151
- isBounds(value.bounds) &&
152
- typeof value.circles === "object" &&
153
- Object.values(value.circles).every(isCirclePrimitive)
154
- )
155
- }
package/drawing/types.ts DELETED
@@ -1,93 +0,0 @@
1
- export interface Point {
2
- x: number
3
- y: number
4
- }
5
-
6
- export interface Port {
7
- x: number
8
- y: number
9
- labels: string[]
10
- }
11
-
12
- export interface PathPrimitive {
13
- type: "path"
14
- fill?: boolean
15
- points: Point[]
16
- color: string
17
- closed?: boolean
18
- }
19
-
20
- export interface TextPrimitive {
21
- type: "text"
22
- text: string
23
- fontSize?: number
24
- x: number
25
- y: number
26
- anchor: NinePointAnchor
27
- }
28
-
29
- export interface CirclePrimitive {
30
- type: "circle"
31
- x: number
32
- y: number
33
- radius: number
34
- fill: boolean
35
- color: string
36
- }
37
-
38
- export interface BoxPrimitive {
39
- type: "box"
40
- x: number
41
- y: number
42
- width: number
43
- height: number
44
- anchor: string
45
- }
46
-
47
- export type Primitive =
48
- | PathPrimitive
49
- | TextPrimitive
50
- | CirclePrimitive
51
- | BoxPrimitive
52
-
53
- export interface SchSymbol {
54
- primitives: Primitive[]
55
- center: Point
56
- ports: Port[]
57
- size: {
58
- width: number
59
- height: number
60
- }
61
- }
62
-
63
- export type Bounds = {
64
- minX: number
65
- maxX: number
66
- minY: number
67
- maxY: number
68
- width: number
69
- height: number
70
- centerX: number
71
- centerY: number
72
- }
73
-
74
- export interface SvgData {
75
- paths: Record<string, PathPrimitive>
76
- texts: Record<string, TextPrimitive>
77
- refblocks: Record<string, Point>
78
- bounds: Bounds
79
- circles: Record<string, CirclePrimitive>
80
- }
81
-
82
- export type SvgAnchor = "start" | "middle" | "end"
83
-
84
- export type NinePointAnchor =
85
- | "top_left"
86
- | "top_right"
87
- | "bottom_left"
88
- | "bottom_right"
89
- | "center"
90
- | "middle_top"
91
- | "middle_bottom"
92
- | "middle_left"
93
- | "middle_right"