@lewismoten/gamemaker-sandbox-tools 3.1.0 → 3.4.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 (343) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/NOTICE.md +105 -3
  3. package/README.md +301 -15
  4. package/dist/audio-files.js +82 -0
  5. package/dist/audio.js +23 -138
  6. package/dist/block-merge.js +43 -0
  7. package/dist/color-reduce.js +44 -0
  8. package/dist/colors.js +87 -0
  9. package/dist/delta.js +75 -0
  10. package/dist/disk-diff.js +220 -0
  11. package/dist/drawing.js +83 -869
  12. package/dist/embroidery/compile.js +85 -0
  13. package/dist/embroidery/dst.js +79 -0
  14. package/dist/embroidery/exp.js +26 -0
  15. package/dist/embroidery/fill.js +49 -0
  16. package/dist/embroidery/geom.js +82 -0
  17. package/dist/embroidery/pes.js +79 -0
  18. package/dist/embroidery/satin.js +29 -0
  19. package/dist/embroidery/simulate.js +30 -0
  20. package/dist/embroidery/strokeFont.js +253 -0
  21. package/dist/embroidery/svg.js +24 -0
  22. package/dist/embroidery/types.js +13 -0
  23. package/dist/embroidery/units.js +26 -0
  24. package/dist/embroidery/validate.js +15 -0
  25. package/dist/formats/blocks.js +1 -103
  26. package/dist/formats/character.js +1 -83
  27. package/dist/formats/cmf.js +1 -37
  28. package/dist/formats/fli.js +1 -296
  29. package/dist/formats/fliLimits.js +1 -54
  30. package/dist/formats/game.js +1 -193
  31. package/dist/formats/gif.js +1 -125
  32. package/dist/formats/graphicScripts.js +1 -44
  33. package/dist/formats/map.js +1 -38
  34. package/dist/formats/monster.js +1 -69
  35. package/dist/formats/palette.js +1 -58
  36. package/dist/formats/recording.js +1 -17
  37. package/dist/formats/sound.js +1 -44
  38. package/dist/formats/voc.js +1 -303
  39. package/dist/gif-shrink.js +56 -0
  40. package/dist/image/png.js +42 -0
  41. package/dist/images.js +81 -43
  42. package/dist/kit/actors.js +19 -0
  43. package/dist/kit/align.js +204 -0
  44. package/dist/kit/blit.js +45 -0
  45. package/dist/kit/blockRoles.js +97 -0
  46. package/dist/kit/clips.js +40 -0
  47. package/dist/kit/coverPaint.js +18 -0
  48. package/dist/kit/disk.js +76 -0
  49. package/dist/kit/fadeOut.js +13 -0
  50. package/dist/kit/fliClips.js +133 -0
  51. package/dist/kit/fliShrink.js +277 -0
  52. package/dist/kit/gameSim.js +235 -0
  53. package/dist/kit/hopBot.js +142 -0
  54. package/dist/kit/levelGen.js +1423 -0
  55. package/dist/kit/levelGrid.js +33 -0
  56. package/dist/kit/levelPicture.js +27 -0
  57. package/dist/kit/menuVersion.js +19 -0
  58. package/dist/kit/microText.js +35 -0
  59. package/dist/kit/mumble.js +74 -0
  60. package/dist/kit/music.js +8 -0
  61. package/dist/kit/palRamps.js +32 -0
  62. package/dist/kit/palette.js +49 -0
  63. package/dist/kit/pcText.js +72 -0
  64. package/dist/kit/photo.js +150 -0
  65. package/dist/kit/pixels.js +79 -0
  66. package/dist/kit/png.js +40 -0
  67. package/dist/kit/quantize.js +72 -0
  68. package/dist/kit/raytrace.js +379 -0
  69. package/dist/kit/recordedDemo.js +10 -0
  70. package/dist/kit/reel.js +77 -0
  71. package/dist/kit/road3d.js +67 -0
  72. package/dist/kit/routeChecks.js +8 -0
  73. package/dist/kit/saveSlots.js +11 -0
  74. package/dist/kit/sceneInit.js +13 -0
  75. package/dist/kit/sceneSim.js +112 -0
  76. package/dist/kit/screenText.js +15 -0
  77. package/dist/kit/sdftext.js +237 -0
  78. package/dist/kit/shading.js +69 -0
  79. package/dist/kit/song.js +251 -0
  80. package/dist/kit/songFx.js +179 -0
  81. package/dist/kit/sound.js +52 -0
  82. package/dist/kit/synthParts.js +20 -0
  83. package/dist/kit/tar.js +53 -0
  84. package/dist/kit/textBounds.js +84 -0
  85. package/dist/kit/textfit.js +246 -0
  86. package/dist/kit/transforms.js +57 -0
  87. package/dist/kit/tune.js +21 -0
  88. package/dist/look-alike.js +50 -0
  89. package/dist/menu-version.js +4 -0
  90. package/dist/mesh/colorBodies.js +137 -0
  91. package/dist/mesh/decimate.js +207 -0
  92. package/dist/mesh/meshCheck.js +51 -0
  93. package/dist/mesh/overhang.js +41 -0
  94. package/dist/mesh/sampledField.js +12 -0
  95. package/dist/mesh/stl.js +36 -0
  96. package/dist/mesh/surfaceNets.js +79 -0
  97. package/dist/mesh/tetraMesh.js +62 -0
  98. package/dist/mesh/threeMf.js +58 -0
  99. package/dist/mesh/zipFile.js +52 -0
  100. package/dist/microFont.js +101 -0
  101. package/dist/music/compose.js +72 -0
  102. package/dist/pack/meshPack.js +198 -0
  103. package/dist/pack/threeMfPack.js +92 -0
  104. package/dist/palette-reserve.js +116 -0
  105. package/dist/palettes.js +138 -0
  106. package/dist/release-notes.js +40 -0
  107. package/dist/simulation.js +16 -2774
  108. package/dist/text.js +74 -0
  109. package/dist/types/audio.d.ts +4 -0
  110. package/dist/types/audioFiles.d.ts +22 -0
  111. package/dist/types/audioWav.d.ts +4 -0
  112. package/dist/types/blockMerge.d.ts +24 -0
  113. package/dist/types/colorReduce.d.ts +23 -0
  114. package/dist/types/{web/packages/tools/src/colors.d.ts → colors.d.ts} +6 -0
  115. package/dist/types/delta.d.ts +32 -0
  116. package/dist/types/diskDiff.d.ts +47 -0
  117. package/dist/types/drawing.d.ts +15 -0
  118. package/dist/types/embroidery/compile.d.ts +3 -0
  119. package/dist/types/embroidery/dst.d.ts +13 -0
  120. package/dist/types/embroidery/exp.d.ts +8 -0
  121. package/dist/types/embroidery/fill.d.ts +6 -0
  122. package/dist/types/embroidery/geom.d.ts +19 -0
  123. package/dist/types/embroidery/pes.d.ts +10 -0
  124. package/dist/types/embroidery/satin.d.ts +11 -0
  125. package/dist/types/embroidery/simulate.d.ts +19 -0
  126. package/dist/types/embroidery/strokeFont.d.ts +20 -0
  127. package/dist/types/embroidery/svg.d.ts +3 -0
  128. package/dist/types/embroidery/types.d.ts +70 -0
  129. package/dist/types/embroidery/units.d.ts +10 -0
  130. package/dist/types/embroidery/validate.d.ts +22 -0
  131. package/dist/types/formats/blocks.d.ts +1 -0
  132. package/dist/types/formats/character.d.ts +1 -0
  133. package/dist/types/formats/cmf.d.ts +1 -0
  134. package/dist/types/formats/fli.d.ts +1 -0
  135. package/dist/types/formats/fliLimits.d.ts +1 -0
  136. package/dist/types/formats/game.d.ts +1 -0
  137. package/dist/types/formats/gif.d.ts +1 -0
  138. package/dist/types/formats/graphicScripts.d.ts +1 -0
  139. package/dist/types/formats/map.d.ts +1 -0
  140. package/dist/types/formats/monster.d.ts +1 -0
  141. package/dist/types/formats/palette.d.ts +1 -0
  142. package/dist/types/formats/recording.d.ts +1 -0
  143. package/dist/types/formats/sound.d.ts +1 -0
  144. package/dist/types/formats/voc.d.ts +1 -0
  145. package/dist/types/gifShrink.d.ts +8 -0
  146. package/dist/types/image/animatedGif.d.ts +9 -0
  147. package/dist/types/image/surface.d.ts +26 -0
  148. package/dist/types/images.d.ts +13 -0
  149. package/dist/types/kit/actors.d.ts +7 -0
  150. package/dist/types/kit/align.d.ts +93 -0
  151. package/dist/types/kit/audioEvents.d.ts +26 -0
  152. package/dist/types/kit/blit.d.ts +20 -0
  153. package/dist/types/kit/blockRoles.d.ts +243 -0
  154. package/dist/types/{games/kit → kit}/clips.d.ts +1 -1
  155. package/dist/types/kit/coverPaint.d.ts +7 -0
  156. package/dist/types/kit/disk.d.ts +15 -0
  157. package/dist/types/kit/fadeOut.d.ts +12 -0
  158. package/dist/types/kit/fliClips.d.ts +32 -0
  159. package/dist/types/kit/fliShrink.d.ts +149 -0
  160. package/dist/types/{games/kit → kit}/gameSim.d.ts +9 -5
  161. package/dist/types/kit/hopBot.d.ts +72 -0
  162. package/dist/types/kit/laserClearance.d.ts +16 -0
  163. package/dist/types/kit/laserJoints.d.ts +39 -0
  164. package/dist/types/kit/laserLayout.d.ts +54 -0
  165. package/dist/types/kit/laserPixels.d.ts +52 -0
  166. package/dist/types/kit/laserPreview.d.ts +9 -0
  167. package/dist/types/kit/laserSvg.d.ts +35 -0
  168. package/dist/types/kit/levelGen/castle.d.ts +17 -0
  169. package/dist/types/kit/levelGen/dungeon.d.ts +11 -0
  170. package/dist/types/kit/levelGen/forest.d.ts +17 -0
  171. package/dist/types/kit/levelGen/furnish.d.ts +31 -0
  172. package/dist/types/kit/levelGen/grid.d.ts +46 -0
  173. package/dist/types/kit/levelGen/index.d.ts +138 -0
  174. package/dist/types/kit/levelGen/interior.d.ts +18 -0
  175. package/dist/types/kit/levelGen/jumpModel.d.ts +78 -0
  176. package/dist/types/kit/levelGen/needs.d.ts +44 -0
  177. package/dist/types/kit/levelGen/overworld.d.ts +21 -0
  178. package/dist/types/kit/levelGen/platform.d.ts +59 -0
  179. package/dist/types/kit/levelGen/platformCap.d.ts +13 -0
  180. package/dist/types/kit/levelGen/platformReach.d.ts +37 -0
  181. package/dist/types/kit/levelGen/props.d.ts +37 -0
  182. package/dist/types/kit/levelGen/town.d.ts +24 -0
  183. package/dist/types/kit/levelGrid.d.ts +16 -0
  184. package/dist/types/kit/levelPicture.d.ts +9 -0
  185. package/dist/types/kit/menuVersion.d.ts +7 -0
  186. package/dist/types/kit/microText.d.ts +18 -0
  187. package/dist/types/kit/mumble.d.ts +41 -0
  188. package/dist/types/kit/music.d.ts +1 -0
  189. package/dist/types/kit/palMerge.d.ts +10 -0
  190. package/dist/types/kit/palRamps.d.ts +28 -0
  191. package/dist/types/kit/pcText.d.ts +19 -0
  192. package/dist/types/kit/photo.d.ts +69 -0
  193. package/dist/types/kit/png.d.ts +7 -0
  194. package/dist/types/kit/quantize.d.ts +20 -0
  195. package/dist/types/kit/raytrace.d.ts +169 -0
  196. package/dist/types/kit/recordedDemo.d.ts +1 -0
  197. package/dist/types/kit/road3d.d.ts +71 -0
  198. package/dist/types/kit/routeChecks.d.ts +6 -0
  199. package/dist/types/kit/saveSlots.d.ts +17 -0
  200. package/dist/types/kit/sceneInit.d.ts +11 -0
  201. package/dist/types/{games/kit → kit}/sceneSim.d.ts +5 -5
  202. package/dist/types/kit/screenText.d.ts +3 -0
  203. package/dist/types/kit/sdftext.d.ts +34 -0
  204. package/dist/types/kit/shading.d.ts +23 -0
  205. package/dist/types/kit/shareBlocks.d.ts +20 -0
  206. package/dist/types/kit/song.d.ts +89 -0
  207. package/dist/types/kit/songFx.d.ts +99 -0
  208. package/dist/types/kit/synthParts.d.ts +7 -0
  209. package/dist/types/kit/tar.d.ts +13 -0
  210. package/dist/types/kit/textfit.d.ts +74 -0
  211. package/dist/types/kit/transforms.d.ts +8 -0
  212. package/dist/types/lookAlike.d.ts +31 -0
  213. package/dist/types/menuVersionEntry.d.ts +1 -0
  214. package/dist/types/mesh/colorBodies.d.ts +18 -0
  215. package/dist/types/mesh/decimate.d.ts +10 -0
  216. package/dist/types/mesh/fieldTrinket.d.ts +40 -0
  217. package/dist/types/mesh/figureShapes.d.ts +24 -0
  218. package/dist/types/mesh/mesh.d.ts +9 -0
  219. package/dist/types/mesh/meshCheck.d.ts +22 -0
  220. package/dist/types/mesh/overhang.d.ts +24 -0
  221. package/dist/types/mesh/pixelFigure.d.ts +41 -0
  222. package/dist/types/mesh/sampledField.d.ts +3 -0
  223. package/dist/types/mesh/sdfShapes.d.ts +20 -0
  224. package/dist/types/mesh/stl.d.ts +9 -0
  225. package/dist/types/mesh/strokeText.d.ts +8 -0
  226. package/dist/types/mesh/surfaceNets.d.ts +14 -0
  227. package/dist/types/mesh/tetraMesh.d.ts +4 -0
  228. package/dist/types/mesh/threeMf.d.ts +12 -0
  229. package/dist/types/mesh/trinketKinds.d.ts +72 -0
  230. package/dist/types/mesh/trinketTool.d.ts +26 -0
  231. package/dist/types/mesh/voxel.d.ts +10 -0
  232. package/dist/types/mesh/zipFile.d.ts +13 -0
  233. package/dist/types/microFont.d.ts +6 -0
  234. package/dist/types/pack/meshPack.d.ts +26 -0
  235. package/dist/types/pack/threeMfPack.d.ts +11 -0
  236. package/dist/types/palettePresetData.d.ts +4 -0
  237. package/dist/types/palettePresets.d.ts +12 -0
  238. package/dist/types/paletteReserve.d.ts +52 -0
  239. package/dist/types/palettes.d.ts +4 -0
  240. package/dist/types/releaseNotes.d.ts +3 -0
  241. package/dist/types/simulation.d.ts +6 -0
  242. package/dist/types/{web/packages/tools/src/text.d.ts → text.d.ts} +6 -6
  243. package/package.json +145 -15
  244. package/dist/binary-D7wuaC5g.js +0 -120
  245. package/dist/pixels-DzfIIUOl.js +0 -76
  246. package/dist/types/games/kit/blit.d.ts +0 -10
  247. package/dist/types/games/kit/music.d.ts +0 -1
  248. package/dist/types/games/kit/pcText.d.ts +0 -8
  249. package/dist/types/games/kit/shading.d.ts +0 -11
  250. package/dist/types/web/packages/tools/src/audio.d.ts +0 -3
  251. package/dist/types/web/packages/tools/src/drawing.d.ts +0 -10
  252. package/dist/types/web/packages/tools/src/images.d.ts +0 -2
  253. package/dist/types/web/packages/tools/src/microFont.d.ts +0 -1
  254. package/dist/types/web/packages/tools/src/simulation.d.ts +0 -3
  255. package/dist/types/web/scripts/cdGames.d.ts +0 -103
  256. package/dist/types/web/scripts/gameShots.d.ts +0 -12
  257. package/dist/types/web/scripts/ogImage.d.ts +0 -21
  258. package/dist/types/web/src/audio/cmfLoad.d.ts +0 -7
  259. package/dist/types/web/src/audio/cmfPlayer.d.ts +0 -69
  260. package/dist/types/web/src/audio/context.d.ts +0 -12
  261. package/dist/types/web/src/audio/engine.d.ts +0 -39
  262. package/dist/types/web/src/audio/music.worklet.d.ts +0 -14
  263. package/dist/types/web/src/audio/opl.d.ts +0 -37
  264. package/dist/types/web/src/audio/output.d.ts +0 -13
  265. package/dist/types/web/src/desk/boxes/boxFacts.d.ts +0 -85
  266. package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +0 -44
  267. package/dist/types/web/src/dosPlayer/patchRules.d.ts +0 -24
  268. package/dist/types/web/src/dosPlayer/patchTable.d.ts +0 -80
  269. package/dist/types/web/src/edition.d.ts +0 -6
  270. package/dist/types/web/src/eggs/eggState.d.ts +0 -26
  271. package/dist/types/web/src/eggs/eggs.d.ts +0 -31
  272. package/dist/types/web/src/engine/character.d.ts +0 -30
  273. package/dist/types/web/src/engine/funcKeys.d.ts +0 -33
  274. package/dist/types/web/src/engine/game.d.ts +0 -52
  275. package/dist/types/web/src/engine/keys.d.ts +0 -17
  276. package/dist/types/web/src/engine/machine.d.ts +0 -99
  277. package/dist/types/web/src/engine/menus.d.ts +0 -46
  278. package/dist/types/web/src/engine/monsters.d.ts +0 -19
  279. package/dist/types/web/src/engine/playGain.d.ts +0 -11
  280. package/dist/types/web/src/engine/playerLook.d.ts +0 -26
  281. package/dist/types/web/src/engine/recorder.d.ts +0 -60
  282. package/dist/types/web/src/engine/render.d.ts +0 -8
  283. package/dist/types/web/src/engine/scene.d.ts +0 -156
  284. package/dist/types/web/src/engine/scroll.d.ts +0 -16
  285. package/dist/types/web/src/engine/showGraphic.d.ts +0 -39
  286. package/dist/types/web/src/engine/slowPc.d.ts +0 -62
  287. package/dist/types/web/src/engine/touch.d.ts +0 -33
  288. package/dist/types/web/src/engine/world.d.ts +0 -215
  289. package/dist/types/web/src/export/gameAbout.d.ts +0 -15
  290. package/dist/types/web/src/formats/binary.d.ts +0 -44
  291. package/dist/types/web/src/formats/blocks.d.ts +0 -52
  292. package/dist/types/web/src/formats/character.d.ts +0 -65
  293. package/dist/types/web/src/formats/cmf.d.ts +0 -33
  294. package/dist/types/web/src/formats/fli.d.ts +0 -45
  295. package/dist/types/web/src/formats/fliLimits.d.ts +0 -13
  296. package/dist/types/web/src/formats/game.d.ts +0 -72
  297. package/dist/types/web/src/formats/gif.d.ts +0 -15
  298. package/dist/types/web/src/formats/graphicScripts.d.ts +0 -18
  299. package/dist/types/web/src/formats/highscore.d.ts +0 -10
  300. package/dist/types/web/src/formats/map.d.ts +0 -24
  301. package/dist/types/web/src/formats/monster.d.ts +0 -48
  302. package/dist/types/web/src/formats/palette.d.ts +0 -15
  303. package/dist/types/web/src/formats/recording.d.ts +0 -7
  304. package/dist/types/web/src/formats/sound.d.ts +0 -13
  305. package/dist/types/web/src/formats/voc.d.ts +0 -13
  306. package/dist/types/web/src/gfx/cp437Glyphs.d.ts +0 -2
  307. package/dist/types/web/src/gfx/font8x8.d.ts +0 -2
  308. package/dist/types/web/src/gfx/levelPicture.d.ts +0 -81
  309. package/dist/types/web/src/gfx/screen.d.ts +0 -46
  310. package/dist/types/web/src/gfx/titlePicture.d.ts +0 -21
  311. package/dist/types/web/src/input/chords.d.ts +0 -22
  312. package/dist/types/web/src/input/deskMouse.d.ts +0 -14
  313. package/dist/types/web/src/input/keyboard.d.ts +0 -39
  314. package/dist/types/web/src/input/scancodes.d.ts +0 -3
  315. package/dist/types/web/src/manual/printables/types.d.ts +0 -277
  316. package/dist/types/web/src/project/bizarre.d.ts +0 -28
  317. package/dist/types/web/src/project/companion.d.ts +0 -35
  318. package/dist/types/web/src/project/diskFacts.d.ts +0 -30
  319. package/dist/types/web/src/project/files.d.ts +0 -124
  320. package/dist/types/web/src/project/gameFiles.d.ts +0 -49
  321. package/dist/types/web/src/project/gamePack.d.ts +0 -17
  322. package/dist/types/web/src/project/health.d.ts +0 -30
  323. package/dist/types/web/src/project/secretGames.d.ts +0 -19
  324. package/dist/types/web/src/project/storage.d.ts +0 -46
  325. package/dist/types/web/src/project/streamGame.d.ts +0 -38
  326. package/dist/types/web/src/project/zip.d.ts +0 -33
  327. package/dist/types/web/src/retro/dos/disks.d.ts +0 -33
  328. package/dist/types/web/src/retro/text/cp437.d.ts +0 -4
  329. package/dist/types/web/src/seededRandom.d.ts +0 -6
  330. package/dist/types/web/src/tinHearts/deskHearts.d.ts +0 -33
  331. package/dist/types/web/src/tinHearts/manifest.d.ts +0 -30
  332. package/dist/types/web/src/tinHearts/tinHearts.d.ts +0 -84
  333. package/dist/types/web/src/walkthrough/format.d.ts +0 -92
  334. package/dist/types/web/src/walkthrough/madeUpScores.d.ts +0 -6
  335. package/dist/types/web/src/walkthrough/runtime.d.ts +0 -134
  336. /package/dist/types/{web/src/assistant → image}/png.d.ts +0 -0
  337. /package/dist/types/{games/kit → kit}/palette.d.ts +0 -0
  338. /package/dist/types/{games/kit → kit}/pixels.d.ts +0 -0
  339. /package/dist/types/{games/kit → kit}/reel.d.ts +0 -0
  340. /package/dist/types/{games/kit → kit}/sound.d.ts +0 -0
  341. /package/dist/types/{games/kit → kit}/textBounds.d.ts +0 -0
  342. /package/dist/types/{games/kit → kit}/tune.d.ts +0 -0
  343. /package/dist/types/{web/src/audio → music}/compose.d.ts +0 -0
@@ -0,0 +1,85 @@
1
+ import { dist as h, evenly as m, inset as l, area as u, inside as d } from "./geom.js";
2
+ import { tatami as a } from "./fill.js";
3
+ import { satinUnderlay as y, satin as w } from "./satin.js";
4
+ import { DEFAULTS as x } from "./types.js";
5
+ class p {
6
+ constructor(t) {
7
+ this.p = t;
8
+ }
9
+ p;
10
+ out = [];
11
+ at;
12
+ before;
13
+ get pos() {
14
+ return this.at;
15
+ }
16
+ /** Sews to `to`, in pieces no longer than the stitch cap. */
17
+ stitchTo(t) {
18
+ const o = this.at;
19
+ if (!o) throw new Error("stitchTo before moveTo");
20
+ const i = Math.ceil(h(o, t) / this.p.maxStitch);
21
+ for (let s = 1; s <= i; s++) this.out.push({ x: o[0] + (t[0] - o[0]) * s / i, y: o[1] + (t[1] - o[1]) * s / i, cmd: "stitch" });
22
+ this.before = o, this.at = t;
23
+ }
24
+ /** Gets to `to`: a plain stitch when it is within `join` mm (and `ok`), else a trim and a jump, with lock stitches around the cut. */
25
+ moveTo(t, o, i = () => !0) {
26
+ const s = this.at;
27
+ return s && h(s, t) <= o && i(s, t) ? (this.stitchTo(t), !1) : (s && (this.lock(), this.out.push({ x: s[0], y: s[1], cmd: "trim" })), this.out.push({ x: t[0], y: t[1], cmd: "jump" }), this.at = t, this.before = void 0, !0);
28
+ }
29
+ /** Tie-off: two tiny stitches back along the stitching just sewn and out again (not out across the design). */
30
+ lock() {
31
+ this.at && this.before && this.tie(this.at, this.before);
32
+ }
33
+ /** Two short out-and-back stitches from `a` toward `b`, which lie along stitching already there or about to be. */
34
+ tie(t, o) {
35
+ const i = Math.min(0.6, h(t, o) / 2);
36
+ if (i < 0.1) return;
37
+ const s = [t[0] + (o[0] - t[0]) / h(t, o) * i, t[1] + (o[1] - t[1]) / h(t, o) * i];
38
+ for (const c of [s, t, s, t]) this.out.push({ x: c[0], y: c[1], cmd: "stitch" });
39
+ }
40
+ colorChange() {
41
+ const t = this.at;
42
+ t && (this.lock(), this.out.push({ x: t[0], y: t[1], cmd: "trim" }, { x: t[0], y: t[1], cmd: "color" })), this.at = void 0;
43
+ }
44
+ end() {
45
+ const t = this.at;
46
+ t && (this.lock(), this.out.push({ x: t[0], y: t[1], cmd: "trim" }, { x: t[0], y: t[1], cmd: "end" }));
47
+ }
48
+ /** Sews the points in order, starting by getting to the first. */
49
+ sew(t, o, i) {
50
+ if (t.length) {
51
+ this.moveTo(t[0], o, i) && t.length > 1 && this.tie(t[0], t[1]);
52
+ for (let s = 1; s < t.length; s++) this.stitchTo(t[s]);
53
+ }
54
+ }
55
+ }
56
+ const f = 3;
57
+ function g(n, t, o) {
58
+ const i = o.fillGrow ? t.polys.map((e) => l(e, -o.fillGrow)) : t.polys, s = i.reduce((e, r) => e + Math.abs(u(r)), 0), c = (e, r) => d(i, [(e[0] + r[0]) / 2, (e[1] + r[1]) / 2]);
59
+ for (const e of i) {
60
+ const r = m(l(e, 0.7), o.underlayRun, !0);
61
+ n.sew(r, f);
62
+ }
63
+ if (s > 60) {
64
+ const e = i.map((r) => l(r, 0.9));
65
+ for (const r of a(e, t.angle + 90, 2.2, o.fillLength)) n.sew(r, o.maxStitch, c);
66
+ }
67
+ for (const e of a(i, t.angle, o.fillSpacing, o.fillLength)) n.sew(e, o.maxStitch, c);
68
+ }
69
+ function k(n, t, o) {
70
+ if (t.kind === "fill") return g(n, t, o);
71
+ if (t.kind === "run") return n.sew(m(t.path, o.underlayRun, t.closed), f);
72
+ const i = t.width + o.pullComp;
73
+ for (const s of y(t.path, i, o.underlayRun, !!t.closed)) n.sew(s, f);
74
+ for (const s of w(t.path, i, o.satinDensity, !!t.closed, o.maxSatin)) n.sew(s, f);
75
+ }
76
+ function E(n, t = {}) {
77
+ const o = { ...x, ...t }, i = new p(o);
78
+ return n.blocks.forEach((s, c) => {
79
+ c && i.colorChange();
80
+ for (const e of s.items) k(i, e, o);
81
+ }), i.end(), { name: n.name, threads: n.blocks.map((s) => s.thread), stitches: i.out };
82
+ }
83
+ export {
84
+ E as compile
85
+ };
@@ -0,0 +1,79 @@
1
+ import { toRecords as g } from "./units.js";
2
+ const p = [
3
+ // [byte, plus bit, minus bit, weight] for x, then y
4
+ [
5
+ [0, 1, 2, 1],
6
+ [1, 1, 2, 3],
7
+ [0, 4, 8, 9],
8
+ [1, 4, 8, 27],
9
+ [2, 4, 8, 81]
10
+ ],
11
+ [
12
+ [0, 128, 64, 1],
13
+ [1, 128, 64, 3],
14
+ [0, 32, 16, 9],
15
+ [1, 32, 16, 27],
16
+ [2, 32, 16, 81]
17
+ ]
18
+ ];
19
+ function x(a, e, f) {
20
+ const r = [0, 0, 3 | f];
21
+ return [a, e].forEach((c, d) => {
22
+ let n = c;
23
+ for (const [o, i, l, s] of [...p[d]].reverse())
24
+ n > s / 2 ? (r[o] |= i, n -= s) : n < -s / 2 && (r[o] |= l, n += s);
25
+ if (n !== 0) throw new Error(`move ${c} does not fit a DST record`);
26
+ }), r;
27
+ }
28
+ const $ = (a, e) => a.slice(0, e).padEnd(e, " ");
29
+ function M(a) {
30
+ const e = [];
31
+ let f = 0, r = 0, c = 0, d = 0, n = 0, o = 0, i = 0;
32
+ const l = (t, m) => {
33
+ e.push(x(t.dx, t.dy, m)), r += t.dx, c += t.dy, d = Math.min(d, r), n = Math.max(n, r), o = Math.min(o, c), i = Math.max(i, c);
34
+ };
35
+ for (const t of g(a))
36
+ t.cmd === "stitch" ? l(t, 0) : t.cmd === "jump" ? l(t, 128) : t.cmd === "trim" ? (l({ dx: 1, dy: 1 }, 128), l({ dx: -1, dy: -1 }, 128)) : t.cmd === "color" && (e.push([0, 0, 195]), f++);
37
+ e.push([0, 0, 243]);
38
+ const s = [
39
+ `LA:${$(a.name.toUpperCase(), 16)}`,
40
+ `ST:${String(e.length).padStart(7, " ")}`,
41
+ `CO:${String(f).padStart(3, " ")}`,
42
+ `+X:${String(n).padStart(5, " ")}`,
43
+ `-X:${String(-d).padStart(5, " ")}`,
44
+ `+Y:${String(i).padStart(5, " ")}`,
45
+ `-Y:${String(-o).padStart(5, " ")}`,
46
+ `AX:${(r >= 0 ? "+" : "-").concat(String(Math.abs(r)).padStart(5, " "))}`,
47
+ `AY:${(c >= 0 ? "+" : "-").concat(String(Math.abs(c)).padStart(5, " "))}`,
48
+ `MX:+${String(0).padStart(5, " ")}`,
49
+ `MY:+${String(0).padStart(5, " ")}`,
50
+ "PD:******"
51
+ ].join("\r"), h = new Uint8Array(512 + e.length * 3);
52
+ h.fill(32, 0, 512);
53
+ for (let t = 0; t < s.length; t++) h[t] = s.charCodeAt(t);
54
+ return h[s.length] = 13, h[s.length + 1] = 26, e.forEach((t, m) => h.set(t, 512 + m * 3)), h;
55
+ }
56
+ function w(a) {
57
+ const e = String.fromCharCode(...a.subarray(0, 512)), f = (o) => Number(new RegExp(`${o}:\\s*(\\d+)`).exec(e)?.[1] ?? NaN), r = [];
58
+ let c = 0, d = 0, n = 0;
59
+ for (let o = 512; o + 2 < a.length; o += 3) {
60
+ const i = [a[o], a[o + 1], a[o + 2]];
61
+ if (i[2] === 243) {
62
+ r.push({ x: d / 10, y: n / 10, cmd: "end" });
63
+ break;
64
+ }
65
+ if (i[2] === 195) {
66
+ c++, r.push({ x: d / 10, y: n / 10, cmd: "color" });
67
+ continue;
68
+ }
69
+ const l = [0, 0];
70
+ p.forEach((s, h) => {
71
+ for (const [t, m, u, S] of s) l[h] += (i[t] & m ? S : 0) - (i[t] & u ? S : 0);
72
+ }), d += l[0], n += l[1], r.push({ x: d / 10, y: n / 10, cmd: i[2] & 128 ? "jump" : "stitch" });
73
+ }
74
+ return { stitches: r, colorChanges: c, label: e.slice(3, 19).trim(), declared: { stitches: f("ST"), colors: f("CO") } };
75
+ }
76
+ export {
77
+ w as readDst,
78
+ M as writeDst
79
+ };
@@ -0,0 +1,26 @@
1
+ import { toRecords as u } from "./units.js";
2
+ const r = (c) => c & 255;
3
+ function m(c) {
4
+ const o = [];
5
+ for (const t of u(c, 127))
6
+ t.cmd === "stitch" ? o.push(r(t.dx), r(t.dy)) : t.cmd === "jump" ? o.push(128, 4, r(t.dx), r(t.dy)) : t.cmd === "trim" ? o.push(128, 128, 7, 0) : t.cmd === "color" && o.push(128, 1, 0, 0);
7
+ return Uint8Array.from(o);
8
+ }
9
+ const s = (c) => c > 127 ? c - 256 : c;
10
+ function f(c) {
11
+ const o = [];
12
+ let t = 0, i = 0, n = 0;
13
+ for (let e = 0; e < c.length; ) {
14
+ if (c[e] === 128 && e + 1 < c.length) {
15
+ const d = c[e + 1];
16
+ d === 1 ? (t++, o.push({ x: i / 10, y: n / 10, cmd: "color" })) : d === 4 && e + 3 < c.length ? (i += s(c[e + 2]), n += s(c[e + 3]), o.push({ x: i / 10, y: n / 10, cmd: "jump" })) : d === 128 && o.push({ x: i / 10, y: n / 10, cmd: "trim" }), e += 4;
17
+ continue;
18
+ }
19
+ i += s(c[e]), n += s(c[e + 1]), o.push({ x: i / 10, y: n / 10, cmd: "stitch" }), e += 2;
20
+ }
21
+ return o.push({ x: i / 10, y: n / 10, cmd: "end" }), { stitches: o, colorChanges: t };
22
+ }
23
+ export {
24
+ f as readExp,
25
+ m as writeExp
26
+ };
@@ -0,0 +1,49 @@
1
+ import { rotate as M } from "./geom.js";
2
+ function b(r, l, c) {
3
+ const p = -l * Math.PI / 180, s = r.map((o) => o.map((e) => M(e, p))), n = s.flat().map((o) => o[1]), d = Math.min(...n), x = Math.max(...n), m = [];
4
+ for (let o = d + c / 2; o < x; o += c) {
5
+ const e = [];
6
+ for (const t of s)
7
+ for (let h = 0, u = t.length - 1; h < t.length; u = h++) {
8
+ const f = t[h], a = t[u];
9
+ f[1] > o != a[1] > o && e.push(f[0] + (o - f[1]) * (a[0] - f[0]) / (a[1] - f[1]));
10
+ }
11
+ e.sort((t, h) => t - h);
12
+ const i = [];
13
+ for (let t = 0; t + 1 < e.length; t += 2) e[t + 1] - e[t] > 0.3 && i.push({ x0: e[t], x1: e[t + 1], y: o, done: !1 });
14
+ m.push(i);
15
+ }
16
+ return m;
17
+ }
18
+ function k(r, l, c, p) {
19
+ const s = [r.x0];
20
+ for (let n = (Math.floor(r.x0 / c - p) + 1 + p) * c; n < r.x1; n += c) n - r.x0 > 0.7 && r.x1 - n > 0.7 && s.push(n);
21
+ return s.push(r.x1), l || s.reverse(), s.map((n) => [n, r.y]);
22
+ }
23
+ function I(r, l, c, p) {
24
+ const s = b(r, l, c), n = l * Math.PI / 180, d = [];
25
+ for (let x = 0; x < s.length; x++)
26
+ for (const m of s[x]) {
27
+ if (m.done) continue;
28
+ m.done = !0;
29
+ const o = [];
30
+ let e = m, i = !0;
31
+ for (let t = x; ; t++) {
32
+ o.push(...k(e, i, p, t % 3 / 3));
33
+ const h = o[o.length - 1][0];
34
+ let u, f = 8;
35
+ for (const a of s[t + 1] ?? []) {
36
+ if (a.done) continue;
37
+ const g = Math.abs((i ? a.x1 : a.x0) - h);
38
+ g < f && (f = g, u = a);
39
+ }
40
+ if (!u) break;
41
+ u.done = !0, e = u, i = !i;
42
+ }
43
+ d.push(o.map((t) => M(t, n)));
44
+ }
45
+ return d;
46
+ }
47
+ export {
48
+ I as tatami
49
+ };
@@ -0,0 +1,82 @@
1
+ const M = (n, o) => Math.hypot(n[0] - o[0], n[1] - o[1]);
2
+ function y(n, o, a, t = 96) {
3
+ return Array.from({ length: t }, (s, e) => [n + a * Math.cos(e / t * Math.PI * 2), o + a * Math.sin(e / t * Math.PI * 2)]);
4
+ }
5
+ function x(n, o, a, t, s, e = Math.PI / 2) {
6
+ const c = [];
7
+ for (let r = 0; r < s * 2; r++) {
8
+ const h = e + r * Math.PI / s, l = r % 2 ? a : t;
9
+ c.push([n + l * Math.cos(h), o + l * Math.sin(h)]);
10
+ }
11
+ return c;
12
+ }
13
+ function I(n, o, a, t, s, e, c = 16) {
14
+ return Array.from({ length: c + 1 }, (r, h) => {
15
+ const l = s + (e - s) * h / c;
16
+ return [n + a * Math.cos(l), o + t * Math.sin(l)];
17
+ });
18
+ }
19
+ function m(n) {
20
+ let o = 0;
21
+ for (let a = 0; a < n.length; a++) {
22
+ const t = n[a], s = n[(a + 1) % n.length];
23
+ o += t[0] * s[1] - s[0] * t[1];
24
+ }
25
+ return o / 2;
26
+ }
27
+ function P(n, o) {
28
+ const a = m(n) >= 0 ? 1 : -1, t = n.length, s = (e, c) => {
29
+ const r = M(e, c) || 1;
30
+ return [-(c[1] - e[1]) / r * a, (c[0] - e[0]) / r * a];
31
+ };
32
+ return n.map((e, c) => {
33
+ const r = s(n[(c + t - 1) % t], e), h = s(e, n[(c + 1) % t]), l = 1 + r[0] * h[0] + r[1] * h[1];
34
+ let u = r[0] + h[0], i = r[1] + h[1];
35
+ l < 0.2 ? (u = r[0], i = r[1]) : (u /= l, i /= l);
36
+ const f = Math.hypot(u, i), g = Math.min(1, 2.5 / (f || 1));
37
+ return [e[0] + u * o * g, e[1] + i * o * g];
38
+ });
39
+ }
40
+ function k(n, o) {
41
+ let a = !1;
42
+ for (const t of n)
43
+ for (let s = 0, e = t.length - 1; s < t.length; e = s++) {
44
+ const c = t[s], r = t[e];
45
+ c[1] > o[1] != r[1] > o[1] && o[0] < (r[0] - c[0]) * (o[1] - c[1]) / (r[1] - c[1]) + c[0] && (a = !a);
46
+ }
47
+ return a;
48
+ }
49
+ function d(n, o, a = !1) {
50
+ const t = a ? [...n, n[0]] : n, s = [t[0]];
51
+ for (let e = 1; e < t.length; e++) {
52
+ const c = t[e - 1], r = t[e], h = Math.max(1, Math.ceil(M(c, r) / o));
53
+ for (let l = 1; l <= h; l++) s.push([c[0] + (r[0] - c[0]) * l / h, c[1] + (r[1] - c[1]) * l / h]);
54
+ }
55
+ return s;
56
+ }
57
+ function A(n, o, a = !1) {
58
+ const t = a ? [...n, n[0]] : n, s = [0];
59
+ for (let l = 1; l < t.length; l++) s.push(s[l - 1] + M(t[l - 1], t[l]));
60
+ const e = s[s.length - 1], c = Math.max(1, Math.round(e / o)), r = [];
61
+ let h = 1;
62
+ for (let l = 0; l <= c; l++) {
63
+ const u = e * l / c;
64
+ for (; h < t.length - 1 && s[h] < u; ) h++;
65
+ const i = s[h] - s[h - 1] || 1, f = (u - s[h - 1]) / i;
66
+ r.push([t[h - 1][0] + (t[h][0] - t[h - 1][0]) * f, t[h - 1][1] + (t[h][1] - t[h - 1][1]) * f]);
67
+ }
68
+ return r;
69
+ }
70
+ const _ = (n, o) => [n[0] * Math.cos(o) - n[1] * Math.sin(o), n[0] * Math.sin(o) + n[1] * Math.cos(o)];
71
+ export {
72
+ I as arc,
73
+ m as area,
74
+ y as circle,
75
+ M as dist,
76
+ A as evenly,
77
+ P as inset,
78
+ k as inside,
79
+ d as resample,
80
+ _ as rotate,
81
+ x as star
82
+ };
@@ -0,0 +1,79 @@
1
+ import { toRecords as C } from "./units.js";
2
+ const y = 48, M = 38;
3
+ function A(e, w) {
4
+ const [l, i, x, c] = w, n = Math.min((y - 4) / Math.max(1, x - l), (M - 4) / Math.max(1, c - i)), d = (y - (x - l) * n) / 2 - l * n, o = (M - (c - i) * n) / 2 - i * n, f = new Uint8Array(y * M);
5
+ for (const [r, h, m, u] of e) {
6
+ const p = Math.max(1, Math.ceil(Math.hypot(m - r, u - h) * n));
7
+ for (let t = 0; t <= p; t++) {
8
+ const a = Math.round(d + (r + (m - r) * t / p) * n), g = Math.round(o + (h + (u - h) * t / p) * n);
9
+ a >= 0 && a < y && g >= 0 && g < M && (f[g * y + a] = 1);
10
+ }
11
+ }
12
+ const s = [];
13
+ for (let r = 0; r < M; r++)
14
+ for (let h = 0; h < y / 8; h++) s.push(Array.from({ length: 8 }, (m, u) => f[r * y + h * 8 + u] << 7 - u).reduce((m, u) => m | u, 0));
15
+ return s;
16
+ }
17
+ function b(e) {
18
+ const w = C(e, 2047), l = [], i = [[]];
19
+ let x = 2, c = 0, n = 0, d = !1;
20
+ const o = { x0: 0, y0: 0, x1: 0, y1: 0 }, f = (t, a) => l.push(128 | a | t >> 8 & 15, t & 255);
21
+ for (const t of w)
22
+ if (t.cmd === "color")
23
+ l.push(254, 176, x), x = x === 2 ? 1 : 2, i.push([]);
24
+ else if (t.cmd === "trim")
25
+ d = !0;
26
+ else if (t.cmd === "end")
27
+ l.push(255);
28
+ else {
29
+ const a = -t.dy;
30
+ if (t.cmd === "jump") {
31
+ const g = d ? 32 : 16;
32
+ f(t.dx & 4095, g), f(a & 4095, g);
33
+ } else t.dx >= -64 && t.dx <= 63 && a >= -64 && a <= 63 ? l.push(t.dx & 127, a & 127) : (f(t.dx & 4095, 0), f(a & 4095, 0));
34
+ t.cmd === "jump" ? d = !1 : i[i.length - 1].push([c, n, c + t.dx, n + a]), c += t.dx, n += a, o.x0 = Math.min(o.x0, c), o.x1 = Math.max(o.x1, c), o.y0 = Math.min(o.y0, n), o.y1 = Math.max(o.y1, n);
35
+ }
36
+ const s = [];
37
+ for (((t) => [...t].forEach((a) => s.push(a.charCodeAt(0))))(`LA:${e.name.slice(0, 16).padEnd(16, " ")}`), s.push(13), s.push(...Array(12).fill(32), 255, 0, 6, M, ...Array(12).fill(32)), s.push(e.threads.length - 1, ...e.threads.map((t) => t.pec ?? 20)); s.length < 464; ) s.push(32);
38
+ const h = s.length + 2, m = [o.x0, o.y0, o.x1, o.y1];
39
+ s.push(0, 0, 0, 0, 0), s.push(49, 255, 240);
40
+ const u = (t) => s.push(t & 255, t >> 8 & 255);
41
+ u(o.x1 - o.x0), u(o.y1 - o.y0), u(480), u(432), s.push((36864 | -o.x0) >> 8 & 255, (36864 | -o.x0) & 255, (36864 | -o.y0) >> 8 & 255, (36864 | -o.y0) & 255), s.push(...l);
42
+ const p = s.length - 464;
43
+ s[h] = p & 255, s[h + 1] = p >> 8 & 255, s[h + 2] = p >> 16 & 255, s.push(...A(i.flat(), m));
44
+ for (const t of i) s.push(...A(t, m));
45
+ return Uint8Array.from([..."#PES0001"].map((t) => t.charCodeAt(0)).concat([22, 0, 0, 0, 1, 0, 1, 0, 1, 0, 255, 255, 0, 0], s));
46
+ }
47
+ function v(e) {
48
+ const w = new DataView(e.buffer, e.byteOffset, e.byteLength);
49
+ if (String.fromCharCode(...e.subarray(0, 8)) !== "#PES0001") throw new Error("not a PES v1 file");
50
+ const l = w.getUint32(8, !0), i = String.fromCharCode(...e.subarray(l + 3, l + 19)).trim(), x = e[l + 48] + 1;
51
+ let c = l + 464 + 20;
52
+ const n = [];
53
+ let d = 0, o = 0, f = 0;
54
+ const s = () => {
55
+ const r = e[c];
56
+ if (r & 128) {
57
+ let h = (r & 15) << 8 | e[c + 1];
58
+ return h & 2048 && (h -= 4096), c += 2, { v: h, flag: r & 48 };
59
+ }
60
+ return c++, { v: r >= 64 ? r - 128 : r, flag: 0 };
61
+ };
62
+ for (; c < e.length; ) {
63
+ if (e[c] === 255) {
64
+ n.push({ x: o / 10, y: f / 10, cmd: "end" });
65
+ break;
66
+ }
67
+ if (e[c] === 254) {
68
+ d++, n.push({ x: o / 10, y: f / 10, cmd: "color" }), c += 3;
69
+ continue;
70
+ }
71
+ const r = s(), h = s();
72
+ o += r.v, f -= h.v, n.push({ x: o / 10, y: f / 10, cmd: r.flag ? "jump" : "stitch" });
73
+ }
74
+ return { stitches: n, colorChanges: d, threads: x, label: i };
75
+ }
76
+ export {
77
+ v as readPes,
78
+ b as writePes
79
+ };
@@ -0,0 +1,29 @@
1
+ import { evenly as x } from "./geom.js";
2
+ const l = 2;
3
+ function k(a, s, r, c) {
4
+ const e = x(a, r, c), n = e.length;
5
+ return e.map((u, o) => {
6
+ const f = e[c ? (o + n - 1 - l) % (n - 1) : Math.max(0, o - l)], t = e[c ? (o + l) % (n - 1) : Math.min(n - 1, o + l)], h = Math.hypot(t[0] - f[0], t[1] - f[1]) || 1, m = -(t[1] - f[1]) / h * (s / 2), M = (t[0] - f[0]) / h * (s / 2);
7
+ return [
8
+ [u[0] + m, u[1] + M],
9
+ [u[0] - m, u[1] - M]
10
+ ];
11
+ });
12
+ }
13
+ function y(a, s, r, c, e, n) {
14
+ const u = k(a, s, r, c), o = (t, h) => [t[0][0] + (t[1][0] - t[0][0]) * (0.5 - h), t[0][1] + (t[1][1] - t[0][1]) * (0.5 - h)], f = [];
15
+ return u.forEach((t, h) => f.push(o(t, h % 2 ? n : e))), f;
16
+ }
17
+ function p(a, s, r, c, e) {
18
+ const n = Math.max(1, Math.ceil(s / e - 1e-9)), u = [];
19
+ for (let o = 0; o < n; o++) u.push(y(a, s, r, c, -0.5 + o / n, -0.5 + (o + 1) / n));
20
+ return u;
21
+ }
22
+ function O(a, s, r, c) {
23
+ const n = [x(a, r, c)];
24
+ return s > 2 && n.push(y(a, s - 0.8, r * 0.7, c, -0.5, 0.5)), n;
25
+ }
26
+ export {
27
+ p as satin,
28
+ O as satinUnderlay
29
+ };
@@ -0,0 +1,30 @@
1
+ const d = (x) => Math.max(0, Math.min(255, x));
2
+ function E(x, c) {
3
+ const n = Math.round(c.size * c.pxPerMm), l = new Uint8Array(n * n * 3), p = c.backing ?? [214, 208, 196];
4
+ for (let t = 0; t < n; t++)
5
+ for (let o = 0; o < n; o++) {
6
+ const s = ((o >> 1) + (t >> 1) & 1) * 5 + (o * 7 + t * 13) % 5;
7
+ l.set([d(p[0] - s), d(p[1] - s), d(p[2] - s)], (t * n + o) * 3);
8
+ }
9
+ const h = (c.thread ?? 0.42) * c.pxPerMm / 2, [w, z] = c.center ?? [0, 0], k = (t) => (t - w + c.size / 2) * c.pxPerMm, j = (t) => (c.size / 2 - (t - z)) * c.pxPerMm;
10
+ let u = 0, a = 0, e = 0;
11
+ for (const t of x.stitches) {
12
+ if (t.cmd === "color" && u++, t.cmd !== "stitch" && t.cmd !== "jump") continue;
13
+ const o = k(t.x), s = j(t.y);
14
+ if (t.cmd === "stitch") {
15
+ const v = x.threads[u].rgb, A = Math.max(0, Math.floor(Math.min(a, o) - h - 1)), U = Math.min(n - 1, Math.ceil(Math.max(a, o) + h + 1)), q = Math.max(0, Math.floor(Math.min(e, s) - h - 1)), B = Math.min(n - 1, Math.ceil(Math.max(e, s) + h + 1)), f = o - a, y = s - e, C = f * f + y * y || 1;
16
+ for (let i = q; i <= B; i++)
17
+ for (let m = A; m <= U; m++) {
18
+ const b = Math.max(0, Math.min(1, ((m + 0.5 - a) * f + (i + 0.5 - e) * y) / C)), r = Math.hypot(m + 0.5 - (a + f * b), i + 0.5 - (e + y * b)) / h;
19
+ if (r > 1) continue;
20
+ const D = 1.18 - 0.55 * r * r, P = (i * n + m) * 3, g = r > 0.8 ? (1 - r) / 0.2 : 1;
21
+ for (let M = 0; M < 3; M++) l[P + M] = d(l[P + M] * (1 - g) + v[M] * D * g);
22
+ }
23
+ }
24
+ a = o, e = s;
25
+ }
26
+ return { w: n, h: n, rgb: l };
27
+ }
28
+ export {
29
+ E as simulate
30
+ };