@weasel-js/geom 1.15.1 → 1.15.2
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.
- package/dist/3d/index.d.ts +3 -1
- package/dist/3d/index.js +7 -10
- package/dist/3d/index.js.map +1 -1
- package/dist/booleans/index.js +4 -5
- package/dist/booleans/index.js.map +1 -1
- package/dist/{chunk-B3D6KWW3.js → chunk-346XYYMX.js} +154 -3
- package/dist/chunk-346XYYMX.js.map +1 -0
- package/dist/chunk-DNX24KBT.js +82 -0
- package/dist/chunk-DNX24KBT.js.map +1 -0
- package/dist/{chunk-EURWZUNY.js → chunk-GA5R5KWD.js} +59 -65
- package/dist/chunk-GA5R5KWD.js.map +1 -0
- package/dist/{chunk-3HQJGI63.js → chunk-HTT5AQIU.js} +3 -4
- package/dist/chunk-HTT5AQIU.js.map +1 -0
- package/dist/{chunk-FROQPADA.js → chunk-IDSKOHA4.js} +4 -4
- package/dist/{chunk-FROQPADA.js.map → chunk-IDSKOHA4.js.map} +1 -1
- package/dist/{chunk-HMGGJZTM.js → chunk-MIKP4V2C.js} +7 -21
- package/dist/chunk-MIKP4V2C.js.map +1 -0
- package/dist/{chunk-HNLJO3E7.js → chunk-MOCSUHEI.js} +22 -8
- package/dist/chunk-MOCSUHEI.js.map +1 -0
- package/dist/{chunk-3YH5XU3H.js → chunk-OQP5M5VD.js} +14 -23
- package/dist/chunk-OQP5M5VD.js.map +1 -0
- package/dist/{chunk-ZOMUTU7J.js → chunk-STYO7J4Y.js} +5 -11
- package/dist/chunk-STYO7J4Y.js.map +1 -0
- package/dist/{curvature-CDOI32hv.d.ts → curvature-DKPO4Qeh.d.ts} +0 -27
- package/dist/curves/index.d.ts +1 -1
- package/dist/curves/index.js +4 -4
- package/dist/index.d.ts +108 -3
- package/dist/index.js +159 -162
- package/dist/index.js.map +1 -1
- package/dist/nd/index.d.ts +28 -1
- package/dist/nd/index.js +2 -5
- package/dist/nd/index.js.map +1 -1
- package/dist/tessellate/index.js +5 -5
- package/dist/warp/index.js +8 -15
- package/dist/warp/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2N6OWA7E.js +0 -104
- package/dist/chunk-2N6OWA7E.js.map +0 -1
- package/dist/chunk-3HQJGI63.js.map +0 -1
- package/dist/chunk-3YH5XU3H.js.map +0 -1
- package/dist/chunk-755Y4YZS.js +0 -32
- package/dist/chunk-755Y4YZS.js.map +0 -1
- package/dist/chunk-B3D6KWW3.js.map +0 -1
- package/dist/chunk-EURWZUNY.js.map +0 -1
- package/dist/chunk-HMGGJZTM.js.map +0 -1
- package/dist/chunk-HNLJO3E7.js.map +0 -1
- package/dist/chunk-ZOMUTU7J.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/paths/bounds.ts","../src/paths/fitHandles.ts","../src/paths/fitRun.ts"],"names":["al","be"],"mappings":";;;;;AAUO,SAAS,aAAa,IAAA,EAAsB;AACjD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ,OAAO,IAAA;AAEjC,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,eAAe,IAAI,CAAA;AAChD,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,EACzD;AAEA,EAAA,IAAI,OAAO,QAAA,EAAU,IAAA,GAAO,QAAA,EAAU,IAAA,GAAO,WAAW,IAAA,GAAO,CAAA,QAAA;AAC/D,EAAA,IAAI,IAAA,GAAO,KAAA;AAEX,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,KAAc;AACxC,IAAA,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,CAAA;AACrB,IAAA,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,CAAA;AACrB,IAAA,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,CAAA;AACrB,IAAA,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,CAAA;AACrB,IAAA,IAAA,GAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,cAAA,CAAe,UAAU,MAAA,EAAQ,CAAC,GAAA,EAAK,EAAA,EAAI,IAAI,EAAA,KAAO;AACpD,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,MAAA;AAAA,MACL,KAAK,MAAA,EAAQ;AACX,QAAA,OAAA,CAAQ,OAAO,EAAE,CAAA,EAAG,MAAA,CAAO,EAAA,GAAK,CAAC,CAAC,CAAA;AAClC,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,GAAI,WAAA;AAAA,UACnC,EAAA;AAAA,UAAI,EAAA;AAAA,UACJ,OAAO,EAAE,CAAA;AAAA,UAAG,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACzB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UAAG,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UAC7B,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UAAG,MAAA,CAAO,KAAK,CAAC;AAAA,SAC/B;AACA,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,GAAA,GAAM,OAAO,EAAA,GAAK,CAAC,GAAG,GAAA,GAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC/C,QAAA,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,IAAI,uBAAA,CAAwB,EAAA,EAAI,EAAA,EAAI,MAAA,CAAO,EAAE,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AACjG,QAAA,MAAM,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,GAAI,WAAA,CAAY,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AACrF,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA;AACH,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAE,CAAA;AAAA;AAC1D,EACF,CAAC,CAAA;AAED,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAClE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IAAQ,CAAA,EAAG,IAAA,IAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,IAAI,CAAA,EAAG,IAAA,IAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,IAC5E,OAAO,IAAA,GAAO,IAAA;AAAA,IAAM,QAAQ,IAAA,GAAO;AAAA,GACrC;AACF;;;ACrDA,IAAM,IAAA,GAAO,CAAC,IAAA,EAAM,GAAA,EAAK,KAAK,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,IAAI,CAAA;AAEvD,IAAM,SAAA,GAAY,EAAA;AAElB,IAAM,WAAA,GAAc,EAAA;AAEpB,IAAM,MAAA,GAAS,GAAA;AAEf,IAAM,YAAA,GAAe,CAAA;AAErB,IAAM,OAAA,GAAU,CAAA;AAEhB,IAAM,YAAY,CAAA,GAAI,EAAA;AACtB,IAAM,cAAA,GAAiB,GAAA;AAGhB,SAAS,QAAQ,GAAA,EAAqC;AAC3D,EAAA,MAAM,GAAA,GAAM,IAAI,YAAA,CAAa,CAAA,GAAI,IAAI,MAAM,CAAA;AAC3C,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAAE,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,CAAE,CAAA;AAAG,IAAA,GAAA,CAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,EAAG,CAAC,CAAA;AACjE,EAAA,OAAO,GAAA;AACT;AAUO,SAAS,YAAY,GAAA,EAAmB,CAAA,EAAU,GAAA,EAAY,GAAA,EAAY,GAAU,GAAA,EAAsB;AAE/G,EAAA,MAAM,OAAO,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,GAAA,CAAI,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,IAAI,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,GAAI,IAAI,GAAA,CAAI,CAAA,GAAI,CAAA,CAAE,CAAA,EAAG,IAAI,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AACpJ,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,cAAA,EAAgB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAK,IAAA,IAAQ,CAAA,GAAI,YAAY,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAClG,EAAA,MAAM,GAAA,GAAM,IAAA,IAAQ,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA;AAC5B,EAAA,MAAM,QAAQ,GAAA,GAAM,GAAA;AACpB,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,KAAA;AACvB,EAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,CAAA,IAAK,IAAI,CAAA,CAAE,CAAA;AACzC,EAAA,OAAA,CAAQ,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA;AAC5B,EAAA,OAAO,iBAAA,CAAkB,GAAA,EAAK,IAAA,EAAM,KAAK,CAAA,IAAK,SAAS,iBAAA,CAAkB,IAAA,EAAM,GAAA,EAAK,KAAK,CAAA,IAAK,KAAA;AAChG;AAUO,SAAS,cAAc,GAAA,EAAmB,CAAA,EAAU,GAAU,MAAA,EAAe,IAAA,EAAa,KAAa,IAAA,EAA+B;AAC3I,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AAC7C,EAAA,MAAM,EAAA,GAAK,CAACA,GAAAA,EAAYC,GAAAA,MAAyB;AAAA,IAC/C,GAAA,EAAK,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAID,GAAAA,GAAK,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAIA,GAAAA,GAAK,OAAO,CAAA,EAAE;AAAA,IACtD,GAAA,EAAK,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAIC,GAAAA,GAAK,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAIA,GAAAA,GAAK,KAAK,CAAA;AAAE,GACpD,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,CAAA,IAAK,cAAc,CAAA,CAAE,CAAA;AAEnD,EAAA,MAAM,MAAA,GAAS,CAACD,GAAAA,EAAYC,GAAAA,EAAY,KAAA,KAAkB;AACxD,IAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAI,GAAI,EAAA,CAAGD,KAAIC,GAAE,CAAA;AAC9B,IAAA,OAAA,CAAQ,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,GAAA,EAAK,IAAA,EAAM,KAAK,CAAA;AAC9C,IAAA,OAAO,GAAA,GAAM,KAAA,GAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAK,iBAAA,CAAkB,IAAA,EAAM,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,EAC9E,CAAA;AACA,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,CAAE,CAAA,IAAK,MAAA,CAAO,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA,IAAK,OAAO,CAAC,CAAA;AACxF,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,CAAE,CAAA,IAAK,IAAA,CAAK,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA,IAAK,KAAK,CAAC,CAAA;AACpF,EAAA,IAAI,EAAA,GAAK,QAAQ,EAAA,GAAK,MAAA,EAAQ,OAAO,MAAA,CAAO,EAAA,EAAI,IAAI,QAAQ,CAAA;AAC5D,EAAA,IAAI,IAAA,GAAO,YAAA,GAAe,GAAA,EAAK,OAAO,IAAA;AACtC,EAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM;AAC5C,IAAA,MAAM,IAAI,MAAA,CAAO,EAAA,GAAK,KAAA,EAAO,EAAA,GAAK,OAAO,IAAI,CAAA;AAC7C,IAAA,IAAI,IAAI,IAAA,EAAM;AAAE,MAAA,IAAA,GAAO,CAAA;AAAG,MAAA,EAAA,GAAK,EAAA,GAAK,KAAA;AAAO,MAAA,EAAA,GAAK,EAAA,GAAK,KAAA;AAAA,IAAO;AAAA,EAC9D;AACA,EAAA,IAAI,IAAA,GAAO,OAAA,GAAU,GAAA,EAAK,OAAO,IAAA;AACjC,EAAA,IAAI,OAAO,KAAA,GAAQ,IAAA;AACnB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,IAAa,IAAA,GAAO,SAAS,GAAA,IAAO,IAAA,GAAO,GAAA,GAAM,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5E,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,KAAA,EAAO;AAC5B,MAAA,MAAM,KAAK,EAAA,GAAK,EAAA,GAAK,IAAA,EAAM,EAAA,GAAK,KAAK,EAAA,GAAK,IAAA;AAC1C,MAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,GAAK,CAAA,EAAG;AACtB,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA;AAC7B,MAAA,IAAI,IAAI,IAAA,EAAM;AAAE,QAAA,IAAA,GAAO,CAAA;AAAG,QAAA,EAAA,GAAK,EAAA;AAAI,QAAA,EAAA,GAAK,EAAA;AAAI,QAAA,KAAA,GAAQ,IAAA;AAAM,QAAA;AAAA,MAAO;AAAA,IACnE;AACA,IAAA,IAAI,CAAC,OAAO,IAAA,IAAQ,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,EAAA,CAAG,IAAI,EAAE,CAAA;AAClB;AAEA,IAAM,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,CAAC,CAAA;AAGnF,SAAS,OAAA,CAAQ,CAAA,EAAU,GAAA,EAAY,GAAA,EAAY,GAAU,GAAA,EAAyB;AACpF,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,CAAA;AAC3B,EAAA,MAAM,KAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,GAAA,CAAI,CAAA,CAAA,EAAI,EAAA,GAAK,EAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,IAAK,GAAA,CAAI,IAAI,GAAA,CAAI,CAAA,CAAA;AAC9E,EAAA,MAAM,KAAK,CAAA,IAAK,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,GAAI,GAAA,CAAI,CAAA,CAAA,EAAI,EAAA,GAAK,KAAK,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,GAAA,CAAI,IAAI,GAAA,CAAI,CAAA,CAAA;AAC1E,EAAA,MAAM,EAAA,GAAK,CAAA,IAAK,GAAA,CAAI,CAAA,GAAI,CAAA,CAAE,IAAI,EAAA,GAAK,CAAA,IAAK,GAAA,CAAI,CAAA,GAAI,CAAA,CAAE,CAAA,CAAA;AAClD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,CAAA,GAAI,CAAA;AACd,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAA,CAAA,CAAM,EAAA,GAAK,IAAI,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,CAAA,CAAE,CAAA;AAC9C,IAAA,GAAA,CAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAA,CAAA,CAAM,EAAA,GAAK,IAAI,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,EACpD;AACF;AASA,SAAS,iBAAA,CAAkB,IAAA,EAAoB,EAAA,EAAkB,KAAA,EAAuB;AACtF,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,MAAA,GAAS,CAAA,GAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,QAAQ,KAAA,GAAQ,KAAA;AACtB,EAAA,IAAI,IAAA,GAAO,GAAG,KAAA,GAAQ,CAAA;AACtB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;AAC3C,IAAA,MAAM,KAAK,IAAA,CAAK,CAAC,GAAG,EAAA,GAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AACnC,IAAA,IAAI,IAAA,GAAO,UAAU,EAAA,GAAK,IAAA;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,GAAO,KAAK,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AACpE,MAAA,MAAM,EAAA,GAAK,GAAG,CAAA,GAAI,CAAC,GAAG,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA;AACvC,MAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA,EAAI,EAAA,GAAK,EAAA,CAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AACpD,MAAA,MAAM,GAAA,GAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AAC3B,MAAA,MAAM,IAAI,GAAA,KAAQ,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAA,CAAK,KAAK,EAAA,IAAM,EAAA,GAAA,CAAM,KAAK,EAAA,IAAM,EAAA,IAAM,GAAG,CAAC,CAAA;AAC1F,MAAA,MAAM,EAAA,GAAK,KAAK,CAAA,GAAI,EAAA,GAAK,IAAI,EAAA,GAAK,EAAA,GAAK,IAAI,EAAA,GAAK,EAAA;AAChD,MAAA,MAAM,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AACzB,MAAA,IAAI,IAAI,IAAA,EAAM;AAAE,QAAA,IAAA,GAAO,CAAA;AAAG,QAAA,EAAA,GAAK,CAAA;AAAA,MAAG;AAAA,IACpC;AACA,IAAA,IAAA,GAAO,EAAA;AACP,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,IAAI,QAAQ,KAAA,EAAO;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AACxB;;;ACvIO,SAAS,UAAA,CAAW,IAAe,IAAA,EAAuB;AAC/D,EAAA,IAAI,KAAK,MAAA,EAAQ,EAAA,CAAG,SAAS,EAAE,GAAG,KAAK,MAAA,EAAO;AAChD;AAQO,SAAS,YAAY,GAAA,EAAc,MAAA,EAAe,IAAA,EAAa,GAAA,EAAa,KAAkB,OAAA,EAAwB;AAC3H,EAAA,IAAI,IAAI,MAAA,KAAW,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,CAAE,GAAG,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,CAAE,GAAG,CAAA;AAC3D,EAAA,MAAM,OAAc,EAAC;AACrB,EAAA,SAAA,CAAU,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,IAAI,CAAA;AACtC,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,SAAA,GAAY,GAAA,CAAI,EAAA;AACjC,IAAA,MAAM,MAAA,GAAS,CAAA,KAAM,IAAA,CAAK,MAAA,GAAS,CAAA;AACnC,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,IAAI,IAAI,EAAA,EAAI,GAAA,CAAI,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,EAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAA,GAAK,EAAE,CAAA,EAAG,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,UAAU,GAAA,CAAI,EAAA,EAAG,GAAI,EAAE,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,CAAA;AAAA,EACrG,CAAC,CAAA;AACH;AAUA,SAAS,SAAA,CAAU,GAAA,EAAc,MAAA,EAAe,IAAA,EAAa,KAAa,GAAA,EAAkB;AAC1F,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,GAAA,GAAM,MAAA;AACV,EAAA,WAAS;AACP,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG,GAAA,EAAK,MAAM,GAAG,CAAA;AACpD,IAAA,IAAI,KAAA,EAAO;AAAE,MAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAG,MAAA;AAAA,IAAQ;AACtC,IAAA,IAAI,EAAA,GAAK,IAAA,GAAO,CAAA,EAAG,EAAA,GAAK,IAAI,MAAA,GAAS,CAAA;AACrC,IAAA,IAAI,KAAA,GAAa,EAAE,GAAA,EAAK,GAAA,CAAI,EAAE,CAAA,EAAE;AAChC,IAAA,OAAO,EAAA,GAAK,KAAK,CAAA,EAAG;AAClB,MAAA,MAAM,GAAA,GAAO,KAAK,EAAA,IAAO,CAAA;AACzB,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,MAAM,GAAA,GAAM,CAAC,CAAA,EAAG,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA,EAAK,GAAG,CAAC,GAAG,GAAG,CAAA;AAC/E,MAAA,IAAI,GAAA,EAAK;AAAE,QAAA,EAAA,GAAK,GAAA;AAAK,QAAA,KAAA,GAAQ,GAAA;AAAA,MAAK,OAAO,EAAA,GAAK,GAAA;AAAA,IAChD;AACA,IAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AACd,IAAA,GAAA,GAAM,SAAA,CAAU,KAAK,EAAE,CAAA;AACvB,IAAA,IAAA,GAAO,EAAA;AAAA,EACT;AACF;AAEA,IAAM,SAAA,GAAY,CAAC,GAAA,EAAc,CAAA,KAAqB,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,EAAG,GAAA,CAAI,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AAGvF,SAAS,MAAA,CAAO,GAAA,EAAc,MAAA,EAAe,IAAA,EAAa,GAAA,EAAyB;AACjF,EAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC5B,EAAA,IAAI,GAAA,CAAI,MAAA,IAAU,CAAA,IAAK,UAAA,CAAW,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,CAAA,EAAE;AACnE,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAG,CAAA;AACvB,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,KAAQ,oBAAA,CAAqB,GAAA,EAAK,QAAQ,IAAI,CAAA;AAC3D,EAAA,IAAI,WAAA,CAAY,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,KAAK,CAAA,EAAE;AAC7E,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,EAAK,CAAA;AACtE,EAAA,OAAO,KAAA,IAAS,YAAY,GAAA,EAAK,CAAA,EAAG,MAAM,GAAA,EAAK,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,IAAI,EAAE,EAAA,EAAI,MAAM,GAAA,EAAK,EAAA,EAAI,MAAM,GAAA,EAAK,GAAA,EAAK,GAAE,GAAI,IAAA;AACjH;AAEA,SAAS,UAAA,CAAW,GAAA,EAAc,CAAA,EAAU,CAAA,EAAU,GAAA,EAAsB;AAC1E,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,aAAA,CAAc,IAAI,CAAC,CAAA,CAAE,GAAG,GAAA,CAAI,CAAC,EAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,GAAO,KAAK,OAAO,KAAA;AAAA,EAC/E;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,IAAA,GAAO,CAAC,CAAA,EAAU,CAAA,MAAqB,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAE,CAAA;AAC1E,IAAM,GAAA,GAAM,CAAC,CAAA,MAAqB,EAAE,CAAA,EAAG,CAAC,CAAA,CAAE,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,CAAA,EAAE,CAAA;AACrD,SAAS,KAAK,CAAA,EAAiB;AAC7B,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA;AAC/B,EAAA,OAAO,QAAQ,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE,GAAI,EAAE,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA,EAAK,CAAA,EAAG,CAAA,CAAE,IAAI,GAAA,EAAI;AACnE","file":"chunk-ZOMUTU7J.js","sourcesContent":["import { cubicBounds, elevateQuadraticToCubic } from '../curve';\nimport { forEachSegment, PATH_C, PATH_L, PATH_M, PATH_Q, PATH_Z } from '../commands';\nimport type { Path, RectPath } from '../path';\nimport { resolveCorners } from './corners';\n\n/**\n * AABB of a `Path`, returned as a `RectPath` for direct reuse with rect-fast-path machinery.\n * Control points are NOT included directly; they're used only to compute extrema that actually\n * lie on the curve. Corner shapes are bounded as they are drawn, expanded. Empty paths (no commands) return a zero-size rect anchored at the origin.\n */\nexport function boundsOfPath(path: Path): RectPath {\n if (path.kind === 'rect') return path;\n\n const { commands, coords } = resolveCorners(path);\n if (commands.length === 0) {\n return { kind: 'rect', x: 0, y: 0, width: 0, height: 0 };\n }\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n let seen = false;\n\n const include = (x: number, y: number) => {\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n seen = true;\n };\n\n forEachSegment(commands, coords, (cmd, ci, px, py) => {\n switch (cmd) {\n case PATH_M:\n case PATH_L: {\n include(coords[ci], coords[ci + 1]);\n break;\n }\n case PATH_C: {\n const [bMinX, bMinY, bMaxX, bMaxY] = cubicBounds(\n px, py,\n coords[ci], coords[ci + 1],\n coords[ci + 2], coords[ci + 3],\n coords[ci + 4], coords[ci + 5],\n );\n include(bMinX, bMinY);\n include(bMaxX, bMaxY);\n break;\n }\n case PATH_Q: {\n const qx2 = coords[ci + 2], qy2 = coords[ci + 3];\n const [c1x, c1y, c2x, c2y] = elevateQuadraticToCubic(px, py, coords[ci], coords[ci + 1], qx2, qy2);\n const [bMinX, bMinY, bMaxX, bMaxY] = cubicBounds(px, py, c1x, c1y, c2x, c2y, qx2, qy2);\n include(bMinX, bMinY);\n include(bMaxX, bMaxY);\n break;\n }\n case PATH_Z:\n break;\n default:\n throw new Error(`boundsOfPath: unknown command ${cmd}`);\n }\n });\n\n if (!seen) return { kind: 'rect', x: 0, y: 0, width: 0, height: 0 };\n return {\n kind: 'rect', x: minX + (path.origin?.x ?? 0), y: minY + (path.origin?.y ?? 0),\n width: maxX - minX, height: maxY - minY,\n };\n}\n\n","/**\n * How far a cubic and a run of samples stray from each other, and the handle\n * lengths that bring them closest: the measure and the search behind\n * `fitPointRun`. Both work on flattened cubics and on the run as a polyline.\n */\nimport type { Point } from './cubicMath';\n\n/** A cubic's two handles. */\nexport interface Handles {\n cp1: Point;\n cp2: Point;\n}\n\n/** Handle lengths tried on each axis of the coarse search, as shares of the chord. */\nconst GRID = [0.02, 0.1, 0.2, 0.3, 0.45, 0.6, 0.8, 1.05];\n/** Most steps of the pattern search after the coarse one. */\nconst MAX_STEPS = 60;\n/** Segments the cubic is flattened to while the search compares handle lengths. */\nconst SEARCH_FLAT = 48;\n/** The search stops once the run and the cubic are within this share of the tolerance. */\nconst TARGET = 0.9;\n/** A least-squares fit farther than this many tolerances from the run is not searched around. */\nconst SEARCH_REACH = 4;\n/** A coarse best farther than this many tolerances is not worth refining. */\nconst GIVE_UP = 2;\n/** How far a flattened cubic may sit from the cubic, as a share of the tolerance, when checking a fit. */\nconst CHECK_SAG = 1 / 16;\nconst MAX_CHECK_FLAT = 512;\n\n/** `pts` as interleaved `x, y`. */\nexport function packRun(pts: readonly Point[]): Float64Array {\n const run = new Float64Array(2 * pts.length);\n pts.forEach((p, i) => { run[2 * i] = p.x; run[2 * i + 1] = p.y; });\n return run;\n}\n\n/**\n * Whether the cubic from `a` to `e` lies within `tol` of the polyline through\n * `run`, and every sample of `run` within `tol` of it. The samples hold the\n * run to the cubic; the other way holds the cubic to the run, which a cubic\n * bulging across a sparsely sampled flat fails. The cubic is flattened finely\n * enough that its chords stay within a sixteenth of `tol` of it, and that\n * much is taken off the bound.\n */\nexport function cubicWithin(run: Float64Array, a: Point, cp1: Point, cp2: Point, e: Point, tol: number): boolean {\n // A chord of a cubic split N ways sits within max|B''| / 8N² of it, and |B''| is at most 6 × the larger second difference.\n const bend = 6 * Math.max(Math.hypot(a.x - 2 * cp1.x + cp2.x, a.y - 2 * cp1.y + cp2.y), Math.hypot(cp1.x - 2 * cp2.x + e.x, cp1.y - 2 * cp2.y + e.y));\n const n = Math.min(MAX_CHECK_FLAT, Math.max(8, Math.ceil(Math.sqrt(bend / (8 * CHECK_SAG * tol)))));\n const sag = bend / (8 * n * n);\n const bound = tol - sag;\n if (bound <= 0) return false;\n const flat = new Float64Array(2 * (n + 1));\n flatten(a, cp1, cp2, e, flat);\n return worstFromPolyline(run, flat, bound) <= bound && worstFromPolyline(flat, run, bound) <= bound;\n}\n\n/**\n * The handle lengths, directions held, that bring the run nearest the cubic\n * both ways: a coarse grid, then a pattern search from its best; null when\n * even the best of the grid is far off. Least squares minimizes the sum, so\n * its worst sample can sit well outside a tolerance other lengths meet, often\n * in another basin entirely: a bend near one end wants that end's handle\n * short. The caller checks the result with {@link cubicWithin}.\n */\nexport function searchHandles(run: Float64Array, a: Point, e: Point, tStart: Point, tEnd: Point, tol: number, from: Handles): Handles | null {\n const chord = Math.hypot(e.x - a.x, e.y - a.y);\n const at = (al: number, be: number): Handles => ({\n cp1: { x: a.x + al * tStart.x, y: a.y + al * tStart.y },\n cp2: { x: e.x + be * tEnd.x, y: e.y + be * tEnd.y },\n });\n const flat = new Float64Array(2 * (SEARCH_FLAT + 1));\n /** How far apart the run and the cubic get, or some figure above `bound` once they pass it. */\n const spread = (al: number, be: number, bound: number) => {\n const { cp1, cp2 } = at(al, be);\n flatten(a, cp1, cp2, e, flat);\n const out = worstFromPolyline(run, flat, bound);\n return out > bound ? out : Math.max(out, worstFromPolyline(flat, run, bound));\n };\n const fromAl = Math.max(0, (from.cp1.x - a.x) * tStart.x + (from.cp1.y - a.y) * tStart.y);\n const fromBe = Math.max(0, (from.cp2.x - e.x) * tEnd.x + (from.cp2.y - e.y) * tEnd.y);\n let al = fromAl, be = fromBe, best = spread(al, be, Infinity);\n if (best > SEARCH_REACH * tol) return null;\n for (const fa of GRID) for (const fb of GRID) {\n const d = spread(fa * chord, fb * chord, best);\n if (d < best) { best = d; al = fa * chord; be = fb * chord; }\n }\n if (best > GIVE_UP * tol) return null;\n let step = chord * 0.05;\n for (let i = 0; i < MAX_STEPS && best > TARGET * tol && step > tol / 32; i++) {\n let moved = false;\n for (const [da, db] of STEPS) {\n const na = al + da * step, nb = be + db * step;\n if (na < 0 || nb < 0) continue;\n const d = spread(na, nb, best);\n if (d < best) { best = d; al = na; be = nb; moved = true; break; }\n }\n if (!moved) step /= 2;\n }\n return at(al, be);\n}\n\nconst STEPS = [[1, 0], [-1, 0], [0, 1], [0, -1], [1, 1], [-1, -1], [1, -1], [-1, 1]];\n\n/** The cubic at even parameters, as many as `out` holds points, into `out`. */\nfunction flatten(a: Point, cp1: Point, cp2: Point, e: Point, out: Float64Array): void {\n const n = out.length / 2 - 1;\n const ax = e.x - a.x + 3 * (cp1.x - cp2.x), ay = e.y - a.y + 3 * (cp1.y - cp2.y);\n const bx = 3 * (a.x - 2 * cp1.x + cp2.x), by = 3 * (a.y - 2 * cp1.y + cp2.y);\n const cx = 3 * (cp1.x - a.x), cy = 3 * (cp1.y - a.y);\n for (let k = 0; k <= n; k++) {\n const t = k / n;\n out[2 * k] = ((ax * t + bx) * t + cx) * t + a.x;\n out[2 * k + 1] = ((ay * t + by) * t + cy) * t + a.y;\n }\n}\n\n/**\n * The farthest any interior point of `from` lies from the polyline through\n * `to`, both interleaved `x, y` and running the same way; it stops early,\n * with a figure above `bound`, once one is farther than that. Each point\n * looks only a stretch ahead of where the last one landed, so a polyline\n * doubling back reads as farther than it is, never nearer.\n */\nfunction worstFromPolyline(from: Float64Array, to: Float64Array, bound: number): number {\n const edges = to.length / 2 - 1;\n const reach = Math.max(4, edges >> 2);\n const limit = bound * bound;\n let hint = 0, worst = 0;\n for (let i = 2; i < from.length - 2; i += 2) {\n const px = from[i], py = from[i + 1];\n let near = Infinity, at = hint;\n for (let j = hint, end = Math.min(edges, hint + reach); j < end; j++) {\n const x0 = to[2 * j], y0 = to[2 * j + 1];\n const dx = to[2 * j + 2] - x0, dy = to[2 * j + 3] - y0;\n const len = dx * dx + dy * dy;\n const s = len === 0 ? 0 : Math.min(1, Math.max(0, ((px - x0) * dx + (py - y0) * dy) / len));\n const ex = x0 + s * dx - px, ey = y0 + s * dy - py;\n const d = ex * ex + ey * ey;\n if (d < near) { near = d; at = j; }\n }\n hint = at;\n if (near > worst) {\n worst = near;\n if (worst > limit) break;\n }\n }\n return Math.sqrt(worst);\n}\n","/**\n * Fitting a run of sampled points with as few cubics as hold it within a\n * tolerance, each held to the run's end tangents: the refit `simplifyPath`\n * and `warpPath` share.\n */\nimport { nearestOnLine } from '../nearest';\nimport type { PenAnchor } from './anchors';\nimport type { Point } from './cubicMath';\nimport { cubicWithin, packRun, searchHandles } from './fitHandles';\nimport { fitCubicWithTangents } from './schneiderFit';\n\n/** Give `to`, an anchor a refit kept where `from` was, `from`'s corner spec. */\nexport function keepCorner(to: PenAnchor, from: PenAnchor): void {\n if (from.corner) to.corner = { ...from.corner };\n}\n\n/**\n * Fit `pts` with cubics held to the end tangents, each the longest stretch one\n * cubic holds within `tol`, and append the anchors after the first to `out`\n * (the first too when `out` is empty). `closing` folds the final anchor,\n * which lands on the subpath's first, into that first one.\n */\nexport function fitPointRun(pts: Point[], tStart: Point, tEnd: Point, tol: number, out: PenAnchor[], closing: boolean): void {\n if (out.length === 0) out.push({ x: pts[0].x, y: pts[0].y });\n const segs: Seg[] = [];\n fitGreedy(pts, tStart, tEnd, tol, segs);\n segs.forEach((seg, i) => {\n const prev = out[out.length - 1];\n if (seg.c1) prev.outHandle = seg.c1;\n const isLast = i === segs.length - 1;\n if (closing && isLast) {\n if (seg.c2) out[0].inHandle = seg.c2;\n return;\n }\n out.push(seg.c2 ? { x: seg.end.x, y: seg.end.y, inHandle: seg.c2 } : { x: seg.end.x, y: seg.end.y });\n });\n}\n\ntype Seg = { c1?: Point; c2?: Point; end: Point };\n\n/**\n * Each piece is the longest prefix of what is left that one cubic holds,\n * found by bisecting on its end sample. Splitting at the worst sample instead\n * cuts where a poor first fit strays most, which is rarely where a piece has\n * to end: it refit a puppet-warped bar with twice the anchors it needed.\n */\nfunction fitGreedy(pts: Point[], tStart: Point, tEnd: Point, tol: number, out: Seg[]): void {\n let from = 0;\n let tIn = tStart;\n for (;;) {\n const whole = fitOne(pts.slice(from), tIn, tEnd, tol);\n if (whole) { out.push(whole); return; }\n let lo = from + 1, hi = pts.length - 1;\n let piece: Seg = { end: pts[lo] };\n while (hi - lo > 1) {\n const mid = (lo + hi) >> 1;\n const fit = fitOne(pts.slice(from, mid + 1), tIn, neg(tangentAt(pts, mid)), tol);\n if (fit) { lo = mid; piece = fit; } else hi = mid;\n }\n out.push(piece);\n tIn = tangentAt(pts, lo);\n from = lo;\n }\n}\n\nconst tangentAt = (pts: Point[], k: number): Point => unit(sub2(pts[k + 1], pts[k - 1]));\n\n/** One cubic held to the run's end tangents within `tol` of the run both ways, or null. */\nfunction fitOne(pts: Point[], tStart: Point, tEnd: Point, tol: number): Seg | null {\n const a = pts[0];\n const e = pts[pts.length - 1];\n if (pts.length <= 2 || withinLine(pts, a, e, tol)) return { end: e };\n const run = packRun(pts);\n const { cp1, cp2 } = fitCubicWithTangents(pts, tStart, tEnd);\n if (cubicWithin(run, a, cp1, cp2, e, tol)) return { c1: cp1, c2: cp2, end: e };\n const found = searchHandles(run, a, e, tStart, tEnd, tol, { cp1, cp2 });\n return found && cubicWithin(run, a, found.cp1, found.cp2, e, tol) ? { c1: found.cp1, c2: found.cp2, end: e } : null;\n}\n\nfunction withinLine(pts: Point[], a: Point, e: Point, tol: number): boolean {\n for (let i = 1; i < pts.length - 1; i++) {\n if (nearestOnLine(pts[i].x, pts[i].y, a.x, a.y, e.x, e.y).dist > tol) return false;\n }\n return true;\n}\n\nconst sub2 = (p: Point, q: Point): Point => ({ x: p.x - q.x, y: p.y - q.y });\nconst neg = (p: Point): Point => ({ x: -p.x, y: -p.y });\nfunction unit(p: Point): Point {\n const len = Math.hypot(p.x, p.y);\n return len === 0 ? { x: 0, y: 0 } : { x: p.x / len, y: p.y / len };\n}\n"]}
|