pantograph2d 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{QuadraticBezier-B2g_Iyyl.js → QuadraticBezier-BeY2TXKH.js} +464 -433
  2. package/dist/QuadraticBezier-BeY2TXKH.js.map +1 -0
  3. package/dist/{QuadraticBezier-CuRsIP_D.cjs → QuadraticBezier-eSR75IzC.cjs} +9 -9
  4. package/dist/QuadraticBezier-eSR75IzC.cjs.map +1 -0
  5. package/dist/draw-BmJ8wIc9.cjs +2 -0
  6. package/dist/draw-BmJ8wIc9.cjs.map +1 -0
  7. package/dist/{draw-BJW5kfm9.js → draw-DzKVhurb.js} +94 -89
  8. package/dist/draw-DzKVhurb.js.map +1 -0
  9. package/dist/{models-DdZq-waE.js → models-BHeLX0dj.js} +544 -527
  10. package/dist/models-BHeLX0dj.js.map +1 -0
  11. package/dist/models-Fv9xfQBT.cjs +4 -0
  12. package/dist/models-Fv9xfQBT.cjs.map +1 -0
  13. package/dist/pantograph/drawShape.cjs +1 -1
  14. package/dist/pantograph/drawShape.js +2 -2
  15. package/dist/pantograph/models.cjs +1 -1
  16. package/dist/pantograph/models.js +2 -2
  17. package/dist/pantograph/svg.cjs +1 -1
  18. package/dist/pantograph/svg.js +1 -1
  19. package/dist/pantograph.cjs +2 -2
  20. package/dist/pantograph.cjs.map +1 -1
  21. package/dist/pantograph.js +83 -83
  22. package/dist/pantograph.js.map +1 -1
  23. package/dist/svg-BTO7h1ix.js +62 -0
  24. package/dist/svg-BTO7h1ix.js.map +1 -0
  25. package/dist/svg-b6SOnbda.cjs +8 -0
  26. package/dist/svg-b6SOnbda.cjs.map +1 -0
  27. package/dist/types/src/algorithms/offsets/offsetSegment.d.ts +1 -0
  28. package/dist/types/src/models/BoundingBox.d.ts +1 -0
  29. package/dist/types/src/models/Diagram.d.ts +1 -0
  30. package/dist/types/src/models/Figure.d.ts +1 -0
  31. package/dist/types/src/models/Loop.d.ts +1 -0
  32. package/dist/types/src/models/Strand.d.ts +5 -0
  33. package/dist/types/src/models/TransformationMatrix.d.ts +1 -0
  34. package/dist/types/src/models/segments/Arc.d.ts +1 -0
  35. package/dist/types/src/models/segments/CubicBezier.d.ts +1 -0
  36. package/dist/types/src/models/segments/EllipseArc.d.ts +1 -0
  37. package/dist/types/src/models/segments/Line.d.ts +2 -0
  38. package/dist/types/src/models/segments/QuadraticBezier.d.ts +1 -0
  39. package/dist/types/src/tesselationOperations.d.ts +4 -4
  40. package/package.json +2 -2
  41. package/dist/QuadraticBezier-B2g_Iyyl.js.map +0 -1
  42. package/dist/QuadraticBezier-CuRsIP_D.cjs.map +0 -1
  43. package/dist/draw-9Elv4xz6.cjs +0 -2
  44. package/dist/draw-9Elv4xz6.cjs.map +0 -1
  45. package/dist/draw-BJW5kfm9.js.map +0 -1
  46. package/dist/models-DdZq-waE.js.map +0 -1
  47. package/dist/models-LHGiMarC.cjs +0 -4
  48. package/dist/models-LHGiMarC.cjs.map +0 -1
  49. package/dist/svg-BzloQ9l1.cjs +0 -8
  50. package/dist/svg-BzloQ9l1.cjs.map +0 -1
  51. package/dist/svg-D8vwkQf7.js +0 -62
  52. package/dist/svg-D8vwkQf7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-BTO7h1ix.js","sources":["../src/export/svg/svgSegment.ts","../src/export/svg/svgLoop.ts","../src/export/svg/svgFigure.ts","../src/export/svg/svgDiagram.ts","../src/export/svg/svgStrand.ts","../src/export/svg/wrapSVG.ts"],"sourcesContent":["import { Arc } from \"../../models/segments/Arc.js\";\nimport { CubicBezier } from \"../../models/segments/CubicBezier.js\";\nimport { EllipseArc } from \"../../models/segments/EllipseArc.js\";\nimport { Line } from \"../../models/segments/Line.js\";\nimport { QuadraticBezier } from \"../../models/segments/QuadraticBezier.js\";\nimport { Segment } from \"../../models/segments/Segment.js\";\nimport { RAD2DEG } from \"../../vectorOperations.js\";\n\nfunction formatPoint([x, y]: [number, number]) {\n return `${x} ${y}`;\n}\n\nexport function svgSegmentToPath(segment: Segment) {\n if (Line.isInstance(segment)) {\n return `L ${formatPoint(segment.lastPoint)}`;\n }\n if (Arc.isInstance(segment)) {\n return `A ${segment.radius} ${segment.radius} 0 ${\n segment.angularLength > Math.PI ? \"1\" : \"0\"\n } ${segment.clockwise ? \"0\" : \"1\"} ${formatPoint(segment.lastPoint)}`;\n }\n if (EllipseArc.isInstance(segment)) {\n return `A ${segment.majorRadius} ${segment.minorRadius} ${\n segment.tiltAngle * RAD2DEG\n } ${segment.deltaAngle > Math.PI ? \"1\" : \"0\"} ${\n segment.clockwise ? \"0\" : \"1\"\n } ${formatPoint(segment.lastPoint)}`;\n }\n\n if (QuadraticBezier.isInstance(segment)) {\n return `Q ${[\n formatPoint(segment.controlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n if (CubicBezier.isInstance(segment)) {\n return `C ${[\n formatPoint(segment.firstControlPoint),\n formatPoint(segment.lastControlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n throw new Error(\"Unknown segment type\");\n}\n","import type { Loop } from \"../../models/Loop.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgLoop(loop: Loop) {\n const start = `M ${loop.firstPoint.join(\" \")}`;\n const segments = loop.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments} Z`;\n}\n","import type { Figure } from \"../../models/Figure.js\";\nimport { svgLoop } from \"./svgLoop.js\";\n\nexport function svgFigure(figure: Figure) {\n const path = figure.allLoops.map(svgLoop).join(\" \");\n return `<path d=\"${path}\" />`;\n}\n","import { Diagram } from \"../../models/Diagram.js\";\nimport { svgFigure } from \"./svgFigure.js\";\n\nexport function svgDiagram(diagram: Diagram) {\n return `<g>\n ${diagram.figures.map(svgFigure).join(\"\\n\")}\n</g>`;\n}\n","import type { Strand } from \"../../models/Strand.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgStrand(strand: Strand) {\n const start = `M ${strand.firstPoint.join(\" \")}`;\n const segments = strand.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments}`;\n}\n","import { BoundingBox } from \"../../models/BoundingBox.js\";\n\nexport function svgViewbox(bbox: BoundingBox, margin = 1) {\n const minX = bbox.xMin - margin;\n const minY = bbox.yMin - margin;\n\n return `${minX} ${minY} ${bbox.width + 2 * margin} ${\n bbox.height + 2 * margin\n }`;\n}\n\n// The list comes from https://oreillymedia.github.io/Using_SVG/guide/units.html\nexport type SVGUnit = \"mm\" | \"cm\" | \"in\" | \"pc\" | \"px\" | \"pt\";\n\nexport function wrapSVG(\n body: string,\n boundingBox: BoundingBox,\n margin = 1,\n unit: null | SVGUnit,\n) {\n const vbox = svgViewbox(boundingBox, margin);\n const sizes = unit\n ? `width=\"${boundingBox.width + 2 * margin}${unit}\" height=\"${\n boundingBox.height + 2 * margin\n }${unit}\"`\n : \"\";\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${vbox}\" fill=\"none\" stroke=\"grey\" stroke-width=\"0.2%\" vector-effect=\"non-scaling-stroke\" ${sizes}>\n ${body}\n</svg>`;\n}\n"],"names":["formatPoint","x","y","svgSegmentToPath","segment","Line","Arc","EllipseArc","RAD2DEG","QuadraticBezier","CubicBezier","svgLoop","loop","start","segments","svgFigure","figure","svgDiagram","diagram","svgStrand","strand","svgViewbox","bbox","margin","minX","minY","wrapSVG","body","boundingBox","unit","vbox","sizes"],"mappings":";AAQA,SAASA,EAAY,CAACC,GAAGC,CAAC,GAAqB;AACtC,SAAA,GAAGD,CAAC,IAAIC,CAAC;AAClB;AAEO,SAASC,EAAiBC,GAAkB;AAC7C,MAAAC,EAAK,WAAWD,CAAO;AACzB,WAAO,KAAKJ,EAAYI,EAAQ,SAAS,CAAC;AAExC,MAAAE,EAAI,WAAWF,CAAO;AACjB,WAAA,KAAKA,EAAQ,MAAM,IAAIA,EAAQ,MAAM,MAC1CA,EAAQ,gBAAgB,KAAK,KAAK,MAAM,GAC1C,IAAIA,EAAQ,YAAY,MAAM,GAAG,IAAIJ,EAAYI,EAAQ,SAAS,CAAC;AAEjE,MAAAG,EAAW,WAAWH,CAAO;AACxB,WAAA,KAAKA,EAAQ,WAAW,IAAIA,EAAQ,WAAW,IACpDA,EAAQ,YAAYI,CACtB,IAAIJ,EAAQ,aAAa,KAAK,KAAK,MAAM,GAAG,IAC1CA,EAAQ,YAAY,MAAM,GAC5B,IAAIJ,EAAYI,EAAQ,SAAS,CAAC;AAGhC,MAAAK,EAAgB,WAAWL,CAAO;AACpC,WAAO,KAAK;AAAA,MACVJ,EAAYI,EAAQ,YAAY;AAAA,MAChCJ,EAAYI,EAAQ,SAAS;AAAA,IAAA,EAC7B,KAAK,GAAG,CAAC;AAGT,MAAAM,EAAY,WAAWN,CAAO;AAChC,WAAO,KAAK;AAAA,MACVJ,EAAYI,EAAQ,iBAAiB;AAAA,MACrCJ,EAAYI,EAAQ,gBAAgB;AAAA,MACpCJ,EAAYI,EAAQ,SAAS;AAAA,IAAA,EAC7B,KAAK,GAAG,CAAC;AAGP,QAAA,IAAI,MAAM,sBAAsB;AACxC;AC1CO,SAASO,EAAQC,GAAY;AAClC,QAAMC,IAAQ,KAAKD,EAAK,WAAW,KAAK,GAAG,CAAC,IACtCE,IAAWF,EAAK,SAAS,IAAIT,CAAgB,EAAE,KAAK,GAAG;AACtD,SAAA,GAAGU,CAAK,IAAIC,CAAQ;AAC7B;ACJO,SAASC,EAAUC,GAAgB;AAExC,SAAO,YADMA,EAAO,SAAS,IAAIL,CAAO,EAAE,KAAK,GAAG,CAC3B;AACzB;ACHO,SAASM,EAAWC,GAAkB;AACpC,SAAA;AAAA,IACLA,EAAQ,QAAQ,IAAIH,CAAS,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA;AAE7C;ACJO,SAASI,EAAUC,GAAgB;AACxC,QAAMP,IAAQ,KAAKO,EAAO,WAAW,KAAK,GAAG,CAAC,IACxCN,IAAWM,EAAO,SAAS,IAAIjB,CAAgB,EAAE,KAAK,GAAG;AACxD,SAAA,GAAGU,CAAK,IAAIC,CAAQ;AAC7B;ACLgB,SAAAO,EAAWC,GAAmBC,IAAS,GAAG;AAClD,QAAAC,IAAOF,EAAK,OAAOC,GACnBE,IAAOH,EAAK,OAAOC;AAEzB,SAAO,GAAGC,CAAI,IAAIC,CAAI,IAAIH,EAAK,QAAQ,IAAIC,CAAM,IAC/CD,EAAK,SAAS,IAAIC,CACpB;AACF;AAKO,SAASG,EACdC,GACAC,GACAL,IAAS,GACTM,GACA;AACM,QAAAC,IAAOT,EAAWO,GAAaL,CAAM,GACrCQ,IAAQF,IACV,UAAUD,EAAY,QAAQ,IAAIL,CAAM,GAAGM,CAAI,aAC7CD,EAAY,SAAS,IAAIL,CAC3B,GAAGM,CAAI,MACP;AAEG,SAAA;AAAA,iEACwDC,CAAI,sFAAsFC,CAAK;AAAA,MAC1JJ,CAAI;AAAA;AAEV;"}
@@ -0,0 +1,8 @@
1
+ "use strict";const r=require("./QuadraticBezier-eSR75IzC.cjs");function o([t,i]){return`${t} ${i}`}function a(t){if(r.Line.isInstance(t))return`L ${o(t.lastPoint)}`;if(r.Arc.isInstance(t))return`A ${t.radius} ${t.radius} 0 ${t.angularLength>Math.PI?"1":"0"} ${t.clockwise?"0":"1"} ${o(t.lastPoint)}`;if(r.EllipseArc.isInstance(t))return`A ${t.majorRadius} ${t.minorRadius} ${t.tiltAngle*r.RAD2DEG} ${t.deltaAngle>Math.PI?"1":"0"} ${t.clockwise?"0":"1"} ${o(t.lastPoint)}`;if(r.QuadraticBezier.isInstance(t))return`Q ${[o(t.controlPoint),o(t.lastPoint)].join(" ")}`;if(r.CubicBezier.isInstance(t))return`C ${[o(t.firstControlPoint),o(t.lastControlPoint),o(t.lastPoint)].join(" ")}`;throw new Error("Unknown segment type")}function c(t){const i=`M ${t.firstPoint.join(" ")}`,n=t.segments.map(a).join(" ");return`${i} ${n} Z`}function $(t){return`<path d="${t.allLoops.map(c).join(" ")}" />`}function f(t){return`<g>
2
+ ${t.figures.map($).join(`
3
+ `)}
4
+ </g>`}function h(t){const i=`M ${t.firstPoint.join(" ")}`,n=t.segments.map(a).join(" ");return`${i} ${n}`}function e(t,i=1){const n=t.xMin-i,s=t.yMin-i;return`${n} ${s} ${t.width+2*i} ${t.height+2*i}`}function v(t,i,n=1,s){const u=e(i,n),l=s?`width="${i.width+2*n}${s}" height="${i.height+2*n}${s}"`:"";return`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
5
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${u}" fill="none" stroke="grey" stroke-width="0.2%" vector-effect="non-scaling-stroke" ${l}>
6
+ ${t}
7
+ </svg>`}exports.svgDiagram=f;exports.svgFigure=$;exports.svgLoop=c;exports.svgSegmentToPath=a;exports.svgStrand=h;exports.svgViewbox=e;exports.wrapSVG=v;
8
+ //# sourceMappingURL=svg-b6SOnbda.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-b6SOnbda.cjs","sources":["../src/export/svg/svgSegment.ts","../src/export/svg/svgLoop.ts","../src/export/svg/svgFigure.ts","../src/export/svg/svgDiagram.ts","../src/export/svg/svgStrand.ts","../src/export/svg/wrapSVG.ts"],"sourcesContent":["import { Arc } from \"../../models/segments/Arc.js\";\nimport { CubicBezier } from \"../../models/segments/CubicBezier.js\";\nimport { EllipseArc } from \"../../models/segments/EllipseArc.js\";\nimport { Line } from \"../../models/segments/Line.js\";\nimport { QuadraticBezier } from \"../../models/segments/QuadraticBezier.js\";\nimport { Segment } from \"../../models/segments/Segment.js\";\nimport { RAD2DEG } from \"../../vectorOperations.js\";\n\nfunction formatPoint([x, y]: [number, number]) {\n return `${x} ${y}`;\n}\n\nexport function svgSegmentToPath(segment: Segment) {\n if (Line.isInstance(segment)) {\n return `L ${formatPoint(segment.lastPoint)}`;\n }\n if (Arc.isInstance(segment)) {\n return `A ${segment.radius} ${segment.radius} 0 ${\n segment.angularLength > Math.PI ? \"1\" : \"0\"\n } ${segment.clockwise ? \"0\" : \"1\"} ${formatPoint(segment.lastPoint)}`;\n }\n if (EllipseArc.isInstance(segment)) {\n return `A ${segment.majorRadius} ${segment.minorRadius} ${\n segment.tiltAngle * RAD2DEG\n } ${segment.deltaAngle > Math.PI ? \"1\" : \"0\"} ${\n segment.clockwise ? \"0\" : \"1\"\n } ${formatPoint(segment.lastPoint)}`;\n }\n\n if (QuadraticBezier.isInstance(segment)) {\n return `Q ${[\n formatPoint(segment.controlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n if (CubicBezier.isInstance(segment)) {\n return `C ${[\n formatPoint(segment.firstControlPoint),\n formatPoint(segment.lastControlPoint),\n formatPoint(segment.lastPoint),\n ].join(\" \")}`;\n }\n\n throw new Error(\"Unknown segment type\");\n}\n","import type { Loop } from \"../../models/Loop.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgLoop(loop: Loop) {\n const start = `M ${loop.firstPoint.join(\" \")}`;\n const segments = loop.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments} Z`;\n}\n","import type { Figure } from \"../../models/Figure.js\";\nimport { svgLoop } from \"./svgLoop.js\";\n\nexport function svgFigure(figure: Figure) {\n const path = figure.allLoops.map(svgLoop).join(\" \");\n return `<path d=\"${path}\" />`;\n}\n","import { Diagram } from \"../../models/Diagram.js\";\nimport { svgFigure } from \"./svgFigure.js\";\n\nexport function svgDiagram(diagram: Diagram) {\n return `<g>\n ${diagram.figures.map(svgFigure).join(\"\\n\")}\n</g>`;\n}\n","import type { Strand } from \"../../models/Strand.js\";\nimport { svgSegmentToPath } from \"./svgSegment.js\";\n\nexport function svgStrand(strand: Strand) {\n const start = `M ${strand.firstPoint.join(\" \")}`;\n const segments = strand.segments.map(svgSegmentToPath).join(\" \");\n return `${start} ${segments}`;\n}\n","import { BoundingBox } from \"../../models/BoundingBox.js\";\n\nexport function svgViewbox(bbox: BoundingBox, margin = 1) {\n const minX = bbox.xMin - margin;\n const minY = bbox.yMin - margin;\n\n return `${minX} ${minY} ${bbox.width + 2 * margin} ${\n bbox.height + 2 * margin\n }`;\n}\n\n// The list comes from https://oreillymedia.github.io/Using_SVG/guide/units.html\nexport type SVGUnit = \"mm\" | \"cm\" | \"in\" | \"pc\" | \"px\" | \"pt\";\n\nexport function wrapSVG(\n body: string,\n boundingBox: BoundingBox,\n margin = 1,\n unit: null | SVGUnit,\n) {\n const vbox = svgViewbox(boundingBox, margin);\n const sizes = unit\n ? `width=\"${boundingBox.width + 2 * margin}${unit}\" height=\"${\n boundingBox.height + 2 * margin\n }${unit}\"`\n : \"\";\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${vbox}\" fill=\"none\" stroke=\"grey\" stroke-width=\"0.2%\" vector-effect=\"non-scaling-stroke\" ${sizes}>\n ${body}\n</svg>`;\n}\n"],"names":["formatPoint","x","y","svgSegmentToPath","segment","Line","Arc","EllipseArc","RAD2DEG","QuadraticBezier","CubicBezier","svgLoop","loop","start","segments","svgFigure","figure","svgDiagram","diagram","svgStrand","strand","svgViewbox","bbox","margin","minX","minY","wrapSVG","body","boundingBox","unit","vbox","sizes"],"mappings":"+DAQA,SAASA,EAAY,CAACC,EAAGC,CAAC,EAAqB,CACtC,MAAA,GAAGD,CAAC,IAAIC,CAAC,EAClB,CAEO,SAASC,EAAiBC,EAAkB,CAC7C,GAAAC,EAAA,KAAK,WAAWD,CAAO,EACzB,MAAO,KAAKJ,EAAYI,EAAQ,SAAS,CAAC,GAExC,GAAAE,EAAA,IAAI,WAAWF,CAAO,EACjB,MAAA,KAAKA,EAAQ,MAAM,IAAIA,EAAQ,MAAM,MAC1CA,EAAQ,cAAgB,KAAK,GAAK,IAAM,GAC1C,IAAIA,EAAQ,UAAY,IAAM,GAAG,IAAIJ,EAAYI,EAAQ,SAAS,CAAC,GAEjE,GAAAG,EAAA,WAAW,WAAWH,CAAO,EACxB,MAAA,KAAKA,EAAQ,WAAW,IAAIA,EAAQ,WAAW,IACpDA,EAAQ,UAAYI,EAAAA,OACtB,IAAIJ,EAAQ,WAAa,KAAK,GAAK,IAAM,GAAG,IAC1CA,EAAQ,UAAY,IAAM,GAC5B,IAAIJ,EAAYI,EAAQ,SAAS,CAAC,GAGhC,GAAAK,EAAA,gBAAgB,WAAWL,CAAO,EACpC,MAAO,KAAK,CACVJ,EAAYI,EAAQ,YAAY,EAChCJ,EAAYI,EAAQ,SAAS,CAAA,EAC7B,KAAK,GAAG,CAAC,GAGT,GAAAM,EAAA,YAAY,WAAWN,CAAO,EAChC,MAAO,KAAK,CACVJ,EAAYI,EAAQ,iBAAiB,EACrCJ,EAAYI,EAAQ,gBAAgB,EACpCJ,EAAYI,EAAQ,SAAS,CAAA,EAC7B,KAAK,GAAG,CAAC,GAGP,MAAA,IAAI,MAAM,sBAAsB,CACxC,CC1CO,SAASO,EAAQC,EAAY,CAClC,MAAMC,EAAQ,KAAKD,EAAK,WAAW,KAAK,GAAG,CAAC,GACtCE,EAAWF,EAAK,SAAS,IAAIT,CAAgB,EAAE,KAAK,GAAG,EACtD,MAAA,GAAGU,CAAK,IAAIC,CAAQ,IAC7B,CCJO,SAASC,EAAUC,EAAgB,CAExC,MAAO,YADMA,EAAO,SAAS,IAAIL,CAAO,EAAE,KAAK,GAAG,CAC3B,MACzB,CCHO,SAASM,EAAWC,EAAkB,CACpC,MAAA;AAAA,IACLA,EAAQ,QAAQ,IAAIH,CAAS,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,KAE7C,CCJO,SAASI,EAAUC,EAAgB,CACxC,MAAMP,EAAQ,KAAKO,EAAO,WAAW,KAAK,GAAG,CAAC,GACxCN,EAAWM,EAAO,SAAS,IAAIjB,CAAgB,EAAE,KAAK,GAAG,EACxD,MAAA,GAAGU,CAAK,IAAIC,CAAQ,EAC7B,CCLgB,SAAAO,EAAWC,EAAmBC,EAAS,EAAG,CAClD,MAAAC,EAAOF,EAAK,KAAOC,EACnBE,EAAOH,EAAK,KAAOC,EAEzB,MAAO,GAAGC,CAAI,IAAIC,CAAI,IAAIH,EAAK,MAAQ,EAAIC,CAAM,IAC/CD,EAAK,OAAS,EAAIC,CACpB,EACF,CAKO,SAASG,EACdC,EACAC,EACAL,EAAS,EACTM,EACA,CACM,MAAAC,EAAOT,EAAWO,EAAaL,CAAM,EACrCQ,EAAQF,EACV,UAAUD,EAAY,MAAQ,EAAIL,CAAM,GAAGM,CAAI,aAC7CD,EAAY,OAAS,EAAIL,CAC3B,GAAGM,CAAI,IACP,GAEG,MAAA;AAAA,iEACwDC,CAAI,sFAAsFC,CAAK;AAAA,MAC1JJ,CAAI;AAAA,OAEV"}
@@ -6,6 +6,7 @@ import { SafeCubicBezier, SafeQuadraticBezier } from '../conversions/bezierToSaf
6
6
  export declare class DegenerateSegment {
7
7
  readonly firstPoint: Vector;
8
8
  readonly lastPoint: Vector;
9
+ static isInstance(value: unknown): value is DegenerateSegment;
9
10
  constructor(firstPoint: Vector, lastPoint: Vector);
10
11
  }
11
12
  export type OffsettableSegment = Line | Arc | SafeCubicBezier | SafeQuadraticBezier;
@@ -1,5 +1,6 @@
1
1
  import { Vector } from '../definitions.js';
2
2
  export declare class BoundingBox {
3
+ static isInstance(value: unknown): value is BoundingBox;
3
4
  readonly xMin: number;
4
5
  readonly yMin: number;
5
6
  readonly xMax: number;
@@ -6,6 +6,7 @@ import { Transformable } from './utils/Transformable.js';
6
6
  import { Strand } from './Strand.js';
7
7
  import { Stroke } from './Stroke.js';
8
8
  export declare class Diagram extends Transformable<Diagram> {
9
+ static isInstance(value: unknown): value is Diagram;
9
10
  figures: Figure[];
10
11
  constructor(figures?: Figure[], { ignoreChecks }?: {
11
12
  ignoreChecks?: boolean | undefined;
@@ -6,6 +6,7 @@ import { Strand } from './Strand.js';
6
6
  import { Stroke } from './Stroke.js';
7
7
  import { Transformable } from './utils/Transformable.js';
8
8
  export declare class Figure extends Transformable<Figure> {
9
+ static isInstance(value: unknown): value is Figure;
9
10
  readonly contour: Loop;
10
11
  readonly holes: Loop[];
11
12
  constructor(contour: Loop, holes?: Loop[], { ignoreChecks }?: {
@@ -4,6 +4,7 @@ import { TransformationMatrix } from './TransformationMatrix.js';
4
4
  import { Segment } from './segments/Segment.js';
5
5
  export declare class Loop extends AbstractStroke<Loop> {
6
6
  strokeType: string;
7
+ static isInstance(value: unknown): value is Loop;
7
8
  constructor(segments: Segment[], { ignoreChecks }?: {
8
9
  ignoreChecks?: boolean | undefined;
9
10
  });
@@ -1,7 +1,12 @@
1
1
  import { AbstractStroke } from './Stroke.js';
2
2
  import { TransformationMatrix } from './TransformationMatrix.js';
3
+ import { Segment } from './segments/Segment.js';
3
4
  export declare class Strand extends AbstractStroke<Strand> {
4
5
  strokeType: string;
6
+ static isInstance(value: unknown): value is Strand;
7
+ constructor(segments: Segment[], { ignoreChecks }?: {
8
+ ignoreChecks?: boolean | undefined;
9
+ });
5
10
  reverse(): Strand;
6
11
  clone(): Strand;
7
12
  extend(strand: Strand): Strand;
@@ -11,6 +11,7 @@ type Matrix = [
11
11
  number
12
12
  ];
13
13
  export declare class TransformationMatrix {
14
+ static isInstance(value: unknown): value is TransformationMatrix;
14
15
  private _matrix;
15
16
  constructor(matrix?: Matrix);
16
17
  clone(): TransformationMatrix;
@@ -6,6 +6,7 @@ export declare class Arc extends AbstractSegment<Arc> {
6
6
  segmentType: string;
7
7
  readonly center: Vector;
8
8
  readonly clockwise: boolean;
9
+ static isInstance(value: unknown): value is Arc;
9
10
  constructor(firstPoint: Vector, lastPoint: Vector, center: Vector, clockwise?: boolean, { ignoreChecks }?: {
10
11
  ignoreChecks?: boolean | undefined;
11
12
  });
@@ -6,6 +6,7 @@ export declare class CubicBezier extends AbstractSegment<CubicBezier> {
6
6
  segmentType: string;
7
7
  readonly firstControlPoint: Vector;
8
8
  readonly lastControlPoint: Vector;
9
+ static isInstance(value: unknown): value is CubicBezier;
9
10
  constructor(firstPoint: Vector, lastPoint: Vector, firstControlPoint: Vector, lastControlPoint: Vector);
10
11
  get midPoint(): Vector;
11
12
  private _extremaInDirection;
@@ -11,6 +11,7 @@ export declare class EllipseArc extends AbstractSegment<EllipseArc> {
11
11
  readonly center: Vector;
12
12
  readonly tiltAngle: number;
13
13
  readonly clockwise: boolean;
14
+ static isInstance(value: unknown): value is EllipseArc;
14
15
  constructor(firstPoint: Vector, lastPoint: Vector, center: Vector, r0: number, r1: number, tiltAngle: number, clockwise?: boolean, { ignoreChecks, angleUnits, }?: {
15
16
  ignoreChecks?: boolean;
16
17
  angleUnits?: "deg" | "rad";
@@ -4,6 +4,8 @@ import { TransformationMatrix } from '../TransformationMatrix.js';
4
4
  import { Segment, AbstractSegment } from './Segment.js';
5
5
  export declare class Line extends AbstractSegment<Line> {
6
6
  segmentType: string;
7
+ static isInstance(value: unknown): value is Line;
8
+ constructor(firstPoint: Vector, lastPoint: Vector);
7
9
  isValidParameter(t: number): boolean;
8
10
  paramPoint(t: number): Vector;
9
11
  get length(): number;
@@ -5,6 +5,7 @@ import { AbstractSegment } from './Segment.js';
5
5
  export declare class QuadraticBezier extends AbstractSegment<QuadraticBezier> {
6
6
  segmentType: string;
7
7
  readonly controlPoint: Vector;
8
+ static isInstance(value: unknown): value is QuadraticBezier;
8
9
  constructor(firstPoint: Vector, lastPoint: Vector, controlPoint: Vector);
9
10
  get midPoint(): Vector;
10
11
  private _extremaInDirection;
@@ -7,9 +7,9 @@ declare function tesselate(shape: Figure, options?: TesselateSegmentOptions): Fi
7
7
  declare function tesselate(shape: Loop, options?: TesselateSegmentOptions): Loop;
8
8
  declare function tesselate(shape: Strand, options?: TesselateSegmentOptions): Strand;
9
9
  declare function tesselate(shape: Segment, options?: TesselateSegmentOptions): Segment[];
10
- declare function tesselatePoints(shape: Diagram, options?: TesselateSegmentOptions): Vector[][][];
10
+ declare function tesselatePoints(shape: Diagram, options?: TesselateSegmentOptions): Vector[][];
11
11
  declare function tesselatePoints(shape: Figure, options?: TesselateSegmentOptions): Vector[][];
12
- declare function tesselatePoints(shape: Loop, options?: TesselateSegmentOptions): Vector[];
13
- declare function tesselatePoints(shape: Strand, options?: TesselateSegmentOptions): Vector[];
14
- declare function tesselatePoints(shape: Segment, options?: TesselateSegmentOptions): Vector[];
12
+ declare function tesselatePoints(shape: Loop, options?: TesselateSegmentOptions): Vector[][];
13
+ declare function tesselatePoints(shape: Strand, options?: TesselateSegmentOptions): Vector[][];
14
+ declare function tesselatePoints(shape: Segment, options?: TesselateSegmentOptions): Vector[][];
15
15
  export { tesselate, tesselatePoints };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pantograph2d",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "Pantograph, the pure JS 2D CAD library",
5
5
  "type": "module",
6
6
  "main": "./dist/pantograph.cjs",
@@ -78,7 +78,7 @@
78
78
  "vitest": "^2.1.3",
79
79
  "xmldom": "^0.6.0"
80
80
  },
81
- "gitHead": "787b28dafa5153ed1ff51e5a80813834ce1fbca8",
81
+ "gitHead": "02c19d1dfa1a3d220eddd1911fd901e516eaee8f",
82
82
  "dependencies": {
83
83
  "@types/flatbush": "^4.2.2",
84
84
  "flatbush": "^4.4.0",