HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/main-bGW4GB57.js.map
{"version":3,"file":"main-bGW4GB57.js","sources":["../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/_virtual/_tslib.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/types.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/actionTypes.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/constants.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/utils.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/actions.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/serviceScope.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/Actor.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/stateUtils.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/State.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/scheduler.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/registry.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/devTools.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/behaviors.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/interpreter.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/invokeUtils.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/StateNode.js","../../node_modules/.pnpm/xstate@4.38.3/node_modules/xstate/es/Machine.js","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/actions/loadJson.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/defaultValues.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/calculus/Coords.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/lib/format.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/syncShake.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkAngle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkCoords.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkDistance.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkParallel.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkSameDistance.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/checkVector.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/check/shake.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/DynamicNumber.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/Angle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/Distance.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/DynamicCalcul.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/DynamicX.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/DynamicY.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/Element2D.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/calculus/Graph.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/calculus/Graph2.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/grid/Grid.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/calculus/utils.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Arc.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/ArcBy3PointsAndRadius.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/dynamicNumbers/Const.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/ArcByCenterRadiusAndAngles.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Segment.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Ray.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/BisectorByPoints.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Circle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/CircleCenterDyamicRadius.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/CircleCenterPoint.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Line.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/LineByPointVector.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/LineParallel.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/LinePerpendicular.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/PerpendicularBisector.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/PerpendicularBisectorByPoints.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Polyligon.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/lines/Polyline.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/Point.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/Barycenter.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/Middle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PoinrOnGraph.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByDilate.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByDynamicDilate.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByRotation.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByDynamicRotation.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByProjection.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByProjectionOnAxisX.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByProjectionOnAxisY.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByReflect.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByReflectOverLine.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointBySimilarity.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByTranslation.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointByTranslationByPoints.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointIntersectionCC.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointIntersectionLC.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointIntersectionLL.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointOnCircle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointOnLine.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointOnLineAtDistance.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointsIntersectionCC.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/points/PointsIntersectionLC.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/text/TextByPosition.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/text/MarkSegment.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/text/TextByPoint.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/text/TextDynamicByPosition.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/transformations/ElementByReflectOverLine.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/transformations/ElementByTranslationByPoints.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/vector/Vector.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/vector/VectorByPoints.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/elements/vector/VectorPerpendicular.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/pointerActions/handleHover.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/pointerActions/handlePointerAction.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/bisectorByPoints.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/circle.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/circleCompass.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/circlePoint.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/cursor.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/description.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/dilate.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/drag.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/dragAll.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/fill.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/grid.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/hide.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/informations.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/latex.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/latexSvg.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/line.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/lineParallel.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/linePerpendicular.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/markAngle.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/markSegment.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/mesureAngle.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/mesureSegment.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/middle.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/moveLabel.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/namePoint.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/open.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/pause.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/perpendicularBisector.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/play.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/playSkipBack.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/playSkipForward.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/point.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/pointIntersection.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/pointOn.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/polygon.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/ray.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/redo.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/reflection.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/reflectionOverLine.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/remove.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/restart.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/rotate.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/save.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/segment.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/setOptions.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/shake.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/translation.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/undo.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/vector.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/addButtons.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/addColorPalette.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/dashed.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/assets/svg/noDashed.svg","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/addDashedChoice.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/addThicknessChoice.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/setToolbar.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/Figure.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/handleDialog.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/userInterface/selectionRectangle.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/uiMachine.ts","../../node_modules/.pnpm/forge.aeif.fr+coopmaths+apigeom@2faa5c492bee6187dfc39230165345b03c532edb/node_modules/apigeom/src/main.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nexport { __assign, __read, __rest, __spreadArray, __values };\n","var ActionTypes;\n\n(function (ActionTypes) {\n  ActionTypes[\"Start\"] = \"xstate.start\";\n  ActionTypes[\"Stop\"] = \"xstate.stop\";\n  ActionTypes[\"Raise\"] = \"xstate.raise\";\n  ActionTypes[\"Send\"] = \"xstate.send\";\n  ActionTypes[\"Cancel\"] = \"xstate.cancel\";\n  ActionTypes[\"NullEvent\"] = \"\";\n  ActionTypes[\"Assign\"] = \"xstate.assign\";\n  ActionTypes[\"After\"] = \"xstate.after\";\n  ActionTypes[\"DoneState\"] = \"done.state\";\n  ActionTypes[\"DoneInvoke\"] = \"done.invoke\";\n  ActionTypes[\"Log\"] = \"xstate.log\";\n  ActionTypes[\"Init\"] = \"xstate.init\";\n  ActionTypes[\"Invoke\"] = \"xstate.invoke\";\n  ActionTypes[\"ErrorExecution\"] = \"error.execution\";\n  ActionTypes[\"ErrorCommunication\"] = \"error.communication\";\n  ActionTypes[\"ErrorPlatform\"] = \"error.platform\";\n  ActionTypes[\"ErrorCustom\"] = \"xstate.error\";\n  ActionTypes[\"Update\"] = \"xstate.update\";\n  ActionTypes[\"Pure\"] = \"xstate.pure\";\n  ActionTypes[\"Choose\"] = \"xstate.choose\";\n})(ActionTypes || (ActionTypes = {}));\n\nvar SpecialTargets;\n\n(function (SpecialTargets) {\n  SpecialTargets[\"Parent\"] = \"#_parent\";\n  SpecialTargets[\"Internal\"] = \"#_internal\";\n})(SpecialTargets || (SpecialTargets = {}));\n\nexport { ActionTypes, SpecialTargets };\n","import { ActionTypes } from './types.js';\n\nvar start = ActionTypes.Start;\nvar stop = ActionTypes.Stop;\nvar raise = ActionTypes.Raise;\nvar send = ActionTypes.Send;\nvar cancel = ActionTypes.Cancel;\nvar nullEvent = ActionTypes.NullEvent;\nvar assign = ActionTypes.Assign;\nvar after = ActionTypes.After;\nvar doneState = ActionTypes.DoneState;\nvar log = ActionTypes.Log;\nvar init = ActionTypes.Init;\nvar invoke = ActionTypes.Invoke;\nvar errorExecution = ActionTypes.ErrorExecution;\nvar errorPlatform = ActionTypes.ErrorPlatform;\nvar error = ActionTypes.ErrorCustom;\nvar update = ActionTypes.Update;\nvar choose = ActionTypes.Choose;\nvar pure = ActionTypes.Pure;\n\nexport { after, assign, cancel, choose, doneState, error, errorExecution, errorPlatform, init, invoke, log, nullEvent, pure, raise, send, start, stop, update };\n","var STATE_DELIMITER = '.';\nvar EMPTY_ACTIVITY_MAP = {};\nvar DEFAULT_GUARD_TYPE = 'xstate.guard';\nvar TARGETLESS_KEY = '';\n\nexport { DEFAULT_GUARD_TYPE, EMPTY_ACTIVITY_MAP, STATE_DELIMITER, TARGETLESS_KEY };\n","import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { SpecialTargets } from './types.js';\nimport { raise, send } from './actionTypes.js';\nimport { DEFAULT_GUARD_TYPE, TARGETLESS_KEY, STATE_DELIMITER } from './constants.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar _a;\nfunction keys(value) {\n  return Object.keys(value);\n}\nfunction matchesState(parentStateId, childStateId, delimiter) {\n  if (delimiter === void 0) {\n    delimiter = STATE_DELIMITER;\n  }\n\n  var parentStateValue = toStateValue(parentStateId, delimiter);\n  var childStateValue = toStateValue(childStateId, delimiter);\n\n  if (isString(childStateValue)) {\n    if (isString(parentStateValue)) {\n      return childStateValue === parentStateValue;\n    } // Parent more specific than child\n\n\n    return false;\n  }\n\n  if (isString(parentStateValue)) {\n    return parentStateValue in childStateValue;\n  }\n\n  return Object.keys(parentStateValue).every(function (key) {\n    if (!(key in childStateValue)) {\n      return false;\n    }\n\n    return matchesState(parentStateValue[key], childStateValue[key]);\n  });\n}\nfunction getEventType(event) {\n  try {\n    return isString(event) || typeof event === 'number' ? \"\".concat(event) : event.type;\n  } catch (e) {\n    throw new Error('Events must be strings or objects with a string event.type property.');\n  }\n}\nfunction getActionType(action) {\n  try {\n    return isString(action) || typeof action === 'number' ? \"\".concat(action) : isFunction(action) ? action.name : action.type;\n  } catch (e) {\n    throw new Error('Actions must be strings or objects with a string action.type property.');\n  }\n}\nfunction toStatePath(stateId, delimiter) {\n  try {\n    if (isArray(stateId)) {\n      return stateId;\n    }\n\n    return stateId.toString().split(delimiter);\n  } catch (e) {\n    throw new Error(\"'\".concat(stateId, \"' is not a valid state path.\"));\n  }\n}\nfunction isStateLike(state) {\n  return typeof state === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;\n}\nfunction toStateValue(stateValue, delimiter) {\n  if (isStateLike(stateValue)) {\n    return stateValue.value;\n  }\n\n  if (isArray(stateValue)) {\n    return pathToStateValue(stateValue);\n  }\n\n  if (typeof stateValue !== 'string') {\n    return stateValue;\n  }\n\n  var statePath = toStatePath(stateValue, delimiter);\n  return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n  if (statePath.length === 1) {\n    return statePath[0];\n  }\n\n  var value = {};\n  var marker = value;\n\n  for (var i = 0; i < statePath.length - 1; i++) {\n    if (i === statePath.length - 2) {\n      marker[statePath[i]] = statePath[i + 1];\n    } else {\n      marker[statePath[i]] = {};\n      marker = marker[statePath[i]];\n    }\n  }\n\n  return value;\n}\nfunction mapValues(collection, iteratee) {\n  var result = {};\n  var collectionKeys = Object.keys(collection);\n\n  for (var i = 0; i < collectionKeys.length; i++) {\n    var key = collectionKeys[i];\n    result[key] = iteratee(collection[key], key, collection, i);\n  }\n\n  return result;\n}\nfunction mapFilterValues(collection, iteratee, predicate) {\n  var e_1, _a;\n\n  var result = {};\n\n  try {\n    for (var _b = __values(Object.keys(collection)), _c = _b.next(); !_c.done; _c = _b.next()) {\n      var key = _c.value;\n      var item = collection[key];\n\n      if (!predicate(item)) {\n        continue;\n      }\n\n      result[key] = iteratee(item, key, collection);\n    }\n  } catch (e_1_1) {\n    e_1 = {\n      error: e_1_1\n    };\n  } finally {\n    try {\n      if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n    } finally {\n      if (e_1) throw e_1.error;\n    }\n  }\n\n  return result;\n}\n/**\r\n * Retrieves a value at the given path.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nvar path = function (props) {\n  return function (object) {\n    var e_2, _a;\n\n    var result = object;\n\n    try {\n      for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n        var prop = props_1_1.value;\n        result = result[prop];\n      }\n    } catch (e_2_1) {\n      e_2 = {\n        error: e_2_1\n      };\n    } finally {\n      try {\n        if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n      } finally {\n        if (e_2) throw e_2.error;\n      }\n    }\n\n    return result;\n  };\n};\n/**\r\n * Retrieves a value at the given path via the nested accessor prop.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nfunction nestedPath(props, accessorProp) {\n  return function (object) {\n    var e_3, _a;\n\n    var result = object;\n\n    try {\n      for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {\n        var prop = props_2_1.value;\n        result = result[accessorProp][prop];\n      }\n    } catch (e_3_1) {\n      e_3 = {\n        error: e_3_1\n      };\n    } finally {\n      try {\n        if (props_2_1 && !props_2_1.done && (_a = props_2.return)) _a.call(props_2);\n      } finally {\n        if (e_3) throw e_3.error;\n      }\n    }\n\n    return result;\n  };\n}\nfunction toStatePaths(stateValue) {\n  if (!stateValue) {\n    return [[]];\n  }\n\n  if (isString(stateValue)) {\n    return [[stateValue]];\n  }\n\n  var result = flatten(Object.keys(stateValue).map(function (key) {\n    var subStateValue = stateValue[key];\n\n    if (typeof subStateValue !== 'string' && (!subStateValue || !Object.keys(subStateValue).length)) {\n      return [[key]];\n    }\n\n    return toStatePaths(stateValue[key]).map(function (subPath) {\n      return [key].concat(subPath);\n    });\n  }));\n  return result;\n}\nfunction pathsToStateValue(paths) {\n  var e_4, _a;\n\n  var result = {};\n\n  if (paths && paths.length === 1 && paths[0].length === 1) {\n    return paths[0][0];\n  }\n\n  try {\n    for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n      var currentPath = paths_1_1.value;\n      var marker = result; // tslint:disable-next-line:prefer-for-of\n\n      for (var i = 0; i < currentPath.length; i++) {\n        var subPath = currentPath[i];\n\n        if (i === currentPath.length - 2) {\n          marker[subPath] = currentPath[i + 1];\n          break;\n        }\n\n        marker[subPath] = marker[subPath] || {};\n        marker = marker[subPath];\n      }\n    }\n  } catch (e_4_1) {\n    e_4 = {\n      error: e_4_1\n    };\n  } finally {\n    try {\n      if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n    } finally {\n      if (e_4) throw e_4.error;\n    }\n  }\n\n  return result;\n}\nfunction flatten(array) {\n  var _a;\n\n  return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));\n}\nfunction toArrayStrict(value) {\n  if (isArray(value)) {\n    return value;\n  }\n\n  return [value];\n}\nfunction toArray(value) {\n  if (value === undefined) {\n    return [];\n  }\n\n  return toArrayStrict(value);\n}\nfunction mapContext(mapper, context, _event) {\n  var e_5, _a;\n\n  if (isFunction(mapper)) {\n    return mapper(context, _event.data);\n  }\n\n  var result = {};\n\n  try {\n    for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {\n      var key = _c.value;\n      var subMapper = mapper[key];\n\n      if (isFunction(subMapper)) {\n        result[key] = subMapper(context, _event.data);\n      } else {\n        result[key] = subMapper;\n      }\n    }\n  } catch (e_5_1) {\n    e_5 = {\n      error: e_5_1\n    };\n  } finally {\n    try {\n      if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n    } finally {\n      if (e_5) throw e_5.error;\n    }\n  }\n\n  return result;\n}\nfunction isBuiltInEvent(eventType) {\n  return /^(done|error)\\./.test(eventType);\n}\nfunction isPromiseLike(value) {\n  if (value instanceof Promise) {\n    return true;\n  } // Check if shape matches the Promise/A+ specification for a \"thenable\".\n\n\n  if (value !== null && (isFunction(value) || typeof value === 'object') && isFunction(value.then)) {\n    return true;\n  }\n\n  return false;\n}\nfunction isBehavior(value) {\n  return value !== null && typeof value === 'object' && 'transition' in value && typeof value.transition === 'function';\n}\nfunction partition(items, predicate) {\n  var e_6, _a;\n\n  var _b = __read([[], []], 2),\n      truthy = _b[0],\n      falsy = _b[1];\n\n  try {\n    for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n      var item = items_1_1.value;\n\n      if (predicate(item)) {\n        truthy.push(item);\n      } else {\n        falsy.push(item);\n      }\n    }\n  } catch (e_6_1) {\n    e_6 = {\n      error: e_6_1\n    };\n  } finally {\n    try {\n      if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n    } finally {\n      if (e_6) throw e_6.error;\n    }\n  }\n\n  return [truthy, falsy];\n}\nfunction updateHistoryStates(hist, stateValue) {\n  return mapValues(hist.states, function (subHist, key) {\n    if (!subHist) {\n      return undefined;\n    }\n\n    var subStateValue = (isString(stateValue) ? undefined : stateValue[key]) || (subHist ? subHist.current : undefined);\n\n    if (!subStateValue) {\n      return undefined;\n    }\n\n    return {\n      current: subStateValue,\n      states: updateHistoryStates(subHist, subStateValue)\n    };\n  });\n}\nfunction updateHistoryValue(hist, stateValue) {\n  return {\n    current: stateValue,\n    states: updateHistoryStates(hist, stateValue)\n  };\n}\nfunction updateContext(context, _event, assignActions, state) {\n  if (!IS_PRODUCTION) {\n    warn(!!context, 'Attempting to update undefined context');\n  }\n\n  var updatedContext = context ? assignActions.reduce(function (acc, assignAction) {\n    var e_7, _a;\n\n    var assignment = assignAction.assignment;\n    var meta = {\n      state: state,\n      action: assignAction,\n      _event: _event\n    };\n    var partialUpdate = {};\n\n    if (isFunction(assignment)) {\n      partialUpdate = assignment(acc, _event.data, meta);\n    } else {\n      try {\n        for (var _b = __values(Object.keys(assignment)), _c = _b.next(); !_c.done; _c = _b.next()) {\n          var key = _c.value;\n          var propAssignment = assignment[key];\n          partialUpdate[key] = isFunction(propAssignment) ? propAssignment(acc, _event.data, meta) : propAssignment;\n        }\n      } catch (e_7_1) {\n        e_7 = {\n          error: e_7_1\n        };\n      } finally {\n        try {\n          if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        } finally {\n          if (e_7) throw e_7.error;\n        }\n      }\n    }\n\n    return Object.assign({}, acc, partialUpdate);\n  }, context) : context;\n  return updatedContext;\n} // tslint:disable-next-line:no-empty\n\nvar warn = function () {};\n\nif (!IS_PRODUCTION) {\n  warn = function (condition, message) {\n    var error = condition instanceof Error ? condition : undefined;\n\n    if (!error && condition) {\n      return;\n    }\n\n    if (console !== undefined) {\n      var args = [\"Warning: \".concat(message)];\n\n      if (error) {\n        args.push(error);\n      } // tslint:disable-next-line:no-console\n\n\n      console.warn.apply(console, args);\n    }\n  };\n}\nfunction isArray(value) {\n  return Array.isArray(value);\n} // tslint:disable-next-line:ban-types\n\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\nfunction isString(value) {\n  return typeof value === 'string';\n}\nfunction toGuard(condition, guardMap) {\n  if (!condition) {\n    return undefined;\n  }\n\n  if (isString(condition)) {\n    return {\n      type: DEFAULT_GUARD_TYPE,\n      name: condition,\n      predicate: guardMap ? guardMap[condition] : undefined\n    };\n  }\n\n  if (isFunction(condition)) {\n    return {\n      type: DEFAULT_GUARD_TYPE,\n      name: condition.name,\n      predicate: condition\n    };\n  }\n\n  return condition;\n}\nfunction isObservable(value) {\n  try {\n    return 'subscribe' in value && isFunction(value.subscribe);\n  } catch (e) {\n    return false;\n  }\n}\nvar symbolObservable = /*#__PURE__*/function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}(); // TODO: to be removed in v5, left it out just to minimize the scope of the change and maintain compatibility with older versions of integration paackages\n\nvar interopSymbols = (_a = {}, _a[symbolObservable] = function () {\n  return this;\n}, _a[Symbol.observable] = function () {\n  return this;\n}, _a);\nfunction isMachine(value) {\n  return !!value && '__xstatenode' in value;\n}\nfunction isActor(value) {\n  return !!value && typeof value.send === 'function';\n}\nvar uniqueId = /*#__PURE__*/function () {\n  var currentId = 0;\n  return function () {\n    currentId++;\n    return currentId.toString(16);\n  };\n}();\nfunction toEventObject(event, payload // id?: TEvent['type']\n) {\n  if (isString(event) || typeof event === 'number') {\n    return __assign({\n      type: event\n    }, payload);\n  }\n\n  return event;\n}\nfunction toSCXMLEvent(event, scxmlEvent) {\n  if (!isString(event) && '$$type' in event && event.$$type === 'scxml') {\n    return event;\n  }\n\n  var eventObject = toEventObject(event);\n  return __assign({\n    name: eventObject.type,\n    data: eventObject,\n    $$type: 'scxml',\n    type: 'external'\n  }, scxmlEvent);\n}\nfunction toTransitionConfigArray(event, configLike) {\n  var transitions = toArrayStrict(configLike).map(function (transitionLike) {\n    if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {\n      return {\n        target: transitionLike,\n        event: event\n      };\n    }\n\n    return __assign(__assign({}, transitionLike), {\n      event: event\n    });\n  });\n  return transitions;\n}\nfunction normalizeTarget(target) {\n  if (target === undefined || target === TARGETLESS_KEY) {\n    return undefined;\n  }\n\n  return toArray(target);\n}\nfunction reportUnhandledExceptionOnInvocation(originalError, currentError, id) {\n  if (!IS_PRODUCTION) {\n    var originalStackTrace = originalError.stack ? \" Stacktrace was '\".concat(originalError.stack, \"'\") : '';\n\n    if (originalError === currentError) {\n      // tslint:disable-next-line:no-console\n      console.error(\"Missing onError handler for invocation '\".concat(id, \"', error was '\").concat(originalError, \"'.\").concat(originalStackTrace));\n    } else {\n      var stackTrace = currentError.stack ? \" Stacktrace was '\".concat(currentError.stack, \"'\") : ''; // tslint:disable-next-line:no-console\n\n      console.error(\"Missing onError handler and/or unhandled exception/promise rejection for invocation '\".concat(id, \"'. \") + \"Original error: '\".concat(originalError, \"'. \").concat(originalStackTrace, \" Current error is '\").concat(currentError, \"'.\").concat(stackTrace));\n    }\n  }\n}\nfunction evaluateGuard(machine, guard, context, _event, state) {\n  var guards = machine.options.guards;\n  var guardMeta = {\n    state: state,\n    cond: guard,\n    _event: _event\n  }; // TODO: do not hardcode!\n\n  if (guard.type === DEFAULT_GUARD_TYPE) {\n    return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);\n  }\n\n  var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];\n\n  if (!condFn) {\n    throw new Error(\"Guard '\".concat(guard.type, \"' is not implemented on machine '\").concat(machine.id, \"'.\"));\n  }\n\n  return condFn(context, _event.data, guardMeta);\n}\nfunction toInvokeSource(src) {\n  if (typeof src === 'string') {\n    return {\n      type: src\n    };\n  }\n\n  return src;\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n  var noop = function () {};\n\n  var isObserver = typeof nextHandler === 'object';\n  var self = isObserver ? nextHandler : null;\n  return {\n    next: ((isObserver ? nextHandler.next : nextHandler) || noop).bind(self),\n    error: ((isObserver ? nextHandler.error : errorHandler) || noop).bind(self),\n    complete: ((isObserver ? nextHandler.complete : completionHandler) || noop).bind(self)\n  };\n}\nfunction createInvokeId(stateNodeId, index) {\n  return \"\".concat(stateNodeId, \":invocation[\").concat(index, \"]\");\n}\nfunction isRaisableAction(action) {\n  return (action.type === raise || action.type === send && action.to === SpecialTargets.Internal) && typeof action.delay !== 'number';\n}\n\nexport { createInvokeId, evaluateGuard, flatten, getActionType, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isRaisableAction, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, pathsToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };\n","import { __assign, __spreadArray, __read, __values } from './_virtual/_tslib.js';\nimport { SpecialTargets, ActionTypes } from './types.js';\nimport { init, raise as raise$1, send as send$1, update, log as log$1, cancel as cancel$1, assign as assign$1, error as error$1, stop as stop$1, pure as pure$1, choose as choose$1 } from './actionTypes.js';\nimport * as actionTypes from './actionTypes.js';\nexport { actionTypes };\nimport { toSCXMLEvent, isString, isFunction, toEventObject, getEventType, updateContext, flatten, isArray, toArray, toGuard, evaluateGuard, warn } from './utils.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar initEvent = /*#__PURE__*/toSCXMLEvent({\n  type: init\n});\nfunction getActionFunction(actionType, actionFunctionMap) {\n  return actionFunctionMap ? actionFunctionMap[actionType] || undefined : undefined;\n}\nfunction toActionObject(action, actionFunctionMap) {\n  var actionObject;\n\n  if (isString(action) || typeof action === 'number') {\n    var exec = getActionFunction(action, actionFunctionMap);\n\n    if (isFunction(exec)) {\n      actionObject = {\n        type: action,\n        exec: exec\n      };\n    } else if (exec) {\n      actionObject = exec;\n    } else {\n      actionObject = {\n        type: action,\n        exec: undefined\n      };\n    }\n  } else if (isFunction(action)) {\n    actionObject = {\n      // Convert action to string if unnamed\n      type: action.name || action.toString(),\n      exec: action\n    };\n  } else {\n    var exec = getActionFunction(action.type, actionFunctionMap);\n\n    if (isFunction(exec)) {\n      actionObject = __assign(__assign({}, action), {\n        exec: exec\n      });\n    } else if (exec) {\n      var actionType = exec.type || action.type;\n      actionObject = __assign(__assign(__assign({}, exec), action), {\n        type: actionType\n      });\n    } else {\n      actionObject = action;\n    }\n  }\n\n  return actionObject;\n}\nvar toActionObjects = function (action, actionFunctionMap) {\n  if (!action) {\n    return [];\n  }\n\n  var actions = isArray(action) ? action : [action];\n  return actions.map(function (subAction) {\n    return toActionObject(subAction, actionFunctionMap);\n  });\n};\nfunction toActivityDefinition(action) {\n  var actionObject = toActionObject(action);\n  return __assign(__assign({\n    id: isString(action) ? action : actionObject.id\n  }, actionObject), {\n    type: actionObject.type\n  });\n}\n/**\r\n * Raises an event. This places the event in the internal event queue, so that\r\n * the event is immediately consumed by the machine in the current step.\r\n *\r\n * @param eventType The event to raise.\r\n */\n\nfunction raise(event, options) {\n  return {\n    type: raise$1,\n    event: typeof event === 'function' ? event : toEventObject(event),\n    delay: options ? options.delay : undefined,\n    id: options === null || options === void 0 ? void 0 : options.id\n  };\n}\nfunction resolveRaise(action, ctx, _event, delaysMap) {\n  var meta = {\n    _event: _event\n  };\n  var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n  var resolvedDelay;\n\n  if (isString(action.delay)) {\n    var configDelay = delaysMap && delaysMap[action.delay];\n    resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n  } else {\n    resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n  }\n\n  return __assign(__assign({}, action), {\n    type: raise$1,\n    _event: resolvedEvent,\n    delay: resolvedDelay\n  });\n}\n/**\r\n * Sends an event. This returns an action that will be read by an interpreter to\r\n * send the event in the next step, after the current step is finished executing.\r\n *\r\n * @deprecated Use the `sendTo(...)` action creator instead.\r\n *\r\n * @param event The event to send.\r\n * @param options Options to pass into the send event:\r\n *  - `id` - The unique send event identifier (used with `cancel()`).\r\n *  - `delay` - The number of milliseconds to delay the sending of the event.\r\n *  - `to` - The target of this event (by default, the machine the event was sent from).\r\n */\n\nfunction send(event, options) {\n  return {\n    to: options ? options.to : undefined,\n    type: send$1,\n    event: isFunction(event) ? event : toEventObject(event),\n    delay: options ? options.delay : undefined,\n    // TODO: don't auto-generate IDs here like that\n    // there is too big chance of the ID collision\n    id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : getEventType(event)\n  };\n}\nfunction resolveSend(action, ctx, _event, delaysMap) {\n  var meta = {\n    _event: _event\n  }; // TODO: helper function for resolving Expr\n\n  var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n  var resolvedDelay;\n\n  if (isString(action.delay)) {\n    var configDelay = delaysMap && delaysMap[action.delay];\n    resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n  } else {\n    resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n  }\n\n  var resolvedTarget = isFunction(action.to) ? action.to(ctx, _event.data, meta) : action.to;\n  return __assign(__assign({}, action), {\n    to: resolvedTarget,\n    _event: resolvedEvent,\n    event: resolvedEvent.data,\n    delay: resolvedDelay\n  });\n}\n/**\r\n * Sends an event to this machine's parent.\r\n *\r\n * @param event The event to send to the parent machine.\r\n * @param options Options to pass into the send event.\r\n */\n\nfunction sendParent(event, options) {\n  return send(event, __assign(__assign({}, options), {\n    to: SpecialTargets.Parent\n  }));\n}\n/**\r\n * Sends an event to an actor.\r\n *\r\n * @param actor The `ActorRef` to send the event to.\r\n * @param event The event to send, or an expression that evaluates to the event to send\r\n * @param options Send action options\r\n * @returns An XState send action object\r\n */\n\nfunction sendTo(actor, event, options) {\n  return send(event, __assign(__assign({}, options), {\n    to: actor\n  }));\n}\n/**\r\n * Sends an update event to this machine's parent.\r\n */\n\nfunction sendUpdate() {\n  return sendParent(update);\n}\n/**\r\n * Sends an event back to the sender of the original event.\r\n *\r\n * @param event The event to send back to the sender\r\n * @param options Options to pass into the send event\r\n */\n\nfunction respond(event, options) {\n  return send(event, __assign(__assign({}, options), {\n    to: function (_, __, _a) {\n      var _event = _a._event;\n      return _event.origin; // TODO: handle when _event.origin is undefined\n    }\n  }));\n}\n\nvar defaultLogExpr = function (context, event) {\n  return {\n    context: context,\n    event: event\n  };\n};\n/**\r\n *\r\n * @param expr The expression function to evaluate which will be logged.\r\n *  Takes in 2 arguments:\r\n *  - `ctx` - the current state context\r\n *  - `event` - the event that caused this action to be executed.\r\n * @param label The label to give to the logged expression.\r\n */\n\n\nfunction log(expr, label) {\n  if (expr === void 0) {\n    expr = defaultLogExpr;\n  }\n\n  return {\n    type: log$1,\n    label: label,\n    expr: expr\n  };\n}\nvar resolveLog = function (action, ctx, _event) {\n  return __assign(__assign({}, action), {\n    value: isString(action.expr) ? action.expr : action.expr(ctx, _event.data, {\n      _event: _event\n    })\n  });\n};\n/**\r\n * Cancels an in-flight `send(...)` action. A canceled sent action will not\r\n * be executed, nor will its event be sent, unless it has already been sent\r\n * (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).\r\n *\r\n * @param sendId The `id` of the `send(...)` action to cancel.\r\n */\n\nvar cancel = function (sendId) {\n  return {\n    type: cancel$1,\n    sendId: sendId\n  };\n};\n/**\r\n * Starts an activity.\r\n *\r\n * @param activity The activity to start.\r\n */\n\nfunction start(activity) {\n  var activityDef = toActivityDefinition(activity);\n  return {\n    type: ActionTypes.Start,\n    activity: activityDef,\n    exec: undefined\n  };\n}\n/**\r\n * Stops an activity.\r\n *\r\n * @param actorRef The activity to stop.\r\n */\n\nfunction stop(actorRef) {\n  var activity = isFunction(actorRef) ? actorRef : toActivityDefinition(actorRef);\n  return {\n    type: ActionTypes.Stop,\n    activity: activity,\n    exec: undefined\n  };\n}\nfunction resolveStop(action, context, _event) {\n  var actorRefOrString = isFunction(action.activity) ? action.activity(context, _event.data) : action.activity;\n  var resolvedActorRef = typeof actorRefOrString === 'string' ? {\n    id: actorRefOrString\n  } : actorRefOrString;\n  var actionObject = {\n    type: ActionTypes.Stop,\n    activity: resolvedActorRef\n  };\n  return actionObject;\n}\n/**\r\n * Updates the current context of the machine.\r\n *\r\n * @param assignment An object that represents the partial context to update.\r\n */\n\nvar assign = function (assignment) {\n  return {\n    type: assign$1,\n    assignment: assignment\n  };\n};\nfunction isActionObject(action) {\n  return typeof action === 'object' && 'type' in action;\n}\n/**\r\n * Returns an event type that represents an implicit event that\r\n * is sent after the specified `delay`.\r\n *\r\n * @param delayRef The delay in milliseconds\r\n * @param id The state node ID where this event is handled\r\n */\n\nfunction after(delayRef, id) {\n  var idSuffix = id ? \"#\".concat(id) : '';\n  return \"\".concat(ActionTypes.After, \"(\").concat(delayRef, \")\").concat(idSuffix);\n}\n/**\r\n * Returns an event that represents that a final state node\r\n * has been reached in the parent state node.\r\n *\r\n * @param id The final state node's parent state node `id`\r\n * @param data The data to pass into the event\r\n */\n\nfunction done(id, data) {\n  var type = \"\".concat(ActionTypes.DoneState, \".\").concat(id);\n  var eventObject = {\n    type: type,\n    data: data\n  };\n\n  eventObject.toString = function () {\n    return type;\n  };\n\n  return eventObject;\n}\n/**\r\n * Returns an event that represents that an invoked service has terminated.\r\n *\r\n * An invoked service is terminated when it has reached a top-level final state node,\r\n * but not when it is canceled.\r\n *\r\n * @param id The final state node ID\r\n * @param data The data to pass into the event\r\n */\n\nfunction doneInvoke(id, data) {\n  var type = \"\".concat(ActionTypes.DoneInvoke, \".\").concat(id);\n  var eventObject = {\n    type: type,\n    data: data\n  };\n\n  eventObject.toString = function () {\n    return type;\n  };\n\n  return eventObject;\n}\nfunction error(id, data) {\n  var type = \"\".concat(ActionTypes.ErrorPlatform, \".\").concat(id);\n  var eventObject = {\n    type: type,\n    data: data\n  };\n\n  eventObject.toString = function () {\n    return type;\n  };\n\n  return eventObject;\n}\nfunction pure(getActions) {\n  return {\n    type: ActionTypes.Pure,\n    get: getActions\n  };\n}\n/**\r\n * Forwards (sends) an event to a specified service.\r\n *\r\n * @param target The target service to forward the event to.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction forwardTo(target, options) {\n  if (!IS_PRODUCTION && (!target || typeof target === 'function')) {\n    var originalTarget_1 = target;\n\n    target = function () {\n      var args = [];\n\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n\n      var resolvedTarget = typeof originalTarget_1 === 'function' ? originalTarget_1.apply(void 0, __spreadArray([], __read(args), false)) : originalTarget_1;\n\n      if (!resolvedTarget) {\n        throw new Error(\"Attempted to forward event to undefined actor. This risks an infinite loop in the sender.\");\n      }\n\n      return resolvedTarget;\n    };\n  }\n\n  return send(function (_, event) {\n    return event;\n  }, __assign(__assign({}, options), {\n    to: target\n  }));\n}\n/**\r\n * Escalates an error by sending it as an event to this machine's parent.\r\n *\r\n * @param errorData The error data to send, or the expression function that\r\n * takes in the `context`, `event`, and `meta`, and returns the error data to send.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction escalate(errorData, options) {\n  return sendParent(function (context, event, meta) {\n    return {\n      type: error$1,\n      data: isFunction(errorData) ? errorData(context, event, meta) : errorData\n    };\n  }, __assign(__assign({}, options), {\n    to: SpecialTargets.Parent\n  }));\n}\nfunction choose(conds) {\n  return {\n    type: ActionTypes.Choose,\n    conds: conds\n  };\n}\n\nvar pluckAssigns = function (actionBlocks) {\n  var e_1, _a;\n\n  var assignActions = [];\n\n  try {\n    for (var actionBlocks_1 = __values(actionBlocks), actionBlocks_1_1 = actionBlocks_1.next(); !actionBlocks_1_1.done; actionBlocks_1_1 = actionBlocks_1.next()) {\n      var block = actionBlocks_1_1.value;\n      var i = 0;\n\n      while (i < block.actions.length) {\n        if (block.actions[i].type === assign$1) {\n          assignActions.push(block.actions[i]);\n          block.actions.splice(i, 1);\n          continue;\n        }\n\n        i++;\n      }\n    }\n  } catch (e_1_1) {\n    e_1 = {\n      error: e_1_1\n    };\n  } finally {\n    try {\n      if (actionBlocks_1_1 && !actionBlocks_1_1.done && (_a = actionBlocks_1.return)) _a.call(actionBlocks_1);\n    } finally {\n      if (e_1) throw e_1.error;\n    }\n  }\n\n  return assignActions;\n};\n\nfunction resolveActions(machine, currentState, currentContext, _event, actionBlocks, predictableExec, preserveActionOrder) {\n  if (preserveActionOrder === void 0) {\n    preserveActionOrder = false;\n  }\n\n  var assignActions = preserveActionOrder ? [] : pluckAssigns(actionBlocks);\n  var updatedContext = assignActions.length ? updateContext(currentContext, _event, assignActions, currentState) : currentContext;\n  var preservedContexts = preserveActionOrder ? [currentContext] : undefined;\n  var deferredToBlockEnd = [];\n\n  function handleAction(blockType, actionObject) {\n    var _a;\n\n    switch (actionObject.type) {\n      case raise$1:\n        {\n          var raisedAction = resolveRaise(actionObject, updatedContext, _event, machine.options.delays);\n\n          if (predictableExec && typeof raisedAction.delay === 'number') {\n            predictableExec(raisedAction, updatedContext, _event);\n          }\n\n          return raisedAction;\n        }\n\n      case send$1:\n        var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init\n\n        if (!IS_PRODUCTION) {\n          var configuredDelay = actionObject.delay; // warn after resolving as we can create better contextual message here\n\n          warn(!isString(configuredDelay) || typeof sendAction.delay === 'number', // tslint:disable-next-line:max-line-length\n          \"No delay reference for delay expression '\".concat(configuredDelay, \"' was found on machine '\").concat(machine.id, \"'\"));\n        }\n\n        if (predictableExec && sendAction.to !== SpecialTargets.Internal) {\n          if (blockType === 'entry') {\n            deferredToBlockEnd.push(sendAction);\n          } else {\n            predictableExec(sendAction, updatedContext, _event);\n          }\n        }\n\n        return sendAction;\n\n      case log$1:\n        {\n          var resolved = resolveLog(actionObject, updatedContext, _event);\n          predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);\n          return resolved;\n        }\n\n      case choose$1:\n        {\n          var chooseAction = actionObject;\n          var matchedActions = (_a = chooseAction.conds.find(function (condition) {\n            var guard = toGuard(condition.cond, machine.options.guards);\n            return !guard || evaluateGuard(machine, guard, updatedContext, _event, !predictableExec ? currentState : undefined);\n          })) === null || _a === void 0 ? void 0 : _a.actions;\n\n          if (!matchedActions) {\n            return [];\n          }\n\n          var _b = __read(resolveActions(machine, currentState, updatedContext, _event, [{\n            type: blockType,\n            actions: toActionObjects(toArray(matchedActions), machine.options.actions)\n          }], predictableExec, preserveActionOrder), 2),\n              resolvedActionsFromChoose = _b[0],\n              resolvedContextFromChoose = _b[1];\n\n          updatedContext = resolvedContextFromChoose;\n          preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n          return resolvedActionsFromChoose;\n        }\n\n      case pure$1:\n        {\n          var matchedActions = actionObject.get(updatedContext, _event.data);\n\n          if (!matchedActions) {\n            return [];\n          }\n\n          var _c = __read(resolveActions(machine, currentState, updatedContext, _event, [{\n            type: blockType,\n            actions: toActionObjects(toArray(matchedActions), machine.options.actions)\n          }], predictableExec, preserveActionOrder), 2),\n              resolvedActionsFromPure = _c[0],\n              resolvedContext = _c[1];\n\n          updatedContext = resolvedContext;\n          preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n          return resolvedActionsFromPure;\n        }\n\n      case stop$1:\n        {\n          var resolved = resolveStop(actionObject, updatedContext, _event);\n          predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, currentContext, _event);\n          return resolved;\n        }\n\n      case assign$1:\n        {\n          updatedContext = updateContext(updatedContext, _event, [actionObject], !predictableExec ? currentState : undefined);\n          preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n          break;\n        }\n\n      default:\n        var resolvedActionObject = toActionObject(actionObject, machine.options.actions);\n        var exec_1 = resolvedActionObject.exec;\n\n        if (predictableExec) {\n          predictableExec(resolvedActionObject, updatedContext, _event);\n        } else if (exec_1 && preservedContexts) {\n          var contextIndex_1 = preservedContexts.length - 1;\n\n          var wrapped = __assign(__assign({}, resolvedActionObject), {\n            exec: function (_ctx) {\n              var args = [];\n\n              for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n              }\n\n              exec_1.apply(void 0, __spreadArray([preservedContexts[contextIndex_1]], __read(args), false));\n            }\n          });\n\n          resolvedActionObject = wrapped;\n        }\n\n        return resolvedActionObject;\n    }\n  }\n\n  function processBlock(block) {\n    var e_2, _a;\n\n    var resolvedActions = [];\n\n    try {\n      for (var _b = __values(block.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n        var action = _c.value;\n        var resolved = handleAction(block.type, action);\n\n        if (resolved) {\n          resolvedActions = resolvedActions.concat(resolved);\n        }\n      }\n    } catch (e_2_1) {\n      e_2 = {\n        error: e_2_1\n      };\n    } finally {\n      try {\n        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n      } finally {\n        if (e_2) throw e_2.error;\n      }\n    }\n\n    deferredToBlockEnd.forEach(function (action) {\n      predictableExec(action, updatedContext, _event);\n    });\n    deferredToBlockEnd.length = 0;\n    return resolvedActions;\n  }\n\n  var resolvedActions = flatten(actionBlocks.map(processBlock));\n  return [resolvedActions, updatedContext];\n}\n\nexport { after, assign, cancel, choose, done, doneInvoke, error, escalate, forwardTo, getActionFunction, initEvent, isActionObject, log, pure, raise, resolveActions, resolveLog, resolveRaise, resolveSend, resolveStop, respond, send, sendParent, sendTo, sendUpdate, start, stop, toActionObject, toActionObjects, toActivityDefinition };\n","/**\r\n * Maintains a stack of the current service in scope.\r\n * This is used to provide the correct service to spawn().\r\n */\nvar serviceStack = [];\nvar provide = function (service, fn) {\n  serviceStack.push(service);\n  var result = fn(service);\n  serviceStack.pop();\n  return result;\n};\nvar consume = function (fn) {\n  return fn(serviceStack[serviceStack.length - 1]);\n};\n\nexport { consume, provide };\n","import { __assign } from './_virtual/_tslib.js';\nimport { symbolObservable, toInvokeSource, mapContext, isMachine } from './utils.js';\nimport { provide } from './serviceScope.js';\n\nfunction createNullActor(id) {\n  var _a;\n\n  return _a = {\n    id: id,\n    send: function () {\n      return void 0;\n    },\n    subscribe: function () {\n      return {\n        unsubscribe: function () {\n          return void 0;\n        }\n      };\n    },\n    getSnapshot: function () {\n      return undefined;\n    },\n    toJSON: function () {\n      return {\n        id: id\n      };\n    }\n  }, _a[symbolObservable] = function () {\n    return this;\n  }, _a;\n}\n/**\r\n * Creates a deferred actor that is able to be invoked given the provided\r\n * invocation information in its `.meta` value.\r\n *\r\n * @param invokeDefinition The meta information needed to invoke the actor.\r\n */\n\nfunction createInvocableActor(invokeDefinition, machine, context, _event) {\n  var _a;\n\n  var invokeSrc = toInvokeSource(invokeDefinition.src);\n  var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];\n  var resolvedData = invokeDefinition.data ? mapContext(invokeDefinition.data, context, _event) : undefined;\n  var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore\n\n  tempActor.meta = invokeDefinition;\n  return tempActor;\n}\nfunction createDeferredActor(entity, id, data) {\n  var tempActor = createNullActor(id); // @ts-ignore\n\n  tempActor.deferred = true;\n\n  if (isMachine(entity)) {\n    // \"mute\" the existing service scope so potential spawned actors within the `.initialState` stay deferred here\n    var initialState_1 = tempActor.state = provide(undefined, function () {\n      return (data ? entity.withContext(data) : entity).initialState;\n    });\n\n    tempActor.getSnapshot = function () {\n      return initialState_1;\n    };\n  }\n\n  return tempActor;\n}\nfunction isActor(item) {\n  try {\n    return typeof item.send === 'function';\n  } catch (e) {\n    return false;\n  }\n}\nfunction isSpawnedActor(item) {\n  return isActor(item) && 'id' in item;\n} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now\n\nfunction toActorRef(actorRefLike) {\n  var _a;\n\n  return __assign((_a = {\n    subscribe: function () {\n      return {\n        unsubscribe: function () {\n          return void 0;\n        }\n      };\n    },\n    id: 'anonymous',\n    getSnapshot: function () {\n      return undefined;\n    }\n  }, _a[symbolObservable] = function () {\n    return this;\n  }, _a), actorRefLike);\n}\n\nexport { createDeferredActor, createInvocableActor, createNullActor, isActor, isSpawnedActor, toActorRef };\n","import { __values, __spreadArray, __read } from './_virtual/_tslib.js';\nimport { flatten } from './utils.js';\n\nvar isLeafNode = function (stateNode) {\n  return stateNode.type === 'atomic' || stateNode.type === 'final';\n};\nfunction getAllChildren(stateNode) {\n  return Object.keys(stateNode.states).map(function (key) {\n    return stateNode.states[key];\n  });\n}\nfunction getChildren(stateNode) {\n  return getAllChildren(stateNode).filter(function (sn) {\n    return sn.type !== 'history';\n  });\n}\nfunction getAllStateNodes(stateNode) {\n  var stateNodes = [stateNode];\n\n  if (isLeafNode(stateNode)) {\n    return stateNodes;\n  }\n\n  return stateNodes.concat(flatten(getChildren(stateNode).map(getAllStateNodes)));\n}\nfunction getConfiguration(prevStateNodes, stateNodes) {\n  var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n\n  var prevConfiguration = new Set(prevStateNodes);\n  var prevAdjList = getAdjList(prevConfiguration);\n  var configuration = new Set(stateNodes);\n\n  try {\n    // add all ancestors\n    for (var configuration_1 = __values(configuration), configuration_1_1 = configuration_1.next(); !configuration_1_1.done; configuration_1_1 = configuration_1.next()) {\n      var s = configuration_1_1.value;\n      var m = s.parent;\n\n      while (m && !configuration.has(m)) {\n        configuration.add(m);\n        m = m.parent;\n      }\n    }\n  } catch (e_1_1) {\n    e_1 = {\n      error: e_1_1\n    };\n  } finally {\n    try {\n      if (configuration_1_1 && !configuration_1_1.done && (_a = configuration_1.return)) _a.call(configuration_1);\n    } finally {\n      if (e_1) throw e_1.error;\n    }\n  }\n\n  var adjList = getAdjList(configuration);\n\n  try {\n    // add descendants\n    for (var configuration_2 = __values(configuration), configuration_2_1 = configuration_2.next(); !configuration_2_1.done; configuration_2_1 = configuration_2.next()) {\n      var s = configuration_2_1.value; // if previously active, add existing child nodes\n\n      if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n        if (prevAdjList.get(s)) {\n          prevAdjList.get(s).forEach(function (sn) {\n            return configuration.add(sn);\n          });\n        } else {\n          s.initialStateNodes.forEach(function (sn) {\n            return configuration.add(sn);\n          });\n        }\n      } else {\n        if (s.type === 'parallel') {\n          try {\n            for (var _e = (e_3 = void 0, __values(getChildren(s))), _f = _e.next(); !_f.done; _f = _e.next()) {\n              var child = _f.value;\n\n              if (!configuration.has(child)) {\n                configuration.add(child);\n\n                if (prevAdjList.get(child)) {\n                  prevAdjList.get(child).forEach(function (sn) {\n                    return configuration.add(sn);\n                  });\n                } else {\n                  child.initialStateNodes.forEach(function (sn) {\n                    return configuration.add(sn);\n                  });\n                }\n              }\n            }\n          } catch (e_3_1) {\n            e_3 = {\n              error: e_3_1\n            };\n          } finally {\n            try {\n              if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n            } finally {\n              if (e_3) throw e_3.error;\n            }\n          }\n        }\n      }\n    }\n  } catch (e_2_1) {\n    e_2 = {\n      error: e_2_1\n    };\n  } finally {\n    try {\n      if (configuration_2_1 && !configuration_2_1.done && (_b = configuration_2.return)) _b.call(configuration_2);\n    } finally {\n      if (e_2) throw e_2.error;\n    }\n  }\n\n  try {\n    // add all ancestors\n    for (var configuration_3 = __values(configuration), configuration_3_1 = configuration_3.next(); !configuration_3_1.done; configuration_3_1 = configuration_3.next()) {\n      var s = configuration_3_1.value;\n      var m = s.parent;\n\n      while (m && !configuration.has(m)) {\n        configuration.add(m);\n        m = m.parent;\n      }\n    }\n  } catch (e_4_1) {\n    e_4 = {\n      error: e_4_1\n    };\n  } finally {\n    try {\n      if (configuration_3_1 && !configuration_3_1.done && (_d = configuration_3.return)) _d.call(configuration_3);\n    } finally {\n      if (e_4) throw e_4.error;\n    }\n  }\n\n  return configuration;\n}\n\nfunction getValueFromAdj(baseNode, adjList) {\n  var childStateNodes = adjList.get(baseNode);\n\n  if (!childStateNodes) {\n    return {}; // todo: fix?\n  }\n\n  if (baseNode.type === 'compound') {\n    var childStateNode = childStateNodes[0];\n\n    if (childStateNode) {\n      if (isLeafNode(childStateNode)) {\n        return childStateNode.key;\n      }\n    } else {\n      return {};\n    }\n  }\n\n  var stateValue = {};\n  childStateNodes.forEach(function (csn) {\n    stateValue[csn.key] = getValueFromAdj(csn, adjList);\n  });\n  return stateValue;\n}\n\nfunction getAdjList(configuration) {\n  var e_5, _a;\n\n  var adjList = new Map();\n\n  try {\n    for (var configuration_4 = __values(configuration), configuration_4_1 = configuration_4.next(); !configuration_4_1.done; configuration_4_1 = configuration_4.next()) {\n      var s = configuration_4_1.value;\n\n      if (!adjList.has(s)) {\n        adjList.set(s, []);\n      }\n\n      if (s.parent) {\n        if (!adjList.has(s.parent)) {\n          adjList.set(s.parent, []);\n        }\n\n        adjList.get(s.parent).push(s);\n      }\n    }\n  } catch (e_5_1) {\n    e_5 = {\n      error: e_5_1\n    };\n  } finally {\n    try {\n      if (configuration_4_1 && !configuration_4_1.done && (_a = configuration_4.return)) _a.call(configuration_4);\n    } finally {\n      if (e_5) throw e_5.error;\n    }\n  }\n\n  return adjList;\n}\nfunction getValue(rootNode, configuration) {\n  var config = getConfiguration([rootNode], configuration);\n  return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction has(iterable, item) {\n  if (Array.isArray(iterable)) {\n    return iterable.some(function (member) {\n      return member === item;\n    });\n  }\n\n  if (iterable instanceof Set) {\n    return iterable.has(item);\n  }\n\n  return false; // TODO: fix\n}\nfunction nextEvents(configuration) {\n  return __spreadArray([], __read(new Set(flatten(__spreadArray([], __read(configuration.map(function (sn) {\n    return sn.ownEvents;\n  })), false)))), false);\n}\nfunction isInFinalState(configuration, stateNode) {\n  if (stateNode.type === 'compound') {\n    return getChildren(stateNode).some(function (s) {\n      return s.type === 'final' && has(configuration, s);\n    });\n  }\n\n  if (stateNode.type === 'parallel') {\n    return getChildren(stateNode).every(function (sn) {\n      return isInFinalState(configuration, sn);\n    });\n  }\n\n  return false;\n}\nfunction getMeta(configuration) {\n  if (configuration === void 0) {\n    configuration = [];\n  }\n\n  return configuration.reduce(function (acc, stateNode) {\n    if (stateNode.meta !== undefined) {\n      acc[stateNode.id] = stateNode.meta;\n    }\n\n    return acc;\n  }, {});\n}\nfunction getTagsFromConfiguration(configuration) {\n  return new Set(flatten(configuration.map(function (sn) {\n    return sn.tags;\n  })));\n}\n\nexport { getAdjList, getAllChildren, getAllStateNodes, getChildren, getConfiguration, getMeta, getTagsFromConfiguration, getValue, has, isInFinalState, isLeafNode, nextEvents };\n","import { __assign, __spreadArray, __read, __rest } from './_virtual/_tslib.js';\nimport { EMPTY_ACTIVITY_MAP } from './constants.js';\nimport { isString, matchesState, warn } from './utils.js';\nimport { getMeta, nextEvents } from './stateUtils.js';\nimport { initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nfunction stateValuesEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (a === undefined || b === undefined) {\n    return false;\n  }\n\n  if (isString(a) || isString(b)) {\n    return a === b;\n  }\n\n  var aKeys = Object.keys(a);\n  var bKeys = Object.keys(b);\n  return aKeys.length === bKeys.length && aKeys.every(function (key) {\n    return stateValuesEqual(a[key], b[key]);\n  });\n}\nfunction isStateConfig(state) {\n  if (typeof state !== 'object' || state === null) {\n    return false;\n  }\n\n  return 'value' in state && '_event' in state;\n}\n/**\r\n * @deprecated Use `isStateConfig(object)` or `state instanceof State` instead.\r\n */\n\nvar isState = isStateConfig;\nfunction bindActionToState(action, state) {\n  var exec = action.exec;\n\n  var boundAction = __assign(__assign({}, action), {\n    exec: exec !== undefined ? function () {\n      return exec(state.context, state.event, {\n        action: action,\n        state: state,\n        _event: state._event\n      });\n    } : undefined\n  });\n\n  return boundAction;\n}\n\nvar State =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n  /**\r\n   * Creates a new State instance.\r\n   * @param value The state value\r\n   * @param context The extended state\r\n   * @param historyValue The tree representing historical values of the state nodes\r\n   * @param history The previous state\r\n   * @param actions An array of action objects to execute as side-effects\r\n   * @param activities A mapping of activities and whether they are started (`true`) or stopped (`false`).\r\n   * @param meta\r\n   * @param events Internal event queue. Should be empty with run-to-completion semantics.\r\n   * @param configuration\r\n   */\n  function State(config) {\n    var _this = this;\n\n    var _a;\n\n    this.actions = [];\n    this.activities = EMPTY_ACTIVITY_MAP;\n    this.meta = {};\n    this.events = [];\n    this.value = config.value;\n    this.context = config.context;\n    this._event = config._event;\n    this._sessionid = config._sessionid;\n    this.event = this._event.data;\n    this.historyValue = config.historyValue;\n    this.history = config.history;\n    this.actions = config.actions || [];\n    this.activities = config.activities || EMPTY_ACTIVITY_MAP;\n    this.meta = getMeta(config.configuration);\n    this.events = config.events || [];\n    this.matches = this.matches.bind(this);\n    this.toStrings = this.toStrings.bind(this);\n    this.configuration = config.configuration;\n    this.transitions = config.transitions;\n    this.children = config.children;\n    this.done = !!config.done;\n    this.tags = (_a = Array.isArray(config.tags) ? new Set(config.tags) : config.tags) !== null && _a !== void 0 ? _a : new Set();\n    this.machine = config.machine;\n    Object.defineProperty(this, 'nextEvents', {\n      get: function () {\n        return nextEvents(_this.configuration);\n      }\n    });\n  }\n  /**\r\n   * Creates a new State instance for the given `stateValue` and `context`.\r\n   * @param stateValue\r\n   * @param context\r\n   */\n\n\n  State.from = function (stateValue, context) {\n    if (stateValue instanceof State) {\n      if (stateValue.context !== context) {\n        return new State({\n          value: stateValue.value,\n          context: context,\n          _event: stateValue._event,\n          _sessionid: null,\n          historyValue: stateValue.historyValue,\n          history: stateValue.history,\n          actions: [],\n          activities: stateValue.activities,\n          meta: {},\n          events: [],\n          configuration: [],\n          transitions: [],\n          children: {}\n        });\n      }\n\n      return stateValue;\n    }\n\n    var _event = initEvent;\n    return new State({\n      value: stateValue,\n      context: context,\n      _event: _event,\n      _sessionid: null,\n      historyValue: undefined,\n      history: undefined,\n      actions: [],\n      activities: undefined,\n      meta: undefined,\n      events: [],\n      configuration: [],\n      transitions: [],\n      children: {}\n    });\n  };\n  /**\r\n   * Creates a new State instance for the given `config`.\r\n   * @param config The state config\r\n   */\n\n\n  State.create = function (config) {\n    return new State(config);\n  };\n  /**\r\n   * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).\r\n   * @param stateValue\r\n   * @param context\r\n   */\n\n\n  State.inert = function (stateValue, context) {\n    if (stateValue instanceof State) {\n      if (!stateValue.actions.length) {\n        return stateValue;\n      }\n\n      var _event = initEvent;\n      return new State({\n        value: stateValue.value,\n        context: context,\n        _event: _event,\n        _sessionid: null,\n        historyValue: stateValue.historyValue,\n        history: stateValue.history,\n        activities: stateValue.activities,\n        configuration: stateValue.configuration,\n        transitions: [],\n        children: {}\n      });\n    }\n\n    return State.from(stateValue, context);\n  };\n  /**\r\n   * Returns an array of all the string leaf state node paths.\r\n   * @param stateValue\r\n   * @param delimiter The character(s) that separate each subpath in the string state node path.\r\n   */\n\n\n  State.prototype.toStrings = function (stateValue, delimiter) {\n    var _this = this;\n\n    if (stateValue === void 0) {\n      stateValue = this.value;\n    }\n\n    if (delimiter === void 0) {\n      delimiter = '.';\n    }\n\n    if (isString(stateValue)) {\n      return [stateValue];\n    }\n\n    var valueKeys = Object.keys(stateValue);\n    return valueKeys.concat.apply(valueKeys, __spreadArray([], __read(valueKeys.map(function (key) {\n      return _this.toStrings(stateValue[key], delimiter).map(function (s) {\n        return key + delimiter + s;\n      });\n    })), false));\n  };\n\n  State.prototype.toJSON = function () {\n    var _a = this;\n        _a.configuration;\n        _a.transitions;\n        var tags = _a.tags;\n        _a.machine;\n        var jsonValues = __rest(_a, [\"configuration\", \"transitions\", \"tags\", \"machine\"]);\n\n    return __assign(__assign({}, jsonValues), {\n      tags: Array.from(tags)\n    });\n  };\n\n  State.prototype.matches = function (parentStateValue) {\n    return matchesState(parentStateValue, this.value);\n  };\n  /**\r\n   * Whether the current state configuration has a state node with the specified `tag`.\r\n   * @param tag\r\n   */\n\n\n  State.prototype.hasTag = function (tag) {\n    return this.tags.has(tag);\n  };\n  /**\r\n   * Determines whether sending the `event` will cause a non-forbidden transition\r\n   * to be selected, even if the transitions have no actions nor\r\n   * change the state value.\r\n   *\r\n   * @param event The event to test\r\n   * @returns Whether the event will cause a transition\r\n   */\n\n\n  State.prototype.can = function (event) {\n    var _a;\n\n    if (IS_PRODUCTION) {\n      warn(!!this.machine, \"state.can(...) used outside of a machine-created State object; this will always return false.\");\n    }\n\n    var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);\n    return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) && // Check that at least one transition is not forbidden\n    transitionData.transitions.some(function (t) {\n      return t.target !== undefined || t.actions.length;\n    });\n  };\n\n  return State;\n}();\n\nexport { State, bindActionToState, isState, isStateConfig, stateValuesEqual };\n","import { __assign } from './_virtual/_tslib.js';\n\nvar defaultOptions = {\n  deferEvents: false\n};\n\nvar Scheduler =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n  function Scheduler(options) {\n    this.processingEvent = false;\n    this.queue = [];\n    this.initialized = false;\n    this.options = __assign(__assign({}, defaultOptions), options);\n  }\n\n  Scheduler.prototype.initialize = function (callback) {\n    this.initialized = true;\n\n    if (callback) {\n      if (!this.options.deferEvents) {\n        this.schedule(callback);\n        return;\n      }\n\n      this.process(callback);\n    }\n\n    this.flushEvents();\n  };\n\n  Scheduler.prototype.schedule = function (task) {\n    if (!this.initialized || this.processingEvent) {\n      this.queue.push(task);\n      return;\n    }\n\n    if (this.queue.length !== 0) {\n      throw new Error('Event queue should be empty when it is not processing events');\n    }\n\n    this.process(task);\n    this.flushEvents();\n  };\n\n  Scheduler.prototype.clear = function () {\n    this.queue = [];\n  };\n\n  Scheduler.prototype.flushEvents = function () {\n    var nextCallback = this.queue.shift();\n\n    while (nextCallback) {\n      this.process(nextCallback);\n      nextCallback = this.queue.shift();\n    }\n  };\n\n  Scheduler.prototype.process = function (callback) {\n    this.processingEvent = true;\n\n    try {\n      callback();\n    } catch (e) {\n      // there is no use to keep the future events\n      // as the situation is not anymore the same\n      this.clear();\n      throw e;\n    } finally {\n      this.processingEvent = false;\n    }\n  };\n\n  return Scheduler;\n}();\n\nexport { Scheduler };\n","var children = /*#__PURE__*/new Map();\nvar sessionIdIndex = 0;\nvar registry = {\n  bookId: function () {\n    return \"x:\".concat(sessionIdIndex++);\n  },\n  register: function (id, actor) {\n    children.set(id, actor);\n    return id;\n  },\n  get: function (id) {\n    return children.get(id);\n  },\n  free: function (id) {\n    children.delete(id);\n  }\n};\n\nexport { registry };\n","import { IS_PRODUCTION } from './environment.js';\n\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') {\n    return globalThis;\n  }\n\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n\n  if (!IS_PRODUCTION) {\n    console.warn('XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues');\n  }\n}\n\nfunction getDevTools() {\n  var global = getGlobal();\n\n  if (global && '__xstate__' in global) {\n    return global.__xstate__;\n  }\n\n  return undefined;\n}\n\nfunction registerService(service) {\n  if (!getGlobal()) {\n    return;\n  }\n\n  var devTools = getDevTools();\n\n  if (devTools) {\n    devTools.register(service);\n  }\n}\n\nexport { getGlobal, registerService };\n","import { error, doneInvoke } from './actions.js';\nimport { toActorRef } from './Actor.js';\nimport { toObserver } from './utils.js';\n\n/**\r\n * Returns an actor behavior from a reducer and its initial state.\r\n *\r\n * @param transition The pure reducer that returns the next state given the current state and event.\r\n * @param initialState The initial state of the reducer.\r\n * @returns An actor behavior\r\n */\n\nfunction fromReducer(transition, initialState) {\n  return {\n    transition: transition,\n    initialState: initialState\n  };\n}\nfunction fromPromise(promiseFn) {\n  var initialState = {\n    error: undefined,\n    data: undefined,\n    status: 'pending'\n  };\n  return {\n    transition: function (state, event, _a) {\n      var parent = _a.parent,\n          id = _a.id,\n          observers = _a.observers;\n\n      switch (event.type) {\n        case 'fulfill':\n          parent === null || parent === void 0 ? void 0 : parent.send(doneInvoke(id, event.data));\n          return {\n            error: undefined,\n            data: event.data,\n            status: 'fulfilled'\n          };\n\n        case 'reject':\n          parent === null || parent === void 0 ? void 0 : parent.send(error(id, event.error));\n          observers.forEach(function (observer) {\n            observer.error(event.error);\n          });\n          return {\n            error: event.error,\n            data: undefined,\n            status: 'rejected'\n          };\n\n        default:\n          return state;\n      }\n    },\n    initialState: initialState,\n    start: function (_a) {\n      var self = _a.self;\n      promiseFn().then(function (data) {\n        self.send({\n          type: 'fulfill',\n          data: data\n        });\n      }, function (reason) {\n        self.send({\n          type: 'reject',\n          error: reason\n        });\n      });\n      return initialState;\n    }\n  };\n}\nfunction spawnBehavior(behavior, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var state = behavior.initialState;\n  var observers = new Set();\n  var mailbox = [];\n  var flushing = false;\n\n  var flush = function () {\n    if (flushing) {\n      return;\n    }\n\n    flushing = true;\n\n    while (mailbox.length > 0) {\n      var event_1 = mailbox.shift();\n      state = behavior.transition(state, event_1, actorCtx);\n      observers.forEach(function (observer) {\n        return observer.next(state);\n      });\n    }\n\n    flushing = false;\n  };\n\n  var actor = toActorRef({\n    id: options.id,\n    send: function (event) {\n      mailbox.push(event);\n      flush();\n    },\n    getSnapshot: function () {\n      return state;\n    },\n    subscribe: function (next, handleError, complete) {\n      var observer = toObserver(next, handleError, complete);\n      observers.add(observer);\n      observer.next(state);\n      return {\n        unsubscribe: function () {\n          observers.delete(observer);\n        }\n      };\n    }\n  });\n  var actorCtx = {\n    parent: options.parent,\n    self: actor,\n    id: options.id || 'anonymous',\n    observers: observers\n  };\n  state = behavior.start ? behavior.start(actorCtx) : state;\n  return actor;\n}\n\nexport { fromPromise, fromReducer, spawnBehavior };\n","import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { SpecialTargets, ActionTypes } from './types.js';\nimport { isStateConfig, State, bindActionToState } from './State.js';\nimport { errorPlatform, update, error as error$1, log, stop, start, cancel, send, raise } from './actionTypes.js';\nimport { initEvent, doneInvoke, toActionObjects, resolveActions, error, getActionFunction } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { warn, mapContext, toObserver, isFunction, toSCXMLEvent, flatten, isRaisableAction, isPromiseLike, isObservable, isMachine, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, toInvokeSource, uniqueId } from './utils.js';\nimport { Scheduler } from './scheduler.js';\nimport { createDeferredActor, isSpawnedActor } from './Actor.js';\nimport { registry } from './registry.js';\nimport { getGlobal, registerService } from './devTools.js';\nimport { provide, consume } from './serviceScope.js';\nimport { spawnBehavior } from './behaviors.js';\n\nvar DEFAULT_SPAWN_OPTIONS = {\n  sync: false,\n  autoForward: false\n};\nvar InterpreterStatus;\n\n(function (InterpreterStatus) {\n  InterpreterStatus[InterpreterStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n  InterpreterStatus[InterpreterStatus[\"Running\"] = 1] = \"Running\";\n  InterpreterStatus[InterpreterStatus[\"Stopped\"] = 2] = \"Stopped\";\n})(InterpreterStatus || (InterpreterStatus = {}));\n\nvar Interpreter =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n  /**\r\n   * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.\r\n   *\r\n   * @param machine The machine to be interpreted\r\n   * @param options Interpreter options\r\n   */\n  function Interpreter(machine, options) {\n    if (options === void 0) {\n      options = Interpreter.defaultOptions;\n    }\n\n    var _this = this;\n\n    this.machine = machine;\n    this.delayedEventsMap = {};\n    this.listeners = new Set();\n    this.contextListeners = new Set();\n    this.stopListeners = new Set();\n    this.doneListeners = new Set();\n    this.eventListeners = new Set();\n    this.sendListeners = new Set();\n    /**\r\n     * Whether the service is started.\r\n     */\n\n    this.initialized = false;\n    this.status = InterpreterStatus.NotStarted;\n    this.children = new Map();\n    this.forwardTo = new Set();\n    this._outgoingQueue = [];\n    /**\r\n     * Alias for Interpreter.prototype.start\r\n     */\n\n    this.init = this.start;\n    /**\r\n     * Sends an event to the running interpreter to trigger a transition.\r\n     *\r\n     * An array of events (batched) can be sent as well, which will send all\r\n     * batched events to the running interpreter. The listeners will be\r\n     * notified only **once** when all events are processed.\r\n     *\r\n     * @param event The event(s) to send\r\n     */\n\n    this.send = function (event, payload) {\n      if (isArray(event)) {\n        _this.batch(event);\n\n        return _this.state;\n      }\n\n      var _event = toSCXMLEvent(toEventObject(event, payload));\n\n      if (_this.status === InterpreterStatus.Stopped) {\n        // do nothing\n        if (!IS_PRODUCTION) {\n          warn(false, \"Event \\\"\".concat(_event.name, \"\\\" was sent to stopped service \\\"\").concat(_this.machine.id, \"\\\". This service has already reached its final state, and will not transition.\\nEvent: \").concat(JSON.stringify(_event.data)));\n        }\n\n        return _this.state;\n      }\n\n      if (_this.status !== InterpreterStatus.Running && !_this.options.deferEvents) {\n        throw new Error(\"Event \\\"\".concat(_event.name, \"\\\" was sent to uninitialized service \\\"\").concat(_this.machine.id // tslint:disable-next-line:max-line-length\n        , \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\\nEvent: \").concat(JSON.stringify(_event.data)));\n      }\n\n      _this.scheduler.schedule(function () {\n        // Forward copy of event to child actors\n        _this.forward(_event);\n\n        var nextState = _this._nextState(_event);\n\n        _this.update(nextState, _event);\n      });\n\n      return _this._state; // TODO: deprecate (should return void)\n      // tslint:disable-next-line:semicolon\n    };\n\n    this.sendTo = function (event, to, immediate) {\n      var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);\n      var target = isParent ? _this.parent : isString(to) ? to === SpecialTargets.Internal ? _this : _this.children.get(to) || registry.get(to) : isActor(to) ? to : undefined;\n\n      if (!target) {\n        if (!isParent) {\n          throw new Error(\"Unable to send event to child '\".concat(to, \"' from service '\").concat(_this.id, \"'.\"));\n        } // tslint:disable-next-line:no-console\n\n\n        if (!IS_PRODUCTION) {\n          warn(false, \"Service '\".concat(_this.id, \"' has no parent: unable to send event \").concat(event.type));\n        }\n\n        return;\n      }\n\n      if ('machine' in target) {\n        // perhaps those events should be rejected in the parent\n        // but atm it doesn't have easy access to all of the information that is required to do it reliably\n        if (_this.status !== InterpreterStatus.Stopped || _this.parent !== target || // we need to send events to the parent from exit handlers of a machine that reached its final state\n        _this.state.done) {\n          // Send SCXML events to machines\n          var scxmlEvent = __assign(__assign({}, event), {\n            name: event.name === error$1 ? \"\".concat(error(_this.id)) : event.name,\n            origin: _this.sessionId\n          });\n\n          if (!immediate && _this.machine.config.predictableActionArguments) {\n            _this._outgoingQueue.push([target, scxmlEvent]);\n          } else {\n            target.send(scxmlEvent);\n          }\n        }\n      } else {\n        // Send normal events to other targets\n        if (!immediate && _this.machine.config.predictableActionArguments) {\n          _this._outgoingQueue.push([target, event.data]);\n        } else {\n          target.send(event.data);\n        }\n      }\n    };\n\n    this._exec = function (action, context, _event, actionFunctionMap) {\n      if (actionFunctionMap === void 0) {\n        actionFunctionMap = _this.machine.options.actions;\n      }\n\n      var actionOrExec = action.exec || getActionFunction(action.type, actionFunctionMap);\n      var exec = isFunction(actionOrExec) ? actionOrExec : actionOrExec ? actionOrExec.exec : action.exec;\n\n      if (exec) {\n        try {\n          return exec(context, _event.data, !_this.machine.config.predictableActionArguments ? {\n            action: action,\n            state: _this.state,\n            _event: _event\n          } : {\n            action: action,\n            _event: _event\n          });\n        } catch (err) {\n          if (_this.parent) {\n            _this.parent.send({\n              type: 'xstate.error',\n              data: err\n            });\n          }\n\n          throw err;\n        }\n      }\n\n      switch (action.type) {\n        case raise:\n          {\n            // if raise action reached the interpreter then it's a delayed one\n            var sendAction_1 = action;\n\n            _this.defer(sendAction_1);\n\n            break;\n          }\n\n        case send:\n          var sendAction = action;\n\n          if (typeof sendAction.delay === 'number') {\n            _this.defer(sendAction);\n\n            return;\n          } else {\n            if (sendAction.to) {\n              _this.sendTo(sendAction._event, sendAction.to, _event === initEvent);\n            } else {\n              _this.send(sendAction._event);\n            }\n          }\n\n          break;\n\n        case cancel:\n          _this.cancel(action.sendId);\n\n          break;\n\n        case start:\n          {\n            if (_this.status !== InterpreterStatus.Running) {\n              return;\n            }\n\n            var activity = action.activity; // If the activity will be stopped right after it's started\n            // (such as in transient states)\n            // don't bother starting the activity.\n\n            if ( // in v4 with `predictableActionArguments` invokes are called eagerly when the `this.state` still points to the previous state\n            !_this.machine.config.predictableActionArguments && !_this.state.activities[activity.id || activity.type]) {\n              break;\n            } // Invoked services\n\n\n            if (activity.type === ActionTypes.Invoke) {\n              var invokeSource = toInvokeSource(activity.src);\n              var serviceCreator = _this.machine.options.services ? _this.machine.options.services[invokeSource.type] : undefined;\n              var id = activity.id,\n                  data = activity.data;\n\n              if (!IS_PRODUCTION) {\n                warn(!('forward' in activity), // tslint:disable-next-line:max-line-length\n                \"`forward` property is deprecated (found in invocation of '\".concat(activity.src, \"' in in machine '\").concat(_this.machine.id, \"'). \") + \"Please use `autoForward` instead.\");\n              }\n\n              var autoForward = 'autoForward' in activity ? activity.autoForward : !!activity.forward;\n\n              if (!serviceCreator) {\n                // tslint:disable-next-line:no-console\n                if (!IS_PRODUCTION) {\n                  warn(false, \"No service found for invocation '\".concat(activity.src, \"' in machine '\").concat(_this.machine.id, \"'.\"));\n                }\n\n                return;\n              }\n\n              var resolvedData = data ? mapContext(data, context, _event) : undefined;\n\n              if (typeof serviceCreator === 'string') {\n                // TODO: warn\n                return;\n              }\n\n              var source = isFunction(serviceCreator) ? serviceCreator(context, _event.data, {\n                data: resolvedData,\n                src: invokeSource,\n                meta: activity.meta\n              }) : serviceCreator;\n\n              if (!source) {\n                // TODO: warn?\n                return;\n              }\n\n              var options = void 0;\n\n              if (isMachine(source)) {\n                source = resolvedData ? source.withContext(resolvedData) : source;\n                options = {\n                  autoForward: autoForward\n                };\n              }\n\n              _this.spawn(source, id, options);\n            } else {\n              _this.spawnActivity(activity);\n            }\n\n            break;\n          }\n\n        case stop:\n          {\n            _this.stopChild(action.activity.id);\n\n            break;\n          }\n\n        case log:\n          var _a = action,\n              label = _a.label,\n              value = _a.value;\n\n          if (label) {\n            _this.logger(label, value);\n          } else {\n            _this.logger(value);\n          }\n\n          break;\n\n        default:\n          if (!IS_PRODUCTION) {\n            warn(false, \"No implementation found for action type '\".concat(action.type, \"'\"));\n          }\n\n          break;\n      }\n    };\n\n    var resolvedOptions = __assign(__assign({}, Interpreter.defaultOptions), options);\n\n    var clock = resolvedOptions.clock,\n        logger = resolvedOptions.logger,\n        parent = resolvedOptions.parent,\n        id = resolvedOptions.id;\n    var resolvedId = id !== undefined ? id : machine.id;\n    this.id = resolvedId;\n    this.logger = logger;\n    this.clock = clock;\n    this.parent = parent;\n    this.options = resolvedOptions;\n    this.scheduler = new Scheduler({\n      deferEvents: this.options.deferEvents\n    });\n    this.sessionId = registry.bookId();\n  }\n\n  Object.defineProperty(Interpreter.prototype, \"initialState\", {\n    get: function () {\n      var _this = this;\n\n      if (this._initialState) {\n        return this._initialState;\n      }\n\n      return provide(this, function () {\n        _this._initialState = _this.machine.initialState;\n        return _this._initialState;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Interpreter.prototype, \"state\", {\n    /**\r\n     * @deprecated Use `.getSnapshot()` instead.\r\n     */\n    get: function () {\n      if (!IS_PRODUCTION) {\n        warn(this.status !== InterpreterStatus.NotStarted, \"Attempted to read state from uninitialized service '\".concat(this.id, \"'. Make sure the service is started first.\"));\n      }\n\n      return this._state;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\r\n   * Executes the actions of the given state, with that state's `context` and `event`.\r\n   *\r\n   * @param state The state whose actions will be executed\r\n   * @param actionsConfig The action implementations to use\r\n   */\n\n  Interpreter.prototype.execute = function (state, actionsConfig) {\n    var e_1, _a;\n\n    try {\n      for (var _b = __values(state.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n        var action = _c.value;\n        this.exec(action, state, actionsConfig);\n      }\n    } catch (e_1_1) {\n      e_1 = {\n        error: e_1_1\n      };\n    } finally {\n      try {\n        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n      } finally {\n        if (e_1) throw e_1.error;\n      }\n    }\n  };\n\n  Interpreter.prototype.update = function (state, _event) {\n    var e_2, _a, e_3, _b, e_4, _c, e_5, _d;\n\n    var _this = this; // Attach session ID to state\n\n\n    state._sessionid = this.sessionId; // Update state\n\n    this._state = state; // Execute actions\n\n    if ((!this.machine.config.predictableActionArguments || // this is currently required to execute initial actions as the `initialState` gets cached\n    // we can't just recompute it (and execute actions while doing so) because we try to preserve identity of actors created within initial assigns\n    _event === initEvent) && this.options.execute) {\n      this.execute(this.state);\n    } else {\n      var item = void 0;\n\n      while (item = this._outgoingQueue.shift()) {\n        item[0].send(item[1]);\n      }\n    } // Update children\n\n\n    this.children.forEach(function (child) {\n      _this.state.children[child.id] = child;\n    }); // Dev tools\n\n    if (this.devTools) {\n      this.devTools.send(_event.data, state);\n    } // Execute listeners\n\n\n    if (state.event) {\n      try {\n        for (var _e = __values(this.eventListeners), _f = _e.next(); !_f.done; _f = _e.next()) {\n          var listener = _f.value;\n          listener(state.event);\n        }\n      } catch (e_2_1) {\n        e_2 = {\n          error: e_2_1\n        };\n      } finally {\n        try {\n          if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n        } finally {\n          if (e_2) throw e_2.error;\n        }\n      }\n    }\n\n    try {\n      for (var _g = __values(this.listeners), _h = _g.next(); !_h.done; _h = _g.next()) {\n        var listener = _h.value;\n        listener(state, state.event);\n      }\n    } catch (e_3_1) {\n      e_3 = {\n        error: e_3_1\n      };\n    } finally {\n      try {\n        if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n      } finally {\n        if (e_3) throw e_3.error;\n      }\n    }\n\n    try {\n      for (var _j = __values(this.contextListeners), _k = _j.next(); !_k.done; _k = _j.next()) {\n        var contextListener = _k.value;\n        contextListener(this.state.context, this.state.history ? this.state.history.context : undefined);\n      }\n    } catch (e_4_1) {\n      e_4 = {\n        error: e_4_1\n      };\n    } finally {\n      try {\n        if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n      } finally {\n        if (e_4) throw e_4.error;\n      }\n    }\n\n    if (this.state.done) {\n      // get final child state node\n      var finalChildStateNode = state.configuration.find(function (sn) {\n        return sn.type === 'final' && sn.parent === _this.machine;\n      });\n      var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;\n      this._doneEvent = doneInvoke(this.id, doneData);\n\n      try {\n        for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {\n          var listener = _m.value;\n          listener(this._doneEvent);\n        }\n      } catch (e_5_1) {\n        e_5 = {\n          error: e_5_1\n        };\n      } finally {\n        try {\n          if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n        } finally {\n          if (e_5) throw e_5.error;\n        }\n      }\n\n      this._stop();\n\n      this._stopChildren();\n\n      registry.free(this.sessionId);\n    }\n  };\n  /*\r\n   * Adds a listener that is notified whenever a state transition happens. The listener is called with\r\n   * the next state and the event object that caused the state transition.\r\n   *\r\n   * @param listener The state listener\r\n   */\n\n\n  Interpreter.prototype.onTransition = function (listener) {\n    this.listeners.add(listener); // Send current state to listener\n\n    if (this.status === InterpreterStatus.Running) {\n      listener(this.state, this.state.event);\n    }\n\n    return this;\n  };\n\n  Interpreter.prototype.subscribe = function (nextListenerOrObserver, _, // TODO: error listener\n  completeListener) {\n    var _this = this;\n\n    var observer = toObserver(nextListenerOrObserver, _, completeListener);\n    this.listeners.add(observer.next); // Send current state to listener\n\n    if (this.status !== InterpreterStatus.NotStarted) {\n      observer.next(this.state);\n    }\n\n    var completeOnce = function () {\n      _this.doneListeners.delete(completeOnce);\n\n      _this.stopListeners.delete(completeOnce);\n\n      observer.complete();\n    };\n\n    if (this.status === InterpreterStatus.Stopped) {\n      observer.complete();\n    } else {\n      this.onDone(completeOnce);\n      this.onStop(completeOnce);\n    }\n\n    return {\n      unsubscribe: function () {\n        _this.listeners.delete(observer.next);\n\n        _this.doneListeners.delete(completeOnce);\n\n        _this.stopListeners.delete(completeOnce);\n      }\n    };\n  };\n  /**\r\n   * Adds an event listener that is notified whenever an event is sent to the running interpreter.\r\n   * @param listener The event listener\r\n   */\n\n\n  Interpreter.prototype.onEvent = function (listener) {\n    this.eventListeners.add(listener);\n    return this;\n  };\n  /**\r\n   * Adds an event listener that is notified whenever a `send` event occurs.\r\n   * @param listener The event listener\r\n   */\n\n\n  Interpreter.prototype.onSend = function (listener) {\n    this.sendListeners.add(listener);\n    return this;\n  };\n  /**\r\n   * Adds a context listener that is notified whenever the state context changes.\r\n   * @param listener The context listener\r\n   */\n\n\n  Interpreter.prototype.onChange = function (listener) {\n    this.contextListeners.add(listener);\n    return this;\n  };\n  /**\r\n   * Adds a listener that is notified when the machine is stopped.\r\n   * @param listener The listener\r\n   */\n\n\n  Interpreter.prototype.onStop = function (listener) {\n    this.stopListeners.add(listener);\n    return this;\n  };\n  /**\r\n   * Adds a state listener that is notified when the statechart has reached its final state.\r\n   * @param listener The state listener\r\n   */\n\n\n  Interpreter.prototype.onDone = function (listener) {\n    if (this.status === InterpreterStatus.Stopped && this._doneEvent) {\n      listener(this._doneEvent);\n    } else {\n      this.doneListeners.add(listener);\n    }\n\n    return this;\n  };\n  /**\r\n   * Removes a listener.\r\n   * @param listener The listener to remove\r\n   */\n\n\n  Interpreter.prototype.off = function (listener) {\n    this.listeners.delete(listener);\n    this.eventListeners.delete(listener);\n    this.sendListeners.delete(listener);\n    this.stopListeners.delete(listener);\n    this.doneListeners.delete(listener);\n    this.contextListeners.delete(listener);\n    return this;\n  };\n  /**\r\n   * Starts the interpreter from the given state, or the initial state.\r\n   * @param initialState The state to start the statechart from\r\n   */\n\n\n  Interpreter.prototype.start = function (initialState) {\n    var _this = this;\n\n    if (this.status === InterpreterStatus.Running) {\n      // Do not restart the service if it is already started\n      return this;\n    } // yes, it's a hack but we need the related cache to be populated for some things to work (like delayed transitions)\n    // this is usually called by `machine.getInitialState` but if we rehydrate from a state we might bypass this call\n    // we also don't want to call this method here as it resolves the full initial state which might involve calling assign actions\n    // and that could potentially lead to some unwanted side-effects (even such as creating some rogue actors)\n\n\n    this.machine._init();\n\n    registry.register(this.sessionId, this);\n    this.initialized = true;\n    this.status = InterpreterStatus.Running;\n    var resolvedState = initialState === undefined ? this.initialState : provide(this, function () {\n      return isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.from(initialState, _this.machine.context));\n    });\n\n    if (this.options.devTools) {\n      this.attachDev();\n    }\n\n    this.scheduler.initialize(function () {\n      _this.update(resolvedState, initEvent);\n    });\n    return this;\n  };\n\n  Interpreter.prototype._stopChildren = function () {\n    // TODO: think about converting those to actions\n    this.children.forEach(function (child) {\n      if (isFunction(child.stop)) {\n        child.stop();\n      }\n    });\n    this.children.clear();\n  };\n\n  Interpreter.prototype._stop = function () {\n    var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n\n    try {\n      for (var _f = __values(this.listeners), _g = _f.next(); !_g.done; _g = _f.next()) {\n        var listener = _g.value;\n        this.listeners.delete(listener);\n      }\n    } catch (e_6_1) {\n      e_6 = {\n        error: e_6_1\n      };\n    } finally {\n      try {\n        if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n      } finally {\n        if (e_6) throw e_6.error;\n      }\n    }\n\n    try {\n      for (var _h = __values(this.stopListeners), _j = _h.next(); !_j.done; _j = _h.next()) {\n        var listener = _j.value; // call listener, then remove\n\n        listener();\n        this.stopListeners.delete(listener);\n      }\n    } catch (e_7_1) {\n      e_7 = {\n        error: e_7_1\n      };\n    } finally {\n      try {\n        if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n      } finally {\n        if (e_7) throw e_7.error;\n      }\n    }\n\n    try {\n      for (var _k = __values(this.contextListeners), _l = _k.next(); !_l.done; _l = _k.next()) {\n        var listener = _l.value;\n        this.contextListeners.delete(listener);\n      }\n    } catch (e_8_1) {\n      e_8 = {\n        error: e_8_1\n      };\n    } finally {\n      try {\n        if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n      } finally {\n        if (e_8) throw e_8.error;\n      }\n    }\n\n    try {\n      for (var _m = __values(this.doneListeners), _o = _m.next(); !_o.done; _o = _m.next()) {\n        var listener = _o.value;\n        this.doneListeners.delete(listener);\n      }\n    } catch (e_9_1) {\n      e_9 = {\n        error: e_9_1\n      };\n    } finally {\n      try {\n        if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n      } finally {\n        if (e_9) throw e_9.error;\n      }\n    }\n\n    if (!this.initialized) {\n      // Interpreter already stopped; do nothing\n      return this;\n    }\n\n    this.initialized = false;\n    this.status = InterpreterStatus.Stopped;\n    this._initialState = undefined;\n\n    try {\n      // we are going to stop within the current sync frame\n      // so we can safely just cancel this here as nothing async should be fired anyway\n      for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {\n        var key = _q.value;\n        this.clock.clearTimeout(this.delayedEventsMap[key]);\n      }\n    } catch (e_10_1) {\n      e_10 = {\n        error: e_10_1\n      };\n    } finally {\n      try {\n        if (_q && !_q.done && (_e = _p.return)) _e.call(_p);\n      } finally {\n        if (e_10) throw e_10.error;\n      }\n    } // clear everything that might be enqueued\n\n\n    this.scheduler.clear();\n    this.scheduler = new Scheduler({\n      deferEvents: this.options.deferEvents\n    });\n  };\n  /**\r\n   * Stops the interpreter and unsubscribe all listeners.\r\n   *\r\n   * This will also notify the `onStop` listeners.\r\n   */\n\n\n  Interpreter.prototype.stop = function () {\n    // TODO: add warning for stopping non-root interpreters\n    var _this = this; // grab the current scheduler as it will be replaced in _stop\n\n\n    var scheduler = this.scheduler;\n\n    this._stop(); // let what is currently processed to be finished\n\n\n    scheduler.schedule(function () {\n      var _a;\n\n      if ((_a = _this._state) === null || _a === void 0 ? void 0 : _a.done) {\n        return;\n      } // it feels weird to handle this here but we need to handle this even slightly \"out of band\"\n\n\n      var _event = toSCXMLEvent({\n        type: 'xstate.stop'\n      });\n\n      var nextState = provide(_this, function () {\n        var exitActions = flatten(__spreadArray([], __read(_this.state.configuration), false).sort(function (a, b) {\n          return b.order - a.order;\n        }).map(function (stateNode) {\n          return toActionObjects(stateNode.onExit, _this.machine.options.actions);\n        }));\n\n        var _a = __read(resolveActions(_this.machine, _this.state, _this.state.context, _event, [{\n          type: 'exit',\n          actions: exitActions\n        }], _this.machine.config.predictableActionArguments ? _this._exec : undefined, _this.machine.config.predictableActionArguments || _this.machine.config.preserveActionOrder), 2),\n            resolvedActions = _a[0],\n            updatedContext = _a[1];\n\n        var newState = new State({\n          value: _this.state.value,\n          context: updatedContext,\n          _event: _event,\n          _sessionid: _this.sessionId,\n          historyValue: undefined,\n          history: _this.state,\n          actions: resolvedActions.filter(function (action) {\n            return !isRaisableAction(action);\n          }),\n          activities: {},\n          events: [],\n          configuration: [],\n          transitions: [],\n          children: {},\n          done: _this.state.done,\n          tags: _this.state.tags,\n          machine: _this.machine\n        });\n        newState.changed = true;\n        return newState;\n      });\n\n      _this.update(nextState, _event);\n\n      _this._stopChildren();\n\n      registry.free(_this.sessionId);\n    });\n    return this;\n  };\n\n  Interpreter.prototype.batch = function (events) {\n    var _this = this;\n\n    if (this.status === InterpreterStatus.NotStarted && this.options.deferEvents) {\n      // tslint:disable-next-line:no-console\n      if (!IS_PRODUCTION) {\n        warn(false, \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\" and are deferred. Make sure .start() is called for this service.\\nEvent: \").concat(JSON.stringify(event)));\n      }\n    } else if (this.status !== InterpreterStatus.Running) {\n      throw new Error( // tslint:disable-next-line:max-line-length\n      \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\"));\n    }\n\n    if (!events.length) {\n      return;\n    }\n\n    var exec = !!this.machine.config.predictableActionArguments && this._exec;\n    this.scheduler.schedule(function () {\n      var e_11, _a;\n\n      var nextState = _this.state;\n      var batchChanged = false;\n      var batchedActions = [];\n\n      var _loop_1 = function (event_1) {\n        var _event = toSCXMLEvent(event_1);\n\n        _this.forward(_event);\n\n        nextState = provide(_this, function () {\n          return _this.machine.transition(nextState, _event, undefined, exec || undefined);\n        });\n        batchedActions.push.apply(batchedActions, __spreadArray([], __read(_this.machine.config.predictableActionArguments ? nextState.actions : nextState.actions.map(function (a) {\n          return bindActionToState(a, nextState);\n        })), false));\n        batchChanged = batchChanged || !!nextState.changed;\n      };\n\n      try {\n        for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\n          var event_1 = events_1_1.value;\n\n          _loop_1(event_1);\n        }\n      } catch (e_11_1) {\n        e_11 = {\n          error: e_11_1\n        };\n      } finally {\n        try {\n          if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\n        } finally {\n          if (e_11) throw e_11.error;\n        }\n      }\n\n      nextState.changed = batchChanged;\n      nextState.actions = batchedActions;\n\n      _this.update(nextState, toSCXMLEvent(events[events.length - 1]));\n    });\n  };\n  /**\r\n   * Returns a send function bound to this interpreter instance.\r\n   *\r\n   * @param event The event to be sent by the sender.\r\n   */\n\n\n  Interpreter.prototype.sender = function (event) {\n    return this.send.bind(this, event);\n  };\n\n  Interpreter.prototype._nextState = function (event, exec) {\n    var _this = this;\n\n    if (exec === void 0) {\n      exec = !!this.machine.config.predictableActionArguments && this._exec;\n    }\n\n    var _event = toSCXMLEvent(event);\n\n    if (_event.name.indexOf(errorPlatform) === 0 && !this.state.nextEvents.some(function (nextEvent) {\n      return nextEvent.indexOf(errorPlatform) === 0;\n    })) {\n      throw _event.data.data;\n    }\n\n    var nextState = provide(this, function () {\n      return _this.machine.transition(_this.state, _event, undefined, exec || undefined);\n    });\n    return nextState;\n  };\n  /**\r\n   * Returns the next state given the interpreter's current state and the event.\r\n   *\r\n   * This is a pure method that does _not_ update the interpreter's state.\r\n   *\r\n   * @param event The event to determine the next state\r\n   */\n\n\n  Interpreter.prototype.nextState = function (event) {\n    return this._nextState(event, false);\n  };\n\n  Interpreter.prototype.forward = function (event) {\n    var e_12, _a;\n\n    try {\n      for (var _b = __values(this.forwardTo), _c = _b.next(); !_c.done; _c = _b.next()) {\n        var id = _c.value;\n        var child = this.children.get(id);\n\n        if (!child) {\n          throw new Error(\"Unable to forward event '\".concat(event, \"' from interpreter '\").concat(this.id, \"' to nonexistant child '\").concat(id, \"'.\"));\n        }\n\n        child.send(event);\n      }\n    } catch (e_12_1) {\n      e_12 = {\n        error: e_12_1\n      };\n    } finally {\n      try {\n        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n      } finally {\n        if (e_12) throw e_12.error;\n      }\n    }\n  };\n\n  Interpreter.prototype.defer = function (sendAction) {\n    var _this = this;\n\n    var timerId = this.clock.setTimeout(function () {\n      if ('to' in sendAction && sendAction.to) {\n        _this.sendTo(sendAction._event, sendAction.to, true);\n      } else {\n        _this.send(sendAction._event);\n      }\n    }, sendAction.delay);\n\n    if (sendAction.id) {\n      this.delayedEventsMap[sendAction.id] = timerId;\n    }\n  };\n\n  Interpreter.prototype.cancel = function (sendId) {\n    this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n    delete this.delayedEventsMap[sendId];\n  };\n\n  Interpreter.prototype.exec = function (action, state, actionFunctionMap) {\n    if (actionFunctionMap === void 0) {\n      actionFunctionMap = this.machine.options.actions;\n    }\n\n    this._exec(action, state.context, state._event, actionFunctionMap);\n  };\n\n  Interpreter.prototype.removeChild = function (childId) {\n    var _a;\n\n    this.children.delete(childId);\n    this.forwardTo.delete(childId); // this.state might not exist at the time this is called,\n    // such as when a child is added then removed while initializing the state\n\n    (_a = this.state) === null || _a === void 0 ? true : delete _a.children[childId];\n  };\n\n  Interpreter.prototype.stopChild = function (childId) {\n    var child = this.children.get(childId);\n\n    if (!child) {\n      return;\n    }\n\n    this.removeChild(childId);\n\n    if (isFunction(child.stop)) {\n      child.stop();\n    }\n  };\n\n  Interpreter.prototype.spawn = function (entity, name, options) {\n    if (this.status !== InterpreterStatus.Running) {\n      return createDeferredActor(entity, name);\n    }\n\n    if (isPromiseLike(entity)) {\n      return this.spawnPromise(Promise.resolve(entity), name);\n    } else if (isFunction(entity)) {\n      return this.spawnCallback(entity, name);\n    } else if (isSpawnedActor(entity)) {\n      return this.spawnActor(entity, name);\n    } else if (isObservable(entity)) {\n      return this.spawnObservable(entity, name);\n    } else if (isMachine(entity)) {\n      return this.spawnMachine(entity, __assign(__assign({}, options), {\n        id: name\n      }));\n    } else if (isBehavior(entity)) {\n      return this.spawnBehavior(entity, name);\n    } else {\n      throw new Error(\"Unable to spawn entity \\\"\".concat(name, \"\\\" of type \\\"\").concat(typeof entity, \"\\\".\"));\n    }\n  };\n\n  Interpreter.prototype.spawnMachine = function (machine, options) {\n    var _this = this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    var childService = new Interpreter(machine, __assign(__assign({}, this.options), {\n      parent: this,\n      id: options.id || machine.id\n    }));\n\n    var resolvedOptions = __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), options);\n\n    if (resolvedOptions.sync) {\n      childService.onTransition(function (state) {\n        _this.send(update, {\n          state: state,\n          id: childService.id\n        });\n      });\n    }\n\n    var actor = childService;\n    this.children.set(childService.id, actor);\n\n    if (resolvedOptions.autoForward) {\n      this.forwardTo.add(childService.id);\n    }\n\n    childService.onDone(function (doneEvent) {\n      _this.removeChild(childService.id);\n\n      _this.send(toSCXMLEvent(doneEvent, {\n        origin: childService.id\n      }));\n    }).start();\n    return actor;\n  };\n\n  Interpreter.prototype.spawnBehavior = function (behavior, id) {\n    var actorRef = spawnBehavior(behavior, {\n      id: id,\n      parent: this\n    });\n    this.children.set(id, actorRef);\n    return actorRef;\n  };\n\n  Interpreter.prototype.spawnPromise = function (promise, id) {\n    var _a;\n\n    var _this = this;\n\n    var canceled = false;\n    var resolvedData;\n    promise.then(function (response) {\n      if (!canceled) {\n        resolvedData = response;\n\n        _this.removeChild(id);\n\n        _this.send(toSCXMLEvent(doneInvoke(id, response), {\n          origin: id\n        }));\n      }\n    }, function (errorData) {\n      if (!canceled) {\n        _this.removeChild(id);\n\n        var errorEvent = error(id, errorData);\n\n        try {\n          // Send \"error.platform.id\" to this (parent).\n          _this.send(toSCXMLEvent(errorEvent, {\n            origin: id\n          }));\n        } catch (error) {\n          reportUnhandledExceptionOnInvocation(errorData, error, id);\n\n          if (_this.devTools) {\n            _this.devTools.send(errorEvent, _this.state);\n          }\n\n          if (_this.machine.strict) {\n            // it would be better to always stop the state machine if unhandled\n            // exception/promise rejection happens but because we don't want to\n            // break existing code so enforce it on strict mode only especially so\n            // because documentation says that onError is optional\n            _this.stop();\n          }\n        }\n      }\n    });\n    var actor = (_a = {\n      id: id,\n      send: function () {\n        return void 0;\n      },\n      subscribe: function (next, handleError, complete) {\n        var observer = toObserver(next, handleError, complete);\n        var unsubscribed = false;\n        promise.then(function (response) {\n          if (unsubscribed) {\n            return;\n          }\n\n          observer.next(response);\n\n          if (unsubscribed) {\n            return;\n          }\n\n          observer.complete();\n        }, function (err) {\n          if (unsubscribed) {\n            return;\n          }\n\n          observer.error(err);\n        });\n        return {\n          unsubscribe: function () {\n            return unsubscribed = true;\n          }\n        };\n      },\n      stop: function () {\n        canceled = true;\n      },\n      toJSON: function () {\n        return {\n          id: id\n        };\n      },\n      getSnapshot: function () {\n        return resolvedData;\n      }\n    }, _a[symbolObservable] = function () {\n      return this;\n    }, _a);\n    this.children.set(id, actor);\n    return actor;\n  };\n\n  Interpreter.prototype.spawnCallback = function (callback, id) {\n    var _a;\n\n    var _this = this;\n\n    var canceled = false;\n    var receivers = new Set();\n    var listeners = new Set();\n    var emitted;\n\n    var receive = function (e) {\n      emitted = e;\n      listeners.forEach(function (listener) {\n        return listener(e);\n      });\n\n      if (canceled) {\n        return;\n      }\n\n      _this.send(toSCXMLEvent(e, {\n        origin: id\n      }));\n    };\n\n    var callbackStop;\n\n    try {\n      callbackStop = callback(receive, function (newListener) {\n        receivers.add(newListener);\n      });\n    } catch (err) {\n      this.send(error(id, err));\n    }\n\n    if (isPromiseLike(callbackStop)) {\n      // it turned out to be an async function, can't reliably check this before calling `callback`\n      // because transpiled async functions are not recognizable\n      return this.spawnPromise(callbackStop, id);\n    }\n\n    var actor = (_a = {\n      id: id,\n      send: function (event) {\n        return receivers.forEach(function (receiver) {\n          return receiver(event);\n        });\n      },\n      subscribe: function (next) {\n        var observer = toObserver(next);\n        listeners.add(observer.next);\n        return {\n          unsubscribe: function () {\n            listeners.delete(observer.next);\n          }\n        };\n      },\n      stop: function () {\n        canceled = true;\n\n        if (isFunction(callbackStop)) {\n          callbackStop();\n        }\n      },\n      toJSON: function () {\n        return {\n          id: id\n        };\n      },\n      getSnapshot: function () {\n        return emitted;\n      }\n    }, _a[symbolObservable] = function () {\n      return this;\n    }, _a);\n    this.children.set(id, actor);\n    return actor;\n  };\n\n  Interpreter.prototype.spawnObservable = function (source, id) {\n    var _a;\n\n    var _this = this;\n\n    var emitted;\n    var subscription = source.subscribe(function (value) {\n      emitted = value;\n\n      _this.send(toSCXMLEvent(value, {\n        origin: id\n      }));\n    }, function (err) {\n      _this.removeChild(id);\n\n      _this.send(toSCXMLEvent(error(id, err), {\n        origin: id\n      }));\n    }, function () {\n      _this.removeChild(id);\n\n      _this.send(toSCXMLEvent(doneInvoke(id), {\n        origin: id\n      }));\n    });\n    var actor = (_a = {\n      id: id,\n      send: function () {\n        return void 0;\n      },\n      subscribe: function (next, handleError, complete) {\n        return source.subscribe(next, handleError, complete);\n      },\n      stop: function () {\n        return subscription.unsubscribe();\n      },\n      getSnapshot: function () {\n        return emitted;\n      },\n      toJSON: function () {\n        return {\n          id: id\n        };\n      }\n    }, _a[symbolObservable] = function () {\n      return this;\n    }, _a);\n    this.children.set(id, actor);\n    return actor;\n  };\n\n  Interpreter.prototype.spawnActor = function (actor, name) {\n    this.children.set(name, actor);\n    return actor;\n  };\n\n  Interpreter.prototype.spawnActivity = function (activity) {\n    var implementation = this.machine.options && this.machine.options.activities ? this.machine.options.activities[activity.type] : undefined;\n\n    if (!implementation) {\n      if (!IS_PRODUCTION) {\n        warn(false, \"No implementation found for activity '\".concat(activity.type, \"'\"));\n      } // tslint:disable-next-line:no-console\n\n\n      return;\n    } // Start implementation\n\n\n    var dispose = implementation(this.state.context, activity);\n    this.spawnEffect(activity.id, dispose);\n  };\n\n  Interpreter.prototype.spawnEffect = function (id, dispose) {\n    var _a;\n\n    this.children.set(id, (_a = {\n      id: id,\n      send: function () {\n        return void 0;\n      },\n      subscribe: function () {\n        return {\n          unsubscribe: function () {\n            return void 0;\n          }\n        };\n      },\n      stop: dispose || undefined,\n      getSnapshot: function () {\n        return undefined;\n      },\n      toJSON: function () {\n        return {\n          id: id\n        };\n      }\n    }, _a[symbolObservable] = function () {\n      return this;\n    }, _a));\n  };\n\n  Interpreter.prototype.attachDev = function () {\n    var global = getGlobal();\n\n    if (this.options.devTools && global) {\n      if (global.__REDUX_DEVTOOLS_EXTENSION__) {\n        var devToolsOptions = typeof this.options.devTools === 'object' ? this.options.devTools : undefined;\n        this.devTools = global.__REDUX_DEVTOOLS_EXTENSION__.connect(__assign(__assign({\n          name: this.id,\n          autoPause: true,\n          stateSanitizer: function (state) {\n            return {\n              value: state.value,\n              context: state.context,\n              actions: state.actions\n            };\n          }\n        }, devToolsOptions), {\n          features: __assign({\n            jump: false,\n            skip: false\n          }, devToolsOptions ? devToolsOptions.features : undefined)\n        }), this.machine);\n        this.devTools.init(this.state);\n      } // add XState-specific dev tooling hook\n\n\n      registerService(this);\n    }\n  };\n\n  Interpreter.prototype.toJSON = function () {\n    return {\n      id: this.id\n    };\n  };\n\n  Interpreter.prototype[symbolObservable] = function () {\n    return this;\n  };\n\n  Interpreter.prototype.getSnapshot = function () {\n    if (this.status === InterpreterStatus.NotStarted) {\n      return this.initialState;\n    }\n\n    return this._state;\n  };\n  /**\r\n   * The default interpreter options:\r\n   *\r\n   * - `clock` uses the global `setTimeout` and `clearTimeout` functions\r\n   * - `logger` uses the global `console.log()` method\r\n   */\n\n\n  Interpreter.defaultOptions = {\n    execute: true,\n    deferEvents: true,\n    clock: {\n      setTimeout: function (fn, ms) {\n        return setTimeout(fn, ms);\n      },\n      clearTimeout: function (id) {\n        return clearTimeout(id);\n      }\n    },\n    logger: /*#__PURE__*/console.log.bind(console),\n    devTools: false\n  };\n  Interpreter.interpret = interpret;\n  return Interpreter;\n}();\n\nvar resolveSpawnOptions = function (nameOrOptions) {\n  if (isString(nameOrOptions)) {\n    return __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n      name: nameOrOptions\n    });\n  }\n\n  return __assign(__assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n    name: uniqueId()\n  }), nameOrOptions);\n};\n\nfunction spawn(entity, nameOrOptions) {\n  var resolvedOptions = resolveSpawnOptions(nameOrOptions);\n  return consume(function (service) {\n    if (!IS_PRODUCTION) {\n      var isLazyEntity = isMachine(entity) || isFunction(entity);\n      warn(!!service || isLazyEntity, \"Attempted to spawn an Actor (ID: \\\"\".concat(isMachine(entity) ? entity.id : 'undefined', \"\\\") outside of a service. This will have no effect.\"));\n    }\n\n    if (service) {\n      return service.spawn(entity, resolvedOptions.name, resolvedOptions);\n    } else {\n      return createDeferredActor(entity, resolvedOptions.name);\n    }\n  });\n}\n/**\r\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to interpret\r\n * @param options Interpreter options\r\n */\n\nfunction interpret(machine, options) {\n  var interpreter = new Interpreter(machine, options);\n  return interpreter;\n}\n\nexport { Interpreter, InterpreterStatus, interpret, spawn };\n","import { __assign, __rest } from './_virtual/_tslib.js';\nimport './types.js';\nimport { invoke } from './actionTypes.js';\nimport './utils.js';\nimport './environment.js';\n\nfunction toInvokeSource(src) {\n  if (typeof src === 'string') {\n    var simpleSrc = {\n      type: src\n    };\n\n    simpleSrc.toString = function () {\n      return src;\n    }; // v4 compat - TODO: remove in v5\n\n\n    return simpleSrc;\n  }\n\n  return src;\n}\nfunction toInvokeDefinition(invokeConfig) {\n  return __assign(__assign({\n    type: invoke\n  }, invokeConfig), {\n    toJSON: function () {\n      invokeConfig.onDone;\n          invokeConfig.onError;\n          var invokeDef = __rest(invokeConfig, [\"onDone\", \"onError\"]);\n\n      return __assign(__assign({}, invokeDef), {\n        type: invoke,\n        src: toInvokeSource(invokeConfig.src)\n      });\n    }\n  });\n}\n\nexport { toInvokeDefinition, toInvokeSource };\n","import { __assign, __spreadArray, __read, __values, __rest } from './_virtual/_tslib.js';\nimport { isFunction, mapValues, isArray, flatten, toArray, toStateValue, isString, getEventType, toSCXMLEvent, matchesState, path, evaluateGuard, mapContext, isRaisableAction, pathToStateValue, isBuiltInEvent, partition, updateHistoryValue, toStatePath, mapFilterValues, warn, toStatePaths, nestedPath, normalizeTarget, toGuard, toTransitionConfigArray, isMachine, createInvokeId } from './utils.js';\nimport { State, stateValuesEqual } from './State.js';\nimport { start as start$1, stop as stop$1, invoke, update, nullEvent } from './actionTypes.js';\nimport { done, start, toActionObjects, raise, stop, resolveActions, doneInvoke, error, toActionObject, toActivityDefinition, after, send, cancel, initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { STATE_DELIMITER } from './constants.js';\nimport { getAllStateNodes, getConfiguration, isInFinalState, getTagsFromConfiguration, has, getChildren, getValue, isLeafNode, getAllChildren } from './stateUtils.js';\nimport { createInvocableActor } from './Actor.js';\nimport { toInvokeDefinition } from './invokeUtils.js';\n\nvar NULL_EVENT = '';\nvar STATE_IDENTIFIER = '#';\nvar WILDCARD = '*';\nvar EMPTY_OBJECT = {};\n\nvar isStateId = function (str) {\n  return str[0] === STATE_IDENTIFIER;\n};\n\nvar createDefaultOptions = function () {\n  return {\n    actions: {},\n    guards: {},\n    services: {},\n    activities: {},\n    delays: {}\n  };\n};\n\nvar validateArrayifiedTransitions = function (stateNode, event, transitions) {\n  var hasNonLastUnguardedTarget = transitions.slice(0, -1).some(function (transition) {\n    return !('cond' in transition) && !('in' in transition) && (isString(transition.target) || isMachine(transition.target));\n  });\n  var eventText = event === NULL_EVENT ? 'the transient event' : \"event '\".concat(event, \"'\");\n  warn(!hasNonLastUnguardedTarget, \"One or more transitions for \".concat(eventText, \" on state '\").concat(stateNode.id, \"' are unreachable. \") + \"Make sure that the default transition is the last one defined.\");\n};\n\nvar StateNode =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n  function StateNode(\n  /**\r\n   * The raw config used to create the machine.\r\n   */\n  config, options,\n  /**\r\n   * The initial extended state\r\n   */\n  _context, // TODO: this is unsafe, but we're removing it in v5 anyway\n  _stateInfo) {\n    if (_context === void 0) {\n      _context = 'context' in config ? config.context : undefined;\n    }\n\n    var _this = this;\n\n    var _a;\n\n    this.config = config;\n    this._context = _context;\n    /**\r\n     * The order this state node appears. Corresponds to the implicit SCXML document order.\r\n     */\n\n    this.order = -1;\n    this.__xstatenode = true;\n    this.__cache = {\n      events: undefined,\n      relativeValue: new Map(),\n      initialStateValue: undefined,\n      initialState: undefined,\n      on: undefined,\n      transitions: undefined,\n      candidates: {},\n      delayedTransitions: undefined\n    };\n    this.idMap = {};\n    this.tags = [];\n    this.options = Object.assign(createDefaultOptions(), options);\n    this.parent = _stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.parent;\n    this.key = this.config.key || (_stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.key) || this.config.id || '(machine)';\n    this.machine = this.parent ? this.parent.machine : this;\n    this.path = this.parent ? this.parent.path.concat(this.key) : [];\n    this.delimiter = this.config.delimiter || (this.parent ? this.parent.delimiter : STATE_DELIMITER);\n    this.id = this.config.id || __spreadArray([this.machine.key], __read(this.path), false).join(this.delimiter);\n    this.version = this.parent ? this.parent.version : this.config.version;\n    this.type = this.config.type || (this.config.parallel ? 'parallel' : this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n    this.schema = this.parent ? this.machine.schema : (_a = this.config.schema) !== null && _a !== void 0 ? _a : {};\n    this.description = this.config.description;\n\n    if (!IS_PRODUCTION) {\n      warn(!('parallel' in this.config), \"The \\\"parallel\\\" property is deprecated and will be removed in version 4.1. \".concat(this.config.parallel ? \"Replace with `type: 'parallel'`\" : \"Use `type: '\".concat(this.type, \"'`\"), \" in the config for state node '\").concat(this.id, \"' instead.\"));\n    }\n\n    this.initial = this.config.initial;\n    this.states = this.config.states ? mapValues(this.config.states, function (stateConfig, key) {\n      var _a;\n\n      var stateNode = new StateNode(stateConfig, {}, undefined, {\n        parent: _this,\n        key: key\n      });\n      Object.assign(_this.idMap, __assign((_a = {}, _a[stateNode.id] = stateNode, _a), stateNode.idMap));\n      return stateNode;\n    }) : EMPTY_OBJECT; // Document order\n\n    var order = 0;\n\n    function dfs(stateNode) {\n      var e_1, _a;\n\n      stateNode.order = order++;\n\n      try {\n        for (var _b = __values(getAllChildren(stateNode)), _c = _b.next(); !_c.done; _c = _b.next()) {\n          var child = _c.value;\n          dfs(child);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    }\n\n    dfs(this); // History config\n\n    this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n    this._transient = !!this.config.always || (!this.config.on ? false : Array.isArray(this.config.on) ? this.config.on.some(function (_a) {\n      var event = _a.event;\n      return event === NULL_EVENT;\n    }) : NULL_EVENT in this.config.on);\n    this.strict = !!this.config.strict; // TODO: deprecate (entry)\n\n    this.onEntry = toArray(this.config.entry || this.config.onEntry).map(function (action) {\n      return toActionObject(action);\n    }); // TODO: deprecate (exit)\n\n    this.onExit = toArray(this.config.exit || this.config.onExit).map(function (action) {\n      return toActionObject(action);\n    });\n    this.meta = this.config.meta;\n    this.doneData = this.type === 'final' ? this.config.data : undefined;\n    this.invoke = toArray(this.config.invoke).map(function (invokeConfig, i) {\n      var _a, _b;\n\n      if (isMachine(invokeConfig)) {\n        var invokeId = createInvokeId(_this.id, i);\n        _this.machine.options.services = __assign((_a = {}, _a[invokeId] = invokeConfig, _a), _this.machine.options.services);\n        return toInvokeDefinition({\n          src: invokeId,\n          id: invokeId\n        });\n      } else if (isString(invokeConfig.src)) {\n        var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n        return toInvokeDefinition(__assign(__assign({}, invokeConfig), {\n          id: invokeId,\n          src: invokeConfig.src\n        }));\n      } else if (isMachine(invokeConfig.src) || isFunction(invokeConfig.src)) {\n        var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n        _this.machine.options.services = __assign((_b = {}, _b[invokeId] = invokeConfig.src, _b), _this.machine.options.services);\n        return toInvokeDefinition(__assign(__assign({\n          id: invokeId\n        }, invokeConfig), {\n          src: invokeId\n        }));\n      } else {\n        var invokeSource = invokeConfig.src;\n        return toInvokeDefinition(__assign(__assign({\n          id: createInvokeId(_this.id, i)\n        }, invokeConfig), {\n          src: invokeSource\n        }));\n      }\n    });\n    this.activities = toArray(this.config.activities).concat(this.invoke).map(function (activity) {\n      return toActivityDefinition(activity);\n    });\n    this.transition = this.transition.bind(this);\n    this.tags = toArray(this.config.tags); // TODO: this is the real fix for initialization once\n    // state node getters are deprecated\n    // if (!this.parent) {\n    //   this._init();\n    // }\n  }\n\n  StateNode.prototype._init = function () {\n    if (this.__cache.transitions) {\n      return;\n    }\n\n    getAllStateNodes(this).forEach(function (stateNode) {\n      return stateNode.on;\n    });\n  };\n  /**\r\n   * Clones this state machine with custom options and context.\r\n   *\r\n   * @param options Options (actions, guards, activities, services) to recursively merge with the existing options.\r\n   * @param context Custom context (will override predefined context)\r\n   */\n\n\n  StateNode.prototype.withConfig = function (options, context) {\n    var _a = this.options,\n        actions = _a.actions,\n        activities = _a.activities,\n        guards = _a.guards,\n        services = _a.services,\n        delays = _a.delays;\n    return new StateNode(this.config, {\n      actions: __assign(__assign({}, actions), options.actions),\n      activities: __assign(__assign({}, activities), options.activities),\n      guards: __assign(__assign({}, guards), options.guards),\n      services: __assign(__assign({}, services), options.services),\n      delays: __assign(__assign({}, delays), options.delays)\n    }, context !== null && context !== void 0 ? context : this.context);\n  };\n  /**\r\n   * Clones this state machine with custom context.\r\n   *\r\n   * @param context Custom context (will override predefined context, not recursive)\r\n   */\n\n\n  StateNode.prototype.withContext = function (context) {\n    return new StateNode(this.config, this.options, context);\n  };\n\n  Object.defineProperty(StateNode.prototype, \"context\", {\n    get: function () {\n      return isFunction(this._context) ? this._context() : this._context;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"definition\", {\n    /**\r\n     * The well-structured state node definition.\r\n     */\n    get: function () {\n      return {\n        id: this.id,\n        key: this.key,\n        version: this.version,\n        context: this.context,\n        type: this.type,\n        initial: this.initial,\n        history: this.history,\n        states: mapValues(this.states, function (state) {\n          return state.definition;\n        }),\n        on: this.on,\n        transitions: this.transitions,\n        entry: this.onEntry,\n        exit: this.onExit,\n        activities: this.activities || [],\n        meta: this.meta,\n        order: this.order || -1,\n        data: this.doneData,\n        invoke: this.invoke,\n        description: this.description,\n        tags: this.tags\n      };\n    },\n    enumerable: false,\n    configurable: true\n  });\n\n  StateNode.prototype.toJSON = function () {\n    return this.definition;\n  };\n\n  Object.defineProperty(StateNode.prototype, \"on\", {\n    /**\r\n     * The mapping of events to transitions.\r\n     */\n    get: function () {\n      if (this.__cache.on) {\n        return this.__cache.on;\n      }\n\n      var transitions = this.transitions;\n      return this.__cache.on = transitions.reduce(function (map, transition) {\n        map[transition.eventType] = map[transition.eventType] || [];\n        map[transition.eventType].push(transition);\n        return map;\n      }, {});\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"after\", {\n    get: function () {\n      return this.__cache.delayedTransitions || (this.__cache.delayedTransitions = this.getDelayedTransitions(), this.__cache.delayedTransitions);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"transitions\", {\n    /**\r\n     * All the transitions that can be taken from this state node.\r\n     */\n    get: function () {\n      return this.__cache.transitions || (this.__cache.transitions = this.formatTransitions(), this.__cache.transitions);\n    },\n    enumerable: false,\n    configurable: true\n  });\n\n  StateNode.prototype.getCandidates = function (eventName) {\n    if (this.__cache.candidates[eventName]) {\n      return this.__cache.candidates[eventName];\n    }\n\n    var transient = eventName === NULL_EVENT;\n    var candidates = this.transitions.filter(function (transition) {\n      var sameEventType = transition.eventType === eventName; // null events should only match against eventless transitions\n\n      return transient ? sameEventType : sameEventType || transition.eventType === WILDCARD;\n    });\n    this.__cache.candidates[eventName] = candidates;\n    return candidates;\n  };\n  /**\r\n   * All delayed transitions from the config.\r\n   */\n\n\n  StateNode.prototype.getDelayedTransitions = function () {\n    var _this = this;\n\n    var afterConfig = this.config.after;\n\n    if (!afterConfig) {\n      return [];\n    }\n\n    var mutateEntryExit = function (delay, i) {\n      var delayRef = isFunction(delay) ? \"\".concat(_this.id, \":delay[\").concat(i, \"]\") : delay;\n      var eventType = after(delayRef, _this.id);\n\n      _this.onEntry.push(send(eventType, {\n        delay: delay\n      }));\n\n      _this.onExit.push(cancel(eventType));\n\n      return eventType;\n    };\n\n    var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {\n      var eventType = mutateEntryExit(transition.delay, i);\n      return __assign(__assign({}, transition), {\n        event: eventType\n      });\n    }) : flatten(Object.keys(afterConfig).map(function (delay, i) {\n      var configTransition = afterConfig[delay];\n      var resolvedTransition = isString(configTransition) ? {\n        target: configTransition\n      } : configTransition;\n      var resolvedDelay = !isNaN(+delay) ? +delay : delay;\n      var eventType = mutateEntryExit(resolvedDelay, i);\n      return toArray(resolvedTransition).map(function (transition) {\n        return __assign(__assign({}, transition), {\n          event: eventType,\n          delay: resolvedDelay\n        });\n      });\n    }));\n    return delayedTransitions.map(function (delayedTransition) {\n      var delay = delayedTransition.delay;\n      return __assign(__assign({}, _this.formatTransition(delayedTransition)), {\n        delay: delay\n      });\n    });\n  };\n  /**\r\n   * Returns the state nodes represented by the current state value.\r\n   *\r\n   * @param state The state value or State instance\r\n   */\n\n\n  StateNode.prototype.getStateNodes = function (state) {\n    var _a;\n\n    var _this = this;\n\n    if (!state) {\n      return [];\n    }\n\n    var stateValue = state instanceof State ? state.value : toStateValue(state, this.delimiter);\n\n    if (isString(stateValue)) {\n      var initialStateValue = this.getStateNode(stateValue).initial;\n      return initialStateValue !== undefined ? this.getStateNodes((_a = {}, _a[stateValue] = initialStateValue, _a)) : [this, this.states[stateValue]];\n    }\n\n    var subStateKeys = Object.keys(stateValue);\n    var subStateNodes = [this];\n    subStateNodes.push.apply(subStateNodes, __spreadArray([], __read(flatten(subStateKeys.map(function (subStateKey) {\n      return _this.getStateNode(subStateKey).getStateNodes(stateValue[subStateKey]);\n    }))), false));\n    return subStateNodes;\n  };\n  /**\r\n   * Returns `true` if this state node explicitly handles the given event.\r\n   *\r\n   * @param event The event in question\r\n   */\n\n\n  StateNode.prototype.handles = function (event) {\n    var eventType = getEventType(event);\n    return this.events.includes(eventType);\n  };\n  /**\r\n   * Resolves the given `state` to a new `State` instance relative to this machine.\r\n   *\r\n   * This ensures that `.events` and `.nextEvents` represent the correct values.\r\n   *\r\n   * @param state The state to resolve\r\n   */\n\n\n  StateNode.prototype.resolveState = function (state) {\n    var stateFromConfig = state instanceof State ? state : State.create(state);\n    var configuration = Array.from(getConfiguration([], this.getStateNodes(stateFromConfig.value)));\n    return new State(__assign(__assign({}, stateFromConfig), {\n      value: this.resolve(stateFromConfig.value),\n      configuration: configuration,\n      done: isInFinalState(configuration, this),\n      tags: getTagsFromConfiguration(configuration),\n      machine: this.machine\n    }));\n  };\n\n  StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {\n    var stateNode = this.getStateNode(stateValue);\n    var next = stateNode.next(state, _event);\n\n    if (!next || !next.transitions.length) {\n      return this.next(state, _event);\n    }\n\n    return next;\n  };\n\n  StateNode.prototype.transitionCompoundNode = function (stateValue, state, _event) {\n    var subStateKeys = Object.keys(stateValue);\n    var stateNode = this.getStateNode(subStateKeys[0]);\n\n    var next = stateNode._transition(stateValue[subStateKeys[0]], state, _event);\n\n    if (!next || !next.transitions.length) {\n      return this.next(state, _event);\n    }\n\n    return next;\n  };\n\n  StateNode.prototype.transitionParallelNode = function (stateValue, state, _event) {\n    var e_2, _a;\n\n    var transitionMap = {};\n\n    try {\n      for (var _b = __values(Object.keys(stateValue)), _c = _b.next(); !_c.done; _c = _b.next()) {\n        var subStateKey = _c.value;\n        var subStateValue = stateValue[subStateKey];\n\n        if (!subStateValue) {\n          continue;\n        }\n\n        var subStateNode = this.getStateNode(subStateKey);\n\n        var next = subStateNode._transition(subStateValue, state, _event);\n\n        if (next) {\n          transitionMap[subStateKey] = next;\n        }\n      }\n    } catch (e_2_1) {\n      e_2 = {\n        error: e_2_1\n      };\n    } finally {\n      try {\n        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n      } finally {\n        if (e_2) throw e_2.error;\n      }\n    }\n\n    var stateTransitions = Object.keys(transitionMap).map(function (key) {\n      return transitionMap[key];\n    });\n    var enabledTransitions = flatten(stateTransitions.map(function (st) {\n      return st.transitions;\n    }));\n    var willTransition = stateTransitions.some(function (st) {\n      return st.transitions.length > 0;\n    });\n\n    if (!willTransition) {\n      return this.next(state, _event);\n    }\n\n    var configuration = flatten(Object.keys(transitionMap).map(function (key) {\n      return transitionMap[key].configuration;\n    }));\n    return {\n      transitions: enabledTransitions,\n      exitSet: flatten(stateTransitions.map(function (t) {\n        return t.exitSet;\n      })),\n      configuration: configuration,\n      source: state,\n      actions: flatten(Object.keys(transitionMap).map(function (key) {\n        return transitionMap[key].actions;\n      }))\n    };\n  };\n\n  StateNode.prototype._transition = function (stateValue, state, _event) {\n    // leaf node\n    if (isString(stateValue)) {\n      return this.transitionLeafNode(stateValue, state, _event);\n    } // hierarchical node\n\n\n    if (Object.keys(stateValue).length === 1) {\n      return this.transitionCompoundNode(stateValue, state, _event);\n    } // orthogonal node\n\n\n    return this.transitionParallelNode(stateValue, state, _event);\n  };\n\n  StateNode.prototype.getTransitionData = function (state, event) {\n    return this._transition(state.value, state, toSCXMLEvent(event));\n  };\n\n  StateNode.prototype.next = function (state, _event) {\n    var e_3, _a;\n\n    var _this = this;\n\n    var eventName = _event.name;\n    var actions = [];\n    var nextStateNodes = [];\n    var selectedTransition;\n\n    try {\n      for (var _b = __values(this.getCandidates(eventName)), _c = _b.next(); !_c.done; _c = _b.next()) {\n        var candidate = _c.value;\n        var cond = candidate.cond,\n            stateIn = candidate.in;\n        var resolvedContext = state.context;\n        var isInState = stateIn ? isString(stateIn) && isStateId(stateIn) ? // Check if in state by ID\n        state.matches(toStateValue(this.getStateNodeById(stateIn).path, this.delimiter)) : // Check if in state by relative grandparent\n        matchesState(toStateValue(stateIn, this.delimiter), path(this.path.slice(0, -2))(state.value)) : true;\n        var guardPassed = false;\n\n        try {\n          guardPassed = !cond || evaluateGuard(this.machine, cond, resolvedContext, _event, state);\n        } catch (err) {\n          throw new Error(\"Unable to evaluate guard '\".concat(cond.name || cond.type, \"' in transition for event '\").concat(eventName, \"' in state node '\").concat(this.id, \"':\\n\").concat(err.message));\n        }\n\n        if (guardPassed && isInState) {\n          if (candidate.target !== undefined) {\n            nextStateNodes = candidate.target;\n          }\n\n          actions.push.apply(actions, __spreadArray([], __read(candidate.actions), false));\n          selectedTransition = candidate;\n          break;\n        }\n      }\n    } catch (e_3_1) {\n      e_3 = {\n        error: e_3_1\n      };\n    } finally {\n      try {\n        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n      } finally {\n        if (e_3) throw e_3.error;\n      }\n    }\n\n    if (!selectedTransition) {\n      return undefined;\n    }\n\n    if (!nextStateNodes.length) {\n      return {\n        transitions: [selectedTransition],\n        exitSet: [],\n        configuration: state.value ? [this] : [],\n        source: state,\n        actions: actions\n      };\n    }\n\n    var allNextStateNodes = flatten(nextStateNodes.map(function (stateNode) {\n      return _this.getRelativeStateNodes(stateNode, state.historyValue);\n    }));\n    var isInternal = !!selectedTransition.internal;\n    return {\n      transitions: [selectedTransition],\n      exitSet: isInternal ? [] : flatten(nextStateNodes.map(function (targetNode) {\n        return _this.getPotentiallyReenteringNodes(targetNode);\n      })),\n      configuration: allNextStateNodes,\n      source: state,\n      actions: actions\n    };\n  }; // even though the name of this function mentions reentry nodes\n  // we are pushing its result into `exitSet`\n  // that's because what we exit might be reentered (it's an invariant of reentrancy)\n\n\n  StateNode.prototype.getPotentiallyReenteringNodes = function (targetNode) {\n    if (this.order < targetNode.order) {\n      return [this];\n    }\n\n    var nodes = [];\n    var marker = this;\n    var possibleAncestor = targetNode;\n\n    while (marker && marker !== possibleAncestor) {\n      nodes.push(marker);\n      marker = marker.parent;\n    }\n\n    if (marker !== possibleAncestor) {\n      // we never got to `possibleAncestor`, therefore the initial `marker` \"escapes\" it\n      // it's in a different part of the tree so no states will be reentered for such an external transition\n      return [];\n    }\n\n    nodes.push(possibleAncestor);\n    return nodes;\n  };\n\n  StateNode.prototype.getActions = function (resolvedConfig, isDone, transition, currentContext, _event, prevState, predictableExec) {\n    var e_4, _a, e_5, _b;\n\n    var _this = this;\n\n    var prevConfig = prevState ? getConfiguration([], this.getStateNodes(prevState.value)) : [];\n    var entrySet = new Set();\n\n    try {\n      for (var _c = __values(Array.from(resolvedConfig).sort(function (a, b) {\n        return a.order - b.order;\n      })), _d = _c.next(); !_d.done; _d = _c.next()) {\n        var sn = _d.value;\n\n        if (!has(prevConfig, sn) || has(transition.exitSet, sn) || sn.parent && entrySet.has(sn.parent)) {\n          entrySet.add(sn);\n        }\n      }\n    } catch (e_4_1) {\n      e_4 = {\n        error: e_4_1\n      };\n    } finally {\n      try {\n        if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n      } finally {\n        if (e_4) throw e_4.error;\n      }\n    }\n\n    try {\n      for (var prevConfig_1 = __values(prevConfig), prevConfig_1_1 = prevConfig_1.next(); !prevConfig_1_1.done; prevConfig_1_1 = prevConfig_1.next()) {\n        var sn = prevConfig_1_1.value;\n\n        if (!has(resolvedConfig, sn) || has(transition.exitSet, sn.parent)) {\n          transition.exitSet.push(sn);\n        }\n      }\n    } catch (e_5_1) {\n      e_5 = {\n        error: e_5_1\n      };\n    } finally {\n      try {\n        if (prevConfig_1_1 && !prevConfig_1_1.done && (_b = prevConfig_1.return)) _b.call(prevConfig_1);\n      } finally {\n        if (e_5) throw e_5.error;\n      }\n    }\n\n    transition.exitSet.sort(function (a, b) {\n      return b.order - a.order;\n    });\n    var entryStates = Array.from(entrySet).sort(function (a, b) {\n      return a.order - b.order;\n    });\n    var exitStates = new Set(transition.exitSet);\n    var doneEvents = flatten(entryStates.map(function (sn) {\n      var events = [];\n\n      if (sn.type !== 'final') {\n        return events;\n      }\n\n      var parent = sn.parent;\n\n      if (!parent.parent) {\n        return events;\n      }\n\n      events.push(done(sn.id, sn.doneData), // TODO: deprecate - final states should not emit done events for their own state.\n      done(parent.id, sn.doneData ? mapContext(sn.doneData, currentContext, _event) : undefined));\n      var grandparent = parent.parent;\n\n      if (grandparent.type === 'parallel') {\n        if (getChildren(grandparent).every(function (parentNode) {\n          return isInFinalState(transition.configuration, parentNode);\n        })) {\n          events.push(done(grandparent.id));\n        }\n      }\n\n      return events;\n    }));\n    var entryActions = entryStates.map(function (stateNode) {\n      var entryActions = stateNode.onEntry;\n      var invokeActions = stateNode.activities.map(function (activity) {\n        return start(activity);\n      });\n      return {\n        type: 'entry',\n        actions: toActionObjects(predictableExec ? __spreadArray(__spreadArray([], __read(entryActions), false), __read(invokeActions), false) : __spreadArray(__spreadArray([], __read(invokeActions), false), __read(entryActions), false), _this.machine.options.actions)\n      };\n    }).concat({\n      type: 'state_done',\n      actions: doneEvents.map(function (event) {\n        return raise(event);\n      })\n    });\n    var exitActions = Array.from(exitStates).map(function (stateNode) {\n      return {\n        type: 'exit',\n        actions: toActionObjects(__spreadArray(__spreadArray([], __read(stateNode.onExit), false), __read(stateNode.activities.map(function (activity) {\n          return stop(activity);\n        })), false), _this.machine.options.actions)\n      };\n    });\n    var actions = exitActions.concat({\n      type: 'transition',\n      actions: toActionObjects(transition.actions, this.machine.options.actions)\n    }).concat(entryActions);\n\n    if (isDone) {\n      var stopActions = toActionObjects(flatten(__spreadArray([], __read(resolvedConfig), false).sort(function (a, b) {\n        return b.order - a.order;\n      }).map(function (stateNode) {\n        return stateNode.onExit;\n      })), this.machine.options.actions).filter(function (action) {\n        return !isRaisableAction(action);\n      });\n      return actions.concat({\n        type: 'stop',\n        actions: stopActions\n      });\n    }\n\n    return actions;\n  };\n  /**\r\n   * Determines the next state given the current `state` and sent `event`.\r\n   *\r\n   * @param state The current State instance or state value\r\n   * @param event The event that was sent at the current state\r\n   * @param context The current context (extended state) of the current state\r\n   */\n\n\n  StateNode.prototype.transition = function (state, event, context, exec) {\n    if (state === void 0) {\n      state = this.initialState;\n    }\n\n    var _event = toSCXMLEvent(event);\n\n    var currentState;\n\n    if (state instanceof State) {\n      currentState = context === undefined ? state : this.resolveState(State.from(state, context));\n    } else {\n      var resolvedStateValue = isString(state) ? this.resolve(pathToStateValue(this.getResolvedPath(state))) : this.resolve(state);\n      var resolvedContext = context !== null && context !== void 0 ? context : this.machine.context;\n      currentState = this.resolveState(State.from(resolvedStateValue, resolvedContext));\n    }\n\n    if (!IS_PRODUCTION && _event.name === WILDCARD) {\n      throw new Error(\"An event cannot have the wildcard type ('\".concat(WILDCARD, \"')\"));\n    }\n\n    if (this.strict) {\n      if (!this.events.includes(_event.name) && !isBuiltInEvent(_event.name)) {\n        throw new Error(\"Machine '\".concat(this.id, \"' does not accept event '\").concat(_event.name, \"'\"));\n      }\n    }\n\n    var stateTransition = this._transition(currentState.value, currentState, _event) || {\n      transitions: [],\n      configuration: [],\n      exitSet: [],\n      source: currentState,\n      actions: []\n    };\n    var prevConfig = getConfiguration([], this.getStateNodes(currentState.value));\n    var resolvedConfig = stateTransition.configuration.length ? getConfiguration(prevConfig, stateTransition.configuration) : prevConfig;\n    stateTransition.configuration = __spreadArray([], __read(resolvedConfig), false);\n    return this.resolveTransition(stateTransition, currentState, currentState.context, exec, _event);\n  };\n\n  StateNode.prototype.resolveRaisedTransition = function (state, _event, originalEvent, predictableExec) {\n    var _a;\n\n    var currentActions = state.actions;\n    state = this.transition(state, _event, undefined, predictableExec); // Save original event to state\n    // TODO: this should be the raised event! Delete in V5 (breaking)\n\n    state._event = originalEvent;\n    state.event = originalEvent.data;\n\n    (_a = state.actions).unshift.apply(_a, __spreadArray([], __read(currentActions), false));\n\n    return state;\n  };\n\n  StateNode.prototype.resolveTransition = function (stateTransition, currentState, context, predictableExec, _event) {\n    var e_6, _a, e_7, _b;\n\n    var _this = this;\n\n    if (_event === void 0) {\n      _event = initEvent;\n    }\n\n    var configuration = stateTransition.configuration; // Transition will \"apply\" if:\n    // - this is the initial state (there is no current state)\n    // - OR there are transitions\n\n    var willTransition = !currentState || stateTransition.transitions.length > 0;\n    var resolvedConfiguration = willTransition ? stateTransition.configuration : currentState ? currentState.configuration : [];\n    var isDone = isInFinalState(resolvedConfiguration, this);\n    var resolvedStateValue = willTransition ? getValue(this.machine, configuration) : undefined;\n    var historyValue = currentState ? currentState.historyValue ? currentState.historyValue : stateTransition.source ? this.machine.historyValue(currentState.value) : undefined : undefined;\n    var actionBlocks = this.getActions(new Set(resolvedConfiguration), isDone, stateTransition, context, _event, currentState, predictableExec);\n    var activities = currentState ? __assign({}, currentState.activities) : {};\n\n    try {\n      for (var actionBlocks_1 = __values(actionBlocks), actionBlocks_1_1 = actionBlocks_1.next(); !actionBlocks_1_1.done; actionBlocks_1_1 = actionBlocks_1.next()) {\n        var block = actionBlocks_1_1.value;\n\n        try {\n          for (var _c = (e_7 = void 0, __values(block.actions)), _d = _c.next(); !_d.done; _d = _c.next()) {\n            var action = _d.value;\n\n            if (action.type === start$1) {\n              activities[action.activity.id || action.activity.type] = action;\n            } else if (action.type === stop$1) {\n              activities[action.activity.id || action.activity.type] = false;\n            }\n          }\n        } catch (e_7_1) {\n          e_7 = {\n            error: e_7_1\n          };\n        } finally {\n          try {\n            if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n          } finally {\n            if (e_7) throw e_7.error;\n          }\n        }\n      }\n    } catch (e_6_1) {\n      e_6 = {\n        error: e_6_1\n      };\n    } finally {\n      try {\n        if (actionBlocks_1_1 && !actionBlocks_1_1.done && (_a = actionBlocks_1.return)) _a.call(actionBlocks_1);\n      } finally {\n        if (e_6) throw e_6.error;\n      }\n    }\n\n    var _e = __read(resolveActions(this, currentState, context, _event, actionBlocks, predictableExec, this.machine.config.predictableActionArguments || this.machine.config.preserveActionOrder), 2),\n        resolvedActions = _e[0],\n        updatedContext = _e[1];\n\n    var _f = __read(partition(resolvedActions, isRaisableAction), 2),\n        raisedEvents = _f[0],\n        nonRaisedActions = _f[1];\n\n    var invokeActions = resolvedActions.filter(function (action) {\n      var _a;\n\n      return action.type === start$1 && ((_a = action.activity) === null || _a === void 0 ? void 0 : _a.type) === invoke;\n    });\n    var children = invokeActions.reduce(function (acc, action) {\n      acc[action.activity.id] = createInvocableActor(action.activity, _this.machine, updatedContext, _event);\n      return acc;\n    }, currentState ? __assign({}, currentState.children) : {});\n    var nextState = new State({\n      value: resolvedStateValue || currentState.value,\n      context: updatedContext,\n      _event: _event,\n      // Persist _sessionid between states\n      _sessionid: currentState ? currentState._sessionid : null,\n      historyValue: resolvedStateValue ? historyValue ? updateHistoryValue(historyValue, resolvedStateValue) : undefined : currentState ? currentState.historyValue : undefined,\n      history: !resolvedStateValue || stateTransition.source ? currentState : undefined,\n      actions: resolvedStateValue ? nonRaisedActions : [],\n      activities: resolvedStateValue ? activities : currentState ? currentState.activities : {},\n      events: [],\n      configuration: resolvedConfiguration,\n      transitions: stateTransition.transitions,\n      children: children,\n      done: isDone,\n      tags: getTagsFromConfiguration(resolvedConfiguration),\n      machine: this\n    });\n    var didUpdateContext = context !== updatedContext;\n    nextState.changed = _event.name === update || didUpdateContext; // Dispose of penultimate histories to prevent memory leaks\n\n    var history = nextState.history;\n\n    if (history) {\n      delete history.history;\n    } // There are transient transitions if the machine is not in a final state\n    // and if some of the state nodes have transient (\"always\") transitions.\n\n\n    var hasAlwaysTransitions = !isDone && (this._transient || configuration.some(function (stateNode) {\n      return stateNode._transient;\n    })); // If there are no enabled transitions, check if there are transient transitions.\n    // If there are transient transitions, continue checking for more transitions\n    // because an transient transition should be triggered even if there are no\n    // enabled transitions.\n    //\n    // If we're already working on an transient transition then stop to prevent an infinite loop.\n    //\n    // Otherwise, if there are no enabled nor transient transitions, we are done.\n\n    if (!willTransition && (!hasAlwaysTransitions || _event.name === NULL_EVENT)) {\n      return nextState;\n    }\n\n    var maybeNextState = nextState;\n\n    if (!isDone) {\n      if (hasAlwaysTransitions) {\n        maybeNextState = this.resolveRaisedTransition(maybeNextState, {\n          type: nullEvent\n        }, _event, predictableExec);\n      }\n\n      while (raisedEvents.length) {\n        var raisedEvent = raisedEvents.shift();\n        maybeNextState = this.resolveRaisedTransition(maybeNextState, raisedEvent._event, _event, predictableExec);\n      }\n    } // Detect if state changed\n\n\n    var changed = maybeNextState.changed || (history ? !!maybeNextState.actions.length || didUpdateContext || typeof history.value !== typeof maybeNextState.value || !stateValuesEqual(maybeNextState.value, history.value) : undefined);\n    maybeNextState.changed = changed; // Preserve original history after raised events\n\n    maybeNextState.history = history;\n    return maybeNextState;\n  };\n  /**\r\n   * Returns the child state node from its relative `stateKey`, or throws.\r\n   */\n\n\n  StateNode.prototype.getStateNode = function (stateKey) {\n    if (isStateId(stateKey)) {\n      return this.machine.getStateNodeById(stateKey);\n    }\n\n    if (!this.states) {\n      throw new Error(\"Unable to retrieve child state '\".concat(stateKey, \"' from '\").concat(this.id, \"'; no child states exist.\"));\n    }\n\n    var result = this.states[stateKey];\n\n    if (!result) {\n      throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n    }\n\n    return result;\n  };\n  /**\r\n   * Returns the state node with the given `stateId`, or throws.\r\n   *\r\n   * @param stateId The state ID. The prefix \"#\" is removed.\r\n   */\n\n\n  StateNode.prototype.getStateNodeById = function (stateId) {\n    var resolvedStateId = isStateId(stateId) ? stateId.slice(STATE_IDENTIFIER.length) : stateId;\n\n    if (resolvedStateId === this.id) {\n      return this;\n    }\n\n    var stateNode = this.machine.idMap[resolvedStateId];\n\n    if (!stateNode) {\n      throw new Error(\"Child state node '#\".concat(resolvedStateId, \"' does not exist on machine '\").concat(this.id, \"'\"));\n    }\n\n    return stateNode;\n  };\n  /**\r\n   * Returns the relative state node from the given `statePath`, or throws.\r\n   *\r\n   * @param statePath The string or string array relative path to the state node.\r\n   */\n\n\n  StateNode.prototype.getStateNodeByPath = function (statePath) {\n    if (typeof statePath === 'string' && isStateId(statePath)) {\n      try {\n        return this.getStateNodeById(statePath.slice(1));\n      } catch (e) {// try individual paths\n        // throw e;\n      }\n    }\n\n    var arrayStatePath = toStatePath(statePath, this.delimiter).slice();\n    var currentStateNode = this;\n\n    while (arrayStatePath.length) {\n      var key = arrayStatePath.shift();\n\n      if (!key.length) {\n        break;\n      }\n\n      currentStateNode = currentStateNode.getStateNode(key);\n    }\n\n    return currentStateNode;\n  };\n  /**\r\n   * Resolves a partial state value with its full representation in this machine.\r\n   *\r\n   * @param stateValue The partial state value to resolve.\r\n   */\n\n\n  StateNode.prototype.resolve = function (stateValue) {\n    var _a;\n\n    var _this = this;\n\n    if (!stateValue) {\n      return this.initialStateValue || EMPTY_OBJECT; // TODO: type-specific properties\n    }\n\n    switch (this.type) {\n      case 'parallel':\n        return mapValues(this.initialStateValue, function (subStateValue, subStateKey) {\n          return subStateValue ? _this.getStateNode(subStateKey).resolve(stateValue[subStateKey] || subStateValue) : EMPTY_OBJECT;\n        });\n\n      case 'compound':\n        if (isString(stateValue)) {\n          var subStateNode = this.getStateNode(stateValue);\n\n          if (subStateNode.type === 'parallel' || subStateNode.type === 'compound') {\n            return _a = {}, _a[stateValue] = subStateNode.initialStateValue, _a;\n          }\n\n          return stateValue;\n        }\n\n        if (!Object.keys(stateValue).length) {\n          return this.initialStateValue || {};\n        }\n\n        return mapValues(stateValue, function (subStateValue, subStateKey) {\n          return subStateValue ? _this.getStateNode(subStateKey).resolve(subStateValue) : EMPTY_OBJECT;\n        });\n\n      default:\n        return stateValue || EMPTY_OBJECT;\n    }\n  };\n\n  StateNode.prototype.getResolvedPath = function (stateIdentifier) {\n    if (isStateId(stateIdentifier)) {\n      var stateNode = this.machine.idMap[stateIdentifier.slice(STATE_IDENTIFIER.length)];\n\n      if (!stateNode) {\n        throw new Error(\"Unable to find state node '\".concat(stateIdentifier, \"'\"));\n      }\n\n      return stateNode.path;\n    }\n\n    return toStatePath(stateIdentifier, this.delimiter);\n  };\n\n  Object.defineProperty(StateNode.prototype, \"initialStateValue\", {\n    get: function () {\n      var _a;\n\n      if (this.__cache.initialStateValue) {\n        return this.__cache.initialStateValue;\n      }\n\n      var initialStateValue;\n\n      if (this.type === 'parallel') {\n        initialStateValue = mapFilterValues(this.states, function (state) {\n          return state.initialStateValue || EMPTY_OBJECT;\n        }, function (stateNode) {\n          return !(stateNode.type === 'history');\n        });\n      } else if (this.initial !== undefined) {\n        if (!this.states[this.initial]) {\n          throw new Error(\"Initial state '\".concat(this.initial, \"' not found on '\").concat(this.key, \"'\"));\n        }\n\n        initialStateValue = isLeafNode(this.states[this.initial]) ? this.initial : (_a = {}, _a[this.initial] = this.states[this.initial].initialStateValue, _a);\n      } else {\n        // The finite state value of a machine without child states is just an empty object\n        initialStateValue = {};\n      }\n\n      this.__cache.initialStateValue = initialStateValue;\n      return this.__cache.initialStateValue;\n    },\n    enumerable: false,\n    configurable: true\n  });\n\n  StateNode.prototype.getInitialState = function (stateValue, context) {\n    this._init(); // TODO: this should be in the constructor (see note in constructor)\n\n\n    var configuration = this.getStateNodes(stateValue);\n    return this.resolveTransition({\n      configuration: configuration,\n      exitSet: [],\n      transitions: [],\n      source: undefined,\n      actions: []\n    }, undefined, context !== null && context !== void 0 ? context : this.machine.context, undefined);\n  };\n\n  Object.defineProperty(StateNode.prototype, \"initialState\", {\n    /**\r\n     * The initial State instance, which includes all actions to be executed from\r\n     * entering the initial state.\r\n     */\n    get: function () {\n      var initialStateValue = this.initialStateValue;\n\n      if (!initialStateValue) {\n        throw new Error(\"Cannot retrieve initial state from simple state '\".concat(this.id, \"'.\"));\n      }\n\n      return this.getInitialState(initialStateValue);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"target\", {\n    /**\r\n     * The target state value of the history state node, if it exists. This represents the\r\n     * default state value to transition to if no history value exists yet.\r\n     */\n    get: function () {\n      var target;\n\n      if (this.type === 'history') {\n        var historyConfig = this.config;\n\n        if (isString(historyConfig.target)) {\n          target = isStateId(historyConfig.target) ? pathToStateValue(this.machine.getStateNodeById(historyConfig.target).path.slice(this.path.length - 1)) : historyConfig.target;\n        } else {\n          target = historyConfig.target;\n        }\n      }\n\n      return target;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\r\n   * Returns the leaf nodes from a state path relative to this state node.\r\n   *\r\n   * @param relativeStateId The relative state path to retrieve the state nodes\r\n   * @param history The previous state to retrieve history\r\n   * @param resolve Whether state nodes should resolve to initial child state nodes\r\n   */\n\n  StateNode.prototype.getRelativeStateNodes = function (relativeStateId, historyValue, resolve) {\n    if (resolve === void 0) {\n      resolve = true;\n    }\n\n    return resolve ? relativeStateId.type === 'history' ? relativeStateId.resolveHistory(historyValue) : relativeStateId.initialStateNodes : [relativeStateId];\n  };\n\n  Object.defineProperty(StateNode.prototype, \"initialStateNodes\", {\n    get: function () {\n      var _this = this;\n\n      if (isLeafNode(this)) {\n        return [this];\n      } // Case when state node is compound but no initial state is defined\n\n\n      if (this.type === 'compound' && !this.initial) {\n        if (!IS_PRODUCTION) {\n          warn(false, \"Compound state node '\".concat(this.id, \"' has no initial state.\"));\n        }\n\n        return [this];\n      }\n\n      var initialStateNodePaths = toStatePaths(this.initialStateValue);\n      return flatten(initialStateNodePaths.map(function (initialPath) {\n        return _this.getFromRelativePath(initialPath);\n      }));\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\r\n   * Retrieves state nodes from a relative path to this state node.\r\n   *\r\n   * @param relativePath The relative path from this state node\r\n   * @param historyValue\r\n   */\n\n  StateNode.prototype.getFromRelativePath = function (relativePath) {\n    if (!relativePath.length) {\n      return [this];\n    }\n\n    var _a = __read(relativePath),\n        stateKey = _a[0],\n        childStatePath = _a.slice(1);\n\n    if (!this.states) {\n      throw new Error(\"Cannot retrieve subPath '\".concat(stateKey, \"' from node with no states\"));\n    }\n\n    var childStateNode = this.getStateNode(stateKey);\n\n    if (childStateNode.type === 'history') {\n      return childStateNode.resolveHistory();\n    }\n\n    if (!this.states[stateKey]) {\n      throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n    }\n\n    return this.states[stateKey].getFromRelativePath(childStatePath);\n  };\n\n  StateNode.prototype.historyValue = function (relativeStateValue) {\n    if (!Object.keys(this.states).length) {\n      return undefined;\n    }\n\n    return {\n      current: relativeStateValue || this.initialStateValue,\n      states: mapFilterValues(this.states, function (stateNode, key) {\n        if (!relativeStateValue) {\n          return stateNode.historyValue();\n        }\n\n        var subStateValue = isString(relativeStateValue) ? undefined : relativeStateValue[key];\n        return stateNode.historyValue(subStateValue || stateNode.initialStateValue);\n      }, function (stateNode) {\n        return !stateNode.history;\n      })\n    };\n  };\n  /**\r\n   * Resolves to the historical value(s) of the parent state node,\r\n   * represented by state nodes.\r\n   *\r\n   * @param historyValue\r\n   */\n\n\n  StateNode.prototype.resolveHistory = function (historyValue) {\n    var _this = this;\n\n    if (this.type !== 'history') {\n      return [this];\n    }\n\n    var parent = this.parent;\n\n    if (!historyValue) {\n      var historyTarget = this.target;\n      return historyTarget ? flatten(toStatePaths(historyTarget).map(function (relativeChildPath) {\n        return parent.getFromRelativePath(relativeChildPath);\n      })) : parent.initialStateNodes;\n    }\n\n    var subHistoryValue = nestedPath(parent.path, 'states')(historyValue).current;\n\n    if (isString(subHistoryValue)) {\n      return [parent.getStateNode(subHistoryValue)];\n    }\n\n    return flatten(toStatePaths(subHistoryValue).map(function (subStatePath) {\n      return _this.history === 'deep' ? parent.getFromRelativePath(subStatePath) : [parent.states[subStatePath[0]]];\n    }));\n  };\n\n  Object.defineProperty(StateNode.prototype, \"stateIds\", {\n    /**\r\n     * All the state node IDs of this state node and its descendant state nodes.\r\n     */\n    get: function () {\n      var _this = this;\n\n      var childStateIds = flatten(Object.keys(this.states).map(function (stateKey) {\n        return _this.states[stateKey].stateIds;\n      }));\n      return [this.id].concat(childStateIds);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"events\", {\n    /**\r\n     * All the event types accepted by this state node and its descendants.\r\n     */\n    get: function () {\n      var e_8, _a, e_9, _b;\n\n      if (this.__cache.events) {\n        return this.__cache.events;\n      }\n\n      var states = this.states;\n      var events = new Set(this.ownEvents);\n\n      if (states) {\n        try {\n          for (var _c = __values(Object.keys(states)), _d = _c.next(); !_d.done; _d = _c.next()) {\n            var stateId = _d.value;\n            var state = states[stateId];\n\n            if (state.states) {\n              try {\n                for (var _e = (e_9 = void 0, __values(state.events)), _f = _e.next(); !_f.done; _f = _e.next()) {\n                  var event_1 = _f.value;\n                  events.add(\"\".concat(event_1));\n                }\n              } catch (e_9_1) {\n                e_9 = {\n                  error: e_9_1\n                };\n              } finally {\n                try {\n                  if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                } finally {\n                  if (e_9) throw e_9.error;\n                }\n              }\n            }\n          }\n        } catch (e_8_1) {\n          e_8 = {\n            error: e_8_1\n          };\n        } finally {\n          try {\n            if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n          } finally {\n            if (e_8) throw e_8.error;\n          }\n        }\n      }\n\n      return this.__cache.events = Array.from(events);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(StateNode.prototype, \"ownEvents\", {\n    /**\r\n     * All the events that have transitions directly from this state node.\r\n     *\r\n     * Excludes any inert events.\r\n     */\n    get: function () {\n      var events = new Set(this.transitions.filter(function (transition) {\n        return !(!transition.target && !transition.actions.length && transition.internal);\n      }).map(function (transition) {\n        return transition.eventType;\n      }));\n      return Array.from(events);\n    },\n    enumerable: false,\n    configurable: true\n  });\n\n  StateNode.prototype.resolveTarget = function (_target) {\n    var _this = this;\n\n    if (_target === undefined) {\n      // an undefined target signals that the state node should not transition from that state when receiving that event\n      return undefined;\n    }\n\n    return _target.map(function (target) {\n      if (!isString(target)) {\n        return target;\n      }\n\n      var isInternalTarget = target[0] === _this.delimiter; // If internal target is defined on machine,\n      // do not include machine key on target\n\n      if (isInternalTarget && !_this.parent) {\n        return _this.getStateNodeByPath(target.slice(1));\n      }\n\n      var resolvedTarget = isInternalTarget ? _this.key + target : target;\n\n      if (_this.parent) {\n        try {\n          var targetStateNode = _this.parent.getStateNodeByPath(resolvedTarget);\n\n          return targetStateNode;\n        } catch (err) {\n          throw new Error(\"Invalid transition definition for state node '\".concat(_this.id, \"':\\n\").concat(err.message));\n        }\n      } else {\n        return _this.getStateNodeByPath(resolvedTarget);\n      }\n    });\n  };\n\n  StateNode.prototype.formatTransition = function (transitionConfig) {\n    var _this = this;\n\n    var normalizedTarget = normalizeTarget(transitionConfig.target);\n    var internal = 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {\n      return isString(_target) && _target[0] === _this.delimiter;\n    }) : true;\n    var guards = this.machine.options.guards;\n    var target = this.resolveTarget(normalizedTarget);\n\n    var transition = __assign(__assign({}, transitionConfig), {\n      actions: toActionObjects(toArray(transitionConfig.actions)),\n      cond: toGuard(transitionConfig.cond, guards),\n      target: target,\n      source: this,\n      internal: internal,\n      eventType: transitionConfig.event,\n      toJSON: function () {\n        return __assign(__assign({}, transition), {\n          target: transition.target ? transition.target.map(function (t) {\n            return \"#\".concat(t.id);\n          }) : undefined,\n          source: \"#\".concat(_this.id)\n        });\n      }\n    });\n\n    return transition;\n  };\n\n  StateNode.prototype.formatTransitions = function () {\n    var e_10, _a;\n\n    var _this = this;\n\n    var onConfig;\n\n    if (!this.config.on) {\n      onConfig = [];\n    } else if (Array.isArray(this.config.on)) {\n      onConfig = this.config.on;\n    } else {\n      var _b = this.config.on,\n          _c = WILDCARD,\n          _d = _b[_c],\n          wildcardConfigs = _d === void 0 ? [] : _d,\n          strictTransitionConfigs_1 = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n\n      onConfig = flatten(Object.keys(strictTransitionConfigs_1).map(function (key) {\n        if (!IS_PRODUCTION && key === NULL_EVENT) {\n          warn(false, \"Empty string transition configs (e.g., `{ on: { '': ... }}`) for transient transitions are deprecated. Specify the transition in the `{ always: ... }` property instead. \" + \"Please check the `on` configuration for \\\"#\".concat(_this.id, \"\\\".\"));\n        }\n\n        var transitionConfigArray = toTransitionConfigArray(key, strictTransitionConfigs_1[key]);\n\n        if (!IS_PRODUCTION) {\n          validateArrayifiedTransitions(_this, key, transitionConfigArray);\n        }\n\n        return transitionConfigArray;\n      }).concat(toTransitionConfigArray(WILDCARD, wildcardConfigs)));\n    }\n\n    var eventlessConfig = this.config.always ? toTransitionConfigArray('', this.config.always) : [];\n    var doneConfig = this.config.onDone ? toTransitionConfigArray(String(done(this.id)), this.config.onDone) : [];\n\n    if (!IS_PRODUCTION) {\n      warn(!(this.config.onDone && !this.parent), \"Root nodes cannot have an \\\".onDone\\\" transition. Please check the config of \\\"\".concat(this.id, \"\\\".\"));\n    }\n\n    var invokeConfig = flatten(this.invoke.map(function (invokeDef) {\n      var settleTransitions = [];\n\n      if (invokeDef.onDone) {\n        settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(doneInvoke(invokeDef.id)), invokeDef.onDone)), false));\n      }\n\n      if (invokeDef.onError) {\n        settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(error(invokeDef.id)), invokeDef.onError)), false));\n      }\n\n      return settleTransitions;\n    }));\n    var delayedTransitions = this.after;\n    var formattedTransitions = flatten(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(doneConfig), false), __read(invokeConfig), false), __read(onConfig), false), __read(eventlessConfig), false).map(function (transitionConfig) {\n      return toArray(transitionConfig).map(function (transition) {\n        return _this.formatTransition(transition);\n      });\n    }));\n\n    try {\n      for (var delayedTransitions_1 = __values(delayedTransitions), delayedTransitions_1_1 = delayedTransitions_1.next(); !delayedTransitions_1_1.done; delayedTransitions_1_1 = delayedTransitions_1.next()) {\n        var delayedTransition = delayedTransitions_1_1.value;\n        formattedTransitions.push(delayedTransition);\n      }\n    } catch (e_10_1) {\n      e_10 = {\n        error: e_10_1\n      };\n    } finally {\n      try {\n        if (delayedTransitions_1_1 && !delayedTransitions_1_1.done && (_a = delayedTransitions_1.return)) _a.call(delayedTransitions_1);\n      } finally {\n        if (e_10) throw e_10.error;\n      }\n    }\n\n    return formattedTransitions;\n  };\n\n  return StateNode;\n}();\n\nexport { StateNode };\n","import { StateNode } from './StateNode.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar warned = false;\nfunction Machine(config, options, initialContext) {\n  if (initialContext === void 0) {\n    initialContext = config.context;\n  }\n\n  return new StateNode(config, options, initialContext);\n}\nfunction createMachine(config, options) {\n  if (!IS_PRODUCTION && !('predictableActionArguments' in config) && !warned) {\n    warned = true;\n    console.warn('It is highly recommended to set `predictableActionArguments` to `true` when using `createMachine`. https://xstate.js.org/docs/guides/actions.html');\n  }\n\n  return new StateNode(config, options);\n}\n\nexport { Machine, createMachine };\n","import type Distance from '../dynamicNumbers/Distance'\r\nimport type DynamicNumber from '../dynamicNumbers/DynamicNumber'\r\nimport type Circle from '../elements/lines/Circle'\r\nimport type Line from '../elements/lines/Line'\r\nimport type Segment from '../elements/lines/Segment'\r\nimport type Point from '../elements/points/Point'\r\nimport type Vector from '../elements/vector/Vector'\r\nimport type Figure from '../Figure'\r\n\r\n/**\r\n * Analyse l'objet de la sauvegarde et si le type est pris en charge alors on créé l'élément\r\n * @param figure - Espace de travail\r\n * @param json - Objet\r\n * @param eraseHistory - Faut-il repartir d'un historique vide ? Oui pour un chargement, non pour l'utilisation de undo et redo\r\n * @returns - Tableau avec tous les éléments créés\r\n */\r\nexport function loadJson (figure: Figure, json: object, eraseHistory = false): void {\r\n  if (eraseHistory) {\r\n    figure.stackUndo = []\r\n    figure.stackRedo = []\r\n  }\r\n  figure.elements.clear()\r\n  if (figure.divFigure != null) figure.divFigure.innerHTML = ''\r\n  figure.clearHtml()\r\n  figure.divFigure?.appendChild(figure.svg)\r\n  figure.pointer = figure.create('Point', { isChild: true, isFree: false, isVisible: false, shape: '', x: 0, y: 0 })\r\n  figure.pointer.type = 'pointer'\r\n  for (const options of Object.values(json)) {\r\n    // console.log(options)\r\n    // Clone map figure.elements\r\n    // const elements = new Map()\r\n    // for (const [key, value] of figure.elements) {\r\n    //   elements.set(key, value)\r\n    // }\r\n    // console.log(elements)\r\n    if (options.type === 'Point') {\r\n      figure.create('Point', { x: options.x, y: options.y, ...options })\r\n    } else if (options.type === 'Arc') {\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      const start = figure.elements.get(options.idStart) as Point\r\n      const dynamicAngle = figure.elements.get(options.idDynamicAngle) as DynamicNumber\r\n      figure.create('Arc', { center, dynamicAngle, start, ...options })\r\n    } else if (options.type === 'ArcByCenterRadiusAndAngles') {\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      const radius = options.radius\r\n      const startAngle = options.startAngle\r\n      const endAngle = options.endAngle\r\n      figure.create('ArcByCenterRadiusAndAngles', { center, endAngle, radius, startAngle, ...options })\r\n    } else if (options.type === 'BisectorByPoints') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const pointOnSide1 = figure.elements.get(options.idPointOnSide1) as Point\r\n      const pointOnSide2 = figure.elements.get(options.idPointOnSide2) as Point\r\n      figure.create('BisectorByPoints', { origin, pointOnSide1, pointOnSide2, ...options })\r\n    } else if (options.type === 'Circle') {\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      figure.create('Circle', { center, radius: options.radius, ...options })\r\n    } else if (options.type === 'CircleCenterPoint') {\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      const point = figure.elements.get(options.idPoint) as Point\r\n      figure.create('CircleCenterPoint', { center, point, ...options })\r\n    } else if (options.type === 'CircleDynamicRadius') {\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      const radius = figure.elements.get(options.idRadius) as Distance\r\n      figure.create('CircleCenterDynamicRadius', { center, radius, ...options })\r\n    } else if (options.type === 'Distance') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('Distance', { point1, point2, ...options })\r\n    } else if (options.type === 'ElementByTranslationByPoints') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      const origin = figure.elements.get(options.idOrigin) as Circle | Point | Segment\r\n      figure.create('ElementByTranslationByPoints', { origin, point1, point2, ...options })\r\n    } else if (options.type === 'ElementByReflectOverLine') {\r\n      const line = figure.elements.get(options.idLine) as Line\r\n      const origin = figure.elements.get(options.idOrigin) as Circle | Point | Segment\r\n      figure.create('ElementByReflectOverLine', { line, origin, ...options })\r\n    } else if (options.type === 'PointOnLine') {\r\n      const line = figure.elements.get(options.idLine) as Line\r\n      figure.create('PointOnLine', { line, ...options })\r\n    } else if (options.type === 'PointOnCircle') {\r\n      const circle = figure.elements.get(options.idCircle) as Circle\r\n      figure.create('PointOnCircle', { circle, ...options })\r\n    } else if (options.type === 'Graph') {\r\n      figure.create('Graph', { ...options })\r\n    } else if (options.type === 'Grid') {\r\n      figure.create('Grid', { ...options })\r\n    } else if (options.type === 'Line') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('Line', { point1, point2, ...options })\r\n    } else if (options.type === 'Middle') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('Middle', { point1, point2, ...options })\r\n    } else if (options.type === 'LineByPointVector') {\r\n      const vector = figure.elements.get(options.idVector)\r\n      const point = figure.elements.get(options.idPoint)\r\n      figure.create('LineByPointVector', { point, vector, ...options })\r\n    } else if (options.type === 'LineParallel') {\r\n      const line = figure.elements.get(options.idLine)\r\n      const point = figure.elements.get(options.idPoint)\r\n      figure.create('LineParallel', { line, point, ...options })\r\n    } else if (options.type === 'LinePerpendicular') {\r\n      const line = figure.elements.get(options.idLine)\r\n      const point = figure.elements.get(options.idPoint)\r\n      figure.create('LinePerpendicular', { line, point, ...options })\r\n    } else if (options.type === 'PerpendicularBisector') {\r\n      const segment = figure.elements.get(options.idSegment)\r\n      figure.create('PerpendicularBisector', { segment, ...options })\r\n    } else if (options.type === 'PerpendicularBisectorByPoints') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('PerpendicularBisectorByPoints', { point1, point2, ...options })\r\n    } else if (options.type === 'PointByTranslation') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const vector = figure.elements.get(options.idVector) as Vector\r\n      figure.create('PointByTranslation', { origin, vector, ...options })\r\n    } else if (options.type === 'PointByTranslationByPoints') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('PointByTranslationByPoints', { origin, point1, point2, ...options })\r\n    } else if (options.type === 'PointByDilate') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      figure.create('PointByDilate', { center, origin, ...options })\r\n    } else if (options.type === 'ElementByReflect') {\r\n      const origin = figure.elements.get(options.idTransformationOrigin) as Point\r\n      const center = figure.elements.get(options.idTransformationCenter) as Point\r\n      origin.reflect(center, options)\r\n    } else if (options.type === 'ElementByDilate') {\r\n      const origin = figure.elements.get(options.idTransformationOrigin) as Point\r\n      const center = figure.elements.get(options.idTransformationCenter) as Point\r\n      const factor = options.transformationFactor\r\n      origin.dilate(center, factor, options)\r\n    } else if (options.type === 'PointByDynamicRotation') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      const dynamicAngle = figure.elements.get(options.idDynamicAngle) as Point\r\n      figure.create('PointByDynamicRotation', { center, dynamicAngle, origin, ...options })\r\n    } else if (options.type === 'PointByProjection') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const line = figure.elements.get(options.idLine) as Segment\r\n      figure.create('PointByProjection', { line, origin, ...options })\r\n    } else if (options.type === 'PointByProjectionOnAxisX') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      figure.create('PointByProjectionOnAxisX', { origin, ...options })\r\n    } else if (options.type === 'PointByProjectionOnAxisY') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      figure.create('PointByProjectionOnAxisY', { origin, ...options })\r\n    } else if (options.type === 'PointByReflectOverLine') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const line = figure.elements.get(options.idLine) as Segment\r\n      figure.create('PointByReflectOverLine', { line, origin, ...options })\r\n    } else if (options.type === 'PointBySimilarity') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      figure.create('PointBySimilarity', { center, origin, ...options })\r\n    } else if (options.type === 'PointByRotation') {\r\n      const origin = figure.elements.get(options.idOrigin) as Point\r\n      const center = figure.elements.get(options.idCenter) as Point\r\n      figure.create('PointByRotation', { center, origin, ...options })\r\n    } else if (options.type === 'PointIntersectionLL') {\r\n      const line1 = figure.elements.get(options.idLine1) as Line\r\n      const line2 = figure.elements.get(options.idLine2) as Line\r\n      figure.create('PointIntersectionLL', { line1, line2, ...options })\r\n    } else if (options.type === 'PointIntersectionCC') {\r\n      const circle1 = figure.elements.get(options.idCircle1) as Circle\r\n      const circle2 = figure.elements.get(options.idCircle2) as Circle\r\n      figure.create('PointIntersectionCC', { circle1, circle2, ...options })\r\n    } else if (options.type === 'PointIntersectionLC') {\r\n      const line = figure.elements.get(options.idLine) as Line\r\n      const circle = figure.elements.get(options.idCircle) as Circle\r\n      figure.create('PointIntersectionLC', { circle, line, ...options })\r\n    } else if (options.type === 'PointOnGraph') {\r\n      const graph = figure.elements.get(options.idGraph)\r\n      figure.create('PointOnGraph', { graph, ...options })\r\n    } else if (options.type === 'Segment') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('Segment', { point1, point2, ...options })\r\n    } else if (options.type === 'Polyline') {\r\n      const points = []\r\n      for (const idPoint of options.idPoints) {\r\n        points.push(figure.elements.get(idPoint))\r\n      }\r\n      figure.create('Polyline', { points, ...options })\r\n    } else if (options.type === 'Polygon') {\r\n      const points = []\r\n      for (const idPoint of options.idPoints) {\r\n        points.push(figure.elements.get(idPoint))\r\n      }\r\n      figure.create('Polygon', { points, ...options })\r\n    } else if (options.type === 'Ray') {\r\n      const point1 = figure.elements.get(options.idPoint1) as Point\r\n      const point2 = figure.elements.get(options.idPoint2) as Point\r\n      figure.create('Ray', { point1, point2, ...options })\r\n    } else if (options.type === 'TextByPosition') {\r\n      figure.create('TextByPosition', { text: options.text, x: options.x, y: options.y, ...options })\r\n    } else if (options.type === 'TextByPoint') {\r\n      const point = figure.elements.get(options.idPoint) as Point\r\n      figure.create('TextByPoint', { point, text: options.text, ...options })\r\n    } else if (options.type === 'TextDynamicByPosition') {\r\n      const dynamicNumber = figure.elements.get(options.idDynamicNumber) as DynamicNumber\r\n      figure.create('TextDynamicByPosition', { dynamicNumber, ...options })\r\n    } else if (options.type === 'Vector') {\r\n      const origin = figure.elements.get(options.idOrigin)\r\n      figure.create('Vector', { origin, ...options })\r\n    } else if (options.type === 'VectorByPoints') {\r\n      const origin = figure.elements.get(options.idOrigin)\r\n      const point1 = figure.elements.get(options.idPoint1)\r\n      const point2 = figure.elements.get(options.idPoint2)\r\n      figure.create('VectorByPoints', { origin, point1, point2, ...options })\r\n    } else if (options.type === 'VectorPerpendicular') {\r\n      const origin = figure.elements.get(options.idOrigin)\r\n      const line = figure.elements.get(options.idLine)\r\n      figure.create('VectorPerpendicular', { line, origin, ...options })\r\n    }\r\n  }\r\n  // Pour la navigation dans l'historique on ne sauvegarde que le premier chargement\r\n  // les autres chargements proviennent de goBack() ou de goForward()\r\n  if (figure.stackUndo.length === 0) figure.saveState()\r\n  if (eraseHistory) {\r\n    if ('history' in json && json.history !== null) {\r\n      const history = json.history as string[]\r\n      figure.stackUndo = [...history]\r\n      figure.handleUndoRedoButtons()\r\n      // Comportement irrégulier sans ce Undo que je ne m'explique pas\r\n      figure.undo()\r\n    }\r\n  }\r\n}\r\n","// Distance entre l'endroit où on clique et les élément\r\nexport const defaultDistanceClick = 15\r\n\r\n// Taille de l'historique pour la navigation avec le bouton précédent\r\nexport const defaultHistorySize = 100\r\n\r\n// Nombre de chiffres après la virgule dans les affichages\r\nexport const displayDigits = 2\r\n\r\n// Pente d'une droite verticale\r\nexport const defaultMaxSlope = 10 ** 4\r\n\r\n// Pente d'une droite horizontale\r\nexport const defaultMinSlope = 10 ** -4\r\n\r\n// Ecart entre le lieu du clic et la position de la fenêtre modale en unité de la figure\r\nexport const defaultDeltaXModal = 1\r\n\r\n// Espace horizontal laissé pour les boutons\r\nexport const defaultButtonsWidth = 300\r\n\r\n// Espace vertical laissé pour le footer\r\nexport const defaultFooterHeight = 30\r\n\r\n// Largeur minimale du svg\r\nexport const defaultMinWidth = 200\r\n\r\n// Hauteur minimale du svg\r\nexport const defaultMinHeight = 60\r\n\r\n// Style du divUserMessage\r\nexport const defaultDivUserMessageHeight = '50px'\r\nexport const defaultDivUserMessageFontSize = 'large'\r\n\r\n// Déplacement en unités lors du dragAll\r\nexport const defaultDragAllDelta = 0.1\r\n\r\n// Couleurs\r\nexport const colors = {\r\n  back: '#f5f1f3',\r\n  backcorrection: '#E0A588',\r\n  backdark: '#dadbdf',\r\n  backdarker: '#cecfd4',\r\n  backnav: '#F15929',\r\n  backnavlight: '#f56d45',\r\n  dark: '#F45E27',\r\n  darkest: '#E64A10',\r\n  darkmode: '#2e2e2b',\r\n  darkmodelight: '#363633',\r\n  DEFAULT: '#F15929',\r\n  light: '#f56d45',\r\n  lightest: '#f87f5c',\r\n  title: '#342A34',\r\n  titleexercise: '#F15929',\r\n  titlelight: '#f5f1f3',\r\n  titlemenu: '#F15929'\r\n}\r\n\r\nexport const orangeMathalea = '#F15929'\r\nexport const orangeMathaleaLight = 'rgba(241, 89, 41, 0.5)'\r\n\r\nconst defaultOptions = {\r\n  animationStepInterval: 3000,\r\n  automaticUserMessage: true,\r\n  borderSize: 0.2,\r\n  color: 'black',\r\n  displayGrid: false,\r\n  fillColor: 'blue',\r\n  fillOpacity: 0.2,\r\n  fontSize: '1em',\r\n  isDashed: false,\r\n  labelAutomaticForPoints: undefined,\r\n  labelDxInPixels: 15,\r\n  labelDyInPixels: 15,\r\n  latexHeight: 12,\r\n  latexWidth: 18,\r\n  limitNumberOfElement: new Map(),\r\n  moveTextGrid: 15,\r\n  pointDescriptionWithCoordinates: true,\r\n  pointSize: 5,\r\n  thickness: 1,\r\n  thicknessForPoint: 2,\r\n  tmpColor: 'gray',\r\n  tmpFillColor: orangeMathaleaLight,\r\n  tmpFillOpacity: 0.2,\r\n  tmpIsDashed: true,\r\n  tmpThickness: 1\r\n}\r\n\r\nexport default defaultOptions\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\nimport type Line from '../lines/Line'\r\nimport type Segment from '../lines/Segment'\r\nimport type Point from '../points/Point'\r\n\r\nimport { defaultMaxSlope, defaultMinSlope } from '../defaultValues'\r\n\r\n/**\r\n * Classe de méthodes statiques pour des calculs sur les coordonnées\r\n */\r\nexport class Coords {\r\n  x: number\r\n  y: number\r\n  constructor (x: number = 0, y: number = 0) {\r\n    this.x = x\r\n    this.y = y\r\n  }\r\n}\r\n\r\nexport function intersectionCCCoord (circle1: Circle, circle2: Circle, n: 1 | 2 = 1): Coords {\r\n  try {\r\n    const O1 = circle1.center\r\n    const O2 = circle2.center\r\n    const r0 = circle1._radius\r\n    const r1 = circle2._radius\r\n    const x0 = O1.x\r\n    const x1 = O2.x\r\n    const y0 = O1.y\r\n    const y1 = O2.y\r\n    if (x0 === undefined || x1 === undefined || y0 === undefined || y1 === undefined) return new Coords()\r\n    const dx = x1 - x0\r\n    const dy = y1 - y0\r\n    const d = Math.sqrt(dy * dy + dx * dx)\r\n    if (d > r0 + r1) {\r\n      return { x: NaN, y: NaN }\r\n    }\r\n    if (d < Math.abs(r0 - r1)) {\r\n      return { x: NaN, y: NaN }\r\n    }\r\n    const a = (r0 * r0 - r1 * r1 + d * d) / (2.0 * d)\r\n    const x2 = x0 + (dx * a) / d\r\n    const y2 = y0 + (dy * a) / d\r\n    const h = Math.sqrt(r0 * r0 - a * a)\r\n    const rx = -dy * (h / d)\r\n    const ry = dx * (h / d)\r\n    const xi = x2 + rx\r\n    const xiPrime = x2 - rx\r\n    const yi = y2 + ry\r\n    const yiPrime = y2 - ry\r\n    if (n === 1) {\r\n      if (yiPrime > yi) {\r\n        return new Coords(xiPrime, yiPrime)\r\n      } else {\r\n        return new Coords(xi, yi)\r\n      }\r\n    } else {\r\n      if (yiPrime > yi) {\r\n        return new Coords(xi, yi)\r\n      } else {\r\n        return new Coords(xiPrime, yiPrime)\r\n      }\r\n    }\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\nexport function intersectionLLCoord (line1: Line, line2: Line): Coords {\r\n  try {\r\n    const [da, db, dc] = line1.equation\r\n    const [fa, fb, fc] = line2.equation\r\n    let x: number\r\n    let y: number\r\n    if (fa * db - fb * da === 0) {\r\n      return { x: NaN, y: NaN }\r\n    } else {\r\n      y = (fc * da - dc * fa) / (fa * db - fb * da)\r\n    }\r\n    if (da === 0) { // si d est horizontale alors f ne l'est pas donc fa<>0\r\n      x = (-fc - fb * y) / fa\r\n    } else { // d n'est pas horizontale donc ...\r\n      x = (-dc - db * y) / da\r\n    }\r\n    // On teste le cas du segment ou de la demi-droite\r\n    let isIntersectionExisting = true\r\n    if (line1.type === 'Segment' && (x < Math.min(line1.point1.x, line1.point2.x) || x > Math.max(line1.point1.x, line1.point2.x) || y < Math.min(line1.point1.y, line1.point2.y) || y > Math.max(line1.point1.y, line1.point2.y))) {\r\n      isIntersectionExisting = false\r\n    }\r\n    if (line2.type === 'Segment' && (x < Math.min(line2.point1.x, line2.point2.x) || x > Math.max(line2.point1.x, line2.point2.x) || y < Math.min(line2.point1.y, line2.point2.y) || y > Math.max(line2.point1.y, line2.point2.y))) {\r\n      isIntersectionExisting = false\r\n    }\r\n    if (line1.type === 'Ray') {\r\n      // Direction gauche droite\r\n      if (line1.point1.x < line1.point2.x && x < line1.point1.x) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction droite gauche\r\n      if (line1.point1.x > line1.point2.x && x > line1.point1.x) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction bas haut\r\n      if (line1.point1.y < line1.point2.y && y < line1.point1.y) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction haut bas\r\n      if (line1.point1.y > line1.point2.y && y > line1.point1.y) {\r\n        isIntersectionExisting = false\r\n      }\r\n    }\r\n    if (line2.type === 'Ray') {\r\n      // Direction gauche droite\r\n      if (line2.point1.x < line2.point2.x && x < line2.point1.x) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction droite gauche\r\n      if (line2.point1.x > line2.point2.x && x > line2.point1.x) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction bas haut\r\n      if (line2.point1.y < line2.point2.y && y < line2.point1.y) {\r\n        isIntersectionExisting = false\r\n      }\r\n      // Direction haut bas\r\n      if (line2.point1.y > line2.point2.y && y > line2.point1.y) {\r\n        isIntersectionExisting = false\r\n      }\r\n    }\r\n    if (!isIntersectionExisting) {\r\n      x = NaN\r\n      y = NaN\r\n    }\r\n    return new Coords(x, y)\r\n  } catch (error) {\r\n    console.error(error)\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\nexport function distance (A: Coords | Point, B: Coords | Point): number {\r\n  return Math.hypot(A.x - B.x, A.y - B.y)\r\n}\r\n\r\nexport function intersectionSCCoord (L: Segment, C: Circle): Coords {\r\n  try {\r\n    const { x } = intersectionLCCoord(L, C, 1)\r\n    const [A, B] = [L.point1, L.point2]\r\n    if (x !== undefined && distance(A, B) > C.radius) {\r\n      if (x < Math.max(A.x, B.x) && x > Math.min(A.x, B.x)) {\r\n        return intersectionLCCoord(L, C, 1)\r\n      } else {\r\n        return intersectionLCCoord(L, C, 2)\r\n      }\r\n    } else return new Coords(NaN, NaN)\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\nexport function intersectionLCCoord (D: Line, C: Circle, n: 1 | 2 = 1): Coords {\r\n  try {\r\n    const O = C.center\r\n    const r = C.radius\r\n    const [a, b, c] = D.equation\r\n    const xO = O.x\r\n    const yO = O.y\r\n    let Delta: number, delta: number, xi: number, yi: number, xiPrime: number, yiPrime: number\r\n    if (b === 0) {\r\n      // la droite est verticale\r\n      xi = -c / a\r\n      xiPrime = xi\r\n      Delta = 4 * (-xO * xO - (c * c) / (a * a) - (2 * xO * c) / a + r * r)\r\n      if (Delta < 0) return new Coords(NaN, NaN)\r\n      else if (Math.abs(Delta) < 10 ** (-6)) {\r\n        // un seul point d'intersection\r\n        yi = yO + Math.sqrt(Delta) / 2\r\n        yiPrime = yi\r\n      } else {\r\n        // deux points d'intersection\r\n        yi = yO - Math.sqrt(Delta) / 2\r\n        yiPrime = yO + Math.sqrt(Delta) / 2\r\n      }\r\n    } else if (a === 0) {\r\n      // la droite est horizontale\r\n      yi = -c / b\r\n      yiPrime = yi\r\n      Delta = 4 * (-yO * yO - (c * c) / (b * b) - (2 * yO * c) / b + r * r)\r\n      if (Delta < 0) return new Coords(NaN, NaN)\r\n      else if (Math.abs(Delta) < 10 ** (-6)) {\r\n        // un seul point d'intersection\r\n        xi = xO + Math.sqrt(Delta) / 2\r\n        xiPrime = xi\r\n      } else {\r\n        // deux points d'intersection\r\n        xi = xO - Math.sqrt(Delta) / 2\r\n        xiPrime = xO + Math.sqrt(Delta) / 2\r\n      }\r\n    } else {\r\n      // cas général\r\n      Delta = (2 * ((a * c) / (b * b) + (yO * a) / b - xO)) ** 2 -\r\n            4 *\r\n            (1 + (a / b) ** 2) *\r\n            (xO * xO + yO * yO + (c / b) ** 2 + (2 * yO * c) / b - r * r)\r\n      if (Delta < 0) return new Coords(NaN, NaN)\r\n      else if (Math.abs(Delta) < 10 ** (-6)) {\r\n        // un seul point d'intersection\r\n        delta = Math.sqrt(Delta)\r\n        xi = (-2 * ((a * c) / (b * b) + (yO * a) / b - xO) - delta) /\r\n              (2 * (1 + (a / b) ** 2))\r\n        xiPrime = xi\r\n        yi = (-a * xi - c) / b\r\n        yiPrime = yi\r\n      } else {\r\n        // deux points d'intersection\r\n        delta = Math.sqrt(Delta)\r\n        xi = (-2 * ((a * c) / (b * b) + (yO * a) / b - xO) - delta) /\r\n              (2 * (1 + (a / b) ** 2))\r\n        xiPrime = (-2 * ((a * c) / (b * b) + (yO * a) / b - xO) + delta) /\r\n              (2 * (1 + (a / b) ** 2))\r\n        yi = (-a * xi - c) / b\r\n        yiPrime = (-a * xiPrime - c) / b\r\n      }\r\n    }\r\n    if (n === 1) {\r\n      if (yiPrime > yi) {\r\n        return new Coords(xiPrime, yiPrime)\r\n      } else {\r\n        return new Coords(xi, yi)\r\n      }\r\n    } else {\r\n      if (yiPrime > yi) {\r\n        return new Coords(xi, yi)\r\n      } else {\r\n        return new Coords(xiPrime, yiPrime)\r\n      }\r\n    }\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @param origin Point\r\n * @param line Droite\r\n * @returns { x, y } coordonnées du projeté orthogonale sur d\r\n * @author Jean-Claude Lhote\r\n */\r\nexport function orthogonalProjectionCoord (origin: Coords | Point, line: Line): Coords {\r\n  try {\r\n    const [a, b, c] = line.equation\r\n    const k = 1 / (a * a + b * b)\r\n    let x: number | undefined, y: number | undefined\r\n    if (a === 0) {\r\n      x = origin.x\r\n      y = -c / b\r\n    } else if (b === 0) {\r\n      y = origin.y\r\n      x = -c / a\r\n    } else {\r\n      if (origin.x === undefined || origin.y === undefined) return new Coords()\r\n      x = k * (b * b * origin.x - a * b * origin.y - a * c)\r\n      y = k * (-a * b * origin.x + a * a * origin.y + (a * a * c) / b) - c / b\r\n    }\r\n    return new Coords(x, y)\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\n/**\r\n   *\r\n   * @param A Antécédent (Point ou[x,y])\r\n   * @param O Centre (Point ou[x,y])\r\n   * @param angle Image\r\n   * @returns [x, y] coordonnées de l'image\r\n   */\r\nexport function rotationCoord (A: Coords | Point, O: Coords | Point, angle: number): Coords {\r\n  try {\r\n    if (O.x === undefined || O.y === undefined || A.x === undefined || A.y === undefined) return new Coords()\r\n    const x = (O.x + (A.x - O.x) * Math.cos((angle * Math.PI) / 180) - (A.y - O.y) * Math.sin((angle * Math.PI) / 180))\r\n    const y = (O.y + (A.x - O.x) * Math.sin((angle * Math.PI) / 180) + (A.y - O.y) * Math.cos((angle * Math.PI) / 180))\r\n    return new Coords(x, y)\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\n/**\r\n     *\r\n     * @param A Antécédent\r\n     * @param O Centre\r\n     * @param k Coefficient\r\n     * @returns [x, y] coordonnées de l'image\r\n     */\r\nexport function homothetieCoord (A: Coords | Point, O: Coords | Point, k: number): Coords {\r\n  if (A.x === undefined || A.y === undefined || O.x === undefined || O.y === undefined) return new Coords()\r\n  try {\r\n    const x = (O.x + k * (A.x - O.x))\r\n    const y = (O.y + k * (A.y - O.y))\r\n    return new Coords(x, y)\r\n  } catch {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\n/**\r\n     *\r\n     * @param A Antécédent\r\n     * @param O Centre\r\n     * @param k Coefficient\r\n     * @param angle Angle en degrés\r\n     * @returns [x, y] coordonnées de l'image\r\n     */\r\nexport function similitudeCoord (A: Coords | Point, O: Coords | Point, k: number, angle: number): Coords {\r\n  if (A.x === undefined || A.y === undefined || O.x === undefined || O.y === undefined) return new Coords()\r\n  try {\r\n    const angleRadian = angle * Math.PI / 180\r\n    const x = (O.x + k * (Math.cos(angleRadian) * (A.x - O.x) - Math.sin(angleRadian) * (A.y - O.y)))\r\n    const y = (O.y + k * (Math.cos(angleRadian) * (A.y - O.y) + Math.sin(angleRadian) * (A.x - O.x)))\r\n    return new Coords(x, y)\r\n  } catch (error) {\r\n    return new Coords(NaN, NaN)\r\n  }\r\n}\r\n\r\nexport function reflectOverLineCoord (origin: Point, line: Line): Coords {\r\n  let x: number, y: number\r\n  const [a, b, c] = line.equation\r\n  const k = 1 / (a * a + b * b)\r\n  if (a === 0) {\r\n    x = origin.x\r\n    y = -(origin.y + (2 * c) / b)\r\n  } else if (b === 0) {\r\n    y = origin.y\r\n    x = -(origin.x + (2 * c) / a)\r\n  } else {\r\n    x = k * ((b * b - a * a) * origin.x - 2 * a * b * origin.y - 2 * a * c)\r\n    y = k * ((a * a - b * b) * origin.y - 2 * a * b * origin.x + (a * a * c) / b - b * c) - c / b\r\n  }\r\n  return { x, y }\r\n}\r\n\r\nexport function angleOriented (A: Coords | Point, O: Coords | Point, B: Coords | Point): number {\r\n  const v = { x: B.x - O.x, y: B.y - O.y }\r\n  const u = { x: A.x - O.x, y: A.y - O.y }\r\n  const s = ((u.x * v.y - v.x * u.y) >= 0) ? 1 : -1 // composante z du produit vectoriel OA^OB\r\n  return s * angle(A, O, B)\r\n}\r\n\r\nexport function angle (A: Coords | Point, O: Coords | Point, B: Coords | Point): number {\r\n  const OA = { norme: 0, x: A.x - O.x, y: A.y - O.y }\r\n  OA.norme = Math.sqrt(OA.x ** 2 + OA.y ** 2)\r\n  const OB = { norme: 0, x: B.x - O.x, y: B.y - O.y }\r\n  OB.norme = Math.sqrt(OB.x ** 2 + OB.y ** 2)\r\n  const scalaire = OA.x * OB.x + OA.y * OB.y\r\n  if (OA.norme * OB.norme < defaultMinSlope) {\r\n    return 0 // On évite de retouner un angle NaN, zéro, c'est toujours mieux que NaN.\r\n  }\r\n  return (Math.acos(scalaire / (OA.norme * OB.norme))) * 180 / Math.PI\r\n}\r\n\r\n/** Renvoie [x1, y1, x2, y2] les coordonnées des extrémités du tracé */\r\nexport function getCoordsOut (A: Coords | Point, B: Coords | Point, figure: Figure): [number, number, number, number] {\r\n  if (A.x === undefined || A.y === undefined || B.x === undefined || B.y === undefined ||\r\n    Number.isNaN(A.x) || Number.isNaN(A.y) || Number.isNaN(B.x) || Number.isNaN(B.y)) return [NaN, NaN, NaN, NaN]\r\n  try {\r\n    let pente = defaultMaxSlope\r\n    if (B.x !== A.x) {\r\n      pente = (B.y - A.y) / (B.x - A.x)\r\n    }\r\n    if (Math.abs(pente) >= defaultMaxSlope) return [A.x, figure.yMax, A.x, figure.yMin]\r\n    if (Math.abs(pente) < defaultMinSlope) return [figure.xMin, A.y, figure.xMax, A.y]\r\n    let xOutLeft: number, yOutLeft: number\r\n    let n = 0\r\n    while (true) {\r\n      xOutLeft = A.x + n\r\n      yOutLeft = A.y + n * pente\r\n      n++\r\n      if (xOutLeft > figure.xMax + 1 || yOutLeft > figure.yMax + 1 || yOutLeft < figure.yMin - 1) break\r\n    }\r\n    let xOutRight: number, yOutRight: number\r\n    n = 0\r\n    while (true) {\r\n      xOutRight = A.x + n\r\n      yOutRight = A.y + n * pente\r\n      n--\r\n      if (xOutRight < figure.xMin - 1 || yOutRight > figure.yMax + 1 || yOutRight < figure.yMin - 1) break\r\n    }\r\n    return [xOutLeft, yOutLeft, xOutRight, yOutRight]\r\n  } catch (error) {\r\n    console.error('Erreur dans Coords.getCoordsOut', error)\r\n    return [NaN, NaN, NaN, NaN]\r\n  }\r\n}\r\n","export function round (value: number, precision = 4): number {\r\n  return Math.round(value * 10 ** precision) / 10 ** precision\r\n}\r\n\r\nexport function displayNumber (value: number, precision = 4): string {\r\n  if (round(value, precision).toLocaleString('fr-FR') === '-0') return '0'\r\n  return round(value, precision).toLocaleString('fr-FR').replace(',', '{,}')\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { round } from '../lib/format'\r\n\r\nexport default function syncShake ({ delta = 3, figure, repeat = 5, time = 1 }: { delta?: number, figure: Figure, repeat?: number, time?: number }): void {\r\n  const timePeranimation = time / repeat\r\n  // Retirer l'animation\r\n  figure.container.style.animation = 'none'\r\n  void figure.container.offsetWidth\r\n  // Remettre l'animation définie dans le css de index.html\r\n  figure.container.style.animation = `shake ${timePeranimation}s`\r\n  figure.container.style.animationIterationCount = repeat.toString()\r\n\r\n  const nearX = (x: number): number => {\r\n    const distanceFromBorder = 0.5\r\n    const newX = round(x + (Math.random() - 0.5) * delta, 1)\r\n    if (newX > figure.xMin + distanceFromBorder && newX < figure.xMax - distanceFromBorder) {\r\n      return newX\r\n    } else {\r\n      return x\r\n    }\r\n  }\r\n\r\n  const nearY = (y: number): number => {\r\n    const distanceFromBorder = 2\r\n    const newY = round(y + (Math.random() - 0.5) * delta, 1)\r\n    if (newY > figure.yMin + distanceFromBorder && newY < figure.yMax - distanceFromBorder) {\r\n      return newY\r\n    } else {\r\n      return y\r\n    }\r\n  }\r\n\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type === 'Point') as Point[]\r\n  const freePoints = points.filter(p => p.isFree)\r\n  for (let _ = 0; _ < repeat; _++) {\r\n    for (const point of freePoints) {\r\n      point.moveTo(nearX(point.x), nearY(point.y))\r\n    }\r\n  }\r\n  figure.container.style.animation = 'none'\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { angle as calculAngle } from '../elements/calculus/Coords'\r\nimport { round } from '../lib/format'\r\nimport syncShake from './syncShake'\r\n\r\n/**\r\n * Teste la valeur de l'angle label1label2label3\r\n * @returns {{isValid: boolean, message: string}} Un objet contenant deux propriétés :\r\n * `isValid`, un booléen indiquant si l'angle est valide, et `message`, une chaîne de caractères contenant un message descriptif.\r\n */\r\nexport default function checkAngle ({ angle, figure, label1, label2, label3 }: { angle: number, figure: Figure, label1: string, label2: string, label3: string }): { isValid: boolean, message: string } {\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type.includes('Point')) as Point[]\r\n  const matchPoints1 = points.filter(p => p.label === label1)\r\n  const matchPoints2 = points.filter(p => p.label === label2)\r\n  const matchPoints3 = points.filter(p => p.label === label3)\r\n  if (matchPoints1.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${label1}$ dans la figure.` }\r\n  } else if (matchPoints1.length > 1) {\r\n    return { isValid: false, message: `Il y a plusieurs points nommés $${label1}$ dans la figure.` }\r\n  } else if (matchPoints2.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${label2}$ dans la figure.` }\r\n  } else if (matchPoints2.length > 1) {\r\n    return { isValid: false, message: `Il y a plusieurs points nommés $${label2}$ dans la figure.` }\r\n  } else if (matchPoints3.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${label3}$ dans la figure.` }\r\n  } else if (matchPoints3.length > 1) {\r\n    return { isValid: false, message: `Il y a plusieurs points nommés $${label3}$ dans la figure.` }\r\n  } else {\r\n    let isValid = true\r\n    const point1 = matchPoints1[0]\r\n    const point2 = matchPoints2[0]\r\n    const point3 = matchPoints3[0]\r\n    for (let i = 0; i < 3; i++) {\r\n      isValid = isValid && round(calculAngle(point1, point2, point3), 2) === round(angle, 2)\r\n      syncShake({ figure })\r\n    }\r\n    if (isValid) {\r\n      return { isValid, message: `L'angle $\\\\widehat{${label1}${label2}${label3}}$ est bien toujours égal à ${angle}°.` }\r\n    } else {\r\n      return { isValid, message: `L'angle $\\\\widehat{${label1}${label2}${label3}}$ n'est pas toujours égal à ${angle}°.` }\r\n    }\r\n  }\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { displayNumber, round } from '../lib/format'\r\n\r\nexport default function checkCoords ({ checkOnlyAbscissa = false, figure, label, x, y = 0 }: { checkOnlyAbscissa?: boolean, figure: Figure, label: string, x: number, y?: number }): { isValid: boolean, message: string, points: Point[] } {\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type === 'Point') as Point[]\r\n  const matchPoints = points.filter(p => p.label === label)\r\n  if (matchPoints.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${label}$ dans la figure.`, points: [] }\r\n  } else if (matchPoints.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPoints.length} points $${label}$ dans la figure.`, points: matchPoints }\r\n  } else {\r\n    const point = matchPoints[0]\r\n    const isValid = round(point.x) === round(x) && round(point.y) === round(y)\r\n    let message: string\r\n    if (checkOnlyAbscissa) {\r\n      message = isValid ? '' : `Le point $${label}$ a pour abscisse $${displayNumber(point.x)}$ et non $${displayNumber(x)}$.`\r\n    } else {\r\n      message = isValid ? '' : `Le point $${label}$ a pour coordonnées $(${displayNumber(point.x)}\\\\;;\\\\;${displayNumber(point.y)})$ et non $(${displayNumber(x)}\\\\;;\\\\;${displayNumber(y)})$.`\r\n    }\r\n    return { isValid, message, points: [point] }\r\n  }\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { distance as calculDistance } from '../elements/calculus/Coords'\r\nimport syncShake from './syncShake'\r\n\r\nexport default function checkDistance ({ distance, figure, label1, label2, shake = true, time = 0 }: { distance: number, figure: Figure, label1: string, label2: string, shake?: boolean, time?: number }): { isValid: boolean, message: string } {\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type.includes('Point')) as Point[]\r\n  const matchPoints1 = points.filter(p => p.label === label1)\r\n  if (matchPoints1.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${label1}$ dans la figure.` }\r\n  } else if (matchPoints1.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPoints1.length} points $${label1}$ dans la figure.` }\r\n  } else {\r\n    const matchPoints2 = points.filter(p => p.label === label2)\r\n    if (matchPoints2.length === 0) {\r\n      return { isValid: false, message: `Il n'y a pas de point $${label2}$ dans la figure.` }\r\n    } else if (matchPoints2.length > 1) {\r\n      return { isValid: false, message: `Il y a ${matchPoints2.length} points $${label2}$ dans la figure.` }\r\n    } else {\r\n      const point1 = matchPoints1[0]\r\n      const point2 = matchPoints2[0]\r\n      let isValid = Math.abs(calculDistance(point1, point2) - distance) < 0.001\r\n      if (shake) {\r\n        syncShake({ figure, time })\r\n        isValid = isValid && Math.abs(calculDistance(point1, point2) - distance) < 0.001\r\n        syncShake({ figure, time })\r\n        isValid = isValid && Math.abs(calculDistance(point1, point2) - distance) < 0.001\r\n      }\r\n      let message = ''\r\n      if (isValid) {\r\n        message = `La distance entre les points $${label1}$ et $${label2}$ est bien toujours égale à ${distance}.`\r\n      } else {\r\n        message = `La distance entre les points $${label1}$ et $${label2}$ n'est pas toujours égale à ${distance}.`\r\n      }\r\n      return { isValid, message }\r\n    }\r\n  }\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { round } from '../lib/format'\r\nimport syncShake from './syncShake'\r\n\r\nexport default function checkParallel ({ figure, label1, label2, time = 0 }: { figure: Figure, label1: string, label2: string, time?: number }): { isValid: boolean, message: string } {\r\n  const [a, b] = label1.split('')\r\n  const [c, d] = label2.split('')\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type.includes('Point')) as Point[]\r\n  const matchPointsA = points.filter(p => p.label === a)\r\n  if (matchPointsA.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${a}$ dans la figure.` }\r\n  } else if (matchPointsA.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsA.length} points $${a}$ dans la figure.` }\r\n  }\r\n  const matchPointsB = points.filter(p => p.label === b)\r\n  if (matchPointsB.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${b}$ dans la figure.` }\r\n  } else if (matchPointsB.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsB.length} points $${b}$ dans la figure.` }\r\n  }\r\n  const matchPointsC = points.filter(p => p.label === c)\r\n  if (matchPointsC.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${c}$ dans la figure.` }\r\n  } else if (matchPointsC.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsC.length} points $${c}$ dans la figure.` }\r\n  }\r\n  const matchPointsD = points.filter(p => p.label === d)\r\n  if (matchPointsD.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${d}$ dans la figure.` }\r\n  } else if (matchPointsD.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsD.length} points $${d}$ dans la figure.` }\r\n  }\r\n  const pointA = matchPointsA[0]\r\n  const pointB = matchPointsB[0]\r\n  const pointC = matchPointsC[0]\r\n  const pointD = matchPointsD[0]\r\n  let isValid = round((pointB.y - pointA.y) / (pointB.x - pointA.x), 2) === round((pointD.y - pointC.y) / (pointD.x - pointC.x), 2)\r\n  syncShake({ figure, time })\r\n  isValid = isValid && round((pointB.y - pointA.y) / (pointB.x - pointA.x), 2) === round((pointD.y - pointC.y) / (pointD.x - pointC.x), 2)\r\n  syncShake({ figure, time })\r\n  isValid = isValid && round((pointB.y - pointA.y) / (pointB.x - pointA.x), 2) === round((pointD.y - pointC.y) / (pointD.x - pointC.x), 2)\r\n  const message = isValid ? `Les droites $(${a}${b})$ et $(${c}${d})$ sont bien toujours parallèles.` : `Les droites $(${a}${b})$ et $(${c}${d})$ ne sont pas toujours parallèles.`\r\n  return { isValid, message }\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { distance } from '../elements/calculus/Coords'\r\nimport { round } from '../lib/format'\r\nimport syncShake from './syncShake'\r\n\r\nexport default function checkSameDistance ({ figure, label1, label2, time = 0 }: { figure: Figure, label1: string, label2: string, time?: number }): { isValid: boolean, message: string } {\r\n  const [a, b] = label1.split('')\r\n  const [c, d] = label2.split('')\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type.includes('Point')) as Point[]\r\n  const matchPointsA = points.filter(p => p.label === a)\r\n  if (matchPointsA.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${a}$ dans la figure.` }\r\n  } else if (matchPointsA.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsA.length} points $${a}$ dans la figure.` }\r\n  }\r\n  const matchPointsB = points.filter(p => p.label === b)\r\n  if (matchPointsB.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${b}$ dans la figure.` }\r\n  } else if (matchPointsB.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsB.length} points $${b}$ dans la figure.` }\r\n  }\r\n  const matchPointsC = points.filter(p => p.label === c)\r\n  if (matchPointsC.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${c}$ dans la figure.` }\r\n  } else if (matchPointsC.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsC.length} points $${c}$ dans la figure.` }\r\n  }\r\n  const matchPointsD = points.filter(p => p.label === d)\r\n  if (matchPointsD.length === 0) {\r\n    return { isValid: false, message: `Il n'y a pas de point $${d}$ dans la figure.` }\r\n  } else if (matchPointsD.length > 1) {\r\n    return { isValid: false, message: `Il y a ${matchPointsD.length} points $${d}$ dans la figure.` }\r\n  }\r\n  const pointA = matchPointsA[0]\r\n  const pointB = matchPointsB[0]\r\n  const pointC = matchPointsC[0]\r\n  const pointD = matchPointsD[0]\r\n  let isValid = round(distance(pointA, pointB), 2) === round(distance(pointC, pointD), 2)\r\n  syncShake({ figure, time })\r\n  isValid = isValid && round(distance(pointA, pointB), 2) === round(distance(pointC, pointD), 2)\r\n  syncShake({ figure, time })\r\n  isValid = isValid && round(distance(pointA, pointB), 2) === round(distance(pointC, pointD), 2)\r\n  syncShake({ figure, time })\r\n  isValid = isValid && round(distance(pointA, pointB), 2) === round(distance(pointC, pointD), 2)\r\n  const message = `Les longueurs $${a}${b}$ et $${c}${d}$ sont bien toujours égales.`\r\n  return { isValid, message }\r\n}\r\n","import type VectorByPoints from '../elements/vector/VectorByPoints'\r\nimport type Figure from '../Figure'\r\n\r\nexport default function checkVector ({ figure, labelOrigin, labelPoint2, x, xOrigin, y, yOrigin }: { figure: Figure, labelOrigin?: string, labelPoint2?: string, x: number, xOrigin?: number, y: number, yOrigin?: number }): { isValid: boolean, message: string, vectors: VectorByPoints[] } {\r\n  const vectors = [...figure.elements.values()].filter(e => e.type === 'Vector' || e.type === 'VectorByPoints') as VectorByPoints[]\r\n  const matchVectors = vectors.filter(vector => vector.x === x && vector.y === y)\r\n  if (matchVectors.length === 0) {\r\n    return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$`, vectors: [] }\r\n  } else {\r\n    const verifOnlyLabelOrigin = (): { isValid: boolean, message: string, vectors: VectorByPoints[] } => {\r\n      const matchVectors2 = matchVectors.filter(vector => vector.origin.label === labelOrigin)\r\n      if (matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ dont l'origine est nommée $${labelOrigin as string}$`, vectors: [] }\r\n      } else {\r\n        return { isValid: true, message: '', vectors: matchVectors2 }\r\n      }\r\n    }\r\n    const verifOnlyLabelOriginAndPoint2 = (): { isValid: boolean, message: string, vectors: VectorByPoints[] } => {\r\n      const matchVectors2 = matchVectors.filter(vector => vector.origin.label === labelOrigin && vector.point2.label === labelPoint2)\r\n      if (matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ dont l'origine est nommée $${labelOrigin as string}$ et l'extrémité est nommée $${labelPoint2 as string}$`, vectors: [] }\r\n      } else {\r\n        return { isValid: true, message: '', vectors: matchVectors2 }\r\n      }\r\n    }\r\n    const verifOnlyOrigin = (): { isValid: boolean, message: string, vectors: VectorByPoints[] } => {\r\n      const matchVectors2 = matchVectors.filter(vector => vector.origin.x === xOrigin && vector.origin.y === yOrigin)\r\n      if (matchVectors.length === 0 && matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ dont l'origine a pour coordonnées $(${xOrigin as number}\\\\;;\\\\;${yOrigin as number})$`, vectors: [] }\r\n      } else if (matchVectors.length > 0 && matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il y a bien un vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ mais son origine n'a pas pour coordonnées $(${xOrigin as number}\\\\;;\\\\;${yOrigin as number})$`, vectors: matchVectors }\r\n      } else {\r\n        return { isValid: true, message: '', vectors: matchVectors2 }\r\n      }\r\n    }\r\n    const verifOnlyLabelOriginAndOrigin = (): { isValid: boolean, message: string, vectors: VectorByPoints[] } => {\r\n      const matchVectors2 = matchVectors.filter(vector => vector.origin.label === labelOrigin && vector.origin.x === xOrigin && vector.origin.y === yOrigin)\r\n      if (matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ dont l'origine est nommée $${labelOrigin as string}$ et a pour coordonnées $(${xOrigin as number}\\\\;;\\\\;${yOrigin as number})$`, vectors: [] }\r\n      } else {\r\n        return { isValid: true, message: '', vectors: matchVectors2 }\r\n      }\r\n    }\r\n    const verifLabelOriginAndPoint2AndOrigin = (): { isValid: boolean, message: string, vectors: VectorByPoints[] } => {\r\n      const matchVectors2 = matchVectors.filter(vector => vector.origin.label === labelOrigin && vector.point2.label === labelPoint2 && vector.origin.x === xOrigin && vector.origin.y === yOrigin)\r\n      if (matchVectors2.length === 0) {\r\n        return { isValid: false, message: `Il n'y a aucun vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$ dont l'origine est nommée $${labelOrigin as string}$, l'extrémité est nommée $${labelPoint2 as string}$ et a pour coordonnées $(${xOrigin as number}\\\\;;\\\\;${yOrigin as number})$`, vectors: [] }\r\n      } else {\r\n        return { isValid: true, message: '', vectors: matchVectors2 }\r\n      }\r\n    }\r\n    if (matchVectors.length === 1) {\r\n      // On veut que l'origine ait un nom particulier\r\n      if (labelOrigin !== undefined && labelOrigin !== '' && labelPoint2 === undefined && xOrigin === undefined && yOrigin === undefined) {\r\n        return verifOnlyLabelOrigin()\r\n        // On veut que les 2 extrémités soient nommées\r\n      } else if (labelOrigin !== undefined && labelOrigin !== '' && labelPoint2 !== undefined && labelPoint2 !== '' && xOrigin === undefined && yOrigin === undefined) {\r\n        return verifOnlyLabelOriginAndPoint2()\r\n        // On veut que l'origine ait des coordonnées particulières\r\n      } else if (labelOrigin === undefined && labelPoint2 === undefined && xOrigin !== undefined && yOrigin !== undefined) {\r\n        return verifOnlyOrigin()\r\n        // On veut que l'origine ait des coordonnées particulières et que l'origine soit nommée\r\n      } else if (labelOrigin !== undefined && labelOrigin !== '' && labelPoint2 === undefined && xOrigin !== undefined && yOrigin !== undefined) {\r\n        return verifOnlyLabelOriginAndOrigin()\r\n        // On veut que l'origine ait des coordonnées particulières et que les 2 extrémités soient nommées\r\n      } else if (labelOrigin !== undefined && labelOrigin !== '' && labelPoint2 !== undefined && labelPoint2 !== '' && xOrigin !== undefined && yOrigin !== undefined) {\r\n        return verifLabelOriginAndPoint2AndOrigin()\r\n      } else {\r\n        return { isValid: true, message: `Il y a bien un vecteur de coordonnées $(${x}\\\\;;\\\\;${y})$`, vectors: matchVectors }\r\n      }\r\n    }\r\n    console.log(matchVectors)\r\n    return { isValid: false, message: `Il y a ${matchVectors.length} vecteurs de coordonnées $(${x}\\\\;;\\\\;${y})`, vectors: matchVectors }\r\n  }\r\n}\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { round } from '../lib/format'\r\n\r\nexport default async function shake ({ delta = 3, figure, repeat = 5, time = 1 }: { delta?: number, figure: Figure, repeat?: number, time?: number }): Promise<void> {\r\n  const timePeranimation = time / repeat\r\n  // Retirer l'animation\r\n  figure.container.style.animation = 'none'\r\n  void figure.container.offsetWidth\r\n  // Remettre l'animation définie dans le css de index.html\r\n  figure.container.style.animation = `shake ${timePeranimation}s`\r\n  figure.container.style.animationIterationCount = repeat.toString()\r\n\r\n  const nearX = (x: number): number => {\r\n    const distanceFromBorder = 0.5\r\n    const newX = round(x + (Math.random() - 0.5) * delta, 1)\r\n    if (newX > figure.xMin + distanceFromBorder && newX < figure.xMax - distanceFromBorder) {\r\n      return newX\r\n    } else {\r\n      return x\r\n    }\r\n  }\r\n\r\n  const nearY = (y: number): number => {\r\n    const distanceFromBorder = 2\r\n    const newY = round(y + (Math.random() - 0.5) * delta, 1)\r\n    if (newY > figure.yMin + distanceFromBorder && newY < figure.yMax - distanceFromBorder) {\r\n      return newY\r\n    } else {\r\n      return y\r\n    }\r\n  }\r\n\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type === 'Point') as Point[]\r\n  const freePoints = points.filter(p => p.isFree)\r\n  for (let _ = 0; _ < repeat; _++) {\r\n    for (const point of freePoints) {\r\n      point.moveTo(nearX(point.x), nearY(point.y))\r\n      await delay(time / repeat / points.length * 1000)\r\n    }\r\n  }\r\n  figure.container.style.animation = 'none'\r\n}\r\n\r\nasync function delay (milliseconds: number): Promise<void> {\r\n  await new Promise(resolve => {\r\n    setTimeout(resolve, milliseconds)\r\n  })\r\n}\r\n","import type Element2D from '../elements/Element2D'\r\nimport type TextDynamicByPosition from '../elements/text/TextDynamicByPosition'\r\nimport type Figure from '../Figure'\r\n\r\nimport { type OptionsDynamicNumber } from '../elements/interfaces'\r\n\r\n/**\r\n * Pour les valeurs numériques variables qui seront les « parents » de constructions\r\n */\r\nabstract class DynamicNumber {\r\n  private readonly _label?: string\r\n  protected _value: number\r\n  figure: Figure\r\n  readonly id: string\r\n  isChild: boolean\r\n  observers: Array<DynamicNumber | Element2D>\r\n  textAfter: string\r\n  textBefore: string\r\n  type: string\r\n  constructor (figure: Figure, { isChild = false, textAfter = '', textBefore = '' }: OptionsDynamicNumber) {\r\n    this.figure = figure\r\n    this.isChild = isChild\r\n    if (this.isChild) {\r\n      let cpt = 0\r\n      while (this.figure.elements.has('elementTmp' + cpt.toString())) {\r\n        cpt++\r\n      }\r\n      this.id = 'elementTmp' + cpt.toString()\r\n    } else {\r\n      let cpt = 0\r\n      while (this.figure.elements.has('element' + cpt.toString())) {\r\n        cpt++\r\n      }\r\n      this.id = 'element' + (cpt).toString()\r\n    }\r\n    this.figure.elements.set(this.id, this)\r\n    this.observers = []\r\n    this._value = NaN\r\n    this.type = ''\r\n    this.textBefore = textBefore\r\n    this.textAfter = textAfter\r\n  }\r\n\r\n  display ({ color, maximumFractionDigits, minimumFractionDigits, textAfter = '', textBefore = '', x, y }: { color?: string, maximumFractionDigits?: number, minimumFractionDigits?: number, textAfter?: string, textBefore?: string, x: number, y: number }): TextDynamicByPosition {\r\n    return this.figure.create('TextDynamicByPosition', { color, dynamicNumber: this, id: this.id + '_display', maximumFractionDigits, minimumFractionDigits, textAfter, textBefore, x, y })\r\n  }\r\n\r\n  draw (): void {}\r\n\r\n  /** Prévenir les enfants qu'ils doivent se mettre à jour */\r\n  notify (): void {\r\n    for (const element of this.observers) {\r\n      element.update()\r\n    }\r\n  }\r\n\r\n  remove (): void {\r\n    this.figure.elements.delete(this.id)\r\n    for (const element of this.observers) {\r\n      element.remove()\r\n    }\r\n  }\r\n\r\n  /** S'abonner aux modifications des éléments parents\r\n  * Par exemple le segment s'abonnera aux modifications de ses deux extrémités\r\n  */\r\n  subscribe (element: DynamicNumber | Element2D): void {\r\n    this.observers.push(element)\r\n  }\r\n\r\n  /** Personnalise la sortie JSON de l'élément pour la sauvegarde */\r\n  toJSON (): object {\r\n    return {\r\n      id: this.id,\r\n      isChild: this.isChild,\r\n      type: this.type\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Annuler l'abonnement\r\n   */\r\n  unsubscribe (element: Element2D): void {\r\n    this.observers = this.observers.filter(observer => observer !== element)\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n  }\r\n\r\n  get label (): string | undefined {\r\n    return this._label\r\n  }\r\n\r\n  get string (): string {\r\n    return this.textBefore + this.value.toString() + this.textAfter\r\n  }\r\n\r\n  set value (x: number) {\r\n    this._value = x\r\n    this.notify()\r\n  }\r\n\r\n  get value (): number {\r\n    return this._value\r\n  }\r\n}\r\n\r\nexport default DynamicNumber\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport { angleOriented } from '../elements/calculus/Coords'\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass Angle extends DynamicNumber {\r\n  center: Point\r\n  end: Point\r\n  start: Point\r\n  constructor (figure: Figure, { center, end, start }: { center: Point, end: Point, start: Point }) {\r\n    super(figure, { isChild: false })\r\n    this.start = start\r\n    this.center = center\r\n    this.end = end\r\n    this.start.subscribe(this)\r\n    this.center.subscribe(this)\r\n    this.end.subscribe(this)\r\n    this.update()\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      id: this.id,\r\n      idCenter: this.center.id,\r\n      idEnd: this.end.id,\r\n      idStart: this.start.id,\r\n      isChild: this.isChild,\r\n      type: this.type\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._value = angleOriented(this.start, this.center, this.end)\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default Angle\r\n","import type Point from '../elements/points/Point'\r\nimport type Figure from '../Figure'\r\n\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass Distance extends DynamicNumber {\r\n  /** id du premier point */\r\n  idPoint1: string\r\n  /** id du deuxième point */\r\n  idPoint2: string\r\n  /** Pointeur vers la première extrémité */\r\n  point1: Point\r\n  /** Pointeur vers la deuxième extrémité */\r\n  point2: Point\r\n  constructor (figure: Figure, { isChild = false, point1, point2 }: { isChild?: boolean, point1: Point, point2: Point }) {\r\n    super(figure, { isChild })\r\n    this.type = 'Distance'\r\n    this.point1 = point1\r\n    this.idPoint1 = point1.id\r\n    this.point2 = point2\r\n    this.idPoint2 = point2.id\r\n    this.point1.subscribe(this)\r\n    this.point2.subscribe(this)\r\n    this.update()\r\n  }\r\n\r\n  remove (): void {\r\n    const element = this.figure.elements.get(this.id)\r\n    element?.observers.forEach(observer => { observer.remove() })\r\n    if (element !== undefined) this.figure.elements.delete(this.id)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      id: this.id,\r\n      idPoint1: this.idPoint1,\r\n      idPoint2: this.idPoint2,\r\n      isChild: this.isChild,\r\n      type: this.type\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    try {\r\n      this.value = Math.hypot((this.point1.x - this.point2.x), (this.point1.y - this.point2.y))\r\n    } catch (error) {\r\n      console.error('Erreur dans Distance.update()', error)\r\n      // this.exist = false\r\n    }\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default Distance\r\n","import type Figure from '../Figure'\r\n\r\nimport { type OptionsDynamicNumber } from '../elements/interfaces'\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass DynamicCalcul extends DynamicNumber {\r\n  calculus: (x: number[]) => number\r\n  dynamicNumbers: DynamicNumber[]\r\n  constructor (figure: Figure, { calculus, dynamicNumbers, ...options }: { calculus: (x: number[]) => number, dynamicNumbers: DynamicNumber[] } & OptionsDynamicNumber) {\r\n    super(figure, { ...options })\r\n    this.calculus = calculus\r\n    this.dynamicNumbers = dynamicNumbers\r\n    for (const dynamicNumber of this.dynamicNumbers) {\r\n      dynamicNumber.subscribe(this)\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  update (): void {\r\n    const values = []\r\n    for (const dynamicNumber of this.dynamicNumbers) {\r\n      values.push(dynamicNumber.value)\r\n    }\r\n    this._value = this.calculus(values)\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default DynamicCalcul\r\n","import type Point from '../elements/points/Point'\r\nimport type TextDynamicByPosition from '../elements/text/TextDynamicByPosition'\r\nimport type Figure from '../Figure'\r\n\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass DynamicX extends DynamicNumber {\r\n  dynamicText: TextDynamicByPosition\r\n  point: Point\r\n  constructor (figure: Figure, { point }: { point: Point }) {\r\n    super(figure, {})\r\n    this.point = point\r\n    this.point.subscribe(this)\r\n    this.dynamicText = this.figure.create('TextDynamicByPosition', { color: 'blue', dynamicNumber: this, maximumFractionDigits: 2, minimumFractionDigits: 0, textAfter: '', textBefore: '', x: point.x, y: -1 })\r\n    this.update()\r\n    this.dynamicText.div.style.fontWeight = 'bolder'\r\n  }\r\n\r\n  update (): void {\r\n    this.value = this.point.x\r\n    this.dynamicText.x = this.point.x\r\n    if (this.point.y > 0) {\r\n      this.dynamicText.y = -1\r\n    } else {\r\n      this.dynamicText.y = 1\r\n    }\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default DynamicX\r\n","import type Point from '../elements/points/Point'\r\nimport type TextDynamicByPosition from '../elements/text/TextDynamicByPosition'\r\nimport type Figure from '../Figure'\r\n\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass DynamicY extends DynamicNumber {\r\n  dynamicText: TextDynamicByPosition\r\n  point: Point\r\n  constructor (figure: Figure, { point }: { point: Point }) {\r\n    super(figure, {})\r\n    this.point = point\r\n    this.point.subscribe(this)\r\n    this.dynamicText = this.figure.create('TextDynamicByPosition', { color: 'blue', dynamicNumber: this, maximumFractionDigits: 2, minimumFractionDigits: 0, textAfter: '', textBefore: '', x: -1, y: point.y })\r\n    this.update()\r\n    this.dynamicText.div.style.fontWeight = 'bolder'\r\n  }\r\n\r\n  update (): void {\r\n    this.value = this.point.y\r\n    this.dynamicText.y = this.point.y\r\n    if (this.point.x > 0) {\r\n      this.dynamicText.x = -1\r\n    } else {\r\n      this.dynamicText.x = 1\r\n    }\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default DynamicY\r\n","import type DynamicNumber from '../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../Figure'\r\nimport type Transformation from './Transformation'\r\n\r\nimport { orangeMathalea } from './defaultValues'\r\nimport { type OptionsElement2D, type typeElement2D } from './interfaces'\r\n\r\nabstract class Element2D {\r\n  /** Couleur de l'élément au format HTML */\r\n  protected _color: string\r\n  /** Tracé en pointillés ? */\r\n  protected _isDashed: boolean\r\n  /** Est-ce que le pointeur est au dessus de l'élément ? */\r\n  protected _isHover: boolean = false\r\n  /** Est-ce que l'élément est sélectionné ? */\r\n  protected _isSelected: boolean = false\r\n  /** Visible ? */\r\n  protected _isVisible: boolean\r\n  /** Épaisseur du tracé de l'élément */\r\n  protected _thickness: number\r\n  /** Espace de travail dans lequel l'élément sera représenté */\r\n  figure: Figure\r\n  /** Groupe SVG dans lequel sera déssiné l'élément */\r\n  groupSvg: SVGElement\r\n  /** Identifiant de l'objet qui servira de clé dans le Map de tous les éléments */\r\n  readonly id: string\r\n  /** Les élément qui ont isChild à true sont ceux qui sont construits par d'autres et qui n'ont pas à être dans la sauvegarde */\r\n  readonly isChild: boolean\r\n  /** Est-ce qu'un élément est caché ? */\r\n  isHidden: boolean = false\r\n  /** Pour l'interface graphique, détermine si un élément apparaitra ou pas dans la liste */\r\n  readonly isSelectable: boolean\r\n  /** Liste des enfants à notifier à chaque fois que l'élément est déplacé */\r\n  observers: Array<DynamicNumber | Element2D>\r\n  /** Indique la transformation subit par le point */\r\n  transformation?: Transformation\r\n  /** Type d'objet mathématique */\r\n  type!: typeElement2D\r\n  constructor (figure: Figure, { color, id, isChild, isDashed, isSelectable, isVisible, thickness }: OptionsElement2D) {\r\n    this.figure = figure\r\n    this.isChild = (isChild) ?? false\r\n    /** Certains éléments sont construits par d'autres (codages, points temporaires, labels...)\r\n     *  on les nomme elementTmpX, on met this.child à true et on ne les sauvegarde pas dans le Json\r\n     *  mais ils sont bien présents dans figure.elements\r\n    */\r\n    this.isSelectable = isSelectable ?? true\r\n    if (id == null || this.figure.elements.has(id)) {\r\n      if (id != null && this.figure.elements.has(id)) {\r\n        throw Error(`id ${id} déjà utilisé`)\r\n      }\r\n      if (this.isChild) {\r\n        let cpt = 0\r\n        while (this.figure.elements.has('elementTmp' + cpt.toString())) {\r\n          cpt++\r\n        }\r\n        this.id = 'elementTmp' + cpt.toString()\r\n      } else {\r\n        let cpt = 0\r\n        while (this.figure.elements.has('element' + cpt.toString())) {\r\n          cpt++\r\n        }\r\n        this.id = 'element' + cpt.toString()\r\n      }\r\n    } else {\r\n      this.id = id\r\n    }\r\n    this.figure.elements.set(this.id, this)\r\n    this._color = color ?? this.figure.options.color\r\n    this._thickness = thickness ?? this.figure.options.thickness\r\n    this._isDashed = isDashed ?? this.figure.options.isDashed\r\n    this._isVisible = isVisible ?? true\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n    this.observers = []\r\n  }\r\n\r\n  /** Change la couleur de manière temporaire sans changer les attributs de l'élément */\r\n  changeColor (element: Element2D, color: string): void {\r\n    if (color === 'mathalea') color = orangeMathalea\r\n    if (element.groupSvg.children.length > 0) {\r\n      for (const line of Array.from(element.groupSvg.children)) {\r\n        line.setAttribute('stroke', color)\r\n      }\r\n    } else { // Le segment ou le cercle ne sont pas des groupes, ce sont des éléments uniques sans children\r\n      element.groupSvg.setAttribute('stroke', color)\r\n    }\r\n  }\r\n\r\n  distancePointer (_: number, __: number): number {\r\n    return Infinity\r\n  }\r\n\r\n  draw (): void {}\r\n\r\n  hide (): void {\r\n    this.isVisible = false\r\n    this.isHidden = true\r\n  }\r\n\r\n  jsonOptions (): object {\r\n    const defaultOptions = {\r\n      color: this.color,\r\n      id: this.id,\r\n      isChild: this.isChild,\r\n      isDashed: this.isDashed,\r\n      isVisible: this.isVisible,\r\n      thickness: this.thickness,\r\n      type: this.type\r\n    }\r\n    if (this.transformation?.type === 'dilate') {\r\n      return {\r\n        ...defaultOptions,\r\n        idTransformationCenter: this.transformation.center.id,\r\n        idTransformationOrigin: this.transformation.origin.id,\r\n        transformationFactor: this.transformation.factor,\r\n        type: 'ElementByDilate'\r\n      }\r\n    }\r\n    if (this.transformation?.type === 'reflect') {\r\n      return {\r\n        ...defaultOptions,\r\n        idTransformationCenter: this.transformation.center.id,\r\n        idTransformationOrigin: this.transformation.origin.id,\r\n        type: 'ElementByReflect'\r\n      }\r\n    }\r\n    if (this.transformation?.type === 'rotation') {\r\n      return {\r\n        ...defaultOptions,\r\n        idTransformationCenter: this.transformation.center.id,\r\n        idTransformationOrigin: this.transformation.origin.id,\r\n        transformationAngle: this.transformation.angle,\r\n        type: 'ElementByRotation'\r\n      }\r\n    }\r\n    return defaultOptions\r\n  }\r\n\r\n  /** Prévenir les enfants qu'ils doivent se mettre à jour */\r\n  notify (): void {\r\n    for (const element of this.observers) {\r\n      element.update()\r\n    }\r\n  }\r\n\r\n  remove (): void {\r\n    const element = this.figure.elements.get(this.id)\r\n    element?.observers.forEach(observer => { observer.remove() })\r\n    if (element !== undefined) this.figure.elements.delete(this.id)\r\n    this.groupSvg.remove()\r\n  }\r\n\r\n  /** Modifie la couleur et l'épaisseur de l'élément */\r\n  setVisibilityColorThicknessAndDashed (): void {\r\n    this.isVisible = this._isVisible\r\n    this.color = this._color\r\n    this.thickness = this._thickness\r\n    this.isDashed = this._isDashed\r\n  }\r\n\r\n  show (): void {\r\n    this.isVisible = true\r\n  }\r\n\r\n  /** S'abonner aux modifications des éléments parents\r\n  * Par exemple le segment s'abonnera aux modifications de ses deux extrémités\r\n  */\r\n  subscribe (element: DynamicNumber | Element2D): void {\r\n    this.observers.push(element)\r\n  }\r\n\r\n  temp (): Element2D {\r\n    this.figure.tmpElements.push(this)\r\n    this.color = this.figure.options.tmpColor\r\n    this.thickness = this.figure.options.tmpThickness\r\n    if ('isDashed' in this) this.isDashed = this.figure.options.tmpIsDashed\r\n    if ('fillColor' in this) this.fillColor = this.figure.options.tmpFillColor\r\n    if ('fillOpacity' in this) this.fillOpacity = this.figure.options.tmpFillOpacity\r\n    return this\r\n  }\r\n\r\n  tempShow (): void {\r\n    this.isVisible = true\r\n    this.changeColor(this, this.figure.options.tmpColor)\r\n    changeThickness(this, 0.5)\r\n  }\r\n\r\n  /** Personnalise la sortie JSON de l'élément pour la sauvegarde */\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Annuler l'abonnement\r\n   */\r\n  unsubscribe (element: Element2D): void {\r\n    this.observers = this.observers.filter(observer => observer !== element)\r\n  }\r\n\r\n  /** Créé ou met à jour le groupe SVG de l'élément */\r\n  update (): void {}\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set color (color: string) {\r\n    this._color = color\r\n    this.changeColor(this, color)\r\n  }\r\n\r\n  /** Couleur au format HTML */\r\n  get color (): string {\r\n    return this._color\r\n  }\r\n\r\n  get description (): string {\r\n    return this.id\r\n  }\r\n\r\n  set isDashed (isDashed) {\r\n    if (isDashed) {\r\n      this.groupSvg.setAttribute('stroke-dasharray', '4 3')\r\n    } else {\r\n      this.groupSvg.removeAttribute('stroke-dasharray')\r\n    }\r\n    this._isDashed = isDashed\r\n  }\r\n\r\n  /** Pointillés */\r\n  get isDashed (): boolean {\r\n    return this._isDashed\r\n  }\r\n\r\n  get isHover (): boolean {\r\n    return this._isHover\r\n  }\r\n\r\n  set isHover (isHover: boolean) {\r\n    if (this.figure.currentState === 'HIDE') {\r\n      if (isHover) {\r\n        this.changeColor(this, orangeMathalea)\r\n        changeThickness(this, this._thickness + 2)\r\n      } else if (!this._isSelected && !this.isHidden) {\r\n        this.changeColor(this, this._color)\r\n        changeThickness(this, this._thickness)\r\n      } else {\r\n        this.tempShow()\r\n      }\r\n    } else {\r\n      if (isHover) {\r\n        this.changeColor(this, orangeMathalea)\r\n        changeThickness(this, this._thickness + 2)\r\n      } else if (!this._isSelected && !this.isHidden) {\r\n        this.changeColor(this, this._color)\r\n        changeThickness(this, this._thickness)\r\n      }\r\n    }\r\n    this._isHover = isHover\r\n  }\r\n\r\n  get isSelected (): boolean {\r\n    return this._isSelected\r\n  }\r\n\r\n  set isSelected (isSelected: boolean) {\r\n    if (isSelected) {\r\n      this.changeColor(this, orangeMathalea)\r\n      changeThickness(this, this._thickness + 2)\r\n    } else if (!this._isHover) {\r\n      this.changeColor(this, this._color)\r\n      changeThickness(this, this._thickness)\r\n    }\r\n    this._isSelected = isSelected\r\n  }\r\n\r\n  set isVisible (isVisible) {\r\n    if (isVisible) {\r\n      this.figure.svg.appendChild(this.groupSvg)\r\n    } else {\r\n      this.groupSvg.remove()\r\n    }\r\n    this._isVisible = isVisible\r\n  }\r\n\r\n  /** Est-il visible ? Le groupe SVG est-il dans le code SVG ? */\r\n  get isVisible (): boolean {\r\n    return this._isVisible\r\n  }\r\n\r\n  /** Génère le code LaTeX de l'élément */\r\n  get latex (): string {\r\n    return `% ${this.type} ${this.id}} n'a pas de sortie LaTeX`\r\n  }\r\n\r\n  get latexOptions (): string {\r\n    const options = []\r\n    if (this.color !== 'black' && this.color !== '') {\r\n      options.push(`color=${this.color}`)\r\n    }\r\n    if (this.thickness !== 1) {\r\n      options.push(`line width=${this.thickness}`)\r\n    }\r\n    if (this.isDashed) {\r\n      options.push('dashed')\r\n    }\r\n    if (options.length > 0) {\r\n      return `[${options.join(',')}]`\r\n    }\r\n    return ''\r\n  }\r\n\r\n  /** Change l'épaisseur des tracés */\r\n  set thickness (thickness: number) {\r\n    this._thickness = thickness\r\n    changeThickness(this, thickness)\r\n  }\r\n\r\n  /** Épaisseur des tracés */\r\n  get thickness (): number {\r\n    return this._thickness\r\n  }\r\n}\r\n\r\nfunction changeThickness (element: Element2D, thickness: number): void {\r\n  if (element.groupSvg.children.length > 0) {\r\n    for (const line of Array.from(element.groupSvg.children)) {\r\n      line.setAttribute('stroke-width', `${thickness}`)\r\n    }\r\n  } else { // Le segment par exemple n'est pas un groupe mais un élément unique sans children\r\n    element.groupSvg.setAttribute('stroke-width', `${thickness}`)\r\n  }\r\n}\r\nexport default Element2D\r\n","import * as math from 'mathjs'\r\n\r\nimport type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\n\r\nimport Element2D from '../Element2D'\r\n\r\n/**\r\n * Trace la courbe représentative d'une fonction à partir de son expression.\r\n * L'expression de la fonction est un string qui est analysé par mathjs\r\n */\r\nclass Graph extends Element2D {\r\n  expression: string\r\n  readonly f: (x: number) => number\r\n  prohibitedValues: number[]\r\n  step: number\r\n  xMax: number\r\n  xMin: number\r\n  constructor (figure: Figure, { expression, prohibitedValues = [], step, xMax = figure.xMax, xMin = figure.xMin, ...options }: { expression: string, prohibitedValues?: number[], step?: number, xMax?: number, xMin?: number } & OptionsElement2D) {\r\n    super(figure, { ...options })\r\n    this.type = 'Graph'\r\n    this.xMin = xMin\r\n    this.xMax = xMax\r\n    this.expression = expression\r\n    this.prohibitedValues = prohibitedValues\r\n    if (step === undefined) {\r\n      const unite = figure.pixelsPerUnit * figure.xScale * figure.scale\r\n      step = 2 / unite\r\n    }\r\n    this.step = step\r\n    const fNode = math.parse(expression)\r\n    this.f = (x: number): number => fNode.evaluate({ x })\r\n  }\r\n\r\n  draw (): void {\r\n    const points = getListOfPoints({ f: this.f, prohibitedValues: this.prohibitedValues, step: this.step, xMax: this.xMax, xMin: this.xMin })\r\n    const pointsCoords = points.map(point => `${this.figure.xToSx(point.x).toString()},${this.figure.yToSy(point.y).toString()}`).join(' ')\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'polyline')\r\n    this.groupSvg.setAttribute('fill', 'none')\r\n    this.groupSvg.setAttribute('points', pointsCoords)\r\n    this.setVisibilityColorThicknessAndDashed()\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      expression: this.expression,\r\n      isChild: this.isChild\r\n    }\r\n  }\r\n}\r\n\r\nfunction getListOfPoints ({ f, prohibitedValues, step, xMax, xMin }: { f: (x: number) => number, prohibitedValues: number[], step: number, xMax: number, xMin: number }): Array<{ x: number, y: number }> {\r\n  const points: Array<{ x: number, y: number }> = []\r\n  for (let x = xMin; x < xMax; x += step) {\r\n    if (!prohibitedValues.includes(x)) {\r\n      const point = { x, y: f(x) }\r\n      points.push(point)\r\n    }\r\n  }\r\n  return points\r\n}\r\nexport default Graph\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\n\r\nimport Element2D from '../Element2D'\r\n\r\n/**\r\n * Trace la courbe représentative d'une fonction.\r\n * La fonction numérique est défini en JS et ne peut donc pas être sauvegardée dans le JSON.\r\n */\r\n\r\nclass Graph2 extends Element2D {\r\n  f: (x: number) => number\r\n  prohibitedValues: number[]\r\n  step: number\r\n  xMax: number\r\n  xMin: number\r\n  constructor (figure: Figure, { f, prohibitedValues = [], step, xMax = figure.xMax, xMin = figure.xMin, ...options }: { f: (x: number) => number, prohibitedValues?: number[], step?: number, xMax?: number, xMin?: number } & OptionsElement2D) {\r\n    super(figure, { ...options })\r\n    this.type = 'Graph'\r\n    this.xMin = xMin\r\n    this.xMax = xMax\r\n    this.f = f\r\n    this.prohibitedValues = prohibitedValues\r\n    if (step === undefined) {\r\n      const unite = figure.pixelsPerUnit * figure.xScale * figure.scale\r\n      step = 2 / unite\r\n    }\r\n    this.step = step\r\n  }\r\n\r\n  draw (): void {\r\n    const points = getListOfPoints({ f: this.f, prohibitedValues: this.prohibitedValues, step: this.step, xMax: this.xMax, xMin: this.xMin })\r\n    const pointsCoords = points.map(point => `${this.figure.xToSx(point.x).toString()},${this.figure.yToSy(point.y).toString()}`).join(' ')\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'polyline')\r\n    this.groupSvg.setAttribute('fill', 'none')\r\n    this.groupSvg.setAttribute('points', pointsCoords)\r\n    this.setVisibilityColorThicknessAndDashed()\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      isChild: this.isChild,\r\n      thickness: this.thickness\r\n    }\r\n  }\r\n}\r\n\r\nfunction getListOfPoints ({ f, prohibitedValues, step, xMax, xMin }: { f: (x: number) => number, prohibitedValues: number[], step: number, xMax: number, xMin: number }): Array<{ x: number, y: number }> {\r\n  const points: Array<{ x: number, y: number }> = []\r\n  for (let x = xMin; x < xMax; x += step) {\r\n    if (!prohibitedValues.includes(x)) {\r\n      const point = { x, y: f(x) }\r\n      points.push(point)\r\n    }\r\n  }\r\n  return points\r\n}\r\nexport default Graph2\r\n","import type Figure from '../../Figure'\r\nimport type TextByPosition from '../text/TextByPosition'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsElement2D } from '../interfaces'\r\n\r\nclass Grid extends Element2D {\r\n  axeX: boolean\r\n  axeY: boolean\r\n  grid: boolean\r\n  labels: TextByPosition[]\r\n  labelX: boolean\r\n  labelY: boolean\r\n  stepX: number\r\n  stepY: number\r\n  subGrid: boolean\r\n  subGridDivisions: number\r\n  xMax: number\r\n  xMin: number\r\n  yMax: number\r\n  yMin: number\r\n  constructor (figure: Figure, { axeX = true, axeY = true, grid = true, labelX = true, labelY = true, stepX = 1, stepY = 1, subGrid = false, subGridDivisions = 5, xMax = figure.xMax, xMin = figure.xMin, yMax = figure.yMax, yMin = figure.yMin, ...options }: {\r\n    axeX?: boolean\r\n    axeY?: boolean\r\n    grid?: boolean\r\n    labelX?: boolean\r\n    labelY?: boolean\r\n    stepX?: number\r\n    stepY?: number\r\n    subGrid?: boolean\r\n    subGridDivisions?: number\r\n    xMax?: number\r\n    xMin?: number\r\n    yMax?: number\r\n    yMin?: number\r\n  } & OptionsElement2D = {}) {\r\n    super(figure, { ...options })\r\n    this.type = 'Grid'\r\n    this.axeX = axeX\r\n    this.axeY = axeY\r\n    this.grid = grid\r\n    this.subGrid = subGrid\r\n    this.labelX = labelX\r\n    this.labelY = labelY\r\n    this.stepX = stepX\r\n    this.stepY = stepY\r\n    this.subGridDivisions = subGridDivisions\r\n    this.xMin = xMin\r\n    this.xMax = xMax\r\n    this.yMin = yMin\r\n    this.yMax = yMax\r\n    this.labels = []\r\n  }\r\n\r\n  draw (): void {\r\n    if (this.axeX) {\r\n      const svgAxeX = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n      svgAxeX.setAttribute('x1', this.figure.xToSx(this.xMin).toString())\r\n      svgAxeX.setAttribute('y1', this.figure.yToSy(0).toString())\r\n      svgAxeX.setAttribute('x2', this.figure.xToSx(this.xMax).toString())\r\n      svgAxeX.setAttribute('y2', this.figure.yToSy(0).toString())\r\n      svgAxeX.setAttribute('stroke', 'black')\r\n      svgAxeX.setAttribute('stroke-width', '1')\r\n      // Thicks\r\n      for (let x = 0; x <= this.xMax; x += this.stepX) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(-0.1).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(0.1).toString())\r\n        svgLine.setAttribute('stroke', 'black')\r\n        svgLine.setAttribute('stroke-width', '1')\r\n        this.groupSvg.appendChild(svgLine)\r\n      }\r\n      for (let x = 0; x >= this.xMin; x -= this.stepX) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(-0.1).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(0.1).toString())\r\n        svgLine.setAttribute('stroke', 'black')\r\n        svgLine.setAttribute('stroke-width', '1')\r\n        this.groupSvg.appendChild(svgLine)\r\n      }\r\n      this.groupSvg.appendChild(svgAxeX)\r\n    }\r\n    if (this.axeY) {\r\n      const svgAxeY = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n      svgAxeY.setAttribute('x1', this.figure.xToSx(0).toString())\r\n      svgAxeY.setAttribute('y1', this.figure.yToSy(this.yMin).toString())\r\n      svgAxeY.setAttribute('x2', this.figure.xToSx(0).toString())\r\n      svgAxeY.setAttribute('y2', this.figure.yToSy(this.yMax).toString())\r\n      svgAxeY.setAttribute('stroke', 'black')\r\n      svgAxeY.setAttribute('stroke-width', '1')\r\n      // Thicks\r\n      for (let y = 0; y <= this.yMax; y += this.stepY) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(-0.1).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(0.1).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('stroke', 'black')\r\n        svgLine.setAttribute('stroke-width', '1')\r\n        this.groupSvg.appendChild(svgLine)\r\n      }\r\n      for (let y = 0; y >= this.yMin; y -= this.stepY) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(-0.1).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(0.1).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('stroke', 'black')\r\n        svgLine.setAttribute('stroke-width', '1')\r\n        this.groupSvg.appendChild(svgLine)\r\n      }\r\n      this.groupSvg.appendChild(svgAxeY)\r\n    }\r\n    if (this.grid) {\r\n      const svgGrid = document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n      svgGrid.setAttribute('stroke', 'gray')\r\n      svgGrid.setAttribute('stroke-opacity', '0.5')\r\n      this.groupSvg.appendChild(svgGrid)\r\n      for (let x = 0; x <= this.xMax; x += this.stepX) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(this.yMin).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(this.yMax).toString())\r\n        svgLine.setAttribute('stroke-width', '0.5')\r\n        svgGrid.appendChild(svgLine)\r\n      }\r\n      for (let x = 0; x >= this.xMin; x -= this.stepX) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(this.yMin).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(this.yMax).toString())\r\n        svgLine.setAttribute('stroke-width', '0.5')\r\n        svgGrid.appendChild(svgLine)\r\n      }\r\n      for (let y = 0; y <= this.yMax; y += this.stepY) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(this.xMin).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(this.xMax).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('stroke-width', '0.5')\r\n        svgGrid.appendChild(svgLine)\r\n      }\r\n      for (let y = 0; y >= this.yMin; y -= this.stepY) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(this.xMin).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(this.xMax).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('stroke-width', '0.5')\r\n        svgGrid.appendChild(svgLine)\r\n      }\r\n    }\r\n    if (this.subGrid) {\r\n      const svgSubGrid = document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n      svgSubGrid.setAttribute('stroke', 'gray')\r\n      svgSubGrid.setAttribute('stroke-opacity', '0.2')\r\n      this.groupSvg.appendChild(svgSubGrid)\r\n      for (let x = this.xMin; x <= this.xMax; x += this.stepX / this.subGridDivisions) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(this.yMin).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(x).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(this.yMax).toString())\r\n        svgLine.setAttribute('stroke-width', '0.25')\r\n        svgSubGrid.appendChild(svgLine)\r\n      }\r\n      for (let y = this.yMin; y <= this.yMax; y += this.stepY / this.subGridDivisions) {\r\n        const svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n        svgLine.setAttribute('x1', this.figure.xToSx(this.xMin).toString())\r\n        svgLine.setAttribute('y1', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('x2', this.figure.xToSx(this.xMax).toString())\r\n        svgLine.setAttribute('y2', this.figure.yToSy(y).toString())\r\n        svgLine.setAttribute('stroke-width', '0.25')\r\n        svgSubGrid.appendChild(svgLine)\r\n      }\r\n    }\r\n    if (this.labelX) {\r\n      for (let x = 0; x <= this.xMax; x += this.stepX) {\r\n        this.labels.push(this.figure.create('TextByPosition', { anchor: 'topCenter', dyInPixels: -8, fontSize: '8pt', isChild: true, isSelectable: true, text: `$${x.toString()}$`, x, y: 0 }))\r\n      }\r\n      for (let x = -this.stepX; x >= this.xMin; x -= this.stepX) {\r\n        this.labels.push(this.figure.create('TextByPosition', { anchor: 'topCenter', dyInPixels: -8, fontSize: '8pt', isChild: true, isSelectable: true, text: `$${x.toString()}$`, x, y: 0 }))\r\n      }\r\n    }\r\n    if (this.labelY) {\r\n      for (let y = 0; y <= this.yMax; y += this.stepY) {\r\n        this.labels.push(this.figure.create('TextByPosition', { anchor: 'middleCenter', dxInPixels: 10, dyInPixels: 2, fontSize: '8pt', isChild: true, isSelectable: true, text: `$${y.toString()}$`, x: 0, y }))\r\n      }\r\n      for (let y = 0; y >= this.yMin; y -= this.stepY) {\r\n        this.labels.push(this.figure.create('TextByPosition', { anchor: 'middleCenter', dxInPixels: 10, dyInPixels: 2, fontSize: '8pt', isChild: true, isSelectable: true, text: `$${y.toString()}$`, x: 0, y }))\r\n      }\r\n    }\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    this.update()\r\n  }\r\n\r\n  hide (): void {\r\n    super.hide()\r\n    for (const label of this.labels) {\r\n      label.hide()\r\n    }\r\n  }\r\n\r\n  show (): void {\r\n    super.show()\r\n    for (const label of this.labels) {\r\n      label.show()\r\n    }\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      axeX: this.axeX,\r\n      axeY: this.axeY,\r\n      grid: this.grid,\r\n      labelX: this.labelX,\r\n      labelY: this.labelY,\r\n      stepX: this.stepX,\r\n      stepY: this.stepY,\r\n      subGrid: this.subGrid\r\n    }\r\n  }\r\n}\r\n\r\nexport default Grid\r\n","import type Point from '../points/Point'\r\n\r\nexport function distance (point1: { x: number, y: number }, point2: { x: number, y: number }): number {\r\n  return Math.hypot(point1.x - point2.x, point1.y - point2.y)\r\n}\r\n\r\nexport function getLargeSweep (angle: number): [number, number] {\r\n  try {\r\n    let large: 0 | 1\r\n    let sweep: 0 | 1\r\n    if (angle > 180) {\r\n      angle = angle - 360\r\n      large = 1\r\n      sweep = 0\r\n    } else if (angle < -180) {\r\n      angle = 360 + angle\r\n      large = 1\r\n      sweep = 1\r\n    } else {\r\n      large = 0\r\n      sweep = (angle > 0) ? 0 : 1\r\n    }\r\n    return [large, sweep]\r\n  } catch (error) {\r\n    return [NaN, NaN]\r\n  }\r\n}\r\n\r\nexport function normalizeAngle (angle: number): number {\r\n  return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI))\r\n}\r\n\r\nexport function polarToCartesian (center: Point, radius: number, angleInDegrees: number): { x: number, y: number } {\r\n  const angleInRadians = angleInDegrees * Math.PI / 180.0\r\n\r\n  return {\r\n    x: center.x + (radius * Math.cos(angleInRadians)),\r\n    y: center.y + (radius * Math.sin(angleInRadians))\r\n  }\r\n}\r\n","import type DynamicNumber from '../../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { rotationCoord } from '../calculus/Coords'\r\nimport { distance, getLargeSweep } from '../calculus/utils'\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsElement2D } from '../interfaces'\r\n\r\nclass Arc extends Element2D {\r\n  _fillColor!: string\r\n  _fillOpacity!: number\r\n  /** Faut-il tracer les segments pour fermer l'arc de cercle ? */\r\n  addBorders: boolean\r\n  center: Point\r\n  dynamicAngle: DynamicNumber\r\n  start: Point\r\n  svgArc: SVGPathElement\r\n  constructor (figure: Figure, { addBorders = false, center, color, dynamicAngle, fillColor, fillOpacity, start, ...options }: { addBorders: boolean, center: Point, dynamicAngle: DynamicNumber, start: Point } & OptionsElement2D) {\r\n    super(figure, { ...options })\r\n    this.start = start\r\n    this.center = center\r\n    this.dynamicAngle = dynamicAngle\r\n    this.addBorders = addBorders\r\n    this._color = color ?? 'black'\r\n    this._fillColor = fillColor ?? 'none'\r\n    this._fillOpacity = this.fillOpacity ?? this.figure.options.fillOpacity\r\n    this.svgArc = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n    this.groupSvg.appendChild(this.svgArc)\r\n    this.start.subscribe(this)\r\n    this.center.subscribe(this)\r\n    this.dynamicAngle.subscribe(this)\r\n  }\r\n\r\n  distancePointer (_: number, __: number): number {\r\n    if (this.figure.pointer.isInArc(this)) return 0\r\n    return Infinity\r\n  }\r\n\r\n  draw (): void {\r\n    this.figure.svg.appendChild(this.groupSvg)\r\n    this.update()\r\n    this.setVisibilityColorThicknessAndDashed()\r\n  }\r\n\r\n  /** Modifie la couleur et l'épaisseur de l'élément */\r\n  setVisibilityColorThicknessAndDashed (): void {\r\n    this.color = this._color\r\n    this.fillColor = this._fillColor\r\n    if (this._fillOpacity !== undefined) this.fillOpacity = this._fillOpacity\r\n    if (this._isDashed !== undefined) this.isDashed = this._isDashed\r\n    this.isDashed = this._isDashed\r\n    this.isVisible = this._isVisible\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCenter: this.center.id,\r\n      idDynamicAngle: this.dynamicAngle.id,\r\n      idStart: this.start.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    const radius = this.figure.xToSx(distance(this.start, this.center))\r\n    const [large, sweep] = getLargeSweep(this.dynamicAngle.value)\r\n    const end = rotationCoord(this.start, this.center, this.dynamicAngle.value)\r\n    if (Number.isFinite(this.start.x) &&\r\n      Number.isFinite(this.start.y) &&\r\n      Number.isFinite(end.x) &&\r\n      Number.isFinite(end.y)\r\n    ) {\r\n      let path = `M${this.figure.xToSx(this.start.x)} ${this.figure.yToSy(this.start.y)} A ${radius} ${radius} 0 ${large} ${sweep} ${this.figure.xToSx(end.x)} ${this.figure.yToSy(end.y)}`\r\n      if (this.addBorders) path += `L ${this.figure.xToSx(this.center.x)} ${this.figure.yToSy(this.center.y)} Z`\r\n      this.svgArc.setAttribute('d', path)\r\n    }\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillColor (): string {\r\n    return this._fillColor\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillColor (color: string) {\r\n    this._fillColor = color\r\n    this.groupSvg.setAttribute('fill', this._fillColor)\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillOpacity (): number {\r\n    return this._fillOpacity\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillOpacity (opacity: number) {\r\n    this._fillOpacity = opacity\r\n    if (opacity !== undefined) this.groupSvg.setAttribute('fill-opacity', opacity.toString())\r\n  }\r\n}\r\n\r\nexport default Arc\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Arc from './Arc'\r\n\r\nclass ArcBy3PointsAndRadius extends Arc {\r\n  radius: number\r\n  constructor (figure: Figure, { addBorders = true, center, end, radius, start, ...options }: { addBorders?: boolean, center: Point, end: Point, radius: number, start: Point } & OptionsElement2D) {\r\n    const tempLine = figure.create('Segment', { isChild: true, isSelectable: true, isVisible: false, point1: start, point2: center })\r\n    const newStart = figure.create('PointOnLineAtDistance', { distance: radius, isChild: true, isVisible: false, line: tempLine, shape: start.shape })\r\n    const dynamicAngle = figure.create('Angle', { center, end, start: newStart })\r\n    super(figure, { addBorders, center, dynamicAngle, start: newStart, ...options })\r\n    this.radius = radius\r\n  }\r\n}\r\n\r\nexport default ArcBy3PointsAndRadius\r\n","import type Figure from '../Figure'\r\n\r\nimport DynamicNumber from './DynamicNumber'\r\n\r\nclass Const extends DynamicNumber {\r\n  constructor (figure: Figure, { isChild, value }: { isChild?: boolean, value: number }) {\r\n    super(figure, { isChild })\r\n    this.type = 'Const'\r\n    this.value = value\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      id: this.id,\r\n      isChild: this.isChild,\r\n      type: this.type,\r\n      value: this.value\r\n    }\r\n  }\r\n}\r\n\r\nexport default Const\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport Const from '../../dynamicNumbers/Const'\r\nimport { polarToCartesian } from '../calculus/utils'\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Arc from './Arc'\r\n\r\nclass ArcByCenterRadiusAndAngles extends Arc {\r\n  endAngle: number\r\n  radius: number\r\n  startAngle: number\r\n  constructor (figure: Figure, { addBorders = true, center, color, endAngle, fillColor, fillOpacity, radius, startAngle, ...options }: { addBorders?: boolean, center: Point, endAngle: number, radius: number, startAngle: number } & OptionsElement2D) {\r\n    const dynamicAngle = new Const(figure, { isChild: true, value: endAngle - startAngle })\r\n    const { x, y } = polarToCartesian(center, radius, startAngle)\r\n    const start = figure.create('Point', { isChild: true, shape: '', x, y })\r\n    super(figure, { addBorders, center, color, dynamicAngle, fillColor, fillOpacity, start, ...options })\r\n    this.radius = radius\r\n    this.startAngle = startAngle\r\n    this.endAngle = endAngle\r\n    this.type = 'ArcByCenterRadiusAndAngles'\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      endAngle: this.endAngle,\r\n      fillColor: this.fillColor,\r\n      idCenter: this.center.id,\r\n      radius: this.radius,\r\n      startAngle: this.startAngle\r\n    }\r\n  }\r\n}\r\n\r\nexport default ArcByCenterRadiusAndAngles\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\nimport type Vector from '../vector/Vector'\r\n\r\nimport { distance, similitudeCoord } from '../calculus/Coords'\r\nimport Element2D from '../Element2D'\r\nimport { type Binome, type OptionsElement2D } from '../interfaces'\r\n\r\n/**\r\n * Trace un segment qui a pour extrémités deux points donnés\r\n * Si un point a des coordonnées non définies alors le segment est effacé momentannément\r\n * C'est la classe parent de celles qui permettent de tracer une droite ou une demi-droite\r\n */\r\nclass Segment extends Element2D {\r\n  borderSize: number\r\n  /** Élément parent avec lequel il est lié pour le changement de style (comme les côtés d'un polygone) */\r\n  createdBy?: Element2D\r\n  /** Première extrémité du segment */\r\n  point1: Point\r\n  /** Deuxième extrémité du segment */\r\n  point2: Point\r\n  /** Détermine s'il faut afficher les deux extrémités, que celle de gauche ou que celle de droite */\r\n  shape?: '->' | '-|' | '' | '<-' | '<->' | '<-|' | '|-' | '|->' | '|-|'\r\n  svgArrow1!: SVGElement\r\n  svgArrow2!: SVGElement\r\n  svgBorder1!: SVGElement\r\n  svgBorder2!: SVGElement\r\n  svgLine!: SVGElement\r\n  constructor (figure: Figure, { borderSize, color = figure.options.color, isDashed = figure.options.isDashed, point1, point2, shape = '', thickness = figure.options.thickness, ...options }: { borderSize?: number\r\n    point1: Point\r\n    point2: Point\r\n    shape?: '->' | '-|' | '' | '<-' | '<->' | '<-|' | '|-' | '|->' | '|-|' } & OptionsElement2D) {\r\n    super(figure, options)\r\n    this.type = 'Segment'\r\n    this.point1 = point1\r\n    this.point2 = point2\r\n    this.shape = shape\r\n    this.borderSize = borderSize ?? figure.options.borderSize\r\n    this.color = color\r\n    this.thickness = thickness\r\n    this.isDashed = isDashed\r\n    this.point1.subscribe(this)\r\n    this.point2.subscribe(this)\r\n  }\r\n\r\n  createReflectedOverLine ({ line, ...options }: { line: Segment } & OptionsElement2D): Segment {\r\n    const newPoint1 = this.figure.create('PointByReflectOverLine', { isChild: true, isVisible: false, line, origin: this.point1 })\r\n    const newPoint2 = this.figure.create('PointByReflectOverLine', { isChild: true, isVisible: false, line, origin: this.point2 })\r\n    const type = this.type as 'Line' | 'Ray' | 'Segment'\r\n    const result = this.figure.create(type, { isChild: true, point1: newPoint1, point2: newPoint2, ...options }) as Segment\r\n    return result\r\n  }\r\n\r\n  createTranslatedByPoints ({ point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D): Segment {\r\n    const newPoint1 = this.figure.create('PointByTranslationByPoints', { isChild: true, isVisible: false, origin: this.point1, point1, point2 })\r\n    const newPoint2 = this.figure.create('PointByTranslationByPoints', { isChild: true, isVisible: false, origin: this.point2, point1, point2 })\r\n    const type = this.type as 'Line' | 'Ray' | 'Segment'\r\n    const result = this.figure.create(type, { isChild: true, point1: newPoint1, point2: newPoint2, ...options }) as Segment\r\n    return result\r\n  }\r\n\r\n  createTranslatedByVector ({ vector, ...options }: { vector: Vector } & OptionsElement2D): Segment {\r\n    const newPoint1 = this.figure.create('PointByTranslation', { origin: this.point1, shape: this.point1.shape, vector })\r\n    const newPoint2 = this.figure.create('PointByTranslation', { origin: this.point2, shape: this.point2.shape, vector })\r\n    const type = this.type as 'Line' | 'Ray' | 'Segment'\r\n    const result = this.figure.create(type, { point1: newPoint1, point2: newPoint2, ...options }) as Segment\r\n    return result\r\n  }\r\n\r\n  dilate (center: Point, factor: number): Segment {\r\n    const newPoint1 = this.point1.dilate(center, factor, { isChild: true, isVisible: false })\r\n    const newPoint2 = this.point2.dilate(center, factor, { isChild: true, isVisible: false })\r\n    const type = this.type as 'Line' | 'Ray' | 'Segment'\r\n    const newSegment = this.figure.create(type, { point1: newPoint1, point2: newPoint2 })\r\n    newSegment.transformation = { center, factor, origin: this, type: 'dilate' }\r\n    return newSegment\r\n  }\r\n\r\n  distancePointer (x: number, y: number): number {\r\n    const pointerCoords = { x, y }\r\n    // Calculer la distance entre le point donné et les extrémités du segment\r\n    const distanceToP1 = distance(pointerCoords, this.point1)\r\n    const distanceToP2 = distance(pointerCoords, this.point2)\r\n\r\n    // Trouver la projection du point sur le segment\r\n    const segmentLength = distance(this.point1, this.point2)\r\n    const projection = ((x - this.point1.x) * (this.point2.x - this.point1.x) + (y - this.point1.y) * (this.point2.y - this.point1.y)) / (segmentLength ** 2)\r\n    // La distance minimale est la distance à l'une des extrémités si la projection est en dehors du segment\r\n    if (projection < 0) {\r\n      return distanceToP1\r\n    } else if (projection > 1) {\r\n      return distanceToP2\r\n    } else {\r\n      // Calculer la distance verticale entre le point et le segment\r\n      const closestX = this.point1.x + projection * (this.point2.x - this.point1.x)\r\n      const closestY = this.point1.y + projection * (this.point2.y - this.point1.y)\r\n      const closest = { x: closestX, y: closestY }\r\n      return distance(pointerCoords, closest)\r\n    }\r\n  }\r\n\r\n  draw (): void {\r\n    this.svgLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n    this.groupSvg.appendChild(this.svgLine)\r\n    if (this.shape !== '') {\r\n      this.svgBorder1 = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n      this.svgBorder2 = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n      this.svgArrow1 = document.createElementNS('http://www.w3.org/2000/svg', 'polyline')\r\n      this.svgArrow2 = document.createElementNS('http://www.w3.org/2000/svg', 'polyline')\r\n      this.groupSvg.appendChild(this.svgBorder1)\r\n      this.groupSvg.appendChild(this.svgBorder2)\r\n      this.groupSvg.appendChild(this.svgArrow1)\r\n      this.groupSvg.appendChild(this.svgArrow2)\r\n    }\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    this.update()\r\n  }\r\n\r\n  drawArrow1 (): void {\r\n    const a = { x: this.point1.x, y: this.point1.y }\r\n    const b = { x: this.point2.x, y: this.point2.y }\r\n    const l = Math.hypot(this.point1.x - this.point2.x, this.point1.y - this.point2.y)\r\n    const { x: x1, y: y1 } = similitudeCoord(b, a, (1 / l) * this.borderSize, 45)\r\n    const { x: x2, y: y2 } = similitudeCoord(b, a, (1 / l) * this.borderSize, -45)\r\n    const x1Svg = this.figure.xToSx(x1)\r\n    const x2Svg = this.figure.xToSx(x2)\r\n    const y1Svg = this.figure.yToSy(y1)\r\n    const y2Svg = this.figure.yToSy(y2)\r\n    const axSvg = this.figure.xToSx(a.x)\r\n    const aySvg = this.figure.yToSy(a.y)\r\n    if (allAreNumbers(x1Svg, x2Svg, y1Svg, y2Svg, axSvg, aySvg)) {\r\n      this.svgArrow1.setAttribute('points', `${x1Svg},${y1Svg} ${axSvg},${aySvg} ${x2Svg},${y2Svg}`)\r\n      this.groupSvg.appendChild(this.svgArrow1)\r\n    }\r\n  }\r\n\r\n  drawArrow2 (): void {\r\n    const a = { x: this.point1.x, y: this.point1.y }\r\n    const b = { x: this.point2.x, y: this.point2.y }\r\n    const l = Math.hypot(this.point1.x - this.point2.x, this.point1.y - this.point2.y)\r\n    const { x: x1, y: y1 } = similitudeCoord(a, b, (1 / l) * this.borderSize, 45)\r\n    const { x: x2, y: y2 } = similitudeCoord(a, b, (1 / l) * this.borderSize, -45)\r\n    const x1Svg = this.figure.xToSx(x1)\r\n    const x2Svg = this.figure.xToSx(x2)\r\n    const y1Svg = this.figure.yToSy(y1)\r\n    const y2Svg = this.figure.yToSy(y2)\r\n    const bxSvg = this.figure.xToSx(b.x)\r\n    const bySvg = this.figure.yToSy(b.y)\r\n    if (allAreNumbers(x1Svg, x2Svg, y1Svg, y2Svg, bxSvg, bySvg)) {\r\n      this.svgArrow2.setAttribute('points', `${x1Svg},${y1Svg} ${bxSvg},${bySvg} ${x2Svg},${y2Svg}`)\r\n      this.groupSvg.appendChild(this.svgArrow2)\r\n    }\r\n  }\r\n\r\n  drawBorder1 (): void {\r\n    const a = { x: this.point1.x, y: this.point1.y }\r\n    const b = { x: this.point2.x, y: this.point2.y }\r\n    const l = Math.hypot(this.point1.x - this.point2.x, this.point1.y - this.point2.y)\r\n    const { x: x1, y: y1 } = similitudeCoord(b, a, (1 / l) * this.borderSize, 90)\r\n    const { x: x2, y: y2 } = similitudeCoord(b, a, (1 / l) * this.borderSize, -90)\r\n    const x1Svg = this.figure.xToSx(x1).toString()\r\n    const x2Svg = this.figure.xToSx(x2).toString()\r\n    const y1Svg = this.figure.yToSy(y1).toString()\r\n    const y2Svg = this.figure.yToSy(y2).toString()\r\n    this.svgBorder1.setAttribute('x1', x1Svg)\r\n    this.svgBorder1.setAttribute('y1', y1Svg)\r\n    this.svgBorder1.setAttribute('x2', x2Svg)\r\n    this.svgBorder1.setAttribute('y2', y2Svg)\r\n    this.groupSvg.appendChild(this.svgBorder1)\r\n  }\r\n\r\n  drawBorder2 (): void {\r\n    const a = { x: this.point1.x, y: this.point1.y }\r\n    const b = { x: this.point2.x, y: this.point2.y }\r\n    const l = Math.hypot(this.point1.x - this.point2.x, this.point1.y - this.point2.y)\r\n    const { x: x1, y: y1 } = similitudeCoord(a, b, (1 / l) * this.borderSize, 90)\r\n    const { x: x2, y: y2 } = similitudeCoord(a, b, (1 / l) * this.borderSize, -90)\r\n    const x1Svg = this.figure.xToSx(x1).toString()\r\n    const x2Svg = this.figure.xToSx(x2).toString()\r\n    const y1Svg = this.figure.yToSy(y1).toString()\r\n    const y2Svg = this.figure.yToSy(y2).toString()\r\n    this.svgBorder2.setAttribute('x1', x1Svg)\r\n    this.svgBorder2.setAttribute('y1', y1Svg)\r\n    this.svgBorder2.setAttribute('x2', x2Svg)\r\n    this.svgBorder2.setAttribute('y2', y2Svg)\r\n    this.groupSvg.appendChild(this.svgBorder2)\r\n  }\r\n\r\n  reflect (center: Point): Segment {\r\n    const newPoint1 = this.point1.reflect(center, { isChild: true, isVisible: false })\r\n    const newPoint2 = this.point2.reflect(center, { isChild: true, isVisible: false })\r\n    const type = this.type as 'Line' | 'Ray' | 'Segment'\r\n    const result = this.figure.create(type, { point1: newPoint1, point2: newPoint2 })\r\n    result.transformation = { center, origin: this, type: 'reflect' }\r\n    return result\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      borderSize: this.borderSize,\r\n      idPoint1: this.point1.id,\r\n      idPoint2: this.point2.id,\r\n      shape: this.shape\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    if (this.point1.x === undefined || this.point1.y === undefined || this.point2.x === undefined || this.point2.y === undefined ||\r\n      Number.isNaN(this.point1.x) || Number.isNaN(this.point1.y) || Number.isNaN(this.point2.x) || Number.isNaN(this.point2.y)) {\r\n      this.svgLine.removeAttribute('x1')\r\n      this.svgLine.removeAttribute('x2')\r\n      this.svgLine.removeAttribute('y1')\r\n      this.svgLine.removeAttribute('y2')\r\n    } else {\r\n      const x1Svg = this.figure.xToSx(this.point1.x)\r\n      const x2Svg = this.figure.xToSx(this.point2.x)\r\n      const y1Svg = this.figure.yToSy(this.point1.y)\r\n      const y2Svg = this.figure.yToSy(this.point2.y)\r\n      this.svgLine.setAttribute('x1', `${x1Svg}`)\r\n      this.svgLine.setAttribute('y1', `${y1Svg}`)\r\n      this.svgLine.setAttribute('x2', `${x2Svg}`)\r\n      this.svgLine.setAttribute('y2', `${y2Svg}`)\r\n    }\r\n    if (this.shape?.at(0) === '|') {\r\n      this.drawBorder1()\r\n      this.svgArrow1?.remove()\r\n    } else if (this.shape?.at(0) === '<') {\r\n      this.drawArrow1()\r\n      this.svgBorder1?.remove()\r\n    } else {\r\n      this.svgArrow1?.remove()\r\n      this.svgBorder1?.remove()\r\n    }\r\n    if (this.shape?.at(-1) === '|') {\r\n      this.drawBorder2()\r\n      this.svgArrow2.remove()\r\n    } else if (this.shape?.at(-1) === '>') {\r\n      this.drawArrow2()\r\n      this.svgBorder2?.remove()\r\n    } else {\r\n      this.svgArrow2?.remove()\r\n      this.svgBorder2?.remove()\r\n    }\r\n  }\r\n\r\n  get angleWithHorizontalInDegres (): number {\r\n    const [a, b] = this.equation\r\n    const angle = Math.atan2(-a, b)\r\n    return angle * 180 / Math.PI\r\n  }\r\n\r\n  get description (): string {\r\n    return `Segment ${this.notation}`\r\n  }\r\n\r\n  /** Renvoie [a, b, c] tels que ax + by + c = 0 est l'équation de la droite passant par point1 et point2 */\r\n  get equation (): [number, number, number] {\r\n    if (this.point1.x === undefined || this.point1.y === undefined || this.point2.x === undefined || this.point2.y === undefined) return [NaN, NaN, NaN]\r\n    try {\r\n      const a = this.point1.y - this.point2.y\r\n      const b = this.point2.x - this.point1.x\r\n      const c = (this.point1.x - this.point2.x) * this.point1.y + (this.point2.y - this.point1.y) * this.point1.x\r\n      return [a, b, c]\r\n    } catch (error) {\r\n      console.error('Erreur dans Line.equation()', error)\r\n      // this.exist = false\r\n      return [NaN, NaN, NaN]\r\n    }\r\n  }\r\n\r\n  get latex (): string {\r\n    let result = '%' + this.description\r\n    result += `\\n\\\\draw${this.latexOptions} (${this.point1.x}, ${this.point1.y}) -- (${this.point2.x}, ${this.point2.y});`\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    const point1Name = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const point2Name = this.point2.label !== '' ? this.point2.label : this.point2.id\r\n    return `[${point1Name}${point2Name}]`\r\n  }\r\n\r\n  /**\r\n   * Vecteur normal à la droite\r\n   */\r\n  get unitPerpendicularVectorBinome (): Binome {\r\n    try {\r\n      const [a, b] = this.equation\r\n      return { x: a, y: b }\r\n    } catch (error) {\r\n      console.error('Erreur dans Line.directeur()', error)\r\n      return { x: NaN, y: NaN }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Vecteur directeur de la droite\r\n   */\r\n  get unitVectorBinome (): Binome {\r\n    try {\r\n      const [a, b] = this.equation\r\n      return { x: b, y: -a }\r\n    } catch (error) {\r\n      console.error('Erreur dans Line.normal()', error)\r\n      return { x: NaN, y: NaN }\r\n    }\r\n  }\r\n}\r\n\r\nexport default Segment\r\n\r\nfunction allAreNumbers (...numbers: number[]): boolean {\r\n  for (const number of numbers) {\r\n    if (!Number.isFinite(number)) return false\r\n  }\r\n  return true\r\n}\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { distance } from '../calculus/Coords'\r\nimport Segment from './Segment'\r\n\r\n/**\r\n * Trace une demi-droite d'origine point1 et qui passe par point 2\r\n */\r\nclass Ray extends Segment {\r\n  constructor (figure: Figure, { point1, point2, ...options }: {\r\n    borderSize?: number\r\n    point1: Point\r\n    point2: Point\r\n    shape?: '-|' | '' | '|-' | '|-|'\r\n  }) {\r\n    super(figure, { point1, point2, ...options })\r\n    this.type = 'Ray'\r\n  }\r\n\r\n  distancePointer (x: number, y: number): number {\r\n    const pointerCoords = { x, y }\r\n    // Calculer la direction de la demi-droite\r\n    const rayDirection = { x: this.point2.x - this.point1.x, y: this.point2.y - this.point1.y }\r\n    const rayLength = Math.hypot(rayDirection.x, rayDirection.y)\r\n    // Si la longueur du rayon est nulle, la demi-droite se réduit à un point, donc on renvoie la distance entre ce point et le pointeur\r\n    if (rayLength === 0) {\r\n      return distance(pointerCoords, this.point1)\r\n    }\r\n    // Normaliser la direction du rayon (la rendre unitaire)\r\n    const normalizedRayDirection = { x: rayDirection.x / rayLength, y: rayDirection.y / rayLength }\r\n    // Trouver la projection du point sur la demi-droite\r\n    const projection = (normalizedRayDirection.x * (x - this.point1.x) + normalizedRayDirection.y * (y - this.point1.y)) / rayLength\r\n    // La distance minimale est la distance au point d'origine si la projection est négative\r\n    if (projection < 0) {\r\n      return distance(pointerCoords, this.point1)\r\n    } else {\r\n      // Calculer les coordonnées du point le plus proche sur la demi-droite\r\n      const closestX = this.point1.x + rayDirection.x * projection\r\n      const closestY = this.point1.y + rayDirection.y * projection\r\n      const closest = { x: closestX, y: closestY }\r\n      return distance(pointerCoords, closest)\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const [x1Svg, y1Svg, x2Svg, y2Svg] = getRayCoordsOut(this.point1, this.point2)\r\n    if (Number.isNaN(x1Svg) || Number.isNaN(x2Svg) || Number.isNaN(y1Svg) || Number.isNaN(y1Svg)) {\r\n      this.svgLine.removeAttribute('x1')\r\n      this.svgLine.removeAttribute('x2')\r\n      this.svgLine.removeAttribute('y1')\r\n      this.svgLine.removeAttribute('y2')\r\n    } else {\r\n      this.svgLine.setAttribute('x1', `${this.figure.xToSx(x1Svg)}`)\r\n      this.svgLine.setAttribute('y1', `${this.figure.yToSy(y1Svg)}`)\r\n      this.svgLine.setAttribute('x2', `${this.figure.xToSx(x2Svg)}`)\r\n      this.svgLine.setAttribute('y2', `${this.figure.yToSy(y2Svg)}`)\r\n    }\r\n    if (this.shape?.at(0) === '|') {\r\n      this.drawBorder1()\r\n    } else {\r\n      this.svgBorder1?.remove()\r\n    }\r\n    if (this.shape?.at(-1) === '|') {\r\n      this.drawBorder2()\r\n    } else {\r\n      this.svgBorder2?.remove()\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    return `Demi-droite ${this.notation}`\r\n  }\r\n\r\n  get latex (): string {\r\n    const [x1, y1, x2, y2] = getRayCoordsOut(this.point1, this.point2)\r\n    let result = '%' + this.description\r\n    result += `\\n\\\\draw${this.latexOptions} (${x1}, ${y1}) -- (${x2}, ${y2});`\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    const point1Name = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const point2Name = this.point2.label !== '' ? this.point2.label : this.point2.id\r\n    return `[${point1Name}${point2Name})`\r\n  }\r\n}\r\nfunction getRayCoordsOut (A: Point, B: Point): [number, number, number, number] {\r\n  if (A.x === undefined || A.y === undefined || B.x === undefined || B.y === undefined ||\r\n    Number.isNaN(A.x) || Number.isNaN(A.y) || Number.isNaN(B.x) || Number.isNaN(B.y)) return [NaN, NaN, NaN, NaN]\r\n  try {\r\n    const parentFigure = A.figure\r\n    let pente = Infinity\r\n    if (B.x !== A.x) {\r\n      pente = (B.y - A.y) / (B.x - A.x)\r\n    }\r\n    if (pente === Infinity) {\r\n      if (A.y > B.y) return [A.x, A.y, A.x, parentFigure.yMin] // Si la droite est verticale on prend l'abscisse de A et le bon bord en ordonnée\r\n      else return [A.x, A.y, A.x, parentFigure.yMax] // Ici on sort par en haut\r\n    }\r\n    if (Math.abs(pente) < 10 ** -4) {\r\n      if (A.x > B.x) return [A.x, A.y, parentFigure.xMin, A.y]\r\n      else return [A.x, A.y, parentFigure.xMax, A.y]\r\n    }\r\n    let xOutLeft: number, yOutLeft: number\r\n    let n = 0\r\n    if (B.x > A.x) {\r\n      while (true) {\r\n        xOutLeft = A.x + n\r\n        yOutLeft = A.y + n * pente\r\n        n++\r\n        if (xOutLeft > parentFigure.xMax + 1 || yOutLeft > parentFigure.yMax + 1 || yOutLeft < parentFigure.yMin - 1) break\r\n      }\r\n      return [A.x, A.y, xOutLeft, yOutLeft]\r\n    } else {\r\n      while (true) {\r\n        xOutLeft = A.x - n\r\n        yOutLeft = A.y - n * pente\r\n        n++\r\n        if (xOutLeft < parentFigure.xMin - 1 || yOutLeft > parentFigure.yMax + 1 || yOutLeft < parentFigure.yMin - 1) break\r\n      }\r\n      return [A.x, A.y, xOutLeft, yOutLeft]\r\n    }\r\n  } catch (error) {\r\n    console.error('Erreur dans Ray.getRayCoordsOut', error)\r\n    return [NaN, NaN, NaN, NaN]\r\n  }\r\n}\r\n\r\nexport default Ray\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\nimport type Point from '../points/Point'\r\n\r\nimport Ray from './Ray'\r\n\r\nclass BisectorByPoints extends Ray {\r\n  pointOnBissector: Point\r\n  pointOnSide1: Point\r\n  pointOnSide2: Point\r\n  constructor (figure: Figure, { origin, pointOnSide1, pointOnSide2, ...options }: { origin: Point, pointOnSide1: Point, pointOnSide2: Point } & OptionsElement2D) {\r\n    let angle = Math.atan2(pointOnSide2.y - origin.y, pointOnSide2.x - origin.x) - Math.atan2(pointOnSide1.y - origin.y, pointOnSide1.x - origin.x)\r\n    if (angle > Math.PI) angle -= 2 * Math.PI\r\n    if (angle < -Math.PI) angle += 2 * Math.PI\r\n    const x = origin.x + Math.cos(angle / 2) * (pointOnSide1.x - origin.x) - Math.sin(angle / 2) * (pointOnSide1.y - origin.y)\r\n    const y = origin.y + Math.sin(angle / 2) * (pointOnSide1.x - origin.x) + Math.cos(angle / 2) * (pointOnSide1.y - origin.y)\r\n    const bisectorPoint = figure.create('Point', { isChild: true, isSelectable: false, isVisible: false, x, y })\r\n    super(figure, { point1: origin, point2: bisectorPoint, ...options })\r\n    this.type = 'BisectorByPoints'\r\n    this.pointOnSide1 = pointOnSide1\r\n    this.pointOnSide2 = pointOnSide2\r\n    this.pointOnBissector = bisectorPoint\r\n    this.pointOnSide1.subscribe(this)\r\n    this.pointOnSide2.subscribe(this)\r\n    this.point2.unsubscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.point1.id,\r\n      idPointOnSide1: this.pointOnSide1.id,\r\n      idPointOnSide2: this.pointOnSide2.id,\r\n      isChild: this.isChild\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    let angle = Math.atan2(this.pointOnSide2.y - this.point1.y, this.pointOnSide2.x - this.point1.x) - Math.atan2(this.pointOnSide1.y - this.point1.y, this.pointOnSide1.x - this.point1.x)\r\n    if (angle > Math.PI) angle -= 2 * Math.PI\r\n    if (angle < -Math.PI) angle += 2 * Math.PI\r\n    const x = this.point1.x + Math.cos(angle / 2) * (this.pointOnSide1.x - this.point1.x) - Math.sin(angle / 2) * (this.pointOnSide1.y - this.point1.y)\r\n    const y = this.point1.y + Math.sin(angle / 2) * (this.pointOnSide1.x - this.point1.x) + Math.cos(angle / 2) * (this.pointOnSide1.y - this.point1.y)\r\n    this.point2.moveTo(x, y)\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const originName = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const pointOnSide1Name = this.pointOnSide1.label !== '' ? this.pointOnSide1.label : this.pointOnSide1.id\r\n    const pointOnSide2Name = this.pointOnSide2.label !== '' ? this.pointOnSide2.label : this.pointOnSide2.id\r\n    return `Bissectrice de l'angle $\\\\widehat{${pointOnSide1Name}${originName}${pointOnSide2Name}}$`\r\n  }\r\n}\r\n\r\nexport default BisectorByPoints\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\nimport type Vector from '../vector/Vector'\r\nimport type Segment from './Segment'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsCircle, type OptionsElement2D } from '../interfaces'\r\n\r\n/**\r\n * Trace un cercle dont on connait le centre et le rayon\r\n */\r\nclass Circle extends Element2D {\r\n  /** Couleur de remplissage du cercle */\r\n  private _fillColor: 'none' | string\r\n  /** Opacité de remplissage entre 0 et 1 */\r\n  private _fillOpacity?: number\r\n  /** Rayon du cercle */\r\n  _radius: number\r\n  /** Pointeur vers la première extrémité */\r\n  center: Point\r\n  constructor (figure: Figure, { center, fillOpacity = figure.options.fillOpacity, radius, ...options }: OptionsCircle) {\r\n    super(figure, options)\r\n    this.type = 'Circle'\r\n    this._radius = radius\r\n    this.center = center\r\n    if (options?.fillColor !== undefined) this._fillColor = options.fillColor\r\n    else this._fillColor = 'none'\r\n    this.fillOpacity = fillOpacity\r\n    if (options?.isDashed !== undefined) this._isDashed = options.isDashed\r\n  }\r\n\r\n  createReflectedOverLine ({ line, ...options }: { line: Segment } & OptionsElement2D): Circle {\r\n    const newCenter = this.figure.create('PointByReflectOverLine', { isChild: true, isVisible: false, line, origin: this.center })\r\n    const result = this.figure.create('Circle', { center: newCenter, isChild: true, radius: this.radius, ...options })\r\n    return result\r\n  }\r\n\r\n  createTranslatedByPoints ({ point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D): Circle {\r\n    const newCenter = this.figure.create('PointByTranslationByPoints', { isChild: true, isVisible: false, origin: this.center, point1, point2 })\r\n    const result = this.figure.create('Circle', { center: newCenter, isChild: true, radius: this.radius, ...options })\r\n    return result\r\n  }\r\n\r\n  createTranslatedByVector ({ vector, ...options }: { vector: Vector } & OptionsElement2D): Circle {\r\n    const shape = this.center.shape\r\n    const newCenter = this.figure.create('PointByTranslation', { isChild: true, isVisible: false, origin: this.center, shape, vector, ...options })\r\n    if (this.center.label !== undefined) newCenter.label = this.center.label + \"'\"\r\n    const newCircle = this.figure.create('Circle', { center: newCenter, radius: this.radius, ...options })\r\n    return newCircle\r\n  }\r\n\r\n  dilate (center: Point, factor: number): Circle {\r\n    const newCenter = this.center.dilate(center, factor, { isChild: true, isVisible: false })\r\n    const newCircle = this.figure.create('Circle', { center: newCenter, radius: Math.abs(factor) * this.radius })\r\n    newCircle.transformation = { center, factor, origin: this, type: 'dilate' }\r\n    return newCircle\r\n  }\r\n\r\n  distancePointer (x: number, y: number): number {\r\n    if (this.figure.currentState === 'FILL' && this.figure.pointer.isInCircle(this)) return 0\r\n    const distanceToCenter = Math.hypot((x - this.center.x) * this.figure.xScale, (y - this.center.y) * this.figure.yScale) * this.figure.scale\r\n    return Math.abs(distanceToCenter - this.radius * this.figure.scale)\r\n  }\r\n\r\n  draw (): void {\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n    this.center.subscribe(this)\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    this.update()\r\n  }\r\n\r\n  reflect (center: Point): Circle {\r\n    const newCenter = this.center.reflect(center, { isChild: true, isVisible: false })\r\n    const newCircle = this.figure.create('Circle', { center: newCenter, radius: this.radius })\r\n    newCircle.transformation = { center, origin: this, type: 'reflect' }\r\n    return newCircle\r\n  }\r\n\r\n  /** Modifie la couleur et l'épaisseur de l'élément */\r\n  setVisibilityColorThicknessAndDashed (): void {\r\n    this.color = this._color\r\n    this.fillColor = this._fillColor\r\n    if (this._fillOpacity !== undefined) this.fillOpacity = this._fillOpacity\r\n    if (this._isDashed !== undefined) this.isDashed = this._isDashed\r\n    this.isDashed = this._isDashed\r\n    this.isVisible = this._isVisible\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      fillColor: this.fillColor,\r\n      fillOpacity: this.fillOpacity,\r\n      idCenter: this.center.id,\r\n      radius: this._radius\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.center.x === undefined || this.center.y === undefined || Number.isNaN(this.center.x) || Number.isNaN(this.center.y)) {\r\n      this.groupSvg.removeAttribute('r')\r\n    } else {\r\n      const xSvg = this.figure.xToSx(this.center.x)\r\n      const ySvg = this.figure.yToSy(this.center.y)\r\n      const rSvg = this.figure.pixelsPerUnit * this._radius * this.figure.scale\r\n      this.groupSvg.setAttribute('cx', `${xSvg}`)\r\n      this.groupSvg.setAttribute('cy', `${ySvg}`)\r\n      this.groupSvg.setAttribute('r', `${rSvg}`)\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    return `Cercle de centre ${centerName} et de rayon ${this.radius} cm`\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillColor (): string {\r\n    return this._fillColor\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillColor (color: string) {\r\n    this._fillColor = color\r\n    this.groupSvg.setAttribute('fill', this._fillColor)\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillOpacity (): number | undefined {\r\n    return this._fillOpacity\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillOpacity (opacity: number | undefined) {\r\n    this._fillOpacity = opacity\r\n    if (opacity !== undefined) this.groupSvg.setAttribute('fill-opacity', opacity.toString())\r\n  }\r\n\r\n  get latex (): string {\r\n    let result = '% Cercle ' + this.id\r\n    result += `\\n\\\\draw${this.latexOptions} (${this.center.x}, ${this.center.y}) circle (${this.radius});`\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    return this.id\r\n  }\r\n\r\n  get radius (): number {\r\n    return this._radius\r\n  }\r\n\r\n  set radius (radius: number) {\r\n    this._radius = radius\r\n    this.update()\r\n  }\r\n}\r\n\r\nexport default Circle\r\n","import type DynamicNumber from '../../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\nimport type Vector from '../vector/Vector'\r\n\r\nimport { type OptionsCircleCenterDynamicRadius, type OptionsElement2D } from '../interfaces'\r\nimport Circle from './Circle'\r\n\r\nclass CircleCenterDynamicRadius extends Circle {\r\n  /** Centre du cercle */\r\n  center: Point\r\n  /** Rayon du cercle */\r\n  readonly radiusDynamic: DynamicNumber\r\n  constructor (figure: Figure, { center, radius, ...options }: OptionsCircleCenterDynamicRadius) {\r\n    super(figure, { center, radius: radius.value, ...options })\r\n    this.type = 'CircleDynamicRadius'\r\n    this.center = center\r\n    this.radiusDynamic = radius\r\n    this.radiusDynamic.subscribe(this)\r\n    this.update()\r\n    this.setVisibilityColorThicknessAndDashed()\r\n  }\r\n\r\n  createTranslatedByVector ({ vector, ...options }: { vector: Vector } & OptionsElement2D): CircleCenterDynamicRadius {\r\n    const newCenter = this.figure.create('PointByTranslation', { isChild: true, isVisible: false, origin: this.center, shape: this.center.shape, vector })\r\n    if (this.center.label !== undefined) newCenter.label = this.center.label + \"'\"\r\n    const newCircle = this.figure.create('CircleCenterDynamicRadius', { center: newCenter, radius: this.radiusDynamic, ...options })\r\n    return newCircle\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      fillColor: this.fillColor,\r\n      fillOpacity: this.fillOpacity,\r\n      idCenter: this.center.id,\r\n      idRadius: this.radiusDynamic.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.radiusDynamic?.value === undefined || this.center.x === undefined || this.center.y === undefined) return\r\n    const xSvg = this.figure.xToSx(this.center.x)\r\n    const ySvg = this.figure.yToSy(this.center.y)\r\n    const rSvg = this.figure.pixelsPerUnit * this.radiusDynamic?.value * this.figure.scale\r\n    this._radius = this.radiusDynamic.value\r\n    this.groupSvg.setAttribute('cx', `${xSvg}`)\r\n    this.groupSvg.setAttribute('cy', `${ySvg}`)\r\n    if (Number.isFinite(rSvg)) this.groupSvg.setAttribute('r', `${rSvg}`)\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default CircleCenterDynamicRadius\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\nimport type Point from '../points/Point'\r\n\r\nimport Distance from '../../dynamicNumbers/Distance'\r\nimport CircleCenterDynamicRadius from './CircleCenterDyamicRadius'\r\n\r\n/**\r\n * Trace un cercle défini par un centre et une distance dynamique\r\n * Cela servira au report de longueur ou pour tracer un cercle dont le rayon est géré par un curseur\r\n */\r\nclass CircleCenterPoint extends CircleCenterDynamicRadius {\r\n  point: Point\r\n  constructor (figure: Figure, { center, point, ...options }: { center: Point, point: Point } & OptionsElement2D) {\r\n    const radius = new Distance(figure, { isChild: true, point1: center, point2: point })\r\n    super(figure, { center, radius, ...options })\r\n    this.type = 'CircleCenterPoint'\r\n    this.point = point\r\n    this.point.subscribe(this)\r\n  }\r\n\r\n  createTranslatedByPoints ({ point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D): CircleCenterPoint {\r\n    const newCenter = this.figure.create('PointByTranslationByPoints', { isChild: true, isVisible: false, origin: this.center, point1, point2 })\r\n    const newPoint = this.figure.create('PointByTranslationByPoints', { isChild: true, isVisible: false, origin: this.point, point1, point2 })\r\n    const result = this.figure.create('CircleCenterPoint', { center: newCenter, isChild: true, point: newPoint, ...options })\r\n    return result\r\n  }\r\n\r\n  dilate (center: Point, factor: number): CircleCenterPoint {\r\n    const newCenter = this.center.dilate(center, factor, { isChild: true, isVisible: false })\r\n    const newPoint = this.point.dilate(center, factor, { isChild: true, isVisible: false })\r\n    const newCircle = this.figure.create('CircleCenterPoint', { center: newCenter, point: newPoint })\r\n    newCircle.transformation = { center, factor, origin: this, type: 'dilate' }\r\n    return newCircle\r\n  }\r\n\r\n  reflect (center: Point): CircleCenterPoint {\r\n    const newCenter = this.center.reflect(center, { isChild: true, isVisible: false })\r\n    const newPoint = this.point.reflect(center, { isChild: true, isVisible: false })\r\n    const newCircle = this.figure.create('CircleCenterPoint', { center: newCenter, point: newPoint })\r\n    newCircle.transformation = { center, origin: this, type: 'reflect' }\r\n    return newCircle\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      fillColor: this.fillColor,\r\n      fillOpacity: this.fillOpacity,\r\n      idCenter: this.center.id,\r\n      idPoint: this.point.id\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    const pointName = this.point.label !== '' ? this.point.label : this.point.id\r\n    return `Cercle de centre ${centerName} et passant par le point ${pointName}`\r\n  }\r\n}\r\n\r\nexport default CircleCenterPoint\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { distance, orthogonalProjectionCoord } from '../calculus/Coords'\r\nimport { defaultMaxSlope, defaultMinSlope } from '../defaultValues'\r\nimport Segment from './Segment'\r\n\r\n/**\r\n * Trace une droite\r\n */\r\nclass Line extends Segment {\r\n  constructor (figure: Figure, { point1, point2, ...options }: { borderSize?: number\r\n    point1: Point\r\n    point2: Point\r\n    shape?: '-|' | '' | '|-' | '|-|' }) {\r\n    super(figure, { point1, point2, ...options })\r\n    this.type = 'Line'\r\n  }\r\n\r\n  distancePointer (x: number, y: number): number {\r\n    const pointerCoords = { x, y }\r\n    const projectionCoords = orthogonalProjectionCoord(pointerCoords, this)\r\n    return distance(pointerCoords, projectionCoords)\r\n  }\r\n\r\n  update (): void {\r\n    const [x1Svg, y1Svg, x2Svg, y2Svg] = getCoordsOut(this.point1, this.point2)\r\n    if (Number.isNaN(x1Svg) || Number.isNaN(x2Svg) || Number.isNaN(y1Svg) || Number.isNaN(y1Svg)) {\r\n      this.svgLine.removeAttribute('x1')\r\n      this.svgLine.removeAttribute('x2')\r\n      this.svgLine.removeAttribute('y1')\r\n      this.svgLine.removeAttribute('y2')\r\n    } else {\r\n      this.svgLine.setAttribute('x1', `${this.figure.xToSx(x1Svg)}`)\r\n      this.svgLine.setAttribute('y1', `${this.figure.yToSy(y1Svg)}`)\r\n      this.svgLine.setAttribute('x2', `${this.figure.xToSx(x2Svg)}`)\r\n      this.svgLine.setAttribute('y2', `${this.figure.yToSy(y2Svg)}`)\r\n    }\r\n    if (this.shape?.at(0) === '|') {\r\n      this.drawBorder1()\r\n    } else {\r\n      this.svgBorder1?.remove()\r\n    }\r\n    if (this.shape?.at(-1) === '|') {\r\n      this.drawBorder2()\r\n    } else {\r\n      this.svgBorder2?.remove()\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    if (this.point1.label !== '' || this.point2.label !== '') {\r\n      return `Droite ${this.notation}`\r\n    }\r\n    const lines = [...this.figure.elements.values()].filter(element => element instanceof Line) as Line[]\r\n    const index = lines.indexOf(this)\r\n    return `Droite n°${index + 1}`\r\n  }\r\n\r\n  get latex (): string {\r\n    const [x1, y1, x2, y2] = getCoordsOut(this.point1, this.point2)\r\n    let result = '%' + this.description\r\n    result += `\\n\\\\draw${this.latexOptions} (${x1}, ${y1}) -- (${x2}, ${y2});`\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    const point1Name = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const point2Name = this.point2.label !== '' ? this.point2.label : this.point2.id\r\n    return `(${point1Name}${point2Name})`\r\n  }\r\n}\r\n\r\n/** Renvoie [x1, y1, x2, y2] les coordonnées des extrémités du tracé */\r\nfunction getCoordsOut (A: Point, B: Point): [number, number, number, number] {\r\n  if (A.x === undefined || A.y === undefined || B.x === undefined || B.y === undefined ||\r\n    Number.isNaN(A.x) || Number.isNaN(A.y) || Number.isNaN(B.x) || Number.isNaN(B.y)) return [NaN, NaN, NaN, NaN]\r\n  try {\r\n    const figure = A.figure\r\n    let pente = defaultMaxSlope\r\n    if (B.x !== A.x) {\r\n      pente = (B.y - A.y) / (B.x - A.x)\r\n    }\r\n    if (Math.abs(pente) >= defaultMaxSlope) return [A.x, figure.yMax, A.x, figure.yMin]\r\n    if (Math.abs(pente) < defaultMinSlope) return [figure.xMin, A.y, figure.xMax, A.y]\r\n    let xOutLeft: number, yOutLeft: number\r\n    let n = 0\r\n    while (true) {\r\n      xOutLeft = A.x + n\r\n      yOutLeft = A.y + n * pente\r\n      n++\r\n      if (xOutLeft > figure.xMax + 1 || yOutLeft > figure.yMax + 1 || yOutLeft < figure.yMin - 1) break\r\n    }\r\n    let xOutRight: number, yOutRight: number\r\n    n = 0\r\n    while (true) {\r\n      xOutRight = A.x + n\r\n      yOutRight = A.y + n * pente\r\n      n--\r\n      if (xOutRight < figure.xMin - 1 || yOutRight > figure.yMax + 1 || yOutRight < figure.yMin - 1) break\r\n    }\r\n    return [xOutLeft, yOutLeft, xOutRight, yOutRight]\r\n  } catch (error) {\r\n    console.error('Erreur dans Line.getCoordsOut', error)\r\n    return [NaN, NaN, NaN, NaN]\r\n  }\r\n}\r\n\r\nexport default Line\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\nimport type Vector from '../vector/Vector'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Line from './Line'\r\n\r\nclass LineByPointVector extends Line {\r\n  point: Point\r\n  vector: Vector\r\n  constructor (figure: Figure, { point, vector, ...options }: { point: Point, vector: Vector } & OptionsElement2D) {\r\n    const point2 = figure.create('PointByTranslation', { isChild: true, isSelectable: true, isVisible: false, origin: point, shape: point.shape, vector })\r\n    super(figure, { point1: point, point2, shape: '', ...options })\r\n    this.type = 'LineByPointVector'\r\n    this.point = point\r\n    this.vector = vector\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idPoint: this.point.id,\r\n      idVector: this.vector.id\r\n    }\r\n  }\r\n}\r\n\r\nexport default LineByPointVector\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type OptionsLineParallel } from '../interfaces'\r\nimport Line from './Line'\r\n\r\nclass LineParallel extends Line {\r\n  /** Droite parallèle qui la définit */\r\n  line: Line\r\n  /** Point par lequel passe cette droite */\r\n  point: Point\r\n  constructor (figure: Figure, { line, point, ...options }: OptionsLineParallel) {\r\n    const x1 = point.x\r\n    const y1 = point.y\r\n    const x2 = x1 + 5\r\n    const y2 = y1 + 5 * (line.point2.y - line.point1.y) / (line.point2.x - line.point1.x)\r\n    const point1 = figure.create('Point', { isChild: true, isFree: false, isVisible: false, x: x1, y: y1 })\r\n    const point2 = figure.create('Point', { isChild: true, isFree: false, isVisible: false, x: x2, y: y2 })\r\n    super(figure, { point1, point2, ...options })\r\n    this.type = 'LineParallel'\r\n    this.line = line\r\n    this.point = point\r\n    this.line.subscribe(this)\r\n    this.point.subscribe(this)\r\n    this.point1.unsubscribe(this)\r\n    this.point2.unsubscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idPoint: this.point.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const x1 = this.point.x\r\n    const y1 = this.point.y\r\n    const x2 = x1 + 5\r\n    const y2 = y1 + 5 * (this.line.point2.y - this.line.point1.y) / (this.line.point2.x - this.line.point1.x)\r\n    this.point1.moveTo(x1, y1)\r\n    this.point2.moveTo(x2, y2)\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const pointName = this.point.label !== '' ? this.point.label : this.point.id\r\n    if (this.line.point1.label !== '' && this.line.point2.label !== '' && this.point.label !== '') {\r\n      return `Droite parallèle à $${this.line.notation}$ et passant par le point $${pointName}$`\r\n    } else {\r\n      const parallelLines = [...this.figure.elements.values()].filter(element => element instanceof LineParallel) as LineParallel[]\r\n      const index = parallelLines.indexOf(this)\r\n      return `Droite parallèle n°${index + 1}`\r\n    }\r\n  }\r\n}\r\n\r\nexport default LineParallel\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type Coords, orthogonalProjectionCoord, rotationCoord } from '../calculus/Coords'\r\nimport { type OptionsLinePerpendicular } from '../interfaces'\r\nimport Line from './Line'\r\n\r\nclass LinePerpendicular extends Line {\r\n  /** Droite perpendiculaire qui la définit */\r\n  line: Line\r\n  /** Point par lequel passe cette droite */\r\n  point: Point\r\n  constructor (figure: Figure, { line, point, ...options }: OptionsLinePerpendicular) {\r\n    const x1 = point.x\r\n    const y1 = point.y\r\n    let result: Coords\r\n    if (x1 === line.point1.x && y1 === line.point1.y) {\r\n      result = rotationCoord(line.point2, line.point1, 90)\r\n    } else if (x1 === line.point2.x && y1 === line.point2.y) {\r\n      result = rotationCoord(line.point1, point, 90)\r\n    } else if (point.isOnline(line)) {\r\n      result = rotationCoord(line.point1, point, 90)\r\n    } else {\r\n      result = orthogonalProjectionCoord(point, line)\r\n    }\r\n    const x2 = result.x\r\n    const y2 = result.y\r\n    const point1 = figure.create('Point', { isChild: true, isFree: false, isVisible: false, x: x1, y: y1 })\r\n    const point2 = figure.create('Point', { isChild: true, isFree: false, isVisible: false, x: x2, y: y2 })\r\n    super(figure, { point1, point2, ...options })\r\n    this.type = 'LinePerpendicular'\r\n    this.line = line\r\n    this.point = point\r\n    this.line.subscribe(this)\r\n    this.point.subscribe(this)\r\n    this.point1.unsubscribe(this)\r\n    this.point2.unsubscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idPoint: this.point.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const x1 = this.point.x\r\n    const y1 = this.point.y\r\n    let result: Coords\r\n    if (x1 === this.line.point1.x && y1 === this.line.point1.y) {\r\n      result = rotationCoord(this.line.point2, this.line.point1, 90)\r\n    } else if (x1 === this.line.point2.x && y1 === this.line.point2.y) {\r\n      result = rotationCoord(this.line.point1, this.point, 90)\r\n    } else if (this.point.isOnline(this.line)) {\r\n      result = rotationCoord(this.line.point1, this.point, 90)\r\n    } else {\r\n      result = orthogonalProjectionCoord(this.point, this.line)\r\n    }\r\n    const x2 = result.x\r\n    const y2 = result.y\r\n    this.point1.moveTo(x1, y1)\r\n    this.point2.moveTo(x2, y2)\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const pointName = this.point.label !== '' ? this.point.label : this.point.id\r\n    if (this.line.point1.label !== '' && this.line.point2.label !== '' && this.point.label !== '') {\r\n      return `Droite perpendiculaire à $${this.line.notation}$ et passant par le point $${pointName}$`\r\n    } else {\r\n      const perpendicularLines = [...this.figure.elements.values()].filter(element => element instanceof LinePerpendicular) as LinePerpendicular[]\r\n      const index = perpendicularLines.indexOf(this)\r\n      return `Droite perpendiculaire n°${index + 1}`\r\n    }\r\n  }\r\n}\r\n\r\nexport default LinePerpendicular\r\n","import type Figure from '../../Figure'\r\nimport type Segment from './Segment'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport LinePerpendicular from './LinePerpendicular'\r\n\r\nclass PerpendicularBisector extends LinePerpendicular {\r\n  notationSegment: string\r\n  constructor (figure: Figure, { segment, ...options }: { segment: Segment } & OptionsElement2D) {\r\n    const middlePoint = figure.create('Middle', { isChild: true, isSelectable: true, isVisible: false, point1: segment.point1, point2: segment.point2, shape: '' })\r\n    super(figure, { line: segment, point: middlePoint, ...options })\r\n    this.type = 'PerpendicularBisector'\r\n    this.notationSegment = segment.notation\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idSegment: this.line.id\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    return `Médiatrice du segment $${this.notationSegment}$`\r\n  }\r\n\r\n  get notation (): string {\r\n    return `\\\\text{médiatrice de }${this.notationSegment}`\r\n  }\r\n}\r\n\r\nexport default PerpendicularBisector\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport PerpendicularBisector from './PerpendicularBisector'\r\n\r\nclass PerpendicularBisectorByPoints extends PerpendicularBisector {\r\n  constructor (figure: Figure, { point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D) {\r\n    const segment = figure.create('Segment', { isChild: true, isSelectable: true, isVisible: false, point1, point2 })\r\n    super(figure, { segment, ...options })\r\n    this.type = 'PerpendicularBisectorByPoints'\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idPoint1: this.line.point1.id,\r\n      idPoint2: this.line.point2.id\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    const point1Name = this.line.point1.label !== '' ? this.line.point1.label : this.line.point1.id\r\n    const point2Name = this.line.point2.label !== '' ? this.line.point2.label : this.line.point2.id\r\n    return `Médiatrice du segment $[${point1Name}${point2Name}]$`\r\n  }\r\n}\r\n\r\nexport default PerpendicularBisectorByPoints\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\nimport type Segment from './Segment'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsElement2D } from '../interfaces'\r\n\r\n/**\r\n * Trace une polygone\r\n */\r\nclass Polygon extends Element2D {\r\n  _fillColor = 'none'\r\n  _fillOpacity = 0.5\r\n  /** Est-ce qu'on créé un segment pour chaque côté ? */\r\n  isBuiltWithSegments: boolean\r\n  /** Liste des sommets */\r\n  points: Point[]\r\n  /** Liste des côtés */\r\n  readonly segments: Segment[]\r\n  /** Forme des sommets */\r\n  shape: '' | 'o' | 'x'\r\n  constructor (figure: Figure, { fillColor = 'none', fillOpacity = figure.options.fillOpacity, isBuiltWithSegments = true, points, shape = '', ...options }: { fillColor?: string, fillOpacity?: number, isBuiltWithSegments?: boolean, points: Point[], shape?: '' | 'o' | 'x' } & OptionsElement2D) {\r\n    super(figure, options)\r\n    this.type = 'Polygon'\r\n    this.points = points\r\n    this.shape = shape\r\n    this.segments = []\r\n    this.fillColor = fillColor\r\n    this.fillOpacity = fillOpacity\r\n    this.isBuiltWithSegments = isBuiltWithSegments\r\n    for (const point of points) {\r\n      point.subscribe(this)\r\n      if (!this.isChild) point.color = ''\r\n    }\r\n  }\r\n\r\n  createReflectedOverLine ({ line, ...options }: { line: Segment } & OptionsElement2D): Polygon {\r\n    const newPoints = []\r\n    for (const point of this.points) {\r\n      newPoints.push(this.figure.create('PointByReflectOverLine', { color: '', isChild: true, line, origin: point }))\r\n    }\r\n    return this.figure.create('Polygon', { isChild: true, points: newPoints, ...options })\r\n  }\r\n\r\n  /** Créer un segment caché pour chacun des côtés du polygone et ainsi permettre de placer des milieux, tracer des perpendiculaires... */\r\n  createSegments (): void {\r\n    for (let i = 0; i < this.points.length; i++) {\r\n      const point1 = this.points.at(i % this.points.length) as Point\r\n      const point2 = this.points.at((i + 1) % this.points.length) as Point\r\n      const segment = this.figure.create('Segment', { color: '', id: this.id + '_segment' + i.toString(), isChild: true, point1, point2 })\r\n      this.segments.push(segment)\r\n    }\r\n    for (const segment of this.segments) {\r\n      segment.createdBy = this\r\n    }\r\n  }\r\n\r\n  createTranslatedByPoints ({ point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D): Polygon {\r\n    const newPoints = []\r\n    for (const point of this.points) {\r\n      newPoints.push(this.figure.create('PointByTranslationByPoints', { color: '', isChild: true, origin: point, point1, point2 }))\r\n    }\r\n    return this.figure.create('Polygon', { isChild: true, points: newPoints, ...options })\r\n  }\r\n\r\n  dilate (center: Point, factor: number): Polygon {\r\n    const newPoints = []\r\n    for (const point of this.points) {\r\n      newPoints.push(point.dilate(center, factor, { isChild: true, isVisible: false }))\r\n    }\r\n    const newPolygon = this.figure.create('Polygon', { points: newPoints })\r\n    newPolygon.transformation = { center, factor, origin: this, type: 'dilate' }\r\n    return newPolygon\r\n  }\r\n\r\n  distancePointer (x: number, y: number): number {\r\n    if (this.figure.currentState === 'FILL' && this.figure.pointer.isInPolygon(this)) return 0\r\n    let minDistance = Infinity\r\n    for (const segment of this.segments) {\r\n      const distance = segment.distancePointer(x, y)\r\n      if (distance < minDistance) minDistance = distance\r\n    }\r\n    return minDistance\r\n  }\r\n\r\n  draw (): void {\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'polygon')\r\n    this.groupSvg.setAttribute('fill', this.fillColor ?? 'none')\r\n    this.groupSvg.setAttribute('fill-opacity', this.fillOpacity.toString())\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    if (this.isBuiltWithSegments) {\r\n      this.createSegments()\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  reflect (center: Point): Polygon {\r\n    const newPoints = []\r\n    for (const point of this.points) {\r\n      newPoints.push(point.reflect(center, { isChild: true, isVisible: false }))\r\n    }\r\n    const newPolygon = this.figure.create('Polygon', { points: newPoints })\r\n    newPolygon.transformation = { center, origin: this, type: 'reflect' }\r\n    return newPolygon\r\n  }\r\n\r\n  remove (): void {\r\n    super.remove()\r\n    for (const segment of this.segments) {\r\n      segment.remove()\r\n    }\r\n  }\r\n\r\n  toJSON (): object {\r\n    const idPoints = []\r\n    for (const point of this.points) {\r\n      idPoints.push(point.id)\r\n    }\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idPoints\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    if (!allCoordsAreNumber(this.points)) {\r\n      this.groupSvg.removeAttribute('points')\r\n    } else {\r\n      let pointsCoords = ''\r\n      for (const point of this.points) {\r\n        pointsCoords += `${this.figure.xToSx(point.x).toString()},${this.figure.yToSy(point.y).toString()} `\r\n      }\r\n      this.groupSvg.setAttribute('points', pointsCoords)\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    return 'Polygone ' + this.notation\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillColor (): string {\r\n    return this._fillColor\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillColor (color: string) {\r\n    this._fillColor = color\r\n    this.groupSvg.setAttribute('fill', this._fillColor)\r\n  }\r\n\r\n  /** Couleur de remplissage au format HTML */\r\n  get fillOpacity (): number {\r\n    return this._fillOpacity ?? this.figure.options.fillOpacity\r\n  }\r\n\r\n  /** Change la couleur des tracés de l'élément */\r\n  set fillOpacity (opacity: number) {\r\n    this._fillOpacity = opacity\r\n    if (opacity !== undefined) this.groupSvg.setAttribute('fill-opacity', opacity.toString())\r\n  }\r\n\r\n  get latex (): string {\r\n    let result = '% Polygone ' + this.points.reduce((acc, point) => acc + point.label, '')\r\n    result += '\\n \\\\draw '\r\n    for (const point of this.points) {\r\n      result += `(${point.x.toFixed(2)},${point.y.toFixed(2)}) -- `\r\n    }\r\n    result += ' cycle;'\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    return this.points.reduce((acc, point) => {\r\n      const pointName = point.label === '' ? point.id : point.label\r\n      return acc + pointName\r\n    }, '')\r\n  }\r\n}\r\n\r\nexport default Polygon\r\n\r\nfunction allCoordsAreNumber (points: Point[]): boolean {\r\n  for (const point of points) {\r\n    if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) return false\r\n  }\r\n  return true\r\n}\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsPolyline } from '../interfaces'\r\n\r\n/**\r\n * Trace une ligne brisée\r\n */\r\nclass Polyline extends Element2D {\r\n  /** Liste des sommets */\r\n  points: Point[]\r\n  /** Détermine s'il faut afficher les deux extrémités, que celle de gauche ou que celle de droite */\r\n  shape?: '' | '|-' | '|-' | '|-|'\r\n  constructor (figure: Figure, { points, ...options }: OptionsPolyline) {\r\n    super(figure, options)\r\n    this.type = 'Polyline'\r\n    this.points = points\r\n    for (const point of points) {\r\n      point.subscribe(this)\r\n    }\r\n  }\r\n\r\n  draw (): void {\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'polyline')\r\n    this.groupSvg.setAttribute('fill', 'none')\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    this.update()\r\n  }\r\n\r\n  toJSON (): object {\r\n    const idPoints = []\r\n    for (const point of this.points) {\r\n      idPoints.push(point.id)\r\n    }\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idPoints\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    if (!allCoordsAreNumber(this.points)) {\r\n      this.groupSvg.removeAttribute('points')\r\n    } else {\r\n      let pointsCoords = ''\r\n      for (const point of this.points) {\r\n        pointsCoords += `${this.figure.xToSx(point.x).toString()},${this.figure.yToSy(point.y).toString()} `\r\n      }\r\n      this.groupSvg.setAttribute('points', pointsCoords)\r\n    }\r\n  }\r\n}\r\n\r\nexport default Polyline\r\n\r\nfunction allCoordsAreNumber (points: Point[]): boolean {\r\n  for (const point of points) {\r\n    if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) return false\r\n  }\r\n  return true\r\n}\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\nimport type Arc from '../lines/Arc'\r\nimport type Circle from '../lines/Circle'\r\nimport type Line from '../lines/Line'\r\nimport type Polygon from '../lines/Polyligon'\r\nimport type Segment from '../lines/Segment'\r\nimport type TextByPoint from '../text/TextByPoint'\r\n\r\nimport { round } from '../../lib/format'\r\nimport { distance, normalizeAngle } from '../calculus/utils'\r\nimport Element2D from '../Element2D'\r\n\r\n/**\r\n * Trace un point et ajoute un éventuel label à partir de la propriété label\r\n */\r\nclass Point extends Element2D {\r\n  /** Couleur du label */\r\n  private _colorLabel: string\r\n  /** Nom que l'on affiche à côté du point */\r\n  private _label?: string\r\n  /** Croix, rond ou rien */\r\n  private _shape: '' | '|' | 'o' | 'x'\r\n  /** Taille du point, correspond à ce qui est ajouté dans les 4 directions pour faire la croix ou au rayon du rond */\r\n  private _sizeInPixels: number\r\n  protected _x: number\r\n  protected _y: number\r\n  /** Elément SVG pour rond */\r\n  private svgCircle!: SVGCircleElement\r\n  /** Affichage du nom du point */\r\n  elementTextLabel?: TextByPoint\r\n  /** Le point est-il librement déplaçable ? */\r\n  isFree: boolean\r\n  /** Décalage vertical pour le nom du point */\r\n  labelDxInPixels: number\r\n  /** Décalage horizontal pour le nom du point */\r\n  labelDyInPixels: number\r\n  /** Elément SVG pour le premier trait de la croix */\r\n  protected svgLine1!: SVGLineElement\r\n  /** Elément SVG pour le deuxième trait de la croix */\r\n  protected svgLine2!: SVGLineElement\r\n  constructor (figure: Figure, { color = figure.options.color, colorLabel = figure.options.color, id, isChild, isFree = true, isSelectable, isVisible, label, labelDxInPixels, labelDyInPixels, shape, sizeInPixels, thickness, x = 0, y = 0 }:\r\n  { color?: string\r\n    colorLabel?: string\r\n    id?: string\r\n    isChild?: boolean\r\n    isFree?: boolean\r\n    isSelectable?: boolean\r\n    isVisible?: boolean\r\n    label?: string\r\n    labelDxInPixels?: number\r\n    labelDyInPixels?: number\r\n    shape?: '' | '|' | 'o' | 'x'\r\n    sizeInPixels?: number\r\n    thickness?: number\r\n    x?: number\r\n    y?: number }) {\r\n    if (id === undefined) {\r\n      let cpt = 0\r\n      while (figure.elements.has('point' + cpt.toString())) {\r\n        cpt++\r\n      }\r\n      id = 'point' + cpt.toString()\r\n    }\r\n    super(figure, { color, id, isChild, isSelectable, thickness })\r\n    this.type = 'Point'\r\n    this._shape = shape ?? 'x'\r\n    this._sizeInPixels = sizeInPixels ?? figure.options.pointSize\r\n    this._thickness = thickness ?? figure.options.thicknessForPoint\r\n    this.labelDxInPixels = labelDxInPixels ?? figure.options.labelDxInPixels\r\n    this.labelDyInPixels = labelDyInPixels ?? figure.options.labelDyInPixels\r\n    if (this.figure.snapGrid && this.isVisible) { // Les points invisible comme ceux qui définissent la droite perpendiculaire n'ont pas besoin d'être sur la grille\r\n      this._x = Math.round(x / this.figure.dx) * this.figure.dx\r\n      this._y = Math.round(y / this.figure.dy) * this.figure.dy\r\n    } else {\r\n      this._x = x\r\n      this._y = y\r\n    }\r\n    this.label = label\r\n    this._colorLabel = colorLabel\r\n    this.isFree = isFree\r\n    this._isVisible = isVisible ?? true\r\n  }\r\n\r\n  private redraw (): void {\r\n    this.notify()\r\n    if (Number.isNaN(this._x) || Number.isNaN(this._y)) {\r\n      this.svgCircle?.remove()\r\n      this.svgLine1?.remove()\r\n      this.svgLine2?.remove()\r\n      this.elementTextLabel?.hide()\r\n      return\r\n    }\r\n    if (this.elementTextLabel === undefined || this.elementTextLabel.x > this.figure.xMax || this.elementTextLabel.y > this.figure.yMax || this.elementTextLabel.x < this.figure.xMin || this.elementTextLabel.y < this.figure.yMin) {\r\n      this.elementTextLabel?.hide()\r\n    } else this.elementTextLabel?.show()\r\n    if (this._shape === 'x') {\r\n      const x1Svg = this.figure.xToSx(this._x) - this._sizeInPixels\r\n      const x2Svg = this.figure.xToSx(this._x) + this._sizeInPixels\r\n      const x3Svg = this.figure.xToSx(this._x) + this._sizeInPixels\r\n      const x4Svg = this.figure.xToSx(this._x) - this._sizeInPixels\r\n      const y1Svg = this.figure.yToSy(this._y) - this._sizeInPixels\r\n      const y2Svg = this.figure.yToSy(this._y) + this._sizeInPixels\r\n      const y3Svg = this.figure.yToSy(this._y) - this._sizeInPixels\r\n      const y4Svg = this.figure.yToSy(this._y) + this._sizeInPixels\r\n      this.svgLine1.setAttribute('x1', `${x1Svg}`)\r\n      this.svgLine1.setAttribute('y1', `${y1Svg}`)\r\n      this.svgLine1.setAttribute('x2', `${x2Svg}`)\r\n      this.svgLine1.setAttribute('y2', `${y2Svg}`)\r\n      this.svgLine2.setAttribute('x1', `${x3Svg}`)\r\n      this.svgLine2.setAttribute('y1', `${y3Svg}`)\r\n      this.svgLine2.setAttribute('x2', `${x4Svg}`)\r\n      this.svgLine2.setAttribute('y2', `${y4Svg}`)\r\n      this.svgCircle?.remove()\r\n      this.groupSvg.appendChild(this.svgLine1)\r\n      this.groupSvg.appendChild(this.svgLine2)\r\n    } else if (this._shape === 'o') {\r\n      const xSvg = this.figure.xToSx(this._x)\r\n      const ySvg = this.figure.yToSy(this._y)\r\n      const rSvg = this._sizeInPixels\r\n      this.svgCircle.setAttribute('cx', `${xSvg}`)\r\n      this.svgCircle.setAttribute('cy', `${ySvg}`)\r\n      this.svgCircle.setAttribute('r', `${rSvg}`)\r\n      this.svgLine1?.remove()\r\n      this.svgLine2?.remove()\r\n      this.groupSvg.appendChild(this.svgCircle)\r\n    } else if (this._shape === '') {\r\n      this.svgLine1?.remove()\r\n      this.svgLine2?.remove()\r\n      this.svgCircle?.remove()\r\n    }\r\n  }\r\n\r\n  createReflectedOverLine ({ line, ...options }: { line: Segment } & OptionsElement2D): Point {\r\n    return this.figure.create('PointByReflectOverLine', { isChild: true, line, origin: this, ...options })\r\n  }\r\n\r\n  createSegmentToAxeX (): Segment {\r\n    const M = this.figure.create('PointByProjectionOnAxisX', { isVisible: false, origin: this })\r\n    return this.figure.create('Segment', { isDashed: true, point1: this, point2: M })\r\n  }\r\n\r\n  createSegmentToAxeY (): Segment {\r\n    const M = this.figure.create('PointByProjectionOnAxisY', { isVisible: false, origin: this })\r\n    return this.figure.create('Segment', { isDashed: true, point1: this, point2: M })\r\n  }\r\n\r\n  createTranslatedByPoints ({ point1, point2, ...options }: { point1: Point, point2: Point } & OptionsElement2D): Point {\r\n    return this.figure.create('PointByTranslationByPoints', { isChild: true, origin: this, point1, point2, ...options })\r\n  }\r\n\r\n  dilate (center: Point, factor: number, options: OptionsElement2D = {}): Point {\r\n    const dilated = this.figure.create('Point', options)\r\n    dilated.transformation = { center, factor, origin: this, type: 'dilate' }\r\n    this.subscribe(dilated)\r\n    center.subscribe(dilated)\r\n    dilated.isFree = false\r\n    dilated.update()\r\n    return dilated\r\n  }\r\n\r\n  /** Distance entre un point et le pointeur de la souris exprimée dans les unités du repère */\r\n  distancePointer (pointerX: number, pointerY: number): number {\r\n    if (this._x === undefined || this._y === undefined) return Infinity\r\n    return Math.hypot((this._x - pointerX) * this.figure.scale * this.figure.xScale, (this._y - pointerY) * this.figure.scale * this.figure.yScale)\r\n  }\r\n\r\n  draw (): void {\r\n    // Les deux traits qui forment la croix du point\r\n    this.svgLine1 = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n    this.svgLine2 = document.createElementNS('http://www.w3.org/2000/svg', 'line')\r\n    // Le cercle, si le point est représenté par un rond\r\n    this.svgCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n    // Le groupe parent de la représentation du point\r\n    this.groupSvg = document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n    this.setVisibilityColorThicknessAndDashed()\r\n    if (this.isVisible) {\r\n      this.shape = this._shape\r\n      this.label = this._label\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  isInArc (arc: Arc): boolean {\r\n    const [x, y] = [this.x, this.y]\r\n    const distanceToCenter = distance(this, arc.center)\r\n    const radius = distance(arc.center, arc.start)\r\n    if (distanceToCenter > radius) return false\r\n    const angle = normalizeAngle(Math.atan2(y - arc.center.y, x - arc.center.x))\r\n    const angleStart = normalizeAngle(Math.atan2(arc.start.y - arc.center.y, arc.start.x - arc.center.x))\r\n    const angleEnd = normalizeAngle(angleStart + (arc.dynamicAngle.value * Math.PI / 180))\r\n    if (angleStart < angleEnd) {\r\n      return (angleStart < angle && angle < angleEnd)\r\n    } else {\r\n      return (angleStart < angle || angle < angleEnd)\r\n    }\r\n  }\r\n\r\n  isInCircle (circle: Circle): boolean {\r\n    return (this.x - circle.center.x) ** 2 + (this.y - circle.center.y) ** 2 <= circle.radius ** 2\r\n  }\r\n\r\n  isInPolygon (polygon: Polygon): boolean {\r\n    const x = this.x\r\n    const y = this.y\r\n    let result = false\r\n    for (let i = 0; i < polygon.points.length; i++) {\r\n      const point1 = polygon.points.at(i % polygon.points.length) as Point\r\n      const point2 = polygon.points.at((i + 1) % polygon.points.length) as Point\r\n      if ((point1.y > y) !== (point2.y > y) && (x < (point2.x - point1.x) * (y - point1.y) / (point2.y - point1.y) + point1.x)) {\r\n        result = !result\r\n      }\r\n    }\r\n    return result\r\n  }\r\n\r\n  isOnline (line: Line): boolean {\r\n    const [a, b, c] = line.equation\r\n    let result = (Math.abs(a * this.x + b * this.y + c) < 10 ** -6)\r\n    if (line.type === 'Segment' && (this.x < Math.min(line.point1.x, line.point2.x) || this.x > Math.max(line.point1.x, line.point2.x) || this.y < Math.min(line.point1.y, line.point2.y) || this.y > Math.max(line.point1.y, line.point2.y))) {\r\n      result = false\r\n    }\r\n    if (line.type === 'Ray') {\r\n      // Direction gauche droite\r\n      if (line.point1.x < line.point2.x && this.x < line.point1.x) {\r\n        result = false\r\n      }\r\n      // Direction droite gauche\r\n      if (line.point1.x > line.point2.x && this.x > line.point1.x) {\r\n        result = false\r\n      }\r\n      // Direction bas haut\r\n      if (line.point1.y < line.point2.y && this.y < line.point1.y) {\r\n        result = false\r\n      }\r\n      // Direction haut bas\r\n      if (line.point1.y > line.point2.y && this.y > line.point1.y) {\r\n        result = false\r\n      }\r\n    }\r\n    return result\r\n  }\r\n\r\n  jsonOptions (): object {\r\n    return {\r\n      ...super.jsonOptions(),\r\n      colorLabel: this.colorLabel,\r\n      label: this.label,\r\n      labelDxInPixels: this.labelDxInPixels,\r\n      labelDyInPixels: this.labelDyInPixels,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels,\r\n      x: round(this.x),\r\n      y: round(this.y)\r\n    }\r\n  }\r\n\r\n  /** Déplace le point */\r\n  moveTo (x: number, y: number): void {\r\n    this.x = x\r\n    this.y = y\r\n  }\r\n\r\n  reflect (center: Point, options: OptionsElement2D = {}): Point {\r\n    const reflected = this.figure.create('Point', options)\r\n    reflected.transformation = { center, origin: this, type: 'reflect' }\r\n    this.subscribe(reflected)\r\n    center.subscribe(reflected)\r\n    reflected.isFree = false\r\n    reflected.update()\r\n    return reflected\r\n  }\r\n\r\n  toJSON (): object {\r\n    return this.jsonOptions()\r\n  }\r\n\r\n  update (): void {\r\n    if (this.transformation?.type === 'reflect') {\r\n      this._x = 2 * this.transformation.center.x - (this.transformation.origin as Point).x\r\n      this._y = 2 * this.transformation.center.y - (this.transformation.origin as Point).y\r\n    } else if (this.transformation?.type === 'dilate') {\r\n      this._x = this.transformation.center.x + this.transformation.factor * ((this.transformation.origin as Point).x - this.transformation.center.x)\r\n      this._y = this.transformation.center.y + this.transformation.factor * ((this.transformation.origin as Point).y - this.transformation.center.y)\r\n    }\r\n\r\n    this.redraw()\r\n  }\r\n\r\n  get color (): string {\r\n    return this._color\r\n  }\r\n\r\n  set color (color) {\r\n    this._color = color\r\n    if (this.svgCircle !== undefined) {\r\n      this.svgCircle.setAttribute('fill', color)\r\n      this.svgCircle.setAttribute('stroke', color)\r\n    }\r\n    if (this.svgLine1 !== undefined) {\r\n      this.svgLine1.setAttribute('stroke', color)\r\n    }\r\n    if (this.svgLine2 !== undefined) {\r\n      this.svgLine2.setAttribute('stroke', color)\r\n    }\r\n  }\r\n\r\n  get colorLabel (): string {\r\n    return this._colorLabel\r\n  }\r\n\r\n  set colorLabel (color: string) {\r\n    this._colorLabel = color\r\n    if (this.elementTextLabel !== undefined) this.elementTextLabel.color = color\r\n  }\r\n\r\n  get description (): string {\r\n    if (this.transformation?.type === 'reflect') return `Point $${this.label}$ image du point $${(this.transformation.origin as Point).notation}$ dans la symétrie de centre $${this.transformation?.center.notation}$`\r\n    if (this.figure.options.pointDescriptionWithCoordinates) {\r\n      return `Point $${this.label}$ libre de coordonnées $(${round(this.x, 2).toString().replace('.', ',')}\\\\;;\\\\;${round(this.y, 2).toString().replace('.', ',')})$`\r\n    } else {\r\n      return `Point $${this.label}$`\r\n    }\r\n  }\r\n\r\n  get isVisible (): boolean {\r\n    return this._isVisible\r\n  }\r\n\r\n  set isVisible (isVisible) {\r\n    this._isVisible = isVisible\r\n    this.isVisible ? this.elementTextLabel?.show() : this.elementTextLabel?.hide()\r\n    super.isVisible = isVisible\r\n  }\r\n\r\n  get label (): string {\r\n    if (this._label === undefined) return ''\r\n    return this._label\r\n  }\r\n\r\n  set label (label: string | undefined) {\r\n    this._label = label\r\n    if (label !== undefined) {\r\n      if (this.elementTextLabel === undefined) {\r\n        this.elementTextLabel = this.figure.create('TextByPoint', { color: this.colorLabel, dxInPixels: this.labelDxInPixels, dyInPixels: this.labelDyInPixels, id: this.id + '_label', isChild: true, isSelectable: true, point: this, text: '$' + label + '$' })\r\n      } else {\r\n        this.elementTextLabel.text = `$${label}$`\r\n        this.elementTextLabel.color = this._colorLabel\r\n      }\r\n    }\r\n  }\r\n\r\n  get latex (): string {\r\n    let result = `% Point ${this.label}`\r\n    result += `\\n\\\\draw${this.latexOptions} plot[mark=x, mark size=0.15cm] coordinates{(${this.x},${this.y})};`\r\n    return result\r\n  }\r\n\r\n  get notation (): string {\r\n    if (this.label !== '') return this.label\r\n    else return this.id\r\n  }\r\n\r\n  get shape (): '' | '|' | 'o' | 'x' {\r\n    return this._shape\r\n  }\r\n\r\n  set shape (shape) {\r\n    this._shape = shape\r\n    if (this._shape === 'x') {\r\n      this.figure.svg.appendChild(this.groupSvg)\r\n      this.svgCircle?.remove()\r\n      this.groupSvg.appendChild(this.svgLine1)\r\n      this.groupSvg.appendChild(this.svgLine2)\r\n    } else if (this._shape === 'o') {\r\n      this.figure.svg.appendChild(this.groupSvg)\r\n      this.svgLine1?.remove()\r\n      this.svgLine2?.remove()\r\n      this.groupSvg.appendChild(this.svgCircle)\r\n    } else if (this._shape === '') {\r\n      this.groupSvg?.remove()\r\n      this.svgLine1?.remove()\r\n      this.svgLine2?.remove()\r\n      this.svgCircle?.remove()\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  get sizeInPixels (): number {\r\n    return this._sizeInPixels\r\n  }\r\n\r\n  set sizeInPixels (size) {\r\n    this._sizeInPixels = size\r\n    this.update()\r\n  }\r\n\r\n  get x (): number {\r\n    return this._x\r\n  }\r\n\r\n  set x (x) {\r\n    if (this.figure.snapGrid && this.isVisible) {\r\n      this._x = Math.round(x / this.figure.dx) * this.figure.dx\r\n    } else {\r\n      this._x = x\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  get y (): number {\r\n    return this._y\r\n  }\r\n\r\n  set y (y) {\r\n    if (this.figure.snapGrid && this.isVisible) {\r\n      this._y = Math.round(y / this.figure.dy) * this.figure.dy\r\n    } else {\r\n      this._y = y\r\n    }\r\n    this.update()\r\n  }\r\n}\r\n\r\nexport default Point\r\n","import type Figure from '../../Figure'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass Barycenter extends Point {\r\n  points: Point[]\r\n  constructor (figure: Figure, { points, ...options }: { points: Point[] } & OptionsElement2D) {\r\n    const x = points.reduce((acc, point) => acc + point.x, 0) / points.length\r\n    const y = points.reduce((acc, point) => acc + point.y, 0) / points.length\r\n    super(figure, { x, y, ...options })\r\n    this.type = 'Barycenter'\r\n    this.points = points\r\n    this.points.forEach(point => { point.subscribe(this) })\r\n  }\r\n\r\n  update (): void {\r\n    const x = this.points.reduce((acc, point) => acc + point.x, 0) / this.points.length\r\n    const y = this.points.reduce((acc, point) => acc + point.y, 0) / this.points.length\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default Barycenter\r\n","import type Figure from '../../Figure'\r\n\r\nimport Point from './Point'\r\n\r\n/**\r\n * Trace le milieu défini par deux points\r\n */\r\nclass Middle extends Point {\r\n  /** Première extrémité */\r\n  point1: Point\r\n  /** Deuxième extrémité */\r\n  point2: Point\r\n  constructor (figure: Figure, { point1, point2, ...options }: {\r\n    isChild?: boolean\r\n    isSelectable?: boolean\r\n    isVisible?: boolean\r\n    label?: string\r\n    labelDxInPixels?: number\r\n    labelDyInPixels?: number\r\n    point1: Point\r\n    point2: Point\r\n    shape?: '' | 'o' | 'x'\r\n    size?: number\r\n  }) {\r\n    const [x, y] = coordsMiddle(point1, point2)\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'Middle'\r\n    this.point1 = point1\r\n    this.point2 = point2\r\n    this.point1.subscribe(this)\r\n    this.point2.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idPoint1: this.point1.id,\r\n      idPoint2: this.point2.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.point1?.x === undefined || this.point2?.x === undefined || this.point1?.y === undefined || this.point2?.y === undefined ||\r\n        Number.isNaN(this.point1.x) || Number.isNaN(this.point1.y) || (Number.isNaN(this.point2.x) || Number.isNaN(this.point2.y))) {\r\n      this._x = NaN\r\n      this._y = NaN\r\n    } else {\r\n      this._x = (this.point1.x + this.point2.x) / 2\r\n      this._y = (this.point1.y + this.point2.y) / 2\r\n    }\r\n    super.update()\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    const point1Name = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const point2Name = this.point2.label !== '' ? this.point2.label : this.point2.id\r\n    return `Milieu de $[${point1Name}${point2Name}]$`\r\n  }\r\n}\r\n\r\nfunction coordsMiddle (point1: Point, point2: Point): [number, number] {\r\n  if (Number.isNaN(point1.x) || Number.isNaN(point1.y) || Number.isNaN(point2.x) || Number.isNaN(point2.y)) return [NaN, NaN]\r\n  return [(point1.x + point2.x) / 2, (point1.y + point2.y) / 2]\r\n}\r\n\r\nexport default Middle\r\n","import type Figure from '../../Figure'\r\nimport type Graph from '../calculus/Graph'\r\n\r\nimport Point from './Point'\r\n\r\nclass PointOnGraph extends Point {\r\n  graph: Graph\r\n  constructor (figure: Figure, { abscissa = false, graph, ordinate = false, x = 1, ...options }:\r\n  { abscissa?: boolean\r\n    color?: string\r\n    graph: Graph\r\n    id?: string\r\n    isChild?: boolean\r\n    isFree?: boolean\r\n    isVisible?: boolean\r\n    label?: string\r\n    labelDxInPixels?: number\r\n    labelDyInPixels?: number\r\n    ordinate?: boolean\r\n    shape?: '' | '|' | 'o' | 'x'\r\n    size?: number\r\n    thickness?: number\r\n    x?: number }) {\r\n    super(figure, { x, y: graph.f(x), ...options })\r\n    this.type = 'PointOnGraph'\r\n    this.graph = graph\r\n    this.graph.subscribe(this)\r\n  }\r\n\r\n  moveTo (x: number): void {\r\n    this.x = x\r\n    // y est en lecture seule\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idGraph: this.graph.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels,\r\n      x: this.x.toFixed(4)\r\n    }\r\n  }\r\n\r\n  get x (): number {\r\n    return this._x\r\n  }\r\n\r\n  set x (x) {\r\n    if (x > this.figure.xMax || x < this.figure.xMin || this.graph.f(x) > this.figure.yMax || this.graph.f(x) < this.figure.yMin) return\r\n    this._x = x\r\n    this._y = this.graph.f(x)\r\n    this.update()\r\n  }\r\n\r\n  get y (): number {\r\n    return this.graph.f(this.x)\r\n  }\r\n}\r\n\r\nexport default PointOnGraph\r\n","import type Figure from '../../Figure'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointByDilate extends Point {\r\n  center: Point\r\n  k: number\r\n  origin: Point\r\n  constructor (figure: Figure, { center, color, k, origin, thickness, ...options }: { center: Point, k: number, origin: Point, shape?: '' | '|' | 'o' | 'x' } & OptionsElement2D) {\r\n    const x = (center.x + k * (origin.x - center.x))\r\n    const y = (center.y + k * (origin.y - center.y))\r\n    super(figure, { color, isFree: false, thickness, x, y, ...options })\r\n    this.type = 'PointByDilate'\r\n    this.origin = origin\r\n    this.center = center\r\n    this.k = k\r\n    this.origin.subscribe(this)\r\n    this.center.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCenter: this.center.id,\r\n      idOrigin: this.origin.id,\r\n      k: this.k,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = (this.center.x + this.k * (this.origin.x - this.center.x))\r\n    this._y = (this.center.y + this.k * (this.origin.y - this.center.y))\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Image de $${originName}$ dans l'homothétie de centre $${centerName}$ et de rapport $${this.k}$`\r\n  }\r\n}\r\n\r\nexport default PointByDilate\r\n","import type DynamicNumber from '../../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../../Figure'\r\nimport type Point from './Point'\r\n\r\nimport { type OptionsPointBy } from '../interfaces'\r\nimport PointByDilate from './PointByDilate'\r\n\r\nclass PointByDynamicDilate extends PointByDilate {\r\n  dynamicK: DynamicNumber\r\n  constructor (figure: Figure, { center, dynamicK, origin, ...options }: { center: Point, dynamicK: DynamicNumber, origin: Point } & OptionsPointBy) {\r\n    super(figure, { center, k: dynamicK.value, origin, ...options })\r\n    this.dynamicK = dynamicK\r\n    this.dynamicK.subscribe(this)\r\n  }\r\n\r\n  update (): void {\r\n    this.k = this.dynamicK.value\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointByDynamicDilate\r\n","import type Figure from '../../Figure'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointByRotation extends Point {\r\n  angle: number\r\n  center: Point\r\n  origin: Point\r\n  constructor (figure: Figure, { angle, center, origin, ...options }: { angle: number, center: Point, origin: Point, shape?: '' | 'o' | 'x' } & OptionsElement2D) {\r\n    const x = (center.x + (origin.x - center.x) * Math.cos((angle * Math.PI) / 180) - (origin.y - center.y) * Math.sin((angle * Math.PI) / 180))\r\n    const y = (center.y + (origin.x - center.x) * Math.sin((angle * Math.PI) / 180) + (origin.y - center.y) * Math.cos((angle * Math.PI) / 180))\r\n    super(figure, { x, y, ...options })\r\n    this.type = 'PointByRotation'\r\n    this.origin = origin\r\n    this.center = center\r\n    this.angle = angle\r\n    this.origin.subscribe(this)\r\n    this.center.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      angle: this.angle,\r\n      idCenter: this.center.id,\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = (this.center.x + (this.origin.x - this.center.x) * Math.cos((this.angle * Math.PI) / 180) - (this.origin.y - this.center.y) * Math.sin((this.angle * Math.PI) / 180))\r\n    this._y = (this.center.y + (this.origin.x - this.center.x) * Math.sin((this.angle * Math.PI) / 180) + (this.origin.y - this.center.y) * Math.cos((this.angle * Math.PI) / 180))\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Image de $${originName}$ dans la rotation de centre $${centerName}$ et d'angle $${this.angle}$°`\r\n  }\r\n}\r\n\r\nexport default PointByRotation\r\n","import type DynamicNumber from '../../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../../Figure'\r\nimport type Point from './Point'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport PointByRotation from './PointByRotation'\r\n\r\nclass PointByDynamicRotation extends PointByRotation {\r\n  dynamicAngle: DynamicNumber\r\n  constructor (figure: Figure, { center, dynamicAngle, label, origin, shape, ...options }: { center: Point, dynamicAngle: DynamicNumber, origin: Point, shape?: '' | 'o' | 'x' } & OptionsElement2D) {\r\n    super(figure, { angle: dynamicAngle.value, center, label, origin, shape, ...options })\r\n    this.type = 'PointByDynamicRotation'\r\n    this.dynamicAngle = dynamicAngle\r\n    this.dynamicAngle.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCenter: this.center.id,\r\n      idDynamicAngle: this.dynamicAngle.id,\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.angle = this.dynamicAngle.value\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointByDynamicRotation\r\n","import type Figure from '../../Figure'\r\nimport type Segment from '../lines/Segment'\r\n\r\nimport { orthogonalProjectionCoord } from '../calculus/Coords'\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointByProjection extends Point {\r\n  line: Segment\r\n  origin: Point\r\n  constructor (figure: Figure, { line, origin, ...options }: { line: Segment, origin: Point } & OptionsElement2D) {\r\n    const { x, y } = orthogonalProjectionCoord(origin, line)\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'PointByProjection'\r\n    this.origin = origin\r\n    this.line = line\r\n    this.origin.subscribe(this)\r\n    this.line.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const { x, y } = orthogonalProjectionCoord(this.origin, this.line)\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const lineName = this.line.notation\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Projection orthogonale de $${originName}$ sur $${lineName}$`\r\n  }\r\n}\r\n\r\nexport default PointByProjection\r\n","import type Figure from '../../Figure'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointByProjectionOnAxisX extends Point {\r\n  origin: Point\r\n  constructor (figure: Figure, { origin, ...options }: { origin: Point } & OptionsElement2D) {\r\n    super(figure, { isFree: false, x: origin.x, y: 0, ...options })\r\n    this.type = 'PointByProjectionOnAxisX'\r\n    this.origin = origin\r\n    this.origin.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = this.origin.x\r\n    this._y = 0\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointByProjectionOnAxisX\r\n","import type Figure from '../../Figure'\r\n\r\nimport { type OptionsElement2D } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointByProjectionOnAxisY extends Point {\r\n  origin: Point\r\n  constructor (figure: Figure, { origin, ...options }: { origin: Point } & OptionsElement2D) {\r\n    super(figure, { isFree: false, x: 0, y: origin.x, ...options })\r\n    this.type = 'PointByProjectionOnAxisY'\r\n    this.origin = origin\r\n    this.origin.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = 0\r\n    this._y = this.origin.y\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointByProjectionOnAxisY\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\n\r\nimport Point from './Point'\r\n\r\nclass PointByReflect extends Point {\r\n  center: Point\r\n  origin: Point\r\n  constructor (figure: Figure, { center, origin, ...options }: { center: Point, origin: Point } & OptionsElement2D) {\r\n    const x = 2 * center.x - origin.x\r\n    const y = 2 * center.y - origin.y\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'PointByReflect'\r\n    this.center = center\r\n    this.origin = origin\r\n    this.center.subscribe(this)\r\n    this.origin.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCenter: this.center.id,\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const x = 2 * this.center.x - this.origin.x\r\n    const y = 2 * this.center.y - this.origin.y\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Image de $${originName}$ dans la symétrie de centre $${centerName}$`\r\n  }\r\n}\r\n\r\nexport default PointByReflect\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\nimport type Line from '../lines/Line'\r\n\r\nimport { reflectOverLineCoord } from '../calculus/Coords'\r\nimport Point from './Point'\r\n\r\nclass PointByReflectOverLine extends Point {\r\n  line: Line\r\n  origin: Point\r\n  constructor (figure: Figure, { line, origin, ...options }: { line: Line, origin: Point } & OptionsElement2D) {\r\n    const { x, y } = reflectOverLineCoord(origin, line)\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'PointByReflectOverLine'\r\n    this.origin = origin\r\n    this.line = line\r\n    this.origin.subscribe(this)\r\n    this.line.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idOrigin: this.origin.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const { x, y } = reflectOverLineCoord(this.origin, this.line)\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const lineName = this.line.notation\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Image de $${originName}$ par la symétrie d'axe $${lineName}$`\r\n  }\r\n}\r\n\r\nexport default PointByReflectOverLine\r\n","import type Figure from '../../Figure'\r\n\r\nimport { similitudeCoord } from '../calculus/Coords'\r\nimport { type OptionsPointBy } from '../interfaces'\r\nimport Point from './Point'\r\n\r\nclass PointBySimilarity extends Point {\r\n  angle: number\r\n  center: Point\r\n  k: number\r\n  origin: Point\r\n  constructor (figure: Figure, { angle, center, k, origin, ...options }: { angle: number, center: Point, k: number, origin: Point } & OptionsPointBy) {\r\n    const { x, y } = similitudeCoord(origin, center, k, angle)\r\n    super(figure, { x, y, ...options })\r\n    this.type = 'PointBySimilarity'\r\n    this.origin = origin\r\n    this.center = center\r\n    this.angle = angle\r\n    this.k = k\r\n    this.origin.subscribe(this)\r\n    this.center.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      angle: this.angle,\r\n      idCenter: this.center.id,\r\n      idOrigin: this.origin.id,\r\n      k: this.k,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    const { x, y } = similitudeCoord(this.origin, this.center, this.k, this.angle)\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const centerName = this.center.label !== '' ? this.center.label : this.center.id\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    return `Image de $${originName}$ dans la similitude de centre $${centerName}$, d'angle $${this.angle}$° et de rapport $${this.k}$`\r\n  }\r\n}\r\n\r\nexport default PointBySimilarity\r\n","import type Figure from '../../Figure'\r\nimport type Vector from '../vector/Vector'\r\n\r\nimport { type OptionsPointByTranslation } from '../interfaces'\r\nimport Point from './Point'\r\n\r\n/**\r\n * Créé un nouveau point image d'un autre dans une translation\r\n */\r\nclass PointByTranslation extends Point {\r\n  origin: Point\r\n  vector: Vector\r\n  constructor (figure: Figure, { origin, vector, ...options }: OptionsPointByTranslation) {\r\n    const x = origin.x + vector.x\r\n    const y = origin.y + vector.y\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'PointByTranslation'\r\n    this.origin = origin\r\n    this.vector = vector\r\n    this.origin.subscribe(this)\r\n    this.vector.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin.id,\r\n      idVector: this.vector.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = this.origin.x + this.vector.x\r\n    this._y = this.origin.y + this.vector.y\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointByTranslation\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\n\r\nimport Point from './Point'\r\n\r\nclass PointByTranslationByPoints extends Point {\r\n  origin: Point\r\n  point1: Point\r\n  point2: Point\r\n  constructor (figure: Figure, { origin, point1, point2, ...options }: { origin: Point, point1: Point, point2: Point } & OptionsElement2D) {\r\n    const x = point2.x - point1.x + origin.x\r\n    const y = point2.y - point1.y + origin.y\r\n    super(figure, { isFree: false, x, y, ...options })\r\n    this.type = 'PointByTranslationByPoints'\r\n    this.point1 = point1\r\n    this.point2 = point2\r\n    this.origin = origin\r\n    this.point1.subscribe(this)\r\n    this.point2.subscribe(this)\r\n    this.origin.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin.id,\r\n      idPoint1: this.point1.id,\r\n      idPoint2: this.point2.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = this.point2.x - this.point1.x + this.origin.x\r\n    this._y = this.point2.y - this.point1.y + this.origin.y\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    const originName = this.origin.label !== '' ? this.origin.label : this.origin.id\r\n    const point1Name = this.point1.label !== '' ? this.point1.label : this.point1.id\r\n    const point2Name = this.point2.label !== '' ? this.point2.label : this.point2.id\r\n    return `Image de $${originName}$ par la translation qui transforme $${point1Name}$ en $${point2Name}$`\r\n  }\r\n}\r\n\r\nexport default PointByTranslationByPoints\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\n\r\nimport { intersectionCCCoord } from '../calculus/Coords'\r\nimport { type OptionsIntersectionCC } from '../interfaces'\r\nimport Point from './Point'\r\n\r\n/**\r\n * Créé les points à l'intersection de deux cercles\r\n */\r\nexport class PointIntersectionCC extends Point {\r\n  /** Premier cercle */\r\n  circle1: Circle\r\n  /** Deuxième cercle */\r\n  circle2: Circle\r\n  /** Numéro de l'intersection */\r\n  n: 1 | 2\r\n  constructor (figure: Figure, { circle1, circle2, isChild, n, ...options }: OptionsIntersectionCC) {\r\n    const coords = intersectionCCCoord(circle1, circle2, n)\r\n    super(figure, { isChild, isFree: false, x: coords.x, y: coords.y, ...options })\r\n    this.type = 'PointIntersectionCC'\r\n    this.circle1 = circle1\r\n    this.circle2 = circle2\r\n    this.n = n ?? 1\r\n    this.circle1.subscribe(this)\r\n    this.circle2.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCircle1: this.circle1.id,\r\n      idCircle2: this.circle2.id,\r\n      label: this.label,\r\n      n: this.n,\r\n      shape: this.shape\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.circle1 == null || this.circle2 == null) return\r\n    try {\r\n      const { x, y } = intersectionCCCoord(this.circle1, this.circle2, this.n)\r\n      this._x = x\r\n      this._y = y\r\n      super.update()\r\n    } catch (error) {\r\n      console.error('Erreur dans PointIntersectionLL.update()', error)\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    const circle1Name = this.circle1.id\r\n    const circle2Name = this.circle2.id\r\n    return `Intersection du cercle $${circle1Name}$ et du cercle $${circle2Name}$`\r\n  }\r\n}\r\n\r\nexport default PointIntersectionCC\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\nimport type Line from '../lines/Line'\r\n\r\nimport { intersectionLCCoord } from '../calculus/Coords'\r\nimport { type OptionsIntersectionLC } from '../interfaces'\r\nimport Point from './Point'\r\n\r\n/**\r\n * Créé les points à l'intersection de deux cercles\r\n */\r\nexport class PointIntersectionLC extends Point {\r\n  /** Deuxième cercle */\r\n  circle: Circle\r\n  /** Premier cercle */\r\n  line: Line\r\n  /** Numéro de l'intersection */\r\n  n: 1 | 2\r\n  constructor (figure: Figure, { circle, line, n, ...options }: OptionsIntersectionLC) {\r\n    const coords = intersectionLCCoord(line, circle, n)\r\n    super(figure, { isFree: false, x: coords.x, y: coords.y, ...options })\r\n    this.type = 'PointIntersectionLC'\r\n    this.line = line\r\n    this.circle = circle\r\n    this.n = n ?? 1\r\n    this.line.subscribe(this)\r\n    this.circle.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCircle: this.circle.id,\r\n      idLine: this.line.id,\r\n      label: this.label,\r\n      n: this.n,\r\n      shape: this.shape\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.line === undefined || this.circle === undefined) return\r\n    try {\r\n      const { x, y } = intersectionLCCoord(this.line, this.circle, this.n)\r\n      this._x = x\r\n      this._y = y\r\n      if (!this.isOnline(this.line)) {\r\n        this._x = NaN\r\n        this._y = NaN\r\n      }\r\n      super.update()\r\n    } catch (error) {\r\n      console.error('Erreur dans PointIntersectionLL.update()', error)\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    const lineName = this.line.notation\r\n    const circleName = this.circle.id\r\n    return `Intersection de la droite $${lineName}$ et du cercle $${circleName}$`\r\n  }\r\n}\r\n\r\nexport default PointIntersectionLC\r\n","import type Figure from '../../Figure'\r\nimport type Line from '../lines/Line'\r\nimport type Segment from '../lines/Segment'\r\n\r\nimport { intersectionLLCoord } from '../calculus/Coords'\r\nimport Point from './Point'\r\n\r\n/**\r\n * Créé un point à l'intersection de deux droites (demi-droites ou segments)\r\n * Masque le point et ses descendances s'il n'y a pas d'intersection\r\n */\r\nexport class PointIntersectionLL extends Point {\r\n  /** Première droite */\r\n  line1: Segment\r\n  /** Deuxième droite */\r\n  line2: Segment\r\n  constructor (figure: Figure, { line1, line2, ...options }: { label?: string, labelDxInPixels?: number, labelDyInPixels?: number, line1: Line, line2: Line, shape?: '' | '|' | 'o' | 'x', sizeInPixels?: number }) {\r\n    const coords = intersectionLLCoord(line1, line2)\r\n    super(figure, { isFree: false, x: coords.x, y: coords.y, ...options })\r\n    this.type = 'PointIntersectionLL'\r\n    this.line1 = line1\r\n    this.line2 = line2\r\n    this.line1.subscribe(this)\r\n    this.line2.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      ...super.jsonOptions(),\r\n      idLine1: this.line1.id,\r\n      idLine2: this.line2.id,\r\n      label: this.label,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.line1 === undefined || this.line2 === undefined) return\r\n    try {\r\n      const coords = intersectionLLCoord(this.line1, this.line2)\r\n      this._x = coords.x\r\n      this._y = coords.y\r\n      super.update()\r\n    } catch (error) {\r\n      console.error('Erreur dans PointIntersectionLL.update()', error)\r\n    }\r\n    this.notify()\r\n  }\r\n\r\n  get description (): string {\r\n    const line1Name = this.line1.notation\r\n    const line2Name = this.line2.notation\r\n    return `Point $${this.notation}$ à l'intersection de la droite $${line1Name}$ et de la droite $${line2Name}$`\r\n  }\r\n}\r\n\r\nexport default PointIntersectionLL\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\n\r\nimport Point from './Point'\r\n\r\nclass PointOnCircle extends Point {\r\n  angleWithHorizontal: number\r\n  circle: Circle\r\n  figure: Figure\r\n  constructor (figure: Figure, { angleWithHorizontal, circle, label, ...options }: { angleWithHorizontal?: number, circle: Circle, label?: string }) {\r\n    if (angleWithHorizontal === undefined) angleWithHorizontal = Math.random() * 2 * Math.PI\r\n    super(figure, { label, x: circle.center.x + circle.radius * Math.cos(angleWithHorizontal), y: circle.center.y + circle.radius * Math.sin(angleWithHorizontal), ...options })\r\n    this.figure = figure\r\n    this.circle = circle\r\n    this.angleWithHorizontal = angleWithHorizontal\r\n    this.isFree = true\r\n    this.type = 'PointOnCircle'\r\n    this.circle.subscribe(this)\r\n  }\r\n\r\n  moveTo (x: number, y: number): void {\r\n    const angleWithHorizontal = Math.atan2(y - this.circle.center.y, x - this.circle.center.x)\r\n    this.angleWithHorizontal = angleWithHorizontal\r\n    this.x = this.circle.center.x + this.circle.radius * Math.cos(angleWithHorizontal)\r\n    this.y = this.circle.center.y + this.circle.radius * Math.sin(angleWithHorizontal)\r\n    this.update()\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      angleWithHorizontal: this.angleWithHorizontal,\r\n      idCircle: this.circle.id,\r\n      label: this.label\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this._x = this.circle.center.x + this.circle.radius * Math.cos(this.angleWithHorizontal)\r\n    this._y = this.circle.center.y + this.circle.radius * Math.sin(this.angleWithHorizontal)\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    return `Point sur le cercle $${this.circle.id}$`\r\n  }\r\n}\r\n\r\nexport default PointOnCircle\r\n","import type Figure from '../../Figure'\r\n\r\nimport { similitudeCoord } from '../calculus/Coords'\r\nimport { type OptionsPointBy } from '../interfaces'\r\nimport Line from '../lines/Line'\r\nimport Ray from '../lines/Ray'\r\nimport Segment from '../lines/Segment'\r\nimport PointByDilate from './PointByDilate'\r\n\r\nclass PointOnLine extends PointByDilate {\r\n  line: Line\r\n  constructor (figure: Figure, { k, line, shape, ...options }: { k?: number, line: Line } & OptionsPointBy) {\r\n    if (k === undefined) k = Math.random()\r\n    if (shape === undefined) shape = '|'\r\n    super(figure, { center: line.point1, k, origin: line.point2, shape, ...options })\r\n    this.type = 'PointOnLine'\r\n    this.line = line\r\n    this.isFree = true\r\n    this.line.subscribe(this)\r\n  }\r\n\r\n  /** Déplace le point */\r\n  moveTo (x: number, y: number): void {\r\n    // Lieu du clic\r\n    const origin = { x, y }\r\n    // On calcule le nouveau coefficient de l'homothétie par rapport au projeté du lieu où on clic\r\n    try {\r\n      const [a, b, c] = this.line.equation\r\n      const k = 1 / (a * a + b * b)\r\n      let x: number | undefined, y: number | undefined\r\n      if (a === 0) {\r\n        x = origin.x\r\n        y = -c / b\r\n      } else if (b === 0) {\r\n        y = origin.y\r\n        x = -c / a\r\n      } else {\r\n        if (origin.x === undefined || origin.y === undefined) {\r\n          x = NaN\r\n          y = NaN\r\n        } else {\r\n          x = k * (b * b * origin.x - a * b * origin.y - a * c)\r\n          y = k * (-a * b * origin.x + a * a * origin.y + (a * a * c) / b) - c / b\r\n        }\r\n      }\r\n      if (this.line instanceof Segment) {\r\n        const line = this.line as any\r\n        if (this.line instanceof Line) {\r\n          let isPositive = 1\r\n          if (this.line.point1.x < this.line.point2.x && x < this.line.point1.x) isPositive = -1\r\n          else if (this.line.point1.x > this.line.point2.x && x > this.line.point1.x) isPositive = -1\r\n          else if (this.line.point1.y < this.line.point2.y && y < this.line.point1.y) isPositive = -1\r\n          else if (this.line.point1.y > this.line.point2.y && y > this.line.point1.y) isPositive = -1\r\n          this.k = isPositive * Math.hypot(x - this.line.point1.x, y - this.line.point1.y) / Math.hypot(this.line.point2.x - this.line.point1.x, this.line.point2.y - this.line.point1.y)\r\n        //\r\n        } else if (line instanceof Ray) {\r\n          const ray = this.line as Ray\r\n          if (ray.point1.x < ray.point2.x && x < ray.point1.x) this.k = 0\r\n          else if (ray.point1.x > ray.point2.x && x > ray.point1.x) this.k = 0\r\n          else if (ray.point1.y < ray.point2.y && y < ray.point1.y) this.k = 0\r\n          else if (ray.point1.y > ray.point2.y && y > ray.point1.y) this.k = 0\r\n          else this.k = Math.hypot(x - ray.point1.x, y - ray.point1.y) / Math.hypot(ray.point2.x - ray.point1.x, ray.point2.y - ray.point1.y)\r\n        } else if (line instanceof Segment) {\r\n          const segment = this.line as Segment\r\n          if (x < Math.min(segment.point1.x, segment.point2.x)) this.k = (segment.point1.x < segment.point2.x) ? 0 : 1\r\n          else if (x > Math.max(segment.point1.x, segment.point2.x)) this.k = (segment.point1.x < segment.point2.x) ? 1 : 0\r\n          else if (y < Math.min(segment.point1.y, segment.point2.y)) this.k = (segment.point1.y < segment.point2.y) ? 0 : 1\r\n          else if (y > Math.max(segment.point1.y, segment.point2.y)) this.k = (segment.point1.y < segment.point2.y) ? 1 : 0\r\n          else this.k = Math.hypot(x - segment.point1.x, y - segment.point1.y) / Math.hypot(segment.point2.x - segment.point1.x, segment.point2.y - segment.point1.y)\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error('Erreur dans PointOnLine')\r\n    }\r\n    this.update()\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      k: this.k,\r\n      label: this.label,\r\n      shape: this.shape\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.shape === '|') {\r\n      const a = { x: this.line.point1.x, y: this.line.point1.y }\r\n      const o = { x: this._x, y: this._y }\r\n      const l = Math.hypot(this.line.point1.x - this._x, this.line.point1.y - this._y)\r\n      const { x: x1, y: y1 } = similitudeCoord(a, o, (1 / l) * this.sizeInPixels / this.figure.pixelsPerUnit * Math.sqrt(2), 90)\r\n      const { x: x2, y: y2 } = similitudeCoord(a, o, (1 / l) * this.sizeInPixels / this.figure.pixelsPerUnit * Math.sqrt(2), -90)\r\n      if (Number.isFinite(x1) && Number.isFinite(x2) && Number.isFinite(y1) && Number.isFinite(y2)) {\r\n        const x1Svg = this.figure.xToSx(x1).toString()\r\n        const x2Svg = this.figure.xToSx(x2).toString()\r\n        const y1Svg = this.figure.yToSy(y1).toString()\r\n        const y2Svg = this.figure.yToSy(y2).toString()\r\n        this.svgLine1.setAttribute('x1', x1Svg)\r\n        this.svgLine1.setAttribute('y1', y1Svg)\r\n        this.svgLine1.setAttribute('x2', x2Svg)\r\n        this.svgLine1.setAttribute('y2', y2Svg)\r\n        this.groupSvg.appendChild(this.svgLine1)\r\n      }\r\n    }\r\n    super.update()\r\n  }\r\n\r\n  get description (): string {\r\n    return `Point sur ${this.line.notation}`\r\n  }\r\n\r\n  get x (): number {\r\n    return this._x\r\n  }\r\n\r\n  set x (x: number) {\r\n    const [a, b, c] = this.line.equation\r\n    const y = (-a * x - c) / b\r\n    this.moveTo(x, y)\r\n  }\r\n\r\n  get y (): number {\r\n    return this._y\r\n  }\r\n\r\n  set y (y: number) {\r\n    const [a, b, c] = this.line.equation\r\n    const x = (-b * y - c) / a\r\n    this.moveTo(x, y)\r\n  }\r\n}\r\n\r\nexport default PointOnLine\r\n","import type Figure from '../../Figure'\r\nimport type Line from '../lines/Line'\r\n\r\nimport { homothetieCoord } from '../calculus/Coords'\r\nimport { distance as calculDistance } from '../calculus/utils'\r\nimport { type OptionsPointBy } from '../interfaces'\r\nimport Point from './Point'\r\nclass PointOnLineAtDistance extends Point {\r\n  distance: number\r\n  line: Line\r\n  constructor (figure: Figure, { distance, line, ...options }: { distance: number, line: Line } & OptionsPointBy) {\r\n    const { x, y } = homothetieCoord(line.point1, line.point2, distance / calculDistance(line.point1, line.point2))\r\n    super(figure, { x, y, ...options })\r\n    this.line = line\r\n    this.distance = distance\r\n    this.line.subscribe(this)\r\n  }\r\n\r\n  update (): void {\r\n    const { x, y } = homothetieCoord(this.line.point1, this.line.point2, this.distance / calculDistance(this.line.point1, this.line.point2))\r\n    this._x = x\r\n    this._y = y\r\n    super.update()\r\n  }\r\n}\r\n\r\nexport default PointOnLineAtDistance\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\nimport type Point from './Point'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsIntersectionCC } from '../interfaces'\r\n\r\nclass PointsIntersectionCC extends Element2D {\r\n  /** Premier cercle */\r\n  circle1: Circle\r\n  /** Deuxième cercle */\r\n  circle2: Circle\r\n  /** Point d'intersection avec la plus grande ordonnée */\r\n  point1!: Point\r\n  /** Point d'intersection avec la plus petite ordonnée */\r\n  point2!: Point\r\n  shape: '' | '|' | 'o' | 'x'\r\n  sizeInPixels?: number\r\n  constructor (figure: Figure, { circle1, circle2, shape, sizeInPixels, ...options }: OptionsIntersectionCC) {\r\n    super(figure, options)\r\n    this.type = 'PointsIntersectionCC'\r\n    this.circle1 = circle1\r\n    this.circle2 = circle2\r\n    this.shape = shape ?? 'x'\r\n    this.sizeInPixels = sizeInPixels\r\n  }\r\n\r\n  draw (): void {\r\n    this.point1 = this.figure.create('PointIntersectionCC', { circle1: this.circle1, circle2: this.circle2, id: this.id + '_1', n: 1, shape: this.shape, sizeInPixels: this.sizeInPixels })\r\n    this.point2 = this.figure.create('PointIntersectionCC', { circle1: this.circle1, circle2: this.circle2, id: this.id + '_2', n: 2, shape: this.shape, sizeInPixels: this.sizeInPixels })\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCircle1: this.circle1.id,\r\n      idCircle2: this.circle2.id,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n}\r\n\r\nexport default PointsIntersectionCC\r\n","import type Figure from '../../Figure'\r\nimport type { OptionsElement2D } from '../interfaces'\r\nimport type Circle from '../lines/Circle'\r\nimport type Line from '../lines/Line'\r\nimport type Point from './Point'\r\n\r\nimport Element2D from '../Element2D'\r\n\r\nclass PointsIntersectionLC extends Element2D {\r\n  /** Deuxième cercle */\r\n  circle: Circle\r\n  /** Droite ou segment ou demi-droite */\r\n  line: Line\r\n  /** Point d'intersection avec la plus grande ordonnée */\r\n  point1: Point\r\n  /** Point d'intersection avec la plus petite ordonnée */\r\n  point2: Point\r\n  shape: '' | 'o' | 'x'\r\n  sizeInPixels?: number\r\n  constructor (figure: Figure, { circle, line, shape = 'x', sizeInPixels, ...options }: {\r\n    circle: Circle\r\n    line: Line\r\n    shape?: '' | 'o' | 'x'\r\n    sizeInPixels?: number\r\n  } & OptionsElement2D) {\r\n    super(figure, options)\r\n    this.type = 'PointsIntersectionLC'\r\n    sizeInPixels = sizeInPixels ?? figure.options.pointSize\r\n    this.line = line\r\n    this.circle = circle\r\n    this.point1 = figure.create('PointIntersectionLC', { circle, line, n: 1, shape, sizeInPixels, ...options })\r\n    this.point2 = figure.create('PointIntersectionLC', { circle, line, n: 2, shape, sizeInPixels, ...options })\r\n    this.shape = shape\r\n    this.sizeInPixels = sizeInPixels\r\n  }\r\n\r\n  draw (): void {\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idCircle: this.circle.id,\r\n      idLine: this.line.id,\r\n      shape: this.shape,\r\n      sizeInPixels: this.sizeInPixels\r\n    }\r\n  }\r\n}\r\n\r\nexport default PointsIntersectionLC\r\n","import renderMathInElement from 'katex/dist/contrib/auto-render.js'\r\nimport 'katex/dist/katex.min.css'\r\n\r\nimport type Figure from '../../Figure'\r\n\r\nimport { round } from '../../lib/format'\r\nimport Element2D from '../Element2D'\r\n\r\n/**\r\n * Créé un div contenant un texte qui est mis au dessus du svg\r\n * par défaut KaTeX s'occupe du rendu du div\r\n */\r\nclass TextByPosition extends Element2D {\r\n  /** Angle avec l'horizontal exprimé en degrés */\r\n  _angleWithHorizontalInDegres = 0\r\n  private _backgroundColor?: string\r\n  _color: string\r\n  private _fontSize: string\r\n  private _text!: string\r\n  private _x!: number\r\n  private _y!: number\r\n  /** Ancrage du texte */\r\n  anchor: 'bottomCenter' | 'bottomLeft' | 'bottomRight' | 'middleCenter' | 'middleLeft' | 'middleRight' | 'topCenter' | 'topLeft' | 'topRight'\r\n  /** Le texte est mis dans un div qui s'affichera par dessus le SVG */\r\n  div!: HTMLDivElement\r\n  dxInPixels: number\r\n  dyInPixels: number\r\n\r\n  constructor (figure: Figure, { anchor = 'middleCenter', backgroundColor, color = 'black', dxInPixels = 0, dyInPixels = 0, fontSize = figure.options.fontSize, id, isChild = false, text, x, y }: {\r\n    anchor?: 'bottomCenter' | 'bottomLeft' | 'bottomRight' | 'middleCenter' | 'middleLeft' | 'middleRight' | 'topCenter' | 'topLeft' | 'topRight'\r\n    backgroundColor?: string\r\n    color?: string\r\n    dx?: number\r\n    dxInPixels?: number\r\n    dy?: number\r\n    dyInPixels?: number\r\n    fontSize?: string\r\n    id?: string\r\n    isChild?: boolean\r\n    isSelectable?: boolean\r\n    text: string\r\n    x: number\r\n    y: number\r\n  }) {\r\n    super(figure, { id, isChild })\r\n    this.type = 'TextByPosition'\r\n    this._x = x\r\n    this._y = y\r\n    this.div = document.createElement('div')\r\n    this._fontSize = fontSize\r\n    this.dxInPixels = dxInPixels\r\n    this.dyInPixels = dyInPixels\r\n    this._text = text\r\n    this.backgroundColor = backgroundColor\r\n    this._color = color\r\n    this.anchor = anchor\r\n  }\r\n\r\n  draw (): void {\r\n    if (this.x > this.figure.xMax ||\r\n      this.x < this.figure.xMin ||\r\n      this.y > this.figure.yMax ||\r\n      this.y < this.figure.yMin) {\r\n      return\r\n    }\r\n    this.div.style.position = 'absolute'\r\n    this.div.style.pointerEvents = 'none'\r\n    this.figure.divFigure?.appendChild(this.div)\r\n    if (this.color !== 'black') this.div.style.color = this.color\r\n    if (this.backgroundColor !== undefined) this.div.style.backgroundColor = this.backgroundColor\r\n    this.text = this._text\r\n    this.x = this._x\r\n    this.y = this._y\r\n  }\r\n\r\n  hide (): void {\r\n    this.div.remove()\r\n  }\r\n\r\n  /** Déplace le texte aux coordonnées données */\r\n  moveTo (x: number, y: number): void {\r\n    this.x = x\r\n    this.y = y\r\n  }\r\n\r\n  remove (): void {\r\n    this.figure.elements.delete(this.id)\r\n    this.div.remove()\r\n    for (const element of this.observers) {\r\n      element.remove()\r\n    }\r\n  }\r\n\r\n  show (): void {\r\n    this.figure.divFigure?.appendChild(this.div)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      backgroundColor: this.backgroundColor,\r\n      color: this.color,\r\n      name: this.id,\r\n      text: this.text,\r\n      x: round(this.x),\r\n      y: round(this.y)\r\n    }\r\n  }\r\n\r\n  set angleWithHorizontalInDegres (angle: number) {\r\n    this._angleWithHorizontalInDegres = angle\r\n    this.div.style.transform = this.div.style.transform.replace(/rotate\\([0-9.]+deg\\)/, '')\r\n    this.div.style.transformOrigin = 'center'\r\n    this.div.style.transform += ` rotate(${angle}deg)`\r\n  }\r\n\r\n  get angleWithHorizontalInDegres (): number {\r\n    return this._angleWithHorizontalInDegres\r\n  }\r\n\r\n  get backgroundColor (): string | undefined {\r\n    return this._backgroundColor\r\n  }\r\n\r\n  set backgroundColor (color: string | undefined) {\r\n    this._backgroundColor = color\r\n    if (color !== undefined) {\r\n      this.div.style.backgroundColor = color\r\n    }\r\n  }\r\n\r\n  get color (): string {\r\n    return this._color\r\n  }\r\n\r\n  set color (color: string) {\r\n    this._color = color\r\n    this.div.style.color = color\r\n  }\r\n\r\n  get fontSize (): string {\r\n    return this._fontSize\r\n  }\r\n\r\n  set fontSize (fontSize: string) {\r\n    this._fontSize = fontSize\r\n    this.div.style.fontSize = fontSize\r\n  }\r\n\r\n  get latex (): string {\r\n    return `\\\\node[${this.latexOptions}] at (${this.x},${this.y}) {${this.text}};`\r\n  }\r\n\r\n  get latexOptions (): string {\r\n    const superOptions = super.latexOptions\r\n    const options = (superOptions === '') ? [] : superOptions.substring(1, superOptions.length - 1).split(',')\r\n    const alignment = []\r\n    if (this.dyInPixels > 0) alignment.push('above')\r\n    else if (this.dyInPixels < 0) alignment.push('below')\r\n    if (this.dxInPixels > 0) alignment.push('right')\r\n    else if (this.dxInPixels < 0) alignment.push('left')\r\n    const alignmentString = alignment.join(' ')\r\n    if (alignment.length > 0) options.push(alignmentString)\r\n    return options.join(',')\r\n  }\r\n\r\n  get text (): string {\r\n    return this._text\r\n  }\r\n\r\n  set text (text: string) {\r\n    this._text = text\r\n    this.div.innerHTML = text\r\n    renderMathInElement(this.div, {\r\n      delimiters: [\r\n        { display: true, left: '\\\\[', right: '\\\\]' },\r\n        { display: false, left: '$', right: '$' }\r\n      ],\r\n      errorColor: '#CC0000',\r\n      preProcess: (chaine: string) => chaine.replaceAll(String.fromCharCode(160), '\\\\,'),\r\n      strict: 'warn',\r\n      throwOnError: true,\r\n      trust: false\r\n    })\r\n  }\r\n\r\n  get x (): number {\r\n    return this._x\r\n  }\r\n\r\n  set x (x: number) {\r\n    let styleTransform = ''\r\n    if (this.anchor.includes('Left')) {\r\n      this.div.style.left = this.figure.xToSx(x - this.figure.xMin).toString() + 'px'\r\n    } else if (this.anchor.includes('Right')) {\r\n      // this.div.style.right = this.figure.xToSx(-x + this.figure.xMax).toString() + 'px'\r\n      if (this.figure.divFigure?.clientWidth !== undefined && this.figure.divFigure.clientWidth > this.figure.width) {\r\n        this.div.style.right = (this.figure.xToSx(-x + this.figure.xMax) + (Math.max(0, this.figure.divFigure.clientWidth - this.figure.width))).toString() + 'px'\r\n      } else {\r\n        this.div.style.right = this.figure.xToSx(-x + this.figure.xMax).toString() + 'px'\r\n      }\r\n    } else if (this.anchor.includes('Center')) {\r\n      this.div.style.left = this.figure.xToSx(x - this.figure.xMin).toString() + 'px'\r\n      styleTransform += 'translateX(-50%)'\r\n    }\r\n    if (this.anchor.includes('middle')) {\r\n      styleTransform += 'translateY(-50%)'\r\n    }\r\n    if (this.dxInPixels !== 0 || this.dyInPixels !== 0) {\r\n      styleTransform += ` translate(${this.dxInPixels.toString()}px, ${-this.dyInPixels.toString()}px)`\r\n    }\r\n    this.div.style.fontSize = this._fontSize\r\n    this.div.style.transform = styleTransform\r\n    this._x = x\r\n  }\r\n\r\n  get y (): number {\r\n    return this._y\r\n  }\r\n\r\n  set y (y: number) {\r\n    if (this.anchor.includes('top')) {\r\n      this.div.style.top = this.figure.yToSy(y - this.figure.yMax).toString() + 'px'\r\n    } else if (this.anchor.includes('bottom')) {\r\n      this.div.style.bottom = this.figure.yToSy(-y + this.figure.yMin).toString() + 'px'\r\n    } else if (this.anchor.includes('middle')) {\r\n      this.div.style.top = this.figure.yToSy(y - this.figure.yMax).toString() + 'px'\r\n    }\r\n    this._y = y\r\n  }\r\n}\r\n\r\nexport default TextByPosition\r\n","import type Figure from '../../Figure'\r\nimport type Segment from '../lines/Segment'\r\n\r\nimport TextByPosition from './TextByPosition'\r\n\r\nclass MarkSegment extends TextByPosition {\r\n  segment: Segment\r\n  constructor (figure: Figure, { color = 'black', fontSize = figure.options.fontSize, segment, text }: { color?: string, fontSize?: string, segment: Segment, text: string }) {\r\n    const x = (segment.point1.x + segment.point2.x) / 2\r\n    const y = (segment.point1.y + segment.point2.y) / 2\r\n    super(figure, { color, fontSize, text, x, y })\r\n    this.type = 'MarkSegment'\r\n    this._color = color\r\n    this._fontSize = fontSize\r\n    this.segment = segment\r\n    this.segment.subscribe(this)\r\n  }\r\n\r\n  update (): void {\r\n    this.x = (this.segment.point1.x + this.segment.point2.x) / 2\r\n    this.y = (this.segment.point1.y + this.segment.point2.y) / 2\r\n    if (this.div !== undefined) {\r\n      this.div.style.transformOrigin = 'center center'\r\n      this.div.style.transformBox = 'fill-box'\r\n      this.div.style.transform = 'translateX(-50%, 0)'\r\n      this.div.style.transform += `rotate(${-this.segment.angleWithHorizontalInDegres}deg)`\r\n    }\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default MarkSegment\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type OptionsRestrictedText } from '../interfaces'\r\nimport TextByPosition from './TextByPosition'\r\n\r\n/**\r\n * Créé un texte qui suivra la position d'un point\r\n */\r\nexport class TextByPoint extends TextByPosition {\r\n  /** Décalage vertical par rapport au point */\r\n  dxInPixels: number\r\n  /** Décalage vertical par rapport au point */\r\n  dyInPixels: number\r\n  /** Point sur lequel apparaitra le texte */\r\n  point: Point\r\n  constructor (figure: Figure, { color = 'black', dxInPixels = 0, dyInPixels = 0, id, isChild, point, text, ...options }: OptionsRestrictedText) {\r\n    super(figure, { color, dxInPixels, dyInPixels, id, isChild, text, x: point.x, y: point.y, ...options })\r\n    this.type = 'TextByPoint'\r\n    this.dxInPixels = dxInPixels\r\n    this.dyInPixels = dyInPixels\r\n    this.point = point\r\n    this.point.subscribe(this)\r\n  }\r\n\r\n  /** Déplace le texte aux coordonnées données */\r\n  moveTo (x: number, y: number): void {\r\n    const [oldX, oldY] = [this.x, this.y]\r\n    this.dxInPixels = Math.round(this.figure.xToSx(x - this.point.x) / this.figure.options.moveTextGrid) * this.figure.options.moveTextGrid\r\n    this.dyInPixels = Math.round(this.figure.yToSy(this.point.y - y) / this.figure.options.moveTextGrid) * this.figure.options.moveTextGrid\r\n    this.point.labelDxInPixels = this.dxInPixels\r\n    this.point.labelDyInPixels = this.dyInPixels\r\n    this.x = oldX\r\n    this.y = oldY\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      point: this.point.id,\r\n      text: this.text\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    if (this.point?.x !== undefined && this.point?.y !== undefined) super.moveTo(this.point.x, this.point.y)\r\n    this.notify()\r\n  }\r\n}\r\n\r\nexport default TextByPoint\r\n","import type DynamicNumber from '../../dynamicNumbers/DynamicNumber'\r\nimport type Figure from '../../Figure'\r\n\r\nimport { round } from '../../lib/format'\r\nimport { displayDigits } from '../defaultValues'\r\nimport { type OptionsDynamicText } from '../interfaces'\r\nimport TextByPosition from './TextByPosition'\r\n\r\n/**\r\n * Créé un div contenant un texte qui est mis au dessus du svg\r\n * par défaut KaTeX s'occupe du rendu du div\r\n */\r\nclass TextDynamicByPosition extends TextByPosition {\r\n  private readonly dynamicNumber: DynamicNumber\r\n  maximumFractionDigits: number\r\n  minimumFractionDigits: number\r\n  textAfter: string\r\n  textBefore: string\r\n\r\n  constructor (figure: Figure, { color = 'black', dynamicNumber, isChild = false, maximumFractionDigits = displayDigits, minimumFractionDigits = 0, textAfter = '', textBefore = '', x, y }: OptionsDynamicText) {\r\n    const value = textBefore + Intl.NumberFormat('fr-FR', { maximumFractionDigits, minimumFractionDigits }).format(dynamicNumber.value) + textAfter\r\n    super(figure, { color, isChild, text: value, x, y })\r\n    this.type = 'TextDynamicByPosition'\r\n    this.dynamicNumber = dynamicNumber\r\n    this.textBefore = textBefore\r\n    this.textAfter = textAfter\r\n    this.minimumFractionDigits = minimumFractionDigits\r\n    this.maximumFractionDigits = maximumFractionDigits\r\n    dynamicNumber.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idDynamicNumber: this.dynamicNumber.id,\r\n      maximumFractionDigits: this.maximumFractionDigits,\r\n      minimumFractionDigits: this.minimumFractionDigits,\r\n      textAfter: this.textAfter,\r\n      textBefore: this.textBefore,\r\n      x: round(this.x),\r\n      y: round(this.y)\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.text = this.textBefore + Intl.NumberFormat('fr-FR', { maximumFractionDigits: this.maximumFractionDigits, minimumFractionDigits: this.minimumFractionDigits }).format(this.dynamicNumber.value) + this.textAfter\r\n  }\r\n}\r\n\r\nexport default TextDynamicByPosition\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\nimport type Polygon from '../lines/Polyligon'\r\nimport type Segment from '../lines/Segment'\r\nimport type Point from '../points/Point'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsElement2D } from '../interfaces'\r\n\r\nclass ElementByReflectOverLine extends Element2D {\r\n  line: Segment\r\n  origin: Circle | Point | Polygon | Segment\r\n  constructor (figure: Figure, { line, origin, ...options }: { line: Segment, origin: Circle | Point | Polygon | Segment } & OptionsElement2D) {\r\n    super(figure, options)\r\n    this.type = 'ElementByReflectOverLine'\r\n    this.line = line\r\n    this.origin = origin\r\n    // Remove id from options\r\n    const optionsWithoudId = { ...options }\r\n    delete optionsWithoudId.id\r\n    origin.createReflectedOverLine({ line, ...optionsWithoudId })\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idOrigin: this.origin.id\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    const origin = this.origin.notation\r\n    return `Image de ${origin} dans la symétrié d'axe ${this.line.notation}`\r\n  }\r\n}\r\n\r\nexport default ElementByReflectOverLine\r\n","import type Figure from '../../Figure'\r\nimport type Circle from '../lines/Circle'\r\nimport type Segment from '../lines/Segment'\r\nimport type Point from '../points/Point'\r\n\r\nimport Element2D from '../Element2D'\r\nimport { type OptionsElement2D } from '../interfaces'\r\n\r\nclass ElementByTranslationByPoints extends Element2D {\r\n  origin: Circle | Point | Segment\r\n  point1: Point\r\n  point2: Point\r\n  constructor (figure: Figure, { origin, point1, point2, ...options }: { origin: Circle | Point | Segment, point1: Point, point2: Point } & OptionsElement2D) {\r\n    super(figure, options)\r\n    this.type = 'ElementByTranslationByPoints'\r\n    this.origin = origin\r\n    this.point1 = point1\r\n    this.point2 = point2\r\n    origin.createTranslatedByPoints({ point1, point2 })\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin.id,\r\n      idPoint1: this.point1.id,\r\n      idPoint2: this.point2.id\r\n    }\r\n  }\r\n\r\n  get description (): string {\r\n    return `Image de $${this.origin.notation}$ dans la translation qui transforme $${this.point1.notation}$ en $${this.point2.notation}$`\r\n  }\r\n}\r\n\r\nexport default ElementByTranslationByPoints\r\n","import type Figure from '../../Figure'\r\nimport type Segment from '../lines/Segment'\r\nimport type Point from '../points/Point'\r\n\r\nimport { round } from '../../lib/format'\r\nimport Element2D from '../Element2D'\r\n\r\nclass Vector extends Element2D {\r\n  /** Extrémité de la représentation du vecteur */\r\n  end?: Point\r\n  /** Origine pour la représentation du vecteur */\r\n  readonly origin: Point\r\n  /** Représentation du vecteur */\r\n  representation?: Segment\r\n  x: number\r\n  y: number\r\n  constructor (figure: Figure, { color, id, isChild, isDashed, isVisible, origin, thickness, x, y }: { color?: string, id?: string, isChild?: boolean, isDashed?: boolean, isVisible?: boolean, origin: Point, thickness?: number, x: number, y: number }) {\r\n    super(figure, { color, id, isChild, isDashed, isVisible, thickness })\r\n    this.type = 'Vector'\r\n    this.x = x\r\n    this.y = y\r\n    this.origin = origin\r\n  }\r\n\r\n  draw (): void {\r\n    if (this.origin !== undefined) {\r\n      this.origin.subscribe(this)\r\n      this.end = this.figure.create('Point', { isChild: true, isFree: false, isSelectable: true, isVisible: this.isVisible, shape: '', x: this.origin.x + this.x, y: this.origin.y + this.y })\r\n      this.representation = this.figure.create('Segment', { color: this.color, isChild: true, isDashed: this.isDashed, isSelectable: true, isVisible: this.isVisible, point1: this.origin, point2: this.end, shape: '->', thickness: this.thickness })\r\n    }\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin?.id,\r\n      x: round(this.x),\r\n      y: round(this.y)\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    if (this.origin !== undefined && this.end !== undefined) {\r\n      this.end.x = this.origin.x + this.x\r\n      this.end.y = this.origin.y + this.y\r\n    }\r\n  }\r\n\r\n  get color (): string {\r\n    return this._color\r\n  }\r\n\r\n  set color (color: string) {\r\n    this._color = color\r\n    if (this.representation !== undefined) {\r\n      this.representation.color = color\r\n    }\r\n  }\r\n\r\n  get isDashed (): boolean {\r\n    return this._isDashed\r\n  }\r\n\r\n  set isDashed (isDashed: boolean) {\r\n    this._isDashed = isDashed\r\n    if (this.representation !== undefined) {\r\n      this.representation.isDashed = isDashed\r\n    }\r\n  }\r\n\r\n  get thickness (): number {\r\n    return this._thickness\r\n  }\r\n\r\n  set thickness (thickness: number) {\r\n    this._thickness = thickness\r\n    if (this.representation !== undefined) {\r\n      this.representation.thickness = thickness\r\n    }\r\n  }\r\n}\r\n\r\nexport default Vector\r\n","import type Figure from '../../Figure'\r\nimport type Point from '../points/Point'\r\n\r\nimport Vector from './Vector'\r\n\r\nclass VectorByPoints extends Vector {\r\n  /** Premier point pour définir le vecteur */\r\n  point1: Point\r\n  /** Deuxième point pour définir le vecteur */\r\n  point2: Point\r\n  constructor (figure: Figure, { origin, point1, point2, ...options }: {\r\n    isChild?: boolean\r\n    isFree?: boolean\r\n    isSelectable?: boolean\r\n    isVisible?: boolean\r\n    label?: string\r\n    labelDxInPixels?: number\r\n    labelDyInPixels?: number\r\n    origin: Point\r\n    point1: Point\r\n    point2: Point\r\n    shape?: '' | '|' | 'o' | 'x'\r\n    sizeInPixels?: number\r\n  }) {\r\n    const x = point2.x - point1.x\r\n    const y = point2.y - point1.y\r\n    super(figure, { origin, x, y, ...options })\r\n    this.type = 'VectorByPoints'\r\n    this.point1 = point1\r\n    this.point2 = point2\r\n    point1.subscribe(this)\r\n    point2.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idOrigin: this.origin?.id,\r\n      idPoint1: this.point1.id,\r\n      idPoint2: this.point2.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    this.x = this.point2.x - this.point1.x\r\n    this.y = this.point2.y - this.point1.y\r\n    if (this.origin !== undefined && this.end !== undefined) {\r\n      this.end.x = this.origin.x + this.x\r\n      this.end.y = this.origin.y + this.y\r\n    }\r\n  }\r\n}\r\n\r\nexport default VectorByPoints\r\n","import type Figure from '../../Figure'\r\nimport type Line from '../lines/Line'\r\nimport type Point from '../points/Point'\r\n\r\nimport { type OptionsVectorPerpendicular } from '../interfaces'\r\nimport Vector from './Vector'\r\n\r\nclass VectorUnitPerpendicular extends Vector {\r\n  /** Droite perpendiculaire au vecteur */\r\n  line: Line\r\n  /** Origine de la représentation vecteur */\r\n  origin: Point\r\n  constructor (figure: Figure, { line, origin, ...options }: OptionsVectorPerpendicular) {\r\n    const [x, y] = line.equation\r\n    super(figure, { origin, x, y, ...options })\r\n    this.type = 'VectorPerpendicular'\r\n    this.line = line\r\n    this.origin = origin\r\n    line.subscribe(this)\r\n    origin.subscribe(this)\r\n  }\r\n\r\n  toJSON (): object {\r\n    return {\r\n      ...this.jsonOptions(),\r\n      idLine: this.line.id,\r\n      idOrigin: this.origin.id\r\n    }\r\n  }\r\n\r\n  update (): void {\r\n    this.notify()\r\n    const [x, y] = this.line.equation\r\n    this.x = x\r\n    this.y = y\r\n    if (this.end !== undefined) {\r\n      this.end.x = this.origin.x + this.x\r\n      this.end.y = this.origin.y + this.y\r\n    }\r\n  }\r\n}\r\n\r\nexport default VectorUnitPerpendicular\r\n","import type Figure from '../Figure'\r\n\r\nimport { defaultDistanceClick } from '../elements/defaultValues'\r\nimport Element2D from '../elements/Element2D'\r\nimport Point from '../elements/points/Point'\r\n\r\nexport default function handleHover (figure: Figure, pointerX: number, pointerY: number): void {\r\n  const elements = [...figure.elements.values()].filter(e => e instanceof Element2D) as Element2D[]\r\n  figure.hoverPoints.clear()\r\n  for (const element of elements) {\r\n    element.isHover = (\r\n      element.type !== 'pointer' &&\r\n      element.isVisible &&\r\n      element.isSelectable &&\r\n      figure.filter(element) &&\r\n      element.distancePointer(pointerX, pointerY) * figure.pixelsPerUnit < defaultDistanceClick\r\n    )\r\n    if (element.isHover && element instanceof Point && element.isFree) {\r\n      figure.hoverPoints.add(element)\r\n    }\r\n    // @ts-expect-error Le types de figure.ui est complexe\r\n    if (figure.hoverPoints.size > 0 && typeof figure?.ui?.state?.value === 'object' && 'POINT' in figure?.ui?.state?.value) {\r\n      figure.divFigure.style.cursor = 'move'\r\n    } else {\r\n      figure.divFigure.style.cursor = 'default'\r\n    }\r\n  }\r\n}\r\n","import renderMathInElement from 'katex/dist/contrib/auto-render.js'\r\n\r\nimport type Figure from '../Figure'\r\n\r\nimport { colors, defaultDeltaXModal, defaultDistanceClick } from '../elements/defaultValues'\r\nimport Element2D from '../elements/Element2D'\r\nimport Circle from '../elements/lines/Circle'\r\nimport Segment from '../elements/lines/Segment'\r\nimport Point from '../elements/points/Point'\r\nimport TextByPosition from '../elements/text/TextByPosition'\r\n\r\nexport default function handlePointerAction (figure: Figure, event: PointerEvent): void {\r\n  const [pointerX, pointerY] = figure.getPointerCoord(event)\r\n  const [x, y] = [pointerX, pointerY]\r\n  if (x > figure.xMax || x < figure.xMin || y > figure.yMax || y < figure.yMin) return\r\n  const possibleElements = []\r\n  figure.modal?.remove()\r\n  const elements = [...figure.elements.values()].filter(e => e instanceof Element2D) as Element2D[]\r\n  const elementsFiltered = elements.filter(figure.filter).filter(e => e.type !== 'pointer' && e.isVisible && e.isSelectable)\r\n  for (const element of elementsFiltered) {\r\n    if (element.distancePointer(pointerX, pointerY) * figure.pixelsPerUnit < defaultDistanceClick && element.isSelectable) {\r\n      possibleElements.push(element)\r\n    }\r\n  }\r\n  if (possibleElements.length === 1) {\r\n    sendToMachine(figure, { element: possibleElements[0], x, y })\r\n  } else if (figure.currentState === 'POINT_INTERSECTION' && possibleElements.length === 2 && (possibleElements[0] instanceof Segment || possibleElements[0] instanceof Circle) && (possibleElements[1] instanceof Segment || possibleElements[1] instanceof Circle)) {\r\n    sendToMachine(figure, { element: undefined, possibleElements, x, y })\r\n  } else if (possibleElements.length > 1) {\r\n    const points = possibleElements.filter(e => e instanceof Point)\r\n    if (points.length === 1) {\r\n      sendToMachine(figure, { element: points[0], x, y })\r\n      return\r\n    }\r\n    const elementText = new TextByPosition(figure, { isChild: true, isSelectable: false, text: '', x: pointerX + defaultDeltaXModal, y: Math.min(pointerY, figure.yMax - 2) })\r\n    elementText.draw()\r\n    figure.modal = elementText.div\r\n    figure.modal.style.pointerEvents = 'auto'\r\n    figure.modal.style.padding = '10px'\r\n    figure.modal.style.overflowY = 'auto'\r\n    figure.modal.style.backgroundColor = colors.titlelight\r\n    figure.modal.style.color = colors.title\r\n    figure.modal.style.boxShadow = '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)'\r\n    figure.modal.style.touchAction = 'none'\r\n    figure.modal.innerText = 'Quel élément souhaitez-vous sélectionner ?'\r\n    const divs = []\r\n    for (const element of possibleElements) {\r\n      const div = document.createElement('div')\r\n      div.innerText = (element.description !== '') ? element.description : element.type + ' ' + element.id\r\n      div.addEventListener('click', () => {\r\n        elementText.remove()\r\n        sendToMachine(figure, { element, x, y })\r\n      })\r\n      div.addEventListener('mouseenter', () => {\r\n        div.style.backgroundColor = colors.lightest\r\n      })\r\n      div.addEventListener('mouseleave', () => {\r\n        div.style.backgroundColor = colors.titlelight\r\n      })\r\n      div.style.marginTop = '5px'\r\n      div.style.marginLeft = '10px'\r\n      div.style.userSelect = 'none'\r\n      div.style.cursor = 'default'\r\n      divs.push(div)\r\n      renderMathInElement(div, {\r\n        delimiters: [\r\n          { display: true, left: '\\\\[', right: '\\\\]' },\r\n          { display: false, left: '$', right: '$' }\r\n        ],\r\n        errorColor: '#CC0000',\r\n        preProcess: (chaine: string) => chaine.replaceAll(String.fromCharCode(160), '\\\\,'),\r\n        strict: 'warn',\r\n        throwOnError: true,\r\n        trust: false\r\n      })\r\n    }\r\n    for (const div of divs) {\r\n      figure.modal.appendChild(div)\r\n    }\r\n    sendToMachine(figure, { element: undefined, possibleElements, waitingWithModal: true, x, y })\r\n  } else {\r\n    sendToMachine(figure, { element: undefined, x, y })\r\n  }\r\n}\r\n\r\nfunction sendToMachine (figure: Figure, { element, possibleElements, waitingWithModal, x, y }: { element?: Element2D, possibleElements?: Element2D[], waitingWithModal?: boolean, x: number, y: number }): void {\r\n  if (figure.ui !== undefined) {\r\n    figure.ui.send('clickLocation', { element, possibleElements, waitingWithModal: waitingWithModal ?? false, x, y })\r\n  }\r\n}\r\n","export default \"__VITE_ASSET___B7BBilc__\"","export default \"__VITE_ASSET__20fZvhrq__\"","export default \"__VITE_ASSET__EpTnL5Wp__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='172'%20height='172'%20viewBox='0%200%20172%20172'%20id='svg4328'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='CercOA.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs4330'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='10.627907'%20inkscape:cx='86.094092'%20inkscape:cy='86.282276'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20units='px'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata4333'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-33.585071,-34.933635)'%3e%3cellipse%20cy='121.43363'%20cx='117.08508'%20style='color:%23000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:%230e232e;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate'%20id='path3386'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\CercOA.png'%20inkscape:export-xdpi='24.994829'%20inkscape:export-ydpi='24.994829'%20rx='67.943108'%20ry='67.00219'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round'%20d='m%20130.56652,103.50458%20-13.30307,12.46222%20-12.46223,-13.30306%20-5.644494,5.28773%2012.462224,13.30306%20-13.303059,12.46224%205.287729,5.64451%2013.30308,-12.46224%2012.46356,13.30449%205.6445,-5.28774%20-12.46357,-13.30448%2013.30307,-12.46224%20z'%20/%3e%3cpath%20id='path916'%20style='fill:%23d40000;stroke:%23800000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round'%20d='m%20198.31269,101.52865%20-13.30307,12.46222%20-12.46223,-13.30306%20-5.64449,5.28773%2012.46222,13.30306%20-13.30306,12.46224%205.28773,5.64451%2013.30308,-12.46224%2012.46356,13.30449%205.6445,-5.28774%20-12.46357,-13.30448%2013.30307,-12.46224%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__pMUfRQr4__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M8%2016h8v2H8zm0-4h8v2H8zm6-10H6c-1.1%200-2%20.9-2%202v16c0%201.1.89%202%201.99%202H18c1.1%200%202-.9%202-2V8l-6-6zm4%2018H6V4h7v5h5v11z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__E0a1_zkc__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg7795'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='DeplacerCroix.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs7797'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='5.1671513'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='1620'%20inkscape:window-height='2786'%20inkscape:window-x='-11'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata7800'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-222.57143,-232.07648)'%3e%3cpath%20id='rect1225-3'%20style='fill:%234d4d4d;stroke:%23333333;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20273.42827,258.65045%20-4.28859,16.54236%20-16.54238,-4.28858%20-1.81965,7.01893%2016.54237,4.28859%20-4.28859,16.54237%207.01893,1.81966%204.2886,-16.54237%2016.54415,4.28905%201.81964,-7.01894%20-16.54414,-4.28905%204.2886,-16.54237%20z'%20/%3e%3cpath%20id='rect1575'%20style='fill:%230000ff;stroke:%23000080;stroke-width:2.8125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none'%20d='m%20315.17268,274.25336%20-19.96665,22.76627%2015.01387,-0.10537%20v%2019.32699%20h%20-19.76077%20l%200.10773,-14.6843%20-23.27726,19.52834%2022.98522,20.47654%200.10289,-14.18562%20h%2019.84217%20v%2019.327%20l%20-15.01389,-0.10537%2019.96665,22.76629%2020.93614,-22.48065%20-14.504,-0.10067%20v%20-19.40659%20h%2019.84216%20l%200.10289,14.18562%2022.98523,-20.47655%20-23.27728,-19.52833%200.10773,14.6843%20h%20-19.7608%20V%20296.8347%20l%2014.50399,-0.10067%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20xmlns:dc='http://purl.org/dc/elements/1.1/'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20width='50'%20height='50'%20id='svg3076'%20version='1.1'%20inkscape:version='0.48.3.1%20r9886'%20sodipodi:docname='Translation24.svg'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\Translation24.png'%20inkscape:export-xdpi='43.200001'%20inkscape:export-ydpi='43.200001'%3e%3cdefs%20id='defs3078'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='5.6'%20inkscape:cx='11.559973'%20inkscape:cy='41.015213'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20inkscape:window-width='1301'%20inkscape:window-height='752'%20inkscape:window-x='1771'%20inkscape:window-y='114'%20inkscape:window-maximized='0'%20/%3e%3cmetadata%20id='metadata3081'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3cdc:title%3e%3c/dc:title%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(0,-1002.3622)'%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none'%20d='m%2021.06238,1030.9464%20-9.997195,0%200,6.6937%20-9.4258535,-10.5188%209.1402445,-9.0845%200,6.2156%209.997072,0%20z'%20id='path3084-3'%20inkscape:connector-curvature='0'%20/%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none'%20d='m%2021.177764,1023.6809%200,-9.9972%20-6.6937,0%2010.5188,-9.4259%209.0845,9.1403%20-6.2156,0%200,9.997%20z'%20id='path3084-3-2'%20inkscape:connector-curvature='0'%20/%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none'%20d='m%2029.03845,1024.2542%209.9972,0%200,-6.6937%209.4259,10.5188%20-9.1403,9.0845%200,-6.2156%20-9.997,0%20z'%20id='path3084-3-21'%20inkscape:connector-curvature='0'%20/%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none'%20d='m%2028.286522,1031.0435%200,9.9972%206.6937,0%20-10.5188,9.4259%20-9.0845,-9.1403%206.2156,0%200,-9.997%20z'%20id='path3084-3-6'%20inkscape:connector-curvature='0'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M419.1,337.45a3.94,3.94,0,0,0-6.1,0c-10.5,12.4-45,46.55-45,77.66,0,27,21.5,48.89,48,48.89h0c26.5,0,48-22,48-48.89C464,384,429.7,349.85,419.1,337.45Z'%20style='fill:none;stroke:%23000;stroke-miterlimit:10;stroke-width:32px'/%3e%3cpath%20d='M387,287.9,155.61,58.36a36,36,0,0,0-51,0l-5.15,5.15a36,36,0,0,0,0,51l52.89,52.89,57-57L56.33,263.2a28,28,0,0,0,.3,40l131.2,126a28.05,28.05,0,0,0,38.9-.1c37.8-36.6,118.3-114.5,126.7-122.9,5.8-5.8,18.2-7.1,28.7-7.1h.3A6.53,6.53,0,0,0,387,287.9Z'%20style='fill:none;stroke:%23000;stroke-miterlimit:10;stroke-width:32px'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__mO1aGSjC__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg7795'%20version='1.1'%20inkscape:version='1.2-alpha1%20(b6a15bb,%202022-02-23)'%20sodipodi:docname='Cacher.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs7797'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='3.6342001'%20inkscape:cx='49.529469'%20inkscape:cy='89.153045'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='1440'%20inkscape:window-height='900'%20inkscape:window-x='0'%20inkscape:window-y='0'%20inkscape:window-maximized='0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20/%3e%3cmetadata%20id='metadata7800'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-222.57143,-232.07648)'%3e%3ccircle%20style='fill:%23333333;stroke:none;stroke-width:4.6875;stroke-linecap:round;stroke-linejoin:round'%20id='path1103'%20cx='309.63495'%20cy='310.36917'%20r='20.379314'%20/%3e%3cpath%20id='circle1221'%20style='fill:none;stroke:%23333333;stroke-width:4.68749;stroke-linecap:round;stroke-linejoin:round'%20d='m%20309.82851,284.44282%20a%2046.111419,35.599308%200%200%200%20-44.46899,26.22253%2046.111419,35.599308%200%200%200%2045.24353,29.11194%2046.111419,35.599308%200%200%200%2044.52576,-26.3562%2046.111419,35.599308%200%200%200%20-45.3003,-28.97827%20z'%20/%3e%3cpath%20style='fill:none;stroke:%23ffffff;stroke-width:4.6875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20283.58039,349.32202%2056.23658,-75.97098'%20id='path1337'%20sodipodi:nodetypes='cc'%20/%3e%3cpath%20style='fill:none;stroke:%23333333;stroke-width:5.71875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20277.90514,349.19304%2056.23658,-75.97098'%20id='path1728'%20sodipodi:nodetypes='cc'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20%3e%3cpath%20d='M8%206.9834C7.44772%206.9834%207%207.43111%207%207.9834C7%208.53568%207.44772%208.9834%208%208.9834H16C16.5523%208.9834%2017%208.53568%2017%207.9834C17%207.43111%2016.5523%206.9834%2016%206.9834H8Z'%20fill='currentColor'%20/%3e%3cpath%20d='M7%2012C7%2011.4477%207.44772%2011%208%2011H16C16.5523%2011%2017%2011.4477%2017%2012C17%2012.5523%2016.5523%2013%2016%2013H8C7.44772%2013%207%2012.5523%207%2012Z'%20fill='currentColor'%20/%3e%3cpath%20d='M8%2015.017C7.44772%2015.017%207%2015.4647%207%2016.017C7%2016.5693%207.44772%2017.017%208%2017.017H16C16.5523%2017.017%2017%2016.5693%2017%2016.017C17%2015.4647%2016.5523%2015.017%2016%2015.017H8Z'%20fill='currentColor'%20/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M22%2012C22%2017.5228%2017.5228%2022%2012%2022C6.47715%2022%202%2017.5228%202%2012C2%206.47715%206.47715%202%2012%202C17.5228%202%2022%206.47715%2022%2012ZM20%2012C20%2016.4183%2016.4183%2020%2012%2020C7.58172%2020%204%2016.4183%204%2012C4%207.58172%207.58172%204%2012%204C16.4183%204%2020%207.58172%2020%2012Z'%20fill='currentColor'%20/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DHL9KenN__\"","export default \"__VITE_ASSET__BtW9ehNh__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg6059'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='DteAB.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs6061'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='5.139535'%20inkscape:cx='85.999998'%20inkscape:cy='85.999998'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata6064'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-239.71429,-146.3622)'%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20259.24625,169.42969%20132.93607,136.4716%200,0'%20id='path5210'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DteAB.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20313.58289,199.16932%20-17.05023,1.15379%20-1.1538,-17.05024%20-7.23443,0.48955%201.15379,17.05024%20-17.05024,1.15379%200.48956,7.23443%2017.05024,-1.15379%201.15391,17.05207%207.23443,-0.48956%20-1.15392,-17.05206%2017.05025,-1.15379%20z'%20/%3e%3cpath%20id='rect1225-6'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20374.77181,262.24024%20-17.08874,0.12894%20-0.12895,-17.08875%20-7.25076,0.0547%200.12894,17.08874%20-17.08875,0.12895%200.0547,7.25077%2017.08875,-0.12894%200.12896,17.09058%207.25077,-0.0547%20-0.12896,-17.09057%2017.08875,-0.12894%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg8379'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='DtePar.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs8381'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata8384'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-188.28571,-232.07648)'%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%20209.93899,362.6242%20322.36896,252.31555'%20id='path5128-6'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DtePar.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20style='fill:none;stroke:%23005c94;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%20229.38443,387.37294%20341.8144,277.06429'%20id='path5128-6-1'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DtePar.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20265.33198,286.22826%20-2.70865,16.87321%20-16.87321,-2.70864%20-1.14928,7.15931%2016.87321,2.70864%20-2.70864,16.87322%207.15931,1.14927%202.70865,-16.87321%2016.87502,2.70894%201.14927,-7.15932%20-16.87501,-2.70893%202.70864,-16.87321%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg10117'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='DtePer.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs10119'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata10122'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-373.99999,-383.50506)'%3e%3crect%20style='color:%23000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:%23000000;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate'%20id='rect5356-5'%20width='22.627417'%20height='22.627417'%20x='651.37585'%20y='-49.423424'%20transform='matrix(0.67181757,0.74071665,-0.74071665,0.67181757,0,0)'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DtePer.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%20396.71395,402.68345%20507.02258,515.11342'%20id='path5128-6-0'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DtePer.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20style='fill:none;stroke:%23005c94;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%20415.09871,538.8015%20527.52869,428.49286'%20id='path5128-6-1-6'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DtePer.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20420.04977,407.25998%20-0.69256,17.07519%20-17.0752,-0.69256%20-0.29386,7.24501%2017.0752,0.69257%20-0.69256,17.07519%207.24501,0.29386%200.69257,-17.0752%2017.07703,0.69264%200.29385,-7.24502%20-17.07702,-0.69263%200.69256,-17.07521%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__rfEBIfGL__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg11955'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='MarqueSegment.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs11957'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata11960'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-202.57143,-183.50506)'%3e%3cpath%20style='fill:none;stroke:%23005c94;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20223.57144,228.50504%20128,89'%20id='path10603'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\MarqueSegment.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20289.57144,252.50504%20-17,34'%20id='path10630'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\MarqueSegment.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20302.07144,262.50504%20-17,34'%20id='path10630-7'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\MarqueSegment.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20222.84001,208.38909%20-0.69256,17.07519%20-17.0752,-0.69256%20-0.29386,7.24501%2017.0752,0.69257%20-0.69256,17.07519%207.24501,0.29386%200.69257,-17.0752%2017.07703,0.69264%200.29385,-7.24502%20-17.07702,-0.69263%200.69256,-17.07521%20z'%20/%3e%3cpath%20id='rect1225-7'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20347.88816,297.11776%20-0.69256,17.07519%20-17.0752,-0.69256%20-0.29386,7.24501%2017.0752,0.69257%20-0.69256,17.07519%207.24501,0.29386%200.69257,-17.0752%2017.07703,0.69264%200.29385,-7.24502%20-17.07702,-0.69263%200.69256,-17.07521%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__AOz8zZ92__\"","export default \"__VITE_ASSET__J6p_he3V__\"","export default \"__VITE_ASSET__rnz8yDj6__\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjQ4LjU0MjIyMW1tIg0KICAgaGVpZ2h0PSI0OC41NDIyMjFtbSINCiAgIHZpZXdCb3g9IjAgMCAxNzIgMTcyIg0KICAgaWQ9InN2Zzc3OTUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjItYWxwaGExIChiNmExNWJiLCAyMDIyLTAyLTIzKSINCiAgIHNvZGlwb2RpOmRvY25hbWU9Im1vdmVMYWJlbC5zdmciDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM3Nzk3IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjMuNTE2NjMwNiINCiAgICAgaW5rc2NhcGU6Y3g9IjM5LjUyNjQ3MiINCiAgICAgaW5rc2NhcGU6Y3k9Ijk2LjM5OTA5MyINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTQ0MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTAwIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSI+DQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ2ODY4IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTc4MDAiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iQ2FscXVlIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMjIuNTcxNDMsLTIzMi4wNzY0OCkiPg0KICAgIDx0ZXh0DQogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojNGQ0ZDRkO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICAgIHg9IjI1OS4zNTc1MSINCiAgICAgICB5PSIzMTMuODUwOCINCiAgICAgICBpZD0idGV4dDM2NzMiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1xTZWJcRG93bmxvYWRzXG1hdGhzXE1hdGhncmFwaDMyXEljb25lc1xwbmdcNDhcTm9tbWVyLnBuZyINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMjUuMTE2MjgiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjI1LjExNjI4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW4zNjc1Ig0KICAgICAgICAgeD0iMjU5LjM1NzUxIg0KICAgICAgICAgeT0iMzEzLjg1MDgiDQogICAgICAgICBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6OTcuODkycHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpzYW5zLXNlcmlmOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1NhbnMgQm9sZCc7ZmlsbDojNGQ0ZDRkO2ZpbGwtb3BhY2l0eToxIj5BPC90c3Bhbj48L3RleHQ+DQogICAgPHBhdGgNCiAgICAgICBpZD0icmVjdDEyMjUiDQogICAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzgwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCINCiAgICAgICBkPSJtIDM3MS45NDQ3MiwzMzIuMTYxMSAtMTIuMDgzOTEsMTIuMDgzOTEgLTEyLjA4MzkyLC0xMi4wODM5MSAtNS4xMjcyMSw1LjEyNzIxIDEyLjA4MzkxLDEyLjA4MzkxIC0xMi4wODM5MSwxMi4wODM5MiA1LjEyNzIxLDUuMTI3MjEgMTIuMDgzOTIsLTEyLjA4MzkxIDEyLjA4NTIxLDEyLjA4NTIxIDUuMTI3MjEsLTUuMTI3MjIgLTEyLjA4NTIxLC0xMi4wODUyIDEyLjA4MzkyLC0xMi4wODM5MiB6IiAvPg0KICAgIDxwYXRoDQogICAgICAgaWQ9InJlY3QxNTc1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwZmY7c3Ryb2tlOiMwMDAwODA7c3Ryb2tlLXdpZHRoOjIuODEyNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgICAgZD0ibSAyOTMuOTE2OTYsMzAzLjA3MTczIC0xOS45NjY2NSwyMi43NjYyNyAxNS4wMTM4NywtMC4xMDUzNyB2IDE5LjMyNjk5IGggLTE5Ljc2MDc3IGwgMC4xMDc3MywtMTQuNjg0MyAtMjMuMjc3MjYsMTkuNTI4MzQgMjIuOTg1MjIsMjAuNDc2NTQgMC4xMDI4OSwtMTQuMTg1NjIgaCAxOS44NDIxNyB2IDE5LjMyNyBsIC0xNS4wMTM4OSwtMC4xMDUzNyAxOS45NjY2NSwyMi43NjYyOSAyMC45MzYxNCwtMjIuNDgwNjUgLTE0LjUwNCwtMC4xMDA2NyB2IC0xOS40MDY1OSBoIDE5Ljg0MjE2IGwgMC4xMDI4OSwxNC4xODU2MiAyMi45ODUyMywtMjAuNDc2NTUgLTIzLjI3NzI4LC0xOS41MjgzMyAwLjEwNzczLDE0LjY4NDMgaCAtMTkuNzYwOCB2IC0xOS40MDY1NiBsIDE0LjUwMzk5LC0wLjEwMDY3IHoiIC8+DQogIDwvZz4NCjwvc3ZnPg0K\"","export default \"__VITE_ASSET__4BPG7_uX__\"","export default \"data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%20fill='currentColor'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M11.956%206h.05a2.99%202.99%200%200%201%202.117.879%203.003%203.003%200%200%201%200%204.242%202.99%202.99%200%200%201-2.117.879h-1.995v-1h1.995a2.002%202.002%200%200%200%200-4h-.914l-.123-.857a2.49%202.49%200%200%200-2.126-2.122A2.478%202.478%200%200%200%206.23%205.5l-.333.762-.809-.189A2.49%202.49%200%200%200%204.523%206c-.662%200-1.297.263-1.764.732A2.503%202.503%200%200%200%204.523%2011h2.494v1H4.523a3.486%203.486%200%200%201-2.628-1.16%203.502%203.502%200%200%201-.4-4.137A3.497%203.497%200%200%201%203.853%205.06c.486-.09.987-.077%201.468.041a3.486%203.486%200%200%201%203.657-2.06A3.479%203.479%200%200%201%2011.956%206zm-1.663%203.853L8.979%208.54v5.436h-.994v-5.4L6.707%209.854%206%209.146%208.146%207h.708L11%209.146l-.707.707z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M10%204H5v16h5V4zm9%200h-5v16h5V4z'%20fill='currentColor'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Fqa1LoeZ__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M133,440a35.37,35.37,0,0,1-17.5-4.67c-12-6.8-19.46-20-19.46-34.33V111c0-14.37,7.46-27.53,19.46-34.33a35.13,35.13,0,0,1,35.77.45L399.12,225.48a36,36,0,0,1,0,61L151.23,434.88A35.5,35.5,0,0,1,133,440Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M112,64a16,16,0,0,1,16,16V216.43L360.77,77.11a35.13,35.13,0,0,1,35.77-.44c12,6.8,19.46,20,19.46,34.33V401c0,14.37-7.46,27.53-19.46,34.33a35.14,35.14,0,0,1-35.77-.45L128,295.57V432a16,16,0,0,1-32,0V80A16,16,0,0,1,112,64Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='512'%20height='512'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M400,64a16,16,0,0,0-16,16V216.43L151.23,77.11a35.13,35.13,0,0,0-35.77-.44C103.46,83.47,96,96.63,96,111V401c0,14.37,7.46,27.53,19.46,34.33a35.14,35.14,0,0,0,35.77-.45L384,295.57V432a16,16,0,0,0,32,0V80A16,16,0,0,0,400,64Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg9132'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='PointLibre.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs9134'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata9137'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-396.85714,-289.21935)'%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20494.9404,357.8194%20-12.08391,12.08391%20-12.08392,-12.08391%20-5.12721,5.12721%2012.08391,12.08391%20-12.08391,12.08392%205.12721,5.12721%2012.08392,-12.08391%2012.08521,12.08521%205.12721,-5.12722%20-12.08521,-12.0852%2012.08392,-12.08392%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg6777'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='Int.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs6779'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata6782'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-53.999999,-106.3622)'%3e%3cpath%20style='fill:none;stroke:%23005c94;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%2093.999977,241.36218%20c%2032.000003,-89%20108.000003,-96%20108.000003,-96'%20id='path6486'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\Int.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20style='fill:none;stroke:%23005c94;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%2078.999977,140.36218%20c%2086.000003,17%20126.000003,101%20126.000003,101'%20id='path6488'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\Int.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20143.4937,149.03765%20-2.57947,16.89344%20-16.89344,-2.57946%20-1.09447,7.16789%2016.89344,2.57947%20-2.57946,16.89344%207.16789,1.09447%202.57948,-16.89344%2016.89525,2.57974%201.09446,-7.1679%20-16.89525,-2.57974%202.57947,-16.89344%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__QlAE_BRx__\"","export default \"__VITE_ASSET__eVwi24aQ__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg5485'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='DemiDt.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs5487'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata5490'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(23.142857,-109.21934)'%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%2010.531241,246.13103%20122.96121,135.82237'%20id='path5128'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\DemiDt.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%207.0994717,225.37249%20-0.6925638,17.07519%20-17.0751979,-0.69256%20-0.293855,7.24501%2017.0751903,0.69257%20-0.692557,17.07519%207.2450127,0.29386%200.692571,-17.0752%2017.077028,0.69264%200.293848,-7.24502%20-17.07702,-0.69263%200.692564,-17.07521%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20viewBox='0%200%20512%20512'%20version='1.1'%20id='svg11'%20sodipodi:docname='redo.svg'%20inkscape:version='1.2-alpha1%20(b6a15bb,%202022-02-23)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs15'%20/%3e%3csodipodi:namedview%20id='namedview13'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20showgrid='false'%20inkscape:zoom='0.4609375'%20inkscape:cx='-156.20339'%20inkscape:cy='256'%20inkscape:window-width='1440'%20inkscape:window-height='900'%20inkscape:window-x='0'%20inkscape:window-y='0'%20inkscape:window-maximized='0'%20inkscape:current-layer='svg11'%20/%3e%3cpath%20d='m%20289.42871,234.78304%20h%20168.45736%20c%205.5336,0%2010.06934,-4.12064%2010.06934,-9.2057%20V%2072.324346%20c%200,-5.08505%20-4.53574,-9.2057%20-10.06934,-9.2057%20h%20-40.36809%20c%20-5.53359,0%20-10.06933,4.12065%20-10.06933,9.2057%20V%20132.11756%20C%20368.98558,93.190596%20313.10527,68.817416%20250.96563,69.255776%20135.84856,70.044836%2043.773036,154.64961%2044.045186,259.50693%20c%200.18143,104.5943%2093.436244,189.37442%20208.462594,189.37442%2053.88459,0%20102.9613,-18.58675%20139.97293,-49.18475%204.2636,-3.50693%204.44503,-9.64406%200.36286,-13.32634%20l%20-28.57516,-26.03899%20c%20-3.71931,-3.41926%20-9.7972,-3.5946%20-13.78865,-0.43836%20-26.03514,21.12927%20-60.41605,33.84191%20-97.97198,33.84191%20-81.73402,0%20-147.95582,-60.23159%20-147.95582,-134.75393%200,-74.43467%2066.13108,-134.75393%20147.95582,-134.75393%2049.16742,0%2092.71052,21.83066%20119.5621,55.32188%20h%20-82.64117%20c%20-5.53361,0%20-10.06935,4.12065%20-10.06935,9.2057%20v%2036.73513%20c%200,5.08505%204.53574,9.2057%2010.06935,9.2057%20z'%20id='path9'%20style='stroke-width:0.891811'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg6604'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='SymCentrale.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs6606'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata6609'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-242.57143,-206.3622)'%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20262.79014,214.45852%200,44.10483%2073.98869,0%20z'%20id='path3045-4-7'%20inkscape:connector-curvature='0'%20inkscape:transform-center-x='28.537028'%20inkscape:transform-center-y='-56.288402'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymCentrale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:%239eabb0;stroke:%230e232e;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20394.33944,369.23811%20-0.27728,-44.10402%20-73.98735,0.42829%20z'%20id='path3045-4-7-1'%20inkscape:connector-curvature='0'%20inkscape:transform-center-x='-28.885614'%20inkscape:transform-center-y='55.147417'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymCentrale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.937498;stroke-linecap:round;stroke-linejoin:round'%20d='m%20336.51961,280.10863%20-8.2544,8.61959%20-8.61959,-8.2544%20-3.50236,3.6573%208.6196,8.2544%20-8.25439,8.61959%203.65729,3.50234%208.25441,-8.61958%208.62052,8.25528%203.50235,-3.6573%20-8.62053,-8.25528%208.25441,-8.6196%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20xmlns:dc='http://purl.org/dc/elements/1.1/'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg6028'%20version='1.1'%20inkscape:version='0.91%20r13725'%20sodipodi:docname='SymAxiale.svg'%3e%3cdefs%20id='defs6030'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='5.139535'%20inkscape:cx='85.999998'%20inkscape:cy='85.999998'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='1920'%20inkscape:window-height='1017'%20inkscape:window-x='1272'%20inkscape:window-y='-8'%20inkscape:window-maximized='1'%20/%3e%3cmetadata%20id='metadata6033'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3cdc:title%3e%3c/dc:title%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-93.999999,-123.50506)'%3e%3crect%20style='color:%23000000;display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:%23000000;stroke-width:0.81904763;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate'%20id='rect5045-5-5-7'%20width='171.18095'%20height='171.18095'%20x='94.409523'%20y='123.91458'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymAxiale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:%2319aeff;stroke:%23005c94;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20130.46906,156.13811%2013.33444,38.77103%2062.4119,-21.4652%20z'%20id='path3045-8'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymAxiale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:%239eabb0;stroke:%230e232e;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20170.47238,272.4512%20-13.33444,-38.77103%2062.4119,-21.4652%20z'%20id='path3045-8-4'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymAxiale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3cpath%20style='fill:none;stroke:%23000000;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:24,%2012,%206,%2012;stroke-dashoffset:0;stroke-opacity:1'%20d='M%20117.84631,225.5151%20251.65365,179.49502'%20id='path3961'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\24\\\\SymAxiale.png'%20inkscape:export-xdpi='12.55814'%20inkscape:export-ydpi='12.55814'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20width='600'%20height='600'%20style='border-radius:300px'%20version='1.1'%20id='svg24'%20sodipodi:docname='corbeille.svg'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs28'%20/%3e%3csodipodi:namedview%20id='namedview26'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20showgrid='false'%20inkscape:zoom='1.455'%20inkscape:cx='299.65636'%20inkscape:cy='299.65636'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:current-layer='svg24'%20/%3e%3c!--%20Created%20with%20SVG-edit%20-%20http://svg-edit.googlecode.com/%20--%3e%3cline%20stroke-linecap='round'%20x1='180'%20y1='159.25'%20x2='420'%20y2='159.25'%20style='stroke:%23333333;stroke-width:30;fill:%23e2e3db'%20id='line7'%20/%3e%3crect%20x='250'%20y='129.25'%20rx='20'%20ry='20'%20width='100'%20height='30'%20style='stroke:%23333333;stroke-width:10;fill:%23e2e3db'%20id='rect9'%20/%3e%3cline%20stroke-linecap='round'%20x1='189'%20y1='198.75'%20x2='200'%20y2='466.75'%20style='stroke:%23333333;stroke-width:25;fill:%23e2e3db'%20id='line11'%20/%3e%3cline%20id='bottom'%20stroke-linecap='round'%20x1='411'%20y1='198.75'%20x2='400'%20y2='466.75'%20style='stroke:%23333333;stroke-width:25;fill:%23e2e3db'%20/%3e%3cline%20stroke-linecap='square'%20x1='189'%20y1='198.75'%20x2='411'%20y2='198.75'%20style='stroke:%23333333;stroke-width:25;fill:%23e2e3db'%20id='line14'%20/%3e%3cline%20stroke-linecap='round'%20x1='203'%20y1='470.75'%20x2='397'%20y2='470.75'%20style='stroke:%23333333;stroke-width:30;fill:%23e2e3db'%20id='line16'%20/%3e%3cline%20stroke-linecap='round'%20x1='260'%20y1='198.75'%20x2='265'%20y2='470.75'%20style='stroke:%23333333;stroke-width:25;fill:%23e2e3db'%20id='line18'%20/%3e%3cline%20stroke-linecap='round'%20x1='340'%20y1='198.75'%20x2='335'%20y2='470.75'%20style='stroke:%23333333;stroke-width:25;fill:%23e2e3db'%20id='line20'%20/%3e%3c/svg%3e%3c!----%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20version='1.1'%20id='mdi-restart'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,4C14.1,4%2016.1,4.8%2017.6,6.3C20.7,9.4%2020.7,14.5%2017.6,17.6C15.8,19.5%2013.3,20.2%2010.9,19.9L11.4,17.9C13.1,18.1%2014.9,17.5%2016.2,16.2C18.5,13.9%2018.5,10.1%2016.2,7.7C15.1,6.6%2013.5,6%2012,6V10.6L7,5.6L12,0.6V4M6.3,17.6C3.7,15%203.3,11%205.1,7.9L6.6,9.4C5.5,11.6%205.9,14.4%207.8,16.2C8.3,16.7%208.9,17.1%209.6,17.4L9,19.4C8,19%207.1,18.4%206.3,17.6Z'%20/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__O7qOhpBg__\"","export default \"data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%20fill='currentColor'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M11.957%206h.05a2.99%202.99%200%200%201%202.116.879%203.003%203.003%200%200%201%200%204.242%202.99%202.99%200%200%201-2.117.879v-1a2.002%202.002%200%200%200%200-4h-.914l-.123-.857a2.49%202.49%200%200%200-2.126-2.122A2.478%202.478%200%200%200%206.231%205.5l-.333.762-.809-.189A2.49%202.49%200%200%200%204.523%206c-.662%200-1.297.263-1.764.732A2.503%202.503%200%200%200%204.523%2011h.498v1h-.498a3.486%203.486%200%200%201-2.628-1.16%203.502%203.502%200%200%201%201.958-5.78%203.462%203.462%200%200%201%201.468.04%203.486%203.486%200%200%201%203.657-2.06A3.479%203.479%200%200%201%2011.957%206zm-5.25%205.121l1.314%201.314V7h.994v5.4l1.278-1.279.707.707-2.146%202.147h-.708L6%2011.829l.707-.708z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg11267'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='Segment.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs11269'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='9.963663'%20inkscape:cx='91.733331'%20inkscape:cy='91.733331'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata11272'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(17.428573,-43.505061)'%3e%3cpath%20style='fill:none;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='M%209.4170928,107.94873%20C%20133.86789,156.73909%20133.86789,156.73909%20133.86789,156.73909'%20id='path5172'%20inkscape:connector-curvature='0'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\Segment.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='M%2019.68314,89.52305%207.59923,101.60696%20-4.48469,89.52305%20-9.6119,94.65026%202.47201,106.73417%20-9.6119,118.81809%20l%205.12721,5.12721%2012.08392,-12.08391%2012.08521,12.08521%205.12721,-5.12722%20-12.08521,-12.0852%2012.08392,-12.08392%20z'%20/%3e%3cpath%20id='rect1225-1'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20146.33084,139.67403%20-12.08391,12.08391%20-12.08392,-12.08391%20-5.12721,5.12721%2012.08391,12.08391%20-12.08391,12.08392%205.12721,5.12721%2012.08392,-12.08391%2012.08521,12.08521%205.12721,-5.12722%20-12.08521,-12.0852%2012.08392,-12.08392%20z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__8u$a0fkT__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20class='icon'%20viewBox='0%200%201024%201024'%3e%3cpath%20d='M324%20666a48%2048%200%201%200%2096%200%2048%2048%200%201%200-96%200zm616.7-309.6L667.6%2083.2C655.2%2070.9%20638.7%2064%20621.1%2064s-34.1%206.8-46.5%2019.2L83.3%20574.5a65.85%2065.85%200%200%200%200%2093.1l273.2%20273.2c12.3%2012.3%2028.9%2019.2%2046.5%2019.2s34.1-6.8%2046.5-19.2l491.3-491.3c25.6-25.7%2025.6-67.5-.1-93.1zM403%20880.1L143.9%20621l477.2-477.2%20259%20259.2L403%20880.1zM152.8%20373.7a7.9%207.9%200%200%200%2011.2%200L373.7%20164a7.9%207.9%200%200%200%200-11.2l-38.4-38.4a7.9%207.9%200%200%200-11.2%200L114.3%20323.9a7.9%207.9%200%200%200%200%2011.2l38.5%2038.6zm718.6%20276.6a7.9%207.9%200%200%200-11.2%200L650.3%20860.1a7.9%207.9%200%200%200%200%2011.2l38.4%2038.4a7.9%207.9%200%200%200%2011.2%200L909.7%20700a7.9%207.9%200%200%200%200-11.2l-38.3-38.5z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__M9kkoJ7Q__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20viewBox='0%200%20512%20512'%20version='1.1'%20id='svg11'%20sodipodi:docname='undo.svg'%20inkscape:version='1.2-alpha1%20(b6a15bb,%202022-02-23)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs15'%20/%3e%3csodipodi:namedview%20id='namedview13'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20showgrid='false'%20inkscape:zoom='0.4609375'%20inkscape:cx='-156.20339'%20inkscape:cy='256'%20inkscape:window-width='1440'%20inkscape:window-height='900'%20inkscape:window-x='0'%20inkscape:window-y='0'%20inkscape:window-maximized='0'%20inkscape:current-layer='svg11'%20/%3e%3cpath%20d='M%20222.57129,234.78304%20H%2054.113924%20c%20-5.5336,0%20-10.06934,-4.12064%20-10.06934,-9.2057%20V%2072.324346%20c%200,-5.08505%204.53574,-9.2057%2010.06934,-9.2057%20h%2040.36809%20c%205.533596,0%2010.069336,4.12065%2010.069336,9.2057%20v%2059.793214%20c%2038.46307,-38.926964%2094.34338,-63.300144%20156.48302,-62.861784%20115.11707,0.78906%20207.19259,85.393834%20206.92044,190.251154%20-0.18143,104.5943%20-93.43624,189.37442%20-208.46259,189.37442%20-53.88459,0%20-102.9613,-18.58675%20-139.97293,-49.18475%20-4.2636,-3.50693%20-4.44503,-9.64406%20-0.36286,-13.32634%20l%2028.57516,-26.03899%20c%203.71931,-3.41926%209.7972,-3.5946%2013.78865,-0.43836%2026.03514,21.12927%2060.41605,33.84191%2097.97198,33.84191%2081.73402,0%20147.95582,-60.23159%20147.95582,-134.75393%200,-74.43467%20-66.13108,-134.75393%20-147.95582,-134.75393%20-49.16742,0%20-92.71052,21.83066%20-119.5621,55.32188%20h%2082.64117%20c%205.53361,0%2010.06935,4.12065%2010.06935,9.2057%20v%2036.73513%20c%200,5.08505%20-4.53574,9.2057%20-10.06935,9.2057%20z'%20id='path9'%20style='stroke-width:0.891811'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='48.542221mm'%20height='48.542221mm'%20viewBox='0%200%20172%20172'%20id='svg12430'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='Vecteur.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs12432'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='5.139535'%20inkscape:cx='85.999998'%20inkscape:cy='85.999998'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='3840'%20inkscape:window-height='2066'%20inkscape:window-x='1609'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20/%3e%3cmetadata%20id='metadata12435'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-114,-203.50506)'%3e%3cpath%20id='rect1225'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20147.91469,269.51062%20-12.08391,12.08391%20-12.08392,-12.08391%20-5.12721,5.12721%2012.08391,12.08391%20-12.08391,12.08392%205.12721,5.12721%2012.08392,-12.08391%2012.08521,12.08521%205.12721,-5.12722%20-12.08521,-12.0852%2012.08392,-12.08392%20z'%20/%3e%3cpath%20id='rect1225-6'%20style='fill:%23d40000;stroke:%23800000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round'%20d='m%20277.66556,270.01925%20-12.08391,12.08391%20-12.08392,-12.08391%20-5.12721,5.12721%2012.08391,12.08391%20-12.08391,12.08392%205.12721,5.12721%2012.08392,-12.08391%2012.08521,12.08521%205.12721,-5.12722%20-12.08521,-12.0852%2012.08392,-12.08392%20z'%20/%3e%3cpath%20style='fill:%230e232e;stroke:%230e232e;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:none;marker-end:none'%20d='m%20137.2703,286.72174%20122.66222,0.61695'%20id='path3926'%20inkscape:connector-curvature='0'%20sodipodi:nodetypes='cc'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\Vecteur.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3cpath%20style='fill:none;stroke:%23000000;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1'%20d='m%20230.52355,266.89496%2031.16924,20.38028%20-30.82986,20.71317'%20id='path6358'%20inkscape:connector-curvature='0'%20sodipodi:nodetypes='ccc'%20inkscape:export-filename='C:\\\\Users\\\\Seb\\\\Downloads\\\\maths\\\\Mathgraph32\\\\Icones\\\\png\\\\48\\\\Vecteur.png'%20inkscape:export-xdpi='25.11628'%20inkscape:export-ydpi='25.11628'%20/%3e%3c/g%3e%3c/svg%3e\"","import type Figure from '../Figure'\r\nimport type { eventName } from '../uiMachine'\r\n\r\nimport bisectorByPoints from '../assets/svg/bisectorByPoints.svg'\r\nimport circle from '../assets/svg/circle.svg'\r\nimport circleCompass from '../assets/svg/circleCompass.svg'\r\nimport circlePoint from '../assets/svg/circlePoint.svg'\r\nimport cursor from '../assets/svg/cursor.svg'\r\nimport description from '../assets/svg/description.svg'\r\nimport dilate from '../assets/svg/dilate.svg'\r\nimport drag from '../assets/svg/drag.svg'\r\nimport dragAll from '../assets/svg/dragAll.svg'\r\nimport fill from '../assets/svg/fill.svg'\r\nimport grid from '../assets/svg/grid.svg'\r\nimport hide from '../assets/svg/hide.svg'\r\nimport informations from '../assets/svg/informations.svg'\r\nimport latex from '../assets/svg/latex.svg'\r\nimport latexSvg from '../assets/svg/latexSvg.svg'\r\nimport line from '../assets/svg/line.svg'\r\nimport lineParallel from '../assets/svg/lineParallel.svg'\r\nimport linePerpendicular from '../assets/svg/linePerpendicular.svg'\r\nimport markAngle from '../assets/svg/markAngle.svg'\r\nimport matkSegment from '../assets/svg/markSegment.svg'\r\nimport mesureAngle from '../assets/svg/mesureAngle.svg'\r\nimport mesureSegment from '../assets/svg/mesureSegment.svg'\r\nimport middle from '../assets/svg/middle.svg'\r\nimport moveLabel from '../assets/svg/moveLabel.svg'\r\nimport namePoint from '../assets/svg/namePoint.svg'\r\nimport open from '../assets/svg/open.svg'\r\nimport pause from '../assets/svg/pause.svg'\r\nimport perpendicularBisector from '../assets/svg/perpendicularBisector.svg'\r\nimport play from '../assets/svg/play.svg'\r\nimport playSkipBack from '../assets/svg/playSkipBack.svg'\r\nimport playSkipForward from '../assets/svg/playSkipForward.svg'\r\nimport point from '../assets/svg/point.svg'\r\nimport pointIntersection from '../assets/svg/pointIntersection.svg'\r\nimport pointOn from '../assets/svg/pointOn.svg'\r\nimport polygon from '../assets/svg/polygon.svg'\r\nimport ray from '../assets/svg/ray.svg'\r\nimport redo from '../assets/svg/redo.svg'\r\nimport reflection from '../assets/svg/reflection.svg'\r\nimport reflectionOverLine from '../assets/svg/reflectionOverLine.svg'\r\nimport remove from '../assets/svg/remove.svg'\r\nimport restart from '../assets/svg/restart.svg'\r\nimport rotate from '../assets/svg/rotate.svg'\r\nimport save from '../assets/svg/save.svg'\r\nimport segment from '../assets/svg/segment.svg'\r\nimport setOptions from '../assets/svg/setOptions.svg'\r\nimport shake from '../assets/svg/shake.svg'\r\nimport translation from '../assets/svg/translation.svg'\r\nimport undo from '../assets/svg/undo.svg'\r\nimport vector from '../assets/svg/vector.svg'\r\n\r\n// La clé devrait être de type availableButtons\r\nconst availableIcons = new Map<string, { tooltip: string, url: string }>([\r\n  ['BISECTOR_BY_POINTS', { tooltip: 'Bissectrice', url: bisectorByPoints }],\r\n  ['CIRCLE_CENTER_POINT', { tooltip: 'Cercle centre-point', url: circlePoint }],\r\n  ['CIRCLE_COMPASS', { tooltip: 'Cercle par report de longueur', url: circleCompass }],\r\n  ['CIRCLE_RADIUS', { tooltip: 'Cercle centre-rayon', url: circle }],\r\n  ['CURSOR', { tooltip: 'Curseur', url: cursor }],\r\n  ['DESCRIPTION', { tooltip: 'Afficher le programme de construction', url: description }],\r\n  ['DILATE', { tooltip: 'Homothétie', url: dilate }],\r\n  ['DOWNLOAD_LATEX_SVG', { tooltip: 'Exporter la figure au format LaTeX ou SVG', url: latexSvg }],\r\n  ['DRAG_ALL', { tooltip: 'Déplacer la figure', url: dragAll }],\r\n  ['DRAG', { tooltip: 'Déplacer les points', url: drag }],\r\n  ['FILL', { tooltip: 'Colorier', url: fill }],\r\n  ['GRID', { tooltip: 'Afficher le repère', url: grid }],\r\n  ['HIDE', { tooltip: 'Masquer un élément', url: hide }],\r\n  ['INFORMATIONS', { tooltip: 'Obtenir les informations sur l\\'élément', url: informations }],\r\n  ['LATEX', { tooltip: 'Export LaTeX', url: latex }],\r\n  ['LINE_PARALLEL', { tooltip: 'Droite parallèle', url: lineParallel }],\r\n  ['LINE_PERPENDICULAR', { tooltip: 'Droite perpendiculaire', url: linePerpendicular }],\r\n  ['LINE', { tooltip: 'Droite', url: line }],\r\n  ['MARK_ANGLE', { tooltip: 'Coder un angle', url: markAngle }],\r\n  ['MARK_SEGMENT', { tooltip: 'Coder un segment', url: matkSegment }],\r\n  ['MESURE_ANGLE', { tooltip: 'Mesurer un angle', url: mesureAngle }],\r\n  ['MESURE_SEGMENT', { tooltip: 'Mesurer une distance', url: mesureSegment }],\r\n  ['MIDDLE', { tooltip: 'Milieu', url: middle }],\r\n  ['MOVE_LABEL', { tooltip: 'Déplacer le nom d\\'un point', url: moveLabel }],\r\n  ['NAME_POINT', { tooltip: 'Renommer un point', url: namePoint }],\r\n  ['OPEN', { tooltip: 'Charger un fichier', url: open }],\r\n  ['PAUSE', { tooltip: 'Pause', url: pause }],\r\n  ['PERPENDICULAR_BISECTOR', { tooltip: 'Médiatrice', url: perpendicularBisector }],\r\n  ['PLAY_SKIP_BACK', { tooltip: 'Étape précédente', url: playSkipBack }],\r\n  ['PLAY_SKIP_FORWARD', { tooltip: 'Étape suivante', url: playSkipForward }],\r\n  ['PLAY', { tooltip: 'Lecture', url: play }],\r\n  ['POINT_INTERSECTION', { tooltip: 'Point à l\\'intersection', url: pointIntersection }],\r\n  ['POINT_ON', { tooltip: 'Point sur', url: pointOn }],\r\n  ['POINT', { tooltip: 'Point', url: point }],\r\n  ['POLYGON', { tooltip: 'Polygone', url: polygon }],\r\n  ['RAY', { tooltip: 'Demi-droite', url: ray }],\r\n  ['REDO', { tooltip: 'Rétablir', url: redo }],\r\n  ['REFLECTION_OVER_LINE', { tooltip: 'Symétrie axiale', url: reflectionOverLine }],\r\n  ['REFLECTION', { tooltip: 'Symétrie centrale', url: reflection }],\r\n  ['REMOVE', { tooltip: 'Supprimer', url: remove }],\r\n  ['RESTART', { tooltip: 'Recommencer', url: restart }],\r\n  ['ROTATE', { tooltip: 'Rotation', url: rotate }],\r\n  ['SAVE', { tooltip: 'Sauvegarder', url: save }],\r\n  ['SEGMENT', { tooltip: 'Segment', url: segment }],\r\n  ['SET_OPTIONS', { tooltip: 'Modifier le style', url: setOptions }],\r\n  ['SHAKE', { tooltip: 'Secouer la figure', url: shake }],\r\n  ['TRANSLATION', { tooltip: 'Translation', url: translation }],\r\n  ['UNDO', { tooltip: 'Annuler la dernière action', url: undo }],\r\n  ['VECTOR', { tooltip: 'Vecteur', url: vector }]\r\n])\r\n\r\nexport default function addButtons (list: string, figure: Figure): HTMLImageElement[] {\r\n  const imgList = []\r\n  const buttons = list.split(' ')\r\n  for (const key of buttons) {\r\n    const button = key.toUpperCase()\r\n    if (!availableIcons.has(button)) {\r\n      console.error(`Le bouton ${button} n'existe pas`)\r\n      continue\r\n    }\r\n    const img = document.createElement('img')\r\n    const icon = availableIcons.get(button)\r\n    if (icon == null) {\r\n      console.error(`L'icône pour le bouton ${button} n'existe pas`)\r\n      continue\r\n    }\r\n    img.src = icon.url\r\n    img.title = icon.tooltip\r\n    img.style.width = '40px'\r\n    img.style.height = '40px'\r\n    img.style.margin = '4px'\r\n    img.style.cursor = 'pointer'\r\n    img.style.borderRadius = '5px'\r\n    img.style.border = '1px solid black'\r\n    img.style.backgroundColor = 'white'\r\n    img.style.boxShadow = '0px 0px 2px 0px rgba(0,0,0,0.75)'\r\n    img.style.padding = '2px'\r\n    img.onmouseover = () => {\r\n      img.style.boxShadow = '0px 0px 5px 0px rgba(0,0,0,0.75)'\r\n    }\r\n    img.onmouseout = () => {\r\n      img.style.boxShadow = '0px 0px 2px 0px rgba(0,0,0,0.75)'\r\n    }\r\n    img.onclick = () => { figure.ui?.send(button as eventName) }\r\n    figure.buttons.set(button as eventName, img)\r\n    imgList.push(img)\r\n  }\r\n  return imgList\r\n}\r\n","import type Figure from '../Figure'\r\n\r\nexport default function addColorPalette (colors: string[], figure: Figure): HTMLDivElement {\r\n  const div = document.createElement('div')\r\n  div.style.display = 'flex'\r\n  div.classList.add('apiGeom-color-palette')\r\n  for (const color of colors) {\r\n    const button = document.createElement('button')\r\n    button.style.backgroundColor = color\r\n    button.style.width = '30px'\r\n    button.style.height = '30px'\r\n    button.style.marginRight = '10px'\r\n    button.style.marginLeft = '4px'\r\n    button.style.marginTop = '10px'\r\n    button.style.cursor = 'pointer'\r\n    button.style.borderRadius = '5px'\r\n    button.style.backgroundColor = color\r\n    button.style.border = '1px solid black'\r\n    button.style.padding = '2px'\r\n    button.title = translateColor(color)\r\n    button.addEventListener('click', () => {\r\n      figure.options.color = color\r\n      showSelectedColor(figure)\r\n    })\r\n    div.appendChild(button)\r\n  }\r\n  setTimeout(() => { showSelectedColor(figure) }, 100)\r\n  return div\r\n}\r\n\r\nfunction showSelectedColor (figure: Figure): void {\r\n  const buttons = document.querySelectorAll('.apiGeom-color-palette button')\r\n  for (const element of Array.from(buttons)) {\r\n    const button = element as HTMLButtonElement\r\n    if (button.style.backgroundColor === figure.options.color) {\r\n      button.style.boxShadow = '0px 0px 10px 0px rgba(0,0,0,0.75)'\r\n      button.style.transform = 'scale(1.2) translate(1px, 1px'\r\n    } else {\r\n      button.style.boxShadow = ''\r\n      button.style.transform = ''\r\n    }\r\n  }\r\n}\r\n\r\nexport { showSelectedColor }\r\n\r\ninterface ColorMap {\r\n  [key: string]: string\r\n  black: string\r\n  blue: string\r\n  gray: string\r\n  green: string\r\n  lightgray: string\r\n  purple: string\r\n  red: string\r\n  yellow: string\r\n}\r\n\r\nconst colorMap: ColorMap = {\r\n  black: 'Noir',\r\n  blue: 'Bleu',\r\n  gray: 'Gris',\r\n  green: 'Vert',\r\n  lightgray: 'Gris clair',\r\n  purple: 'Violet',\r\n  red: 'Rouge',\r\n  yellow: 'Jaune'\r\n}\r\n\r\nfunction translateColor (color: string): string {\r\n  if (colorMap[color] !== undefined) {\r\n    return colorMap[color]\r\n  } else {\r\n    return color.charAt(0).toUpperCase() + color.slice(1)\r\n  }\r\n}\r\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='183.46666'%20height='36'%20viewBox='0%200%20172%2033.750001'%20id='svg7795'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='traitPointilles.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs7797'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='2.9324129'%20inkscape:cx='91.73333'%20inkscape:cy='18.073853'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='1620'%20inkscape:window-height='2786'%20inkscape:window-x='-11'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20units='px'%20height='40px'%20/%3e%3cmetadata%20id='metadata7800'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-222.57143,-232.07648)'%3e%3cpath%20style='fill:none;stroke:%23000000;stroke-width:7.80938;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:15.6188,%2015.6188;stroke-dashoffset:0;stroke-opacity:1'%20d='M%20237.13226,248.95148%20H%20383.91529'%20id='path2564'%20sodipodi:nodetypes='cc'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!--%20Created%20with%20Inkscape%20(http://www.inkscape.org/)%20--%3e%3csvg%20width='183.46666'%20height='36'%20viewBox='0%200%20172%2033.750001'%20id='svg7795'%20version='1.1'%20inkscape:version='1.1.1%20(3bf5ae0d25,%202021-09-20)'%20sodipodi:docname='traitContinu.svg'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:dc='http://purl.org/dc/elements/1.1/'%3e%3cdefs%20id='defs7797'%20/%3e%3csodipodi:namedview%20id='base'%20pagecolor='%23ffffff'%20bordercolor='%23666666'%20borderopacity='1.0'%20inkscape:pageopacity='0.0'%20inkscape:pageshadow='2'%20inkscape:zoom='7.6035613'%20inkscape:cx='35.378159'%20inkscape:cy='18.017873'%20inkscape:document-units='px'%20inkscape:current-layer='layer1'%20showgrid='false'%20fit-margin-top='0'%20fit-margin-left='0'%20fit-margin-right='0'%20fit-margin-bottom='0'%20inkscape:window-width='1620'%20inkscape:window-height='2786'%20inkscape:window-x='-11'%20inkscape:window-y='-11'%20inkscape:window-maximized='1'%20inkscape:pagecheckerboard='0'%20units='px'%20height='40px'%20/%3e%3cmetadata%20id='metadata7800'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cg%20inkscape:label='Calque%201'%20inkscape:groupmode='layer'%20id='layer1'%20transform='translate(-222.57143,-232.07648)'%3e%3cpath%20style='fill:none;stroke:%23000000;stroke-width:7.80938;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1'%20d='M%20235.17991,248.95148%20H%20381.96294'%20id='path2564'%20sodipodi:nodetypes='cc'%20/%3e%3c/g%3e%3c/svg%3e\"","import type Figure from '../Figure'\r\n\r\nimport dashed from '../assets/svg/dashed.svg'\r\nimport noDashed from '../assets/svg/noDashed.svg'\r\n\r\nexport default function addDashedChoice (figure: Figure): HTMLDivElement {\r\n  const div = document.createElement('div')\r\n  div.style.display = 'flex'\r\n  div.classList.add('apiGeom-dashed-choice')\r\n  for (const choice of ['noDashed', 'dashed']) {\r\n    const img = document.createElement('img')\r\n    img.src = choice === 'noDashed' ? noDashed : dashed\r\n    img.title = choice === 'noDashed' ? 'Trait plein' : 'Pointillés'\r\n    img.style.width = '30px'\r\n    // img.style.height = '30px'\r\n    img.style.margin = '10px'\r\n    img.style.marginLeft = '4px'\r\n    img.style.marginTop = '30px'\r\n    img.style.cursor = 'pointer'\r\n    // img.style.borderRadius = '5px'\r\n    // img.style.border = '1px solid black'\r\n    img.style.padding = '2px'\r\n    img.addEventListener('click', () => {\r\n      figure.options.isDashed = choice === 'dashed'\r\n      showSelectedStyle(figure)\r\n    })\r\n    img.id = choice\r\n    div.appendChild(img)\r\n  }\r\n  setTimeout(() => { showSelectedStyle(figure) }, 100)\r\n  return div\r\n}\r\n\r\nfunction showSelectedStyle (figure: Figure): void {\r\n  const dashed = document.querySelectorAll('.apiGeom-dashed-choice img#dashed')\r\n  const noDashed = document.querySelectorAll('.apiGeom-dashed-choice img#noDashed')\r\n  if (figure.options.isDashed) {\r\n    for (const element of Array.from(noDashed)) {\r\n      const image = element as HTMLImageElement\r\n      image.style.boxShadow = ''\r\n      image.style.transform = ''\r\n    }\r\n    for (const element of Array.from(dashed)) {\r\n      const image = element as HTMLImageElement\r\n      image.style.boxShadow = '0px 0px 10px 0px rgba(0,0,0,0.75)'\r\n      image.style.transform = 'scale(1.2) translate(1px, 1px'\r\n    }\r\n  } else {\r\n    for (const element of Array.from(dashed)) {\r\n      const image = element as HTMLImageElement\r\n      image.style.boxShadow = ''\r\n      image.style.transform = ''\r\n    }\r\n    for (const element of Array.from(noDashed)) {\r\n      const image = element as HTMLImageElement\r\n      image.style.boxShadow = '0px 0px 10px 0px rgba(0,0,0,0.75)'\r\n      image.style.transform = 'scale(1.2) translate(1px, 1px'\r\n    }\r\n  }\r\n}\r\n\r\nexport { showSelectedStyle }\r\n","import type Figure from '../Figure'\r\n\r\nexport default function addThicknessChoice (figure: Figure): HTMLDivElement {\r\n  const div = document.createElement('div')\r\n  div.style.marginTop = '30px'\r\n  div.style.fontWeight = 'bold'\r\n  const title = document.createElement('div')\r\n  title.style.marginBottom = '10px'\r\n  title.textContent = `Épaisseur : ${figure.options.thickness}`\r\n  const range = document.createElement('input')\r\n  range.type = 'range'\r\n  range.value = `${figure.options.thickness}`\r\n  range.min = '1'\r\n  range.max = '4'\r\n  div.appendChild(title)\r\n  div.appendChild(range)\r\n  range.addEventListener('input', () => {\r\n    figure.options.thickness = Number(range.value)\r\n    title.textContent = `Épaisseur : ${figure.options.thickness}`\r\n  })\r\n  return div\r\n}\r\n","import type Figure from '../Figure'\r\n\r\nimport { type availableButtons } from './availableButtons'\r\n\r\nexport default function setToolbar (figure: Figure, { nbCols, position = 'left', showStyles, tools = defaultTools }: { nbCols?: number, position?: 'left' | 'top', showStyles?: boolean, tools?: availableButtons[] }): void {\r\n  figure.divButtons.innerHTML = ''\r\n  if (position === 'left') {\r\n    if (showStyles === undefined) showStyles = true\r\n    if (nbCols === undefined) nbCols = 4\r\n    figure.divButtons.style.display = 'grid'\r\n    if (window.matchMedia('(min-width: 768px)').matches) {\r\n      figure.container.style.gridTemplateColumns = '230px 1fr'\r\n    } else {\r\n      figure.container.style.gridTemplateColumns = '50px 1fr'\r\n    } figure.container.style.display = 'grid'\r\n    if (window.matchMedia('(min-width: 768px)').matches) {\r\n      figure.divButtons.style.gridTemplateColumns = `repeat(${nbCols}, auto)`\r\n    } else {\r\n      figure.divButtons.style.gridTemplateColumns = 'auto'\r\n    }\r\n    figure.divButtons.style.gridAutoRows = 'min-content'\r\n    figure.divButtons.style.justifyContent = 'start'\r\n  }\r\n  if (position === 'top') {\r\n    if (showStyles === undefined) showStyles = false\r\n    if (nbCols === undefined) nbCols = 8\r\n    figure.container.style.display = 'block'\r\n    figure.divButtons.style.display = 'grid'\r\n    figure.divButtons.style.gridTemplateColumns = `repeat(${nbCols}, auto)`\r\n    figure.divButtons.style.gridAutoRows = 'min-content'\r\n    if (tools.length < 6) {\r\n      figure.divButtons.style.justifyContent = 'start'\r\n    } else {\r\n      figure.divButtons.style.justifyContent = 'center'\r\n    }\r\n  }\r\n  if (showStyles === false) {\r\n    const index = tools.indexOf('SET_OPTIONS')\r\n    if (index > -1) {\r\n      tools.splice(index, 1)\r\n    }\r\n  }\r\n  const imgs = figure.addButtons(tools.join(' '))\r\n  figure.divButtons.append(...imgs)\r\n  imgs.forEach(img => figure.divButtons.appendChild(img))\r\n  if (showStyles === true) {\r\n    const divStyles = document.createElement('div')\r\n    divStyles.style.gridColumn = '1 / -1'\r\n    figure.divButtons.appendChild(divStyles)\r\n    divStyles.appendChild(figure.addColorPalette(['black', 'blue', 'red']))\r\n    divStyles.appendChild(figure.addColorPalette(['green', 'orange', 'lightgray']))\r\n    divStyles.appendChild(figure.addDashedChoice())\r\n    divStyles.appendChild(figure.addThicknessChoice())\r\n  }\r\n}\r\n\r\nconst defaultTools = ['SAVE', 'OPEN', 'UNDO', 'REDO', 'DRAG', 'DOWNLOAD_LATEX_SVG', 'HIDE', 'REMOVE', 'POINT', 'POINT_ON', 'POINT_INTERSECTION', 'MIDDLE', 'SEGMENT', 'LINE', 'RAY', 'POLYGON', 'LINE_PARALLEL', 'LINE_PERPENDICULAR', 'PERPENDICULAR_BISECTOR', 'BISECTOR_BY_POINTS', 'CIRCLE_CENTER_POINT', 'CIRCLE_RADIUS', 'REFLECTION_OVER_LINE', 'REFLECTION', 'ROTATE', 'TRANSLATION', 'DILATE', 'VECTOR', 'GRID', 'SET_OPTIONS', 'FILL', 'NAME_POINT', 'MOVE_LABEL', 'DESCRIPTION', 'SHAKE'] as availableButtons[]\r\n","import renderMathInElement from 'katex/dist/contrib/auto-render.js'\r\nimport 'katex/dist/katex.min.css'\r\n\r\nimport type DynamicNumber from './dynamicNumbers/DynamicNumber'\r\nimport type { eventName, eventOptions } from './uiMachine'\r\nimport type { availableButtons } from './userInterface/availableButtons'\r\n\r\nimport { loadJson } from './actions/loadJson'\r\nimport checkAngle from './check/checkAngle'\r\nimport checkCoords from './check/checkCoords'\r\nimport checkDistance from './check/checkDistance'\r\nimport checkParallel from './check/checkParallel'\r\nimport checkSameDistance from './check/checkSameDistance'\r\nimport checkVector from './check/checkVector'\r\nimport shake from './check/shake'\r\nimport Angle from './dynamicNumbers/Angle'\r\nimport Distance from './dynamicNumbers/Distance'\r\nimport DynamicCalcul from './dynamicNumbers/DynamicCalcul'\r\nimport DynamicX from './dynamicNumbers/DynamicX'\r\nimport DynamicY from './dynamicNumbers/DynamicY'\r\nimport Graph from './elements/calculus/Graph'\r\nimport Graph2 from './elements/calculus/Graph2'\r\nimport defaultOptions, { defaultButtonsWidth, defaultDivUserMessageFontSize, defaultDivUserMessageHeight, defaultDragAllDelta, defaultFooterHeight, defaultHistorySize, defaultMinHeight, defaultMinWidth } from './elements/defaultValues'\r\nimport Element2D from './elements/Element2D'\r\nimport Grid from './elements/grid/Grid'\r\nimport Arc from './elements/lines/Arc'\r\nimport ArcBy3PointsAndRadius from './elements/lines/ArcBy3PointsAndRadius'\r\nimport ArcByCenterRadiusAndAngles from './elements/lines/ArcByCenterRadiusAndAngles'\r\nimport BisectorByPoints from './elements/lines/BisectorByPoints'\r\nimport Circle from './elements/lines/Circle'\r\nimport CircleCenterDynamicRadius from './elements/lines/CircleCenterDyamicRadius'\r\nimport CircleCenterPoint from './elements/lines/CircleCenterPoint'\r\nimport Line from './elements/lines/Line'\r\nimport LineByPointVector from './elements/lines/LineByPointVector'\r\nimport LineParallel from './elements/lines/LineParallel'\r\nimport LinePerpendicular from './elements/lines/LinePerpendicular'\r\nimport PerpendicularBisector from './elements/lines/PerpendicularBisector'\r\nimport PerpendicularBisectorByPoints from './elements/lines/PerpendicularBisectorByPoints'\r\nimport Polygon from './elements/lines/Polyligon'\r\nimport Polyline from './elements/lines/Polyline'\r\nimport Ray from './elements/lines/Ray'\r\nimport Segment from './elements/lines/Segment'\r\nimport Barycenter from './elements/points/Barycenter'\r\nimport Middle from './elements/points/Middle'\r\nimport PointOnGraph from './elements/points/PoinrOnGraph'\r\nimport Point from './elements/points/Point'\r\nimport PointByDilate from './elements/points/PointByDilate'\r\nimport PointByDynamicDilate from './elements/points/PointByDynamicDilate'\r\nimport PointByDynamicRotation from './elements/points/PointByDynamicRotation'\r\nimport PointByProjection from './elements/points/PointByProjection'\r\nimport PointByProjectionOnAxisX from './elements/points/PointByProjectionOnAxisX'\r\nimport PointByProjectionOnAxisY from './elements/points/PointByProjectionOnAxisY'\r\nimport PointByReflect from './elements/points/PointByReflect'\r\nimport PointByReflectOverLine from './elements/points/PointByReflectOverLine'\r\nimport PointByRotation from './elements/points/PointByRotation'\r\nimport PointBySimilarity from './elements/points/PointBySimilarity'\r\nimport PointByTranslation from './elements/points/PointByTranslation'\r\nimport PointByTranslationByPoints from './elements/points/PointByTranslationByPoints'\r\nimport PointIntersectionCC from './elements/points/PointIntersectionCC'\r\nimport PointIntersectionLC from './elements/points/PointIntersectionLC'\r\nimport PointIntersectionLL from './elements/points/PointIntersectionLL'\r\nimport PointOnCircle from './elements/points/PointOnCircle'\r\nimport PointOnLine from './elements/points/PointOnLine'\r\nimport PointOnLineAtDistance from './elements/points/PointOnLineAtDistance'\r\nimport PointsIntersectionCC from './elements/points/PointsIntersectionCC'\r\nimport PointsIntersectionLC from './elements/points/PointsIntersectionLC'\r\nimport MarkSegment from './elements/text/MarkSegment'\r\nimport TextByPoint from './elements/text/TextByPoint'\r\nimport TextByPosition from './elements/text/TextByPosition'\r\nimport TextDynamicByPosition from './elements/text/TextDynamicByPosition'\r\nimport ElementByReflectOverLine from './elements/transformations/ElementByReflectOverLine'\r\nimport ElementByTranslationByPoints from './elements/transformations/ElementByTranslationByPoints'\r\nimport Vector from './elements/vector/Vector'\r\nimport VectorByPoints from './elements/vector/VectorByPoints'\r\nimport VectorPerpendicular from './elements/vector/VectorPerpendicular'\r\nimport handleHover from './pointerActions/handleHover'\r\nimport handlePointerAction from './pointerActions/handlePointerAction'\r\nimport addButtons from './userInterface/addButtons'\r\nimport addColorPalette from './userInterface/addColorPalette'\r\nimport addDashedChoice from './userInterface/addDashedChoice'\r\nimport addThicknessChoice from './userInterface/addThicknessChoice'\r\nimport setToolbar from './userInterface/setToolbar'\r\n\r\n/**\r\n * Créé un espace de travail dans lequel on peut\r\n * générer des figures de géométrie statique ou dynamique\r\n */\r\nclass Figure {\r\n  /** Boutons qui interagissent avec la figure */\r\n  buttons: Map<string, HTMLDivElement> = new Map<string, HTMLDivElement>()\r\n  /** Element parent divUserMessage, du svg et des différents div pours les texte */\r\n  container!: HTMLElement\r\n  /** Etat de la machine pour l'interface graphique */\r\n  currentState = ''\r\n  /** div dans lequel sont placés tous les boutons de l'interface graphique  */\r\n  divButtons: HTMLDivElement\r\n  /** div dans lequel s'affichera le svg et les div des textes en surimpression du svg */\r\n  divFigure: HTMLDivElement\r\n  /** parent de divFigure et de divUserMessage */\r\n  divFigureAndUserMessage: HTMLDivElement\r\n  /** div dans lequel sera écrit la dernière sauvegarde automatique au format JSON */\r\n  divSave: HTMLDivElement | null\r\n  /** div dans lequel on affiche l'aide pour l'action en cours */\r\n  divUserMessage: HTMLDivElement\r\n  /** Si l'option snapGrid est active, cela détermine la distance horizontale entre deux lieux de dépot du point */\r\n  dx: number\r\n  /** Si l'option snapGrid est active, cela détermine la distance verticale entre deux lieux de dépot du point */\r\n  dy: number\r\n  /** La clé est par défaut element0, element1, element2... ou le nom de l'élément et la valeur est l'élément géométrique (segment, point, polygone...) */\r\n  elements: Map<string, (DynamicNumber | Element2D)>\r\n  /** Filtre utilisé sur les éléments pour savoir ceux qui réagissent au clic */\r\n  filter: (e: Element2D) => boolean\r\n  /** Quadrillage de la figure */\r\n  grid?: Grid\r\n  /** Hauteur en pixels du SVG */\r\n  height: number\r\n  /** Points à proximité du pointeur utilisés pour proposer un déplacement au lieu d'une création de point */\r\n  hoverPoints: Set<Element2D>\r\n  /** Point actuellement en train d'être déplacé par la souris */\r\n  inDrag: Point | TextByPosition | undefined\r\n  /** Figure dynamique ou statique */\r\n  isDynamic: boolean\r\n  /** Eventuel div dans lequel on attend une réponse de l'utilisateur */\r\n  modal?: HTMLDivElement\r\n\r\n  /** Options courante pour tous les tracés */\r\n  options: {\r\n    animationStepInterval: number\r\n    automaticUserMessage: boolean\r\n    borderSize: number\r\n    color: string\r\n    displayGrid: boolean\r\n    fillColor: string\r\n    fillOpacity: number\r\n    fontSize: string\r\n    isDashed: boolean\r\n    labelAutomaticBeginsWith?: string\r\n    labelDxInPixels: number\r\n    labelDyInPixels: number\r\n    latexHeight: number\r\n    latexWidth: number\r\n    limitNumberOfElement: Map<string, number>\r\n    moveTextGrid: number\r\n    pointDescriptionWithCoordinates: boolean\r\n    pointSize: number\r\n    thickness: number\r\n    thicknessForPoint: number\r\n    tmpColor: string\r\n    tmpFillColor: string\r\n    tmpFillOpacity: number\r\n    tmpIsDashed: boolean\r\n    tmpThickness: number\r\n  }\r\n\r\n  /** Nombre de pixels poun une unité (soit 1 cm en sortie papier) par défaut à 30 */\r\n  pixelsPerUnit: number\r\n  /** Point virtuel qui suit le pointer */\r\n  pointer: Point\r\n  /** Abscisse du pointeur dans le repère de la figure */\r\n  pointerX: null | number\r\n  /** Ordonnée du pointeur dans le repère de la figure */\r\n  pointerY: null | number\r\n  /** div (ou p ou svg…) dans lequel sera inséré le SVG et les div avec le texte mathématiques */\r\n  /** Échelle globale */\r\n  scale: number\r\n  /** Tableau d'éléments sélectionnés (utilisé dans l'interface graphique pour faire une construction à plusieurs entrées) */\r\n  selectedElements: Element2D[]\r\n  /** Si l'option snapGrid est active, le point sera aimanté */\r\n  snapGrid: boolean\r\n  /** Un tableau des différentes sauvegardes automatiques utilisé pour les redo */\r\n  stackRedo: string[]\r\n  /** Un tableau des différentes sauvegardes automatiques utilisé pour les undo */\r\n  stackUndo: string[]\r\n  /** SVG de la figure géométrique */\r\n  svg: SVGElement\r\n  /** Élément temporaire (utilisé dans l'interface graphique pour donner un aperçu de le construction en cours) */\r\n  tmpElements: Element2D[]\r\n  /** Machine qui gère l'état de l'interface utilisateur */\r\n  ui!: { send: (e: eventName, opt?: eventOptions) => void }\r\n  /** Largeur en pixels du SVG */\r\n  width: number\r\n  /** Abscisse du coin en bas à droite */\r\n  xMax: number\r\n  /** Abscisse du coin en bas à gauche */\r\n  xMin: number\r\n  /** Échelle horizontale */\r\n  xScale: number\r\n  /** Ordonnée du point en haut à droite */\r\n  yMax: number\r\n  /** Ordonnée du coin en bas à gauche */\r\n  yMin: number\r\n  /** Échelle verticale */\r\n  yScale: number\r\n\r\n  /**\r\n   * @param __namedParameters width - Largeur en pixels du SVG\r\n   * @param __namedParameters height - Hauteur en pixels du SVG\r\n   * @param pixelsPerUnit - Nombres de pixels pour une unité de la figure, par défaut 30 pixels (l'unité sera le cm en sortie LaTeX)\r\n   * @param xMin - Abscisse du coin en bas à gauche\r\n   * @param yMin - Ordonnée du coin en bas à gauche\r\n   * @param isDynamic - Figure dynamique ou statique\r\n   * @param dx - Si l'option snapGrid est activée, cela correspond à la distance horizontale du quadrillage sur lequel les points peuvent être déposés\r\n   * @param dy - Si l'option snapGrid est activée, cela correspond à la distance verticale du quadrillage sur lequel les points peuvent être déposés\r\n   */\r\n  constructor ({ border = false, dx = 1, dy = 1, height = document.documentElement.clientHeight - defaultFooterHeight, isDynamic = true, pixelsPerUnit = 30, scale = 1, snapGrid = false, width = document.documentElement.clientWidth - defaultButtonsWidth, xMin = -10, xScale = 1, yMin = -6, yScale = 1 }: { border?: boolean, dx?: number, dy?: number, height?: number, isDynamic?: boolean, pixelsPerUnit?: number, scale?: number, snapGrid?: boolean, width?: number, xMin?: number, xScale?: number, yMin?: number, yScale?: number } = {}) {\r\n    this.elements = new Map()\r\n    this.stackUndo = []\r\n    this.stackRedo = []\r\n    this.width = width\r\n    this.height = height\r\n    this.pixelsPerUnit = pixelsPerUnit\r\n    this.xMin = xMin\r\n    this.xMax = xMin + width / pixelsPerUnit / scale / xScale\r\n    this.yMin = yMin\r\n    this.yMax = yMin + height / pixelsPerUnit / scale / yScale\r\n    this.dx = dx\r\n    this.dy = dy\r\n    this.hoverPoints = new Set()\r\n    this.xScale = xScale\r\n    this.yScale = yScale\r\n    this.scale = scale\r\n    this.isDynamic = isDynamic\r\n    this.pointerX = null\r\n    this.pointerY = null\r\n    this.selectedElements = []\r\n    this.tmpElements = []\r\n    this.options = { ...defaultOptions }\r\n    this.snapGrid = snapGrid\r\n\r\n    this.container = document.createElement('div')\r\n    this.container.id = 'containerApigeom'\r\n    this.divFigureAndUserMessage = document.createElement('div')\r\n    this.divFigureAndUserMessage.id = 'divFigureAndUserMessage'\r\n    this.divFigure = document.createElement('div')\r\n    this.divFigure.id = 'divFigure'\r\n    this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\r\n    this.divSave = null\r\n    this.divButtons = document.createElement('div')\r\n    this.divButtons.id = 'divButtons'\r\n    this.divUserMessage = document.createElement('div')\r\n    this.divUserMessage.id = 'divUserMessage'\r\n    this.divUserMessage.style.fontSize = defaultDivUserMessageFontSize\r\n    this.divUserMessage.style.height = defaultDivUserMessageHeight\r\n    this.divUserMessage.style.width = '90%'\r\n    this.divUserMessage.style.textAlign = 'right'\r\n    this.divUserMessage.style.right = '0'\r\n    this.divUserMessage.style.color = 'blue'\r\n    this.divUserMessage.style.margin = '3px'\r\n    this.divUserMessage.style.padding = '0.5em'\r\n    this.divUserMessage.style.fontSize = '1.5em'\r\n\r\n    this.container.appendChild(this.divButtons)\r\n    this.container.appendChild(this.divFigureAndUserMessage)\r\n    this.divFigureAndUserMessage.appendChild(this.divUserMessage)\r\n    this.divFigureAndUserMessage.appendChild(this.divFigure)\r\n    this.divFigure.appendChild(this.svg)\r\n    if (border) this.svg.style.border = 'solid'\r\n    // Pour éviter le scroll quand on manipule la figure sur un écran tactile\r\n    this.svg.style.touchAction = 'none'\r\n    this.clearHtml()\r\n    if (this.isDynamic) this.listenPointer()\r\n    this.pointer = new Point(this, { isChild: true, isFree: false, isVisible: false, shape: '', x: 0, y: 0 })\r\n    this.pointer.type = 'pointer'\r\n    this.filter = e => e instanceof Point && e.isFree\r\n    this.saveState()\r\n    // this.handleDragAll()\r\n    // Les boutons n'existe pas encore\r\n    setTimeout(() => { this.handleUndoRedoButtons() }, 100)\r\n  }\r\n\r\n  addButtons (buttons: string): HTMLImageElement[] {\r\n    return addButtons(buttons, this)\r\n  }\r\n\r\n  addColorPalette (colors: string[]): HTMLDivElement {\r\n    return addColorPalette(colors, this)\r\n  }\r\n\r\n  addDashedChoice (): HTMLDivElement {\r\n    return addDashedChoice(this)\r\n  }\r\n\r\n  addThicknessChoice (): HTMLDivElement {\r\n    return addThicknessChoice(this)\r\n  }\r\n\r\n  /** Ajuste la taille pour être la plus grande possible en tenant compte d'une barre d'outils sur le côté et un footer en dessous */\r\n  adjustSize (): void {\r\n    if (this.width < defaultMinWidth) this.width = defaultMinWidth\r\n    if (this.height < defaultMinHeight) this.height = defaultMinHeight\r\n    this.xMax = this.xMin + this.width / this.pixelsPerUnit / this.scale / this.xScale\r\n    this.yMax = this.yMin + this.height / this.pixelsPerUnit / this.scale / this.yScale\r\n    if (this.divFigure !== null && this.svg !== null) {\r\n      this.divFigure.style.width = this.width.toString() + 'px'\r\n      this.divFigure.style.height = this.height.toString() + 'px'\r\n      this.svg.setAttribute('width', (this.width).toString())\r\n      this.svg.setAttribute('height', (this.height).toString())\r\n      this.svg.setAttribute('viewBox', `${this.xToSx(this.xMin)} ${this.yToSy(this.yMax)} ${this.width} ${this.height}`)\r\n    }\r\n    for (const e of this.elements.values()) {\r\n      if (e instanceof Element2D) e.update()\r\n    }\r\n  }\r\n\r\n  /** Met à jour la taille de l'espace de travail en cas de changements sur la fenêtre du navigateur */\r\n  autoAdjustSize (): void {\r\n    window.addEventListener('resize', () => {\r\n      getMaxSize()\r\n      this.adjustSize()\r\n    })\r\n    window.addEventListener('orientationchange', () => {\r\n      getMaxSize()\r\n      this.adjustSize()\r\n    })\r\n    window.addEventListener('fullscreenchange', () => {\r\n      getMaxSize()\r\n      this.adjustSize()\r\n    })\r\n\r\n    const getMaxSize = (): void => {\r\n      this.width = document.documentElement.clientWidth - defaultButtonsWidth\r\n      this.height = document.documentElement.clientHeight - defaultFooterHeight\r\n    }\r\n  }\r\n\r\n  checkAngle ({ angle, label1, label2, label3 }: { angle: number, label1: string, label2: string, label3: string }): { isValid: boolean, message: string } {\r\n    return checkAngle({ angle, figure: this, label1, label2, label3 })\r\n  }\r\n\r\n  checkCoords ({ checkOnlyAbscissa, label, x, y }: { checkOnlyAbscissa?: boolean, label: string, x: number, y: number }): { isValid: boolean, message: string, points: Point[] } {\r\n    return checkCoords({ checkOnlyAbscissa, figure: this, label, x, y })\r\n  }\r\n\r\n  checkDistance ({ distance, label1, label2 }: { distance: number, label1: string, label2: string }): { isValid: boolean, message: string } {\r\n    return checkDistance({ distance, figure: this, label1, label2 })\r\n  }\r\n\r\n  checkParallel ({ label1, label2 }: { label1: string, label2: string }): { isValid: boolean, message: string } {\r\n    return checkParallel({ figure: this, label1, label2 })\r\n  }\r\n\r\n  checkSameDistance ({ label1, label2 }: { label1: string, label2: string }): { isValid: boolean, message: string } {\r\n    return checkSameDistance({ figure: this, label1, label2 })\r\n  }\r\n\r\n  checkVector ({ labelOrigin, labelPoint2, x, xOrigin, y, yOrigin }: { labelOrigin?: string, labelPoint2?: string, x: number, xOrigin?: number, y: number, yOrigin?: number }): { isValid: boolean, message: string, vectors: VectorByPoints[] } {\r\n    return checkVector({ figure: this, labelOrigin, labelPoint2, x, xOrigin, y, yOrigin })\r\n  }\r\n\r\n  clearHtml (): void {\r\n    this.svg.innerHTML = ''\r\n    const style = document.createElementNS('http://www.w3.org/2000/svg', 'style')\r\n    this.svg.appendChild(style)\r\n    style.type = 'text/css'\r\n    style.innerHTML = '.onlyOver:hover { opacity: 1; }'\r\n  }\r\n\r\n  create<T extends keyof typeof classes>(\r\n    typeStr: T,\r\n    // Les constructeurs sont de type [figure, options], donc on récupère le type des deuxièmes arguments des constructeurs\r\n    options?: ConstructorParameters<typeof classes[T]>[1]\r\n  ): InstanceType<typeof classes[T]> {\r\n    // @ts-expect-error Typage très complexe\r\n    const element = new classes[typeStr](this, { ...options })\r\n    element.draw()\r\n    // @ts-expect-error Typage très complexe\r\n    return element\r\n  }\r\n\r\n  getContainer (): HTMLElement | null {\r\n    return this.container\r\n  }\r\n\r\n  getJsonWithHistory (): string {\r\n    const save = { apiGeomVersion: APP_VERSION, ...Object.fromEntries(this.elements), history: this.stackUndo }\r\n    return JSON.stringify(save, filter, 2)\r\n  }\r\n\r\n  /** Récupère les coordonnées du pointeur dans le repère de la figure */\r\n  getPointerCoord (event: PointerEvent): [number, number] {\r\n    event.preventDefault()\r\n    const rect = this.svg.getBoundingClientRect()\r\n    const pointerX = (event.clientX - rect.x) / this.pixelsPerUnit / this.xScale / this.scale + this.xMin\r\n    const pointerY = -(event.clientY - rect.y) / this.pixelsPerUnit / this.yScale / this.scale + this.yMax\r\n    return [pointerX, pointerY]\r\n  }\r\n\r\n  /** Renvoie un string avec le code HTML et SVG de la figure */\r\n  getStaticHtml (): string {\r\n    const currentIsDynamic = this.isDynamic\r\n    this.isDynamic = false\r\n    let result = ''\r\n    if (this.container.childElementCount < 5) {\r\n      const newContainer = document.createElement('div')\r\n      this.setContainer(newContainer)\r\n      result = this.divFigure.outerHTML\r\n    } else {\r\n      result = this.divFigure.outerHTML\r\n      this.isDynamic = currentIsDynamic\r\n    }\r\n    return result\r\n  }\r\n\r\n  /** Déplace le repère de la figure à l'aide des flèches */\r\n  handleDragAll (): void {\r\n    window.addEventListener('keydown', (e) => {\r\n      const direction = { x: 0, y: 0 }\r\n      const step = defaultDragAllDelta\r\n      if (e.key === 'ArrowLeft') {\r\n        direction.x = step\r\n      }\r\n      if (e.key === 'ArrowRight') {\r\n        direction.x = -step\r\n      }\r\n      if (e.key === 'ArrowUp') {\r\n        direction.y = -step\r\n      }\r\n      if (e.key === 'ArrowDown') {\r\n        direction.y = +step\r\n      }\r\n      // Shift + flèche => 10x plus rapide\r\n      if (e.shiftKey) {\r\n        direction.x *= 10\r\n        direction.y *= 10\r\n      }\r\n      if (!isModalOpen() && (direction.x !== 0 || direction.y !== 0)) {\r\n        e.preventDefault()\r\n        this.xMin += direction.x\r\n        this.yMax += direction.y\r\n        this.adjustSize()\r\n      }\r\n    })\r\n  }\r\n\r\n  handleUndoRedoButtons (): void {\r\n    const btnRedo = this.buttons.get('REDO')\r\n    const btnUndo = this.buttons.get('UNDO')\r\n    if (btnRedo !== undefined) {\r\n      btnRedo.style.opacity = (this.stackRedo.length === 0) ? '0.5' : '1'\r\n    }\r\n    if (btnUndo !== undefined) {\r\n      btnUndo.style.opacity = (this.stackUndo.length < 2) ? '0.5' : '1'\r\n    }\r\n  }\r\n\r\n  /** Génère le code LaTeX de la figure */\r\n  latex ({ xMax = this.xMin + this.options.latexWidth, xMin = this.xMin, yMax = this.yMax, yMin = this.yMax - this.options.latexHeight }: { xMax?: number, xMin?: number, yMax?: number, yMin?: number } = {}): string {\r\n    let latex = '\\\\documentclass[french,a4paper]{article}'\r\n    latex += '\\n\\\\usepackage[francais]{babel}'\r\n    latex += '\\n\\\\usepackage[utf8]{inputenc}'\r\n    latex += '\\n\\\\usepackage{tkz-base}'\r\n    latex += '\\n\\\\begin{document}'\r\n    latex += this.tikz({ xMax, xMin, yMax, yMin })\r\n    latex += '\\n\\\\end{document}'\r\n    // ToFix Il peut y avoir un problème si un nombre est en écriture scientifique\r\n    latex = latex.replace(/\\d+\\.\\d+/g, (number: string) => (Math.round(1000000 * parseFloat(number)) / 1000000).toString())\r\n    return latex\r\n  }\r\n\r\n  /** Démarre les listenners sur la figure lorsqu'elle est dynamique */\r\n  listenPointer (): void {\r\n    // On créé des listenners pour envoyer les information à la machine à états this.ui\r\n    this.svg.addEventListener('pointerdown', (event: PointerEvent) => {\r\n      if (!this.isDynamic) return\r\n      handlePointerAction(this, event)\r\n    })\r\n\r\n    const stopDrag = (): void => {\r\n      if (!this.isDynamic) return\r\n      if (this.inDrag !== undefined) {\r\n        this.inDrag = undefined\r\n        if (this.divFigure !== null) this.divFigure.style.cursor = 'auto'\r\n        this.saveState()\r\n      }\r\n    }\r\n    this.svg.addEventListener('pointerup', stopDrag)\r\n    this.svg.addEventListener('pointerleave', stopDrag)\r\n\r\n    this.svg.addEventListener('pointermove', (event) => {\r\n      if (!this.isDynamic) return\r\n      const [pointerX, pointerY] = this.getPointerCoord(event)\r\n      this.pointer.moveTo(pointerX, pointerY)\r\n      handleHover(this, pointerX, pointerY)\r\n      if (this.inDrag === undefined) return\r\n      this.inDrag.moveTo(pointerX, pointerY)\r\n    })\r\n  }\r\n\r\n  /** Efface la figure actuelle et charge une nouvelle figure à partir du code généré par this.json  */\r\n  loadJson (json: object, eraseHistory?: boolean): void {\r\n    loadJson(this, json, eraseHistory)\r\n  }\r\n\r\n  /** Reharge la figure stockée redoStack   */\r\n  redo (): void {\r\n    const lastRedo = this.stackRedo.at(-1)\r\n    if (lastRedo !== undefined) {\r\n      this.stackUndo.push(lastRedo)\r\n      this.stackRedo.pop()\r\n      this.loadJson(JSON.parse(lastRedo))\r\n      this.handleUndoRedoButtons()\r\n    }\r\n  }\r\n\r\n  restart (): void {\r\n    if (this.stackUndo.length === 0) return\r\n    while (this.stackUndo.length > 1) {\r\n      this.undo()\r\n    }\r\n  }\r\n\r\n  /**  - Sauvegarde la figure\r\n   *   - Met à jour l'historique et l'inscrit dans le div this.divSave\r\n   *   - Réinitialise les éléments temporaires */\r\n  saveState (): void {\r\n    const save = this.json\r\n    // Sauvegarde dans le localStorage\r\n    localStorage.setItem('apiGeom', save)\r\n    if (this.divSave !== null) {\r\n      this.divSave.textContent = save\r\n    }\r\n    this.stackUndo.push(save)\r\n    this.stackRedo = []\r\n    if (this.stackUndo.length > defaultHistorySize) this.stackUndo = this.stackUndo.slice(-defaultHistorySize)\r\n    this.handleUndoRedoButtons()\r\n    this.tmpElements.forEach(e => { e.remove() })\r\n    this.tmpElements = []\r\n    this.selectedElements = []\r\n  }\r\n\r\n  setContainer (parentContainer: HTMLElement): void {\r\n    if (!(parentContainer instanceof HTMLElement)) throw Error('grandParentContainer doit être un HTMLElement')\r\n    parentContainer.appendChild(this.container)\r\n    this.divFigure.style.position = 'relative'\r\n    // this.container.style.overflow = 'hidden'\r\n    this.divFigure.style.display = 'inline-block'\r\n    this.divFigure.style.margin = '0'\r\n    this.divFigure.style.padding = '0'\r\n    this.divFigure.style.boxSizing = 'border-box'\r\n    this.divFigure.style.border = 'none'\r\n    // Si this.divButtons est vide\r\n    if (this.divButtons.childElementCount === 0) {\r\n      this.setToolbar()\r\n    }\r\n    this.adjustSize()\r\n  }\r\n\r\n  setToolbar ({ nbCols, position = 'left', showStyles, tools }: { nbCols?: number, position?: 'left' | 'top', showStyles?: boolean, tools?: availableButtons[] } = {}): void {\r\n    setToolbar(this, { nbCols, position, showStyles, tools })\r\n  }\r\n\r\n  async shake ({ delta = 3, repeat = 5, time = 1 }: { delta?: number, repeat?: number, time?: number } = {}): Promise<void> {\r\n    await shake({ delta, figure: this, repeat, time })\r\n  }\r\n\r\n  /** Abscisse du SVG converti dans nos coordonnées */\r\n  sxTox (x: number): number {\r\n    return x / this.pixelsPerUnit / this.xScale / this.scale\r\n  }\r\n\r\n  /** Abscisse du SVG converti dans nos coordonnées */\r\n  syToy (y: number): number {\r\n    return -y / this.pixelsPerUnit / this.yScale / this.scale\r\n  }\r\n\r\n  tempCreate (typeStr: string, options?: ConstructorParameters<typeof classes[keyof typeof classes]>[1]): Element2D {\r\n    // @ts-expect-error Typage très complexe\r\n    const element = this.create(typeStr, { isChild: true, isSelectable: false, ...options }) as Element2D\r\n    element.color = this.options.tmpColor\r\n    element.thickness = this.options.tmpThickness\r\n    if ('isDashed' in element && !(element instanceof Point)) element.isDashed = this.options.tmpIsDashed\r\n    if ('fillColor' in element) element.fillColor = this.options.tmpFillColor\r\n    if ('fillOpacity' in element) element.fillOpacity = this.options.tmpFillOpacity\r\n    this.tmpElements.push(element)\r\n    return element\r\n  }\r\n\r\n  /** Génère le code TikZ de la figure */\r\n  tikz ({ xMax = this.xMin + this.options.latexWidth, xMin = this.xMin, yMax = this.yMax, yMin = this.yMax - this.options.latexHeight }: { xMax?: number, xMin?: number, yMax?: number, yMin?: number } = {}): string {\r\n    let tikz = '\\n\\\\begin{tikzpicture}'\r\n    tikz += `\\n\\\\clip(${xMin}, ${yMin}) rectangle (${xMax}, ${yMax});`\r\n    for (const element of this.elements.values()) {\r\n      if (element instanceof Element2D &&\r\n        element.latex !== undefined &&\r\n        element.latex !== '' &&\r\n        element.isVisible &&\r\n        element.color !== '') {\r\n        tikz += '\\n' + element.latex\r\n      }\r\n    }\r\n    tikz += '\\n\\\\end{tikzpicture}'\r\n    // ToFix Il peut y avoir un problème si un nombre est en écriture scientifique\r\n    tikz = tikz.replace(/\\d+\\.\\d+/g, (number: string) => (Math.round(1000000 * parseFloat(number)) / 1000000).toString())\r\n    return tikz\r\n  }\r\n\r\n  /** Charge la figure stockée dans stackUndo */\r\n  undo (): void {\r\n    const lastUndo = this.stackUndo.at(-2)\r\n    if (lastUndo !== undefined) {\r\n      this.stackRedo.push(this.stackUndo.at(-1) as string)\r\n      this.stackUndo.pop()\r\n      this.loadJson(JSON.parse(lastUndo))\r\n      this.handleUndoRedoButtons()\r\n    }\r\n  }\r\n\r\n  async wait (milliseconds = 1500): Promise<void> {\r\n    await new Promise(resolve => {\r\n      setTimeout(resolve, milliseconds)\r\n    })\r\n  }\r\n\r\n  /** Abscisse dans nos coordonnées converti en abscisse du SVG */\r\n  xToSx (x: number): number {\r\n    return x * this.pixelsPerUnit * this.xScale * this.scale\r\n  }\r\n\r\n  /** Abscisse dans nos coordonnées converti en abscisse du SVG */\r\n  yToSy (y: number): number {\r\n    return -y * this.pixelsPerUnit * this.yScale * this.scale\r\n  }\r\n\r\n  get htmlDescription (): HTMLUListElement {\r\n    const ul = document.createElement('ul')\r\n    ul.style.lineHeight = '2'\r\n    for (const element of this.elements.values()) {\r\n      if ('description' in element && !element.isChild) {\r\n        const li = document.createElement('li')\r\n        li.textContent = element.description\r\n        ul.appendChild(li)\r\n      }\r\n    }\r\n    return ul\r\n  }\r\n\r\n  /** Génère le code JSON de la figure qui permettra de la recharger */\r\n  get json (): string {\r\n    // Le JSON est personnalisé avec la méthode toJSON() des éléments\r\n    const save = { apiGeomVersion: APP_VERSION, ...Object.fromEntries(this.elements) }\r\n    return JSON.stringify(save, filter, 2)\r\n  }\r\n\r\n  get userMessage (): string {\r\n    return this.divUserMessage.textContent ?? ''\r\n  }\r\n\r\n  set userMessage (message: string) {\r\n    this.divUserMessage.textContent = message\r\n    renderMathInElement(this.divUserMessage, {\r\n      delimiters: [\r\n        { display: true, left: '\\\\[', right: '\\\\]' },\r\n        { display: false, left: '$', right: '$' }\r\n      ],\r\n      errorColor: '#CC0000',\r\n      preProcess: (chaine: string) => chaine.replaceAll(String.fromCharCode(160), '\\\\,'),\r\n      strict: 'warn',\r\n      throwOnError: true,\r\n      trust: false\r\n    })\r\n  }\r\n}\r\n\r\nconst classes = {\r\n  Angle,\r\n  Arc,\r\n  ArcBy3PointsAndRadius,\r\n  ArcByCenterRadiusAndAngles,\r\n  Barycenter,\r\n  BisectorByPoints,\r\n  Circle,\r\n  CircleCenterDynamicRadius,\r\n  CircleCenterPoint,\r\n  Distance,\r\n  DynamicCalcul,\r\n  DynamicX,\r\n  DynamicY,\r\n  ElementByReflectOverLine,\r\n  ElementByTranslationByPoints,\r\n  Graph,\r\n  Graph2,\r\n  Grid,\r\n  Line,\r\n  LineByPointVector,\r\n  LineParallel,\r\n  LinePerpendicular,\r\n  MarkSegment,\r\n  Middle,\r\n  PerpendicularBisector,\r\n  PerpendicularBisectorByPoints,\r\n  Point,\r\n  PointByDilate,\r\n  PointByDynamicDilate,\r\n  PointByDynamicRotation,\r\n  PointByProjection,\r\n  PointByProjectionOnAxisX,\r\n  PointByProjectionOnAxisY,\r\n  PointByReflect,\r\n  PointByReflectOverLine,\r\n  PointByRotation,\r\n  PointBySimilarity,\r\n  PointByTranslation,\r\n  PointByTranslationByPoints,\r\n  PointIntersectionCC,\r\n  PointIntersectionLC,\r\n  PointIntersectionLL,\r\n  PointOnCircle,\r\n  PointOnGraph,\r\n  PointOnLine,\r\n  PointOnLineAtDistance,\r\n  PointsIntersectionCC,\r\n  PointsIntersectionLC,\r\n  Polygon,\r\n  Polyline,\r\n  Ray,\r\n  Segment,\r\n  TextByPoint,\r\n  TextByPosition,\r\n  TextDynamicByPosition,\r\n  Vector,\r\n  VectorByPoints,\r\n  VectorPerpendicular\r\n}\r\n\r\nexport default Figure\r\n\r\nfunction filter (key: string, value: Element2D): Element2D | undefined {\r\n  if (value?.isChild) {\r\n    return undefined\r\n  }\r\n  if (key === 'isChild') {\r\n    return undefined\r\n  }\r\n  return value\r\n}\r\n\r\nfunction isModalOpen (): boolean {\r\n  const dialogs = Array.from(document.querySelectorAll('dialog'))\r\n  return dialogs.some(modal => {\r\n    if (modal.open) {\r\n      return true\r\n    }\r\n    return false\r\n  })\r\n}\r\n","import renderMathInElement from 'katex/dist/contrib/auto-render.js'\r\n\r\nimport type Figure from '../Figure'\r\n\r\nexport function createDialoxBoxRadius (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.style.border = '1px solid black'\r\n  dialog.style.backgroundColor = 'white'\r\n  dialog.style.padding = '20px'\r\n  const label = document.createElement('label')\r\n  label.innerHTML = 'Rayon : '\r\n  const input = document.createElement('input')\r\n  input.type = 'text'\r\n  input.style.marginLeft = '10px'\r\n  const button = document.createElement('button')\r\n  button.innerHTML = 'Valider'\r\n  button.style.marginLeft = '10px'\r\n  dialog.appendChild(label)\r\n  dialog.appendChild(input)\r\n  dialog.appendChild(button)\r\n  document.body.appendChild(dialog)\r\n  dialog.addEventListener('close', () => {\r\n    if (figure.ui != null) {\r\n      figure.ui.send('RADIUS', { radius: input.value })\r\n    }\r\n  })\r\n  button.addEventListener('click', () => {\r\n    dialog.close()\r\n  })\r\n  input.addEventListener('keyup', e => {\r\n    if (e.key === 'Enter' || e.key === 'Escape') {\r\n      e.preventDefault()\r\n      dialog.close()\r\n    }\r\n  })\r\n  return dialog\r\n}\r\n\r\nexport function createDialoxBoxK (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.style.border = '1px solid black'\r\n  dialog.style.backgroundColor = 'white'\r\n  dialog.style.padding = '20px'\r\n  const label = document.createElement('label')\r\n  label.innerHTML = 'Coefficient de l\\'homothétie : '\r\n  const input = document.createElement('input')\r\n  input.type = 'number'\r\n  input.min = '-10'\r\n  input.max = '10'\r\n  input.value = '2'\r\n  input.style.marginLeft = '10px'\r\n  const button = document.createElement('button')\r\n  button.innerHTML = 'Valider'\r\n  button.style.marginLeft = '10px'\r\n  dialog.appendChild(label)\r\n  dialog.appendChild(input)\r\n  dialog.appendChild(button)\r\n  document.body.appendChild(dialog)\r\n  dialog.addEventListener('close', () => {\r\n    if (figure.ui != null) {\r\n      figure.ui.send('DILATE_COEF', { coefficient: Number(input.value) })\r\n    }\r\n  })\r\n  button.addEventListener('click', () => {\r\n    dialog.close()\r\n  })\r\n  input.addEventListener('keyup', e => {\r\n    if (e.key === 'Enter' || e.key === 'Escape') {\r\n      e.preventDefault()\r\n      dialog.close()\r\n    }\r\n  })\r\n  return dialog\r\n}\r\n\r\nexport function createDialoxBoxName (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.style.border = '1px solid black'\r\n  dialog.style.backgroundColor = 'white'\r\n  dialog.style.padding = '20px'\r\n  const label = document.createElement('label')\r\n  // Si le label est \"Nom du point\" alors Safari propose de l'autocomplétion même si on a mis autocomplete=\"off\"\r\n  // Hack : on met un nom contenant search pour bloquer l'autocompletion\r\n  label.innerHTML = 'Nom du point'\r\n  const input = document.createElement('input')\r\n  input.type = 'text'\r\n  input.name = 'search'\r\n  input.style.marginLeft = '10px'\r\n  input.setAttribute('autocomplete', 'off')\r\n  input.setAttribute('spellcheck', 'false')\r\n  input.setAttribute('autocorrect', 'off')\r\n  input.setAttribute('autocapitalize', 'none')\r\n\r\n  const button = document.createElement('button')\r\n  button.innerHTML = 'Valider'\r\n  button.style.marginLeft = '10px'\r\n  dialog.appendChild(label)\r\n  dialog.appendChild(input)\r\n  dialog.appendChild(button)\r\n  document.body.appendChild(dialog)\r\n  dialog.addEventListener('close', () => {\r\n    if (figure.ui != null) {\r\n      figure.ui.send('TEXT_FROM_DIALOG', { text: input.value })\r\n    }\r\n  })\r\n  button.addEventListener('click', () => {\r\n    dialog.close()\r\n  })\r\n  input.addEventListener('keyup', e => {\r\n    if (e.key === 'Enter' || e.key === 'Escape') {\r\n      e.preventDefault()\r\n      dialog.close()\r\n    }\r\n  })\r\n  return dialog\r\n}\r\n\r\nexport function createDialoxBoxAngle (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.style.border = '1px solid black'\r\n  dialog.style.backgroundColor = 'white'\r\n  dialog.style.padding = '20px'\r\n  const label = document.createElement('label')\r\n  label.innerHTML = 'Angle (en degrés) : '\r\n  const input = document.createElement('input')\r\n  input.type = 'number'\r\n  input.style.marginLeft = '10px'\r\n  input.value = '90'\r\n  const choice = document.createElement('select')\r\n  choice.style.marginLeft = '10px'\r\n  choice.innerHTML = '<option value=\"-1\">Sens horaire</option><option value=\"1\">Sens anti-horaire</option>'\r\n  const button = document.createElement('button')\r\n  button.innerHTML = 'Valider'\r\n  button.style.marginLeft = '10px'\r\n  dialog.appendChild(label)\r\n  dialog.appendChild(input)\r\n  dialog.appendChild(choice)\r\n  dialog.appendChild(button)\r\n  document.body.appendChild(dialog)\r\n  dialog.addEventListener('close', () => {\r\n    const angle = Number(input.value) * parseInt(choice.value)\r\n    if (figure.ui != null) {\r\n      figure.ui.send('ANGLE', { angle })\r\n    }\r\n  })\r\n  button.addEventListener('click', () => {\r\n    dialog.close()\r\n  })\r\n  input.addEventListener('keyup', e => {\r\n    if (e.key === 'Enter' || e.key === 'Escape') {\r\n      e.preventDefault()\r\n      dialog.close()\r\n    }\r\n  })\r\n  return dialog\r\n}\r\n\r\nexport function createDialogBoxLoadAuto (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.style.border = '1px solid black'\r\n  dialog.style.backgroundColor = 'white'\r\n  dialog.style.padding = '20px'\r\n  const label = document.createElement('label')\r\n  label.innerHTML = 'Souhaitez-vous charger la dernière construction ?'\r\n  const buttonCancel = document.createElement('button')\r\n  buttonCancel.innerHTML = 'Non'\r\n  const button = document.createElement('button')\r\n  button.innerHTML = 'Oui'\r\n  button.style.marginLeft = '10px'\r\n  button.style.marginRight = '10px'\r\n  dialog.appendChild(label)\r\n  dialog.appendChild(button)\r\n  dialog.appendChild(buttonCancel)\r\n  document.body.appendChild(dialog)\r\n  button.addEventListener('click', () => {\r\n    const figureInLocalStorage = localStorage.getItem('apiGeom')\r\n    if (figureInLocalStorage !== null) {\r\n      figure.loadJson(JSON.parse(figureInLocalStorage))\r\n    }\r\n    dialog.close()\r\n  })\r\n  buttonCancel.addEventListener('click', () => {\r\n    dialog.close()\r\n  })\r\n  dialog.addEventListener('keyup', e => {\r\n    if (e.key === 'Enter' || e.key === 'Escape') {\r\n      e.preventDefault()\r\n      dialog.close()\r\n    }\r\n  })\r\n  return dialog\r\n}\r\n\r\nexport function createModalDescription (figure: Figure): HTMLDialogElement {\r\n  const dialog = document.createElement('dialog')\r\n  dialog.id = 'dialog'\r\n  dialog.style.position = 'absolute'\r\n  dialog.style.top = '0'\r\n  dialog.style.left = '0'\r\n  dialog.style.width = '50%'\r\n  dialog.style.height = '90%'\r\n  dialog.style.border = 'none'\r\n  dialog.style.background = 'white'\r\n  dialog.style.zIndex = '100'\r\n  dialog.appendChild(figure.htmlDescription)\r\n  renderMathInElement(dialog, {\r\n    delimiters: [\r\n      { display: true, left: '\\\\[', right: '\\\\]' },\r\n      { display: false, left: '$', right: '$' }\r\n    ],\r\n    errorColor: '#CC0000',\r\n    preProcess: (chaine: string) => chaine.replaceAll(String.fromCharCode(160), '\\\\,'),\r\n    strict: 'warn',\r\n    throwOnError: true,\r\n    trust: false\r\n  })\r\n  dialog.addEventListener('click', () => { dialog.close() })\r\n  document.body.appendChild(dialog)\r\n  dialog.showModal()\r\n  return dialog\r\n}\r\n","import type Figure from '../Figure'\r\n\r\nexport default function selectionRectangle (figure: Figure): HTMLDivElement {\r\n  const div = document.createElement('div')\r\n  div.style.position = 'absolute'\r\n  div.style.top = '0'\r\n  div.style.left = '0'\r\n  div.style.border = '1px solid black'\r\n  div.style.backgroundColor = 'rgba(0, 0, 0, 0.1)'\r\n  div.style.pointerEvents = 'none'\r\n  div.style.zIndex = '1000'\r\n  const buttonSvg = document.createElement('button')\r\n  buttonSvg.style.position = 'absolute'\r\n  buttonSvg.style.border = '1px solid black'\r\n  buttonSvg.style.pointerEvents = 'auto'\r\n  buttonSvg.style.zIndex = '1001'\r\n  buttonSvg.innerHTML = 'SVG'\r\n  const buttonLatex = document.createElement('button')\r\n  buttonLatex.style.position = 'absolute'\r\n  buttonLatex.style.border = '1px solid black'\r\n  buttonLatex.style.pointerEvents = 'auto'\r\n  buttonLatex.style.zIndex = '1001'\r\n  buttonLatex.innerHTML = 'LaTeX'\r\n  buttonLatex.style.top = '50px'\r\n  buttonLatex.style.right = '10%'\r\n  buttonLatex.style.cursor = 'pointer'\r\n  buttonSvg.style.cursor = 'pointer'\r\n  buttonLatex.style.backgroundColor = 'white'\r\n  buttonSvg.style.backgroundColor = 'white'\r\n  buttonLatex.style.boxShadow = '0px 0px 5px 0px rgba(0,0,0,0.75)'\r\n  buttonSvg.style.boxShadow = '0px 0px 5px 0px rgba(0,0,0,0.75)'\r\n  const container = figure.divFigure\r\n  const rectangleContainer = container.getBoundingClientRect()\r\n  const containerLeft = rectangleContainer.left\r\n  const containerTop = rectangleContainer.top\r\n  container.appendChild(div)\r\n  div.appendChild(buttonSvg)\r\n  div.appendChild(buttonLatex)\r\n  buttonSvg.style.top = '100px'\r\n  buttonSvg.style.right = '10%'\r\n  buttonSvg.style.cursor = 'pointer'\r\n  div.style.width = `${figure.divFigure.clientWidth - 100}px`\r\n  div.style.height = `${figure.divFigure.clientHeight - 200}px`\r\n  let isNearCorner = false\r\n  let isNearLeftCorner = false\r\n  let isNearRightCorner = false\r\n  let isNearTopCorner = false\r\n  let isNearBottomCorner = false\r\n  let isNearTopLeftCorner = false\r\n  let isNearTopRightCorner = false\r\n  let isNearBottomLeftCorner = false\r\n  let isNearBottomRightCorner = false\r\n  window.addEventListener('mousemove', (event) => {\r\n    const rect = div.getBoundingClientRect()\r\n    const x = event.clientX\r\n    const y = event.clientY\r\n    container.style.cursor = 'default'\r\n    if (Math.abs(x - rect.left) < 10) {\r\n      isNearLeftCorner = true\r\n      container.style.cursor = 'ew-resize'\r\n    } else if (Math.abs(x - rect.right) < 10) {\r\n      isNearRightCorner = true\r\n      container.style.cursor = 'ew-resize'\r\n    } else {\r\n      isNearLeftCorner = false\r\n      isNearRightCorner = false\r\n    }\r\n    if (Math.abs(y - rect.top) < 10) {\r\n      isNearTopCorner = true\r\n      container.style.cursor = 'n-resize'\r\n    } else if (Math.abs(y - rect.bottom) < 10) {\r\n      isNearBottomCorner = true\r\n      container.style.cursor = 's-resize'\r\n    } else {\r\n      isNearTopCorner = false\r\n      isNearBottomCorner = false\r\n    }\r\n    if (isNearLeftCorner && isNearTopCorner) {\r\n      isNearTopLeftCorner = true\r\n      container.style.cursor = 'nw-resize'\r\n    } else if (isNearRightCorner && isNearTopCorner) {\r\n      isNearTopRightCorner = true\r\n      container.style.cursor = 'ne-resize'\r\n    } else if (isNearLeftCorner && isNearBottomCorner) {\r\n      isNearBottomLeftCorner = true\r\n      container.style.cursor = 'sw-resize'\r\n    } else if (isNearRightCorner && isNearBottomCorner) {\r\n      isNearBottomRightCorner = true\r\n      container.style.cursor = 'se-resize'\r\n    } else {\r\n      isNearTopLeftCorner = false\r\n      isNearTopRightCorner = false\r\n      isNearBottomLeftCorner = false\r\n      isNearBottomRightCorner = false\r\n    }\r\n    isNearCorner = isNearLeftCorner || isNearRightCorner || isNearTopCorner || isNearBottomCorner || isNearTopLeftCorner || isNearTopRightCorner || isNearBottomLeftCorner || isNearBottomRightCorner\r\n  })\r\n\r\n  window.addEventListener('pointerdown', () => {\r\n    if (isNearCorner) {\r\n      const rect = div.getBoundingClientRect()\r\n      const width = rect.width\r\n      const height = rect.height\r\n      const left = rect.left\r\n      const top = rect.top\r\n      const resize = (event: MouseEvent): void => {\r\n        const dx = event.clientX - left\r\n        const dy = event.clientY - top\r\n        if (isNearLeftCorner) {\r\n          div.style.left = `${left + dx - containerLeft}px`\r\n          div.style.width = `${width - dx}px`\r\n        } else if (isNearRightCorner) {\r\n          div.style.width = `${dx}px`\r\n        }\r\n        if (isNearTopCorner) {\r\n          div.style.top = `${top + dy - containerTop}px`\r\n          div.style.height = `${height - dy}px`\r\n        } else if (isNearBottomCorner) {\r\n          div.style.height = `${dy}px`\r\n        }\r\n        if (isNearTopLeftCorner) {\r\n          div.style.left = `${left + dx - containerLeft}px`\r\n          div.style.width = `${width - dx}px`\r\n          div.style.top = `${top + dy}px`\r\n          div.style.height = `${height - dy}px`\r\n        } else if (isNearTopRightCorner) {\r\n          div.style.width = `${dx}px`\r\n          div.style.top = `${top + dy}px`\r\n          div.style.height = `${height - dy}px`\r\n        } else if (isNearBottomLeftCorner) {\r\n          div.style.left = `${left + dx - containerLeft}px`\r\n          div.style.width = `${width - dx}px`\r\n          div.style.height = `${dy}px`\r\n        } else if (isNearBottomRightCorner) {\r\n          div.style.width = `${dx}px`\r\n          div.style.height = `${dy}px`\r\n        }\r\n      }\r\n      const stopResize = (): void => {\r\n        window.removeEventListener('pointermove', resize)\r\n        window.removeEventListener('pointerup', stopResize)\r\n      }\r\n      window.addEventListener('pointermove', resize)\r\n      window.addEventListener('pointerup', stopResize)\r\n    }\r\n  })\r\n\r\n  buttonSvg.addEventListener('click', () => {\r\n    const rect = div.getBoundingClientRect()\r\n    const xMin = rect.left - containerLeft\r\n    const yMax = rect.top - containerTop\r\n    const width = rect.width\r\n    const height = rect.height\r\n    figure.ui?.send('SELECTION_AREA_TO_SVG', { height, width, xMin, yMax })\r\n  })\r\n\r\n  buttonLatex.addEventListener('click', () => {\r\n    const rect = div.getBoundingClientRect()\r\n    const xMin = rect.left - containerLeft\r\n    const yMax = rect.top - containerTop\r\n    const width = rect.width\r\n    const height = rect.height\r\n    figure.ui?.send('SELECTION_AREA_TO_LATEX', { height, width, xMin, yMax })\r\n  })\r\n\r\n  return div\r\n}\r\n","/* eslint-disable @typescript-eslint/no-misused-promises */\r\nimport { type AnyEventObject, createMachine } from 'xstate'\r\n\r\nimport type Grid from './elements/grid/Grid'\r\nimport type Figure from './Figure'\r\n\r\nimport { distance } from './elements/calculus/Coords'\r\nimport { orangeMathaleaLight } from './elements/defaultValues'\r\nimport Element2D from './elements/Element2D'\r\nimport Arc from './elements/lines/Arc'\r\nimport Circle from './elements/lines/Circle'\r\nimport Polygon from './elements/lines/Polyligon'\r\nimport Segment from './elements/lines/Segment'\r\nimport Point from './elements/points/Point'\r\nimport { createDialoxBoxAngle, createDialoxBoxK, createDialoxBoxName, createDialoxBoxRadius, createModalDescription } from './userInterface/handleDialog'\r\nimport selectionRectangle from './userInterface/selectionRectangle'\r\n\r\ninterface MyContext {\r\n  figure: Figure\r\n}\r\n\r\nexport type eventName =\r\n  | 'ANGLE'\r\n  | 'BISSECTOR_BY_POINTS'\r\n  | 'CIRCLE_CENTER_POINT'\r\n  | 'CIRCLE_RADIUS'\r\n  | 'clickLocation'\r\n  | 'COLOR'\r\n  | 'DESCRIPTION'\r\n  | 'DILATE_COEF'\r\n  | 'DILATE'\r\n  | 'DOWNLOAD_LATEX_SVG'\r\n  | 'DRAG'\r\n  | 'FILL'\r\n  | 'GRID'\r\n  | 'HIDE'\r\n  | 'INFORMATIONS'\r\n  | 'INIT'\r\n  | 'LATEX'\r\n  | 'LINE_PARALLEL'\r\n  | 'LINE_PERPENDICULAR'\r\n  | 'LINE'\r\n  | 'MIDDLE'\r\n  | 'MOVE_LABEL'\r\n  | 'NAME_POINT'\r\n  | 'OPEN'\r\n  | 'PAUSE'\r\n  | 'PERPENDICULAR_BISECTOR'\r\n  | 'PLAY_SKIP_BACK'\r\n  | 'PLAY_SKIP_FORWARD'\r\n  | 'PLAY'\r\n  | 'POINT_INTERSECTION'\r\n  | 'POINT_ON'\r\n  | 'POINT'\r\n  | 'POLYGON'\r\n  | 'RADIUS'\r\n  | 'RAY'\r\n  | 'REDO'\r\n  | 'REFLECTION_OVER_LINE'\r\n  | 'REFLECTION'\r\n  | 'REMOVE'\r\n  | 'RESTART'\r\n  | 'ROTATE'\r\n  | 'SAVE'\r\n  | 'SEGMENT'\r\n  | 'SELECTION_AREA_TO_LATEX'\r\n  | 'SELECTION_AREA_TO_SVG'\r\n  | 'SET_OPTIONS'\r\n  | 'SHAKE'\r\n  | 'TEXT_FROM_DIALOG'\r\n  | 'TRANSLATION'\r\n  | 'UNDO'\r\n  | 'VECTOR'\r\n\r\nexport type eventOptions =\r\n  | { angle: number }\r\n  | { coefficient: number }\r\n  | { element?: Element2D, possibleElements?: Element2D[], waitingWithModal: boolean, x: number, y: number }\r\n  | { height: number, width: number, xMin: number, yMax: number }\r\n  | { radius: string }\r\n  | { text: string }\r\n  | { text: string }\r\n\r\ninterface MyEvent extends AnyEventObject {\r\n  element?: Element2D\r\n  text?: string\r\n  waitingWithModal?: boolean\r\n  x?: number\r\n  y?: number\r\n}\r\n\r\ninterface Context {\r\n  figure: Figure\r\n  intervalId?: number\r\n  temp: {\r\n    elements: Element2D[]\r\n    htmlElement: HTMLElement[]\r\n    values: number[]\r\n  }\r\n}\r\n\r\nconst ui = createMachine<Context>({\r\n  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */\r\n  context: { figure: {} as Figure, temp: { elements: [], htmlElement: [], values: [] } },\r\n  entry: ['highlightButton', 'eraseTempElements'],\r\n  id: 'apiGeomUI',\r\n  initial: 'INIT',\r\n  on: {\r\n    BISECTOR_BY_POINTS: 'BISECTOR_BY_POINTS',\r\n    CIRCLE_CENTER_POINT: 'CIRCLE_CENTER_POINT',\r\n    CIRCLE_RADIUS: 'CIRCLE_RADIUS',\r\n    COLOR: 'COLOR',\r\n    DESCRIPTION: 'DESCRIPTION',\r\n    DILATE: 'DILATE',\r\n    DOWNLOAD_LATEX_SVG: 'DOWNLOAD_LATEX_SVG',\r\n    DRAG: 'DRAG',\r\n    FILL: 'FILL',\r\n    GRID: 'GRID',\r\n    HIDE: 'HIDE',\r\n    INFORMATIONS: 'INFORMATIONS',\r\n    LATEX: 'LATEX',\r\n    LINE: 'LINE',\r\n    LINE_PARALLEL: 'LINE_PARALLEL',\r\n    LINE_PERPENDICULAR: 'LINE_PERPENDICULAR',\r\n    MIDDLE: 'MIDDLE',\r\n    MOVE_LABEL: 'MOVE_LABEL',\r\n    NAME_POINT: 'NAME_POINT',\r\n    OPEN: 'OPEN',\r\n    PAUSE: 'PAUSE',\r\n    PERPENDICULAR_BISECTOR: 'PERPENDICULAR_BISECTOR',\r\n    PLAY: 'PLAY',\r\n    PLAY_SKIP_BACK: 'PLAY_SKIP_BACK',\r\n    PLAY_SKIP_FORWARD: 'PLAY_SKIP_FORWARD',\r\n    POINT: 'POINT',\r\n    POINT_INTERSECTION: 'POINT_INTERSECTION',\r\n    POINT_ON: 'POINT_ON',\r\n    POLYGON: 'POLYGON',\r\n    RAY: 'RAY',\r\n    REDO: 'REDO',\r\n    REFLECTION: 'REFLECTION',\r\n    REFLECTION_OVER_LINE: 'REFLECTION_OVER_LINE',\r\n    REMOVE: 'REMOVE',\r\n    RESTART: 'RESTART',\r\n    ROTATE: 'ROTATE',\r\n    SAVE: 'SAVE',\r\n    SEGMENT: 'SEGMENT',\r\n    SET_OPTIONS: 'SET_OPTIONS',\r\n    SHAKE: 'SHAKE',\r\n    TRANSLATION: 'TRANSLATION',\r\n    UNDO: 'UNDO',\r\n    VECTOR: 'VECTOR'\r\n  },\r\n  /** @xstate-layout N4IgpgJg5mDOIC5QEMAOBLA4mA9gWwFUBJAYgAUB5IgOQBUBtABgF1FRUdZ0AXdHAOzYgAHogAsAJgA0IAJ7iAjBIB0CgMwB2BQA4NAVgC+BmWiy5CpADI0Aok1ZIQHLrwFDRCSTPkINYxsoSemKahsYgptj4xCQAyjaYALI2dPZCzjx8go4eXnKICowAbEXKYoVFQUYmGFEWJAAiAEoAgphpjhmu2aC50vkI6kV6ysOMEozaatMzEtURteYxZDZNK9QNRADCBJYtTR3snJluOeL9PgpF46piYTVm0aRk+y2WljaWh07H3e7n3gKAE5GGJlNpGEp7gtHvVKJYAJqYCjUb5dLL-TwXRASCRA0qaIGheaRJakLZEJpbD5o34Ys5YwEIIISUraCTlEpcrnaEmLJ4kLYUSwUA4sdJ0069AEDCQaNQBEG4oFXblFXnhUkClZrFKbHZ7JoAfQAQkRYvEtrRRbSXPTpYzZUSwUCIZy1eq+bCYjRaKtLbQiCjbSceiIZT41KyFKo1B7uRqHnVllQ6Ebg+LOpKw30mQoVcpIWINCr4xovcmiMpmm0SABjAA26DrAGtLDg68huiG-gy1HoRkENNooXmORoytpdNCtRZlJRfcoAO7ITL8KAAMRwACd253uvWm62912sj37eHmYxB9oQZU9Ez-CNGK6oRWycp4kkUrRl6veOuW7bhu6DbrA3A2A2YB4GA-DcIezZth2p4COeUqXiEKhiNoIT6HmCiFMoKrFFUmr8nOX7JHQf5rpuO6xGAdYCBAkHQbB8GNohJ7dpmRx2uhuRRpOuEPgMhQKGC0ykUmH4UlSHw0QBdHbls7FgNuCHHshPEOHxoaYpoMZ3Goo6ynoWjKFG7oeomMKVsocnUjYinoIBO5kDgrkcUeSH7mevE-PxOaIIZZR6CZQRMuOYJ+Nc1k8u+TzKNY1DOSutFASBYEQVBMFwZpvkofwaHBQgahAioI6RQMELaIEwTEmR3pVilaX-q5ykMUx-Asbl7EFdx-m6YF+l9hV4KmT4WgxkUGj3olc46us+q7PsLlucBoHgaxeXeVx2lDRKQWYthYISDoeFiUUYilNdM7kcQ86rMt2yrU062dYxzE7f1nFaX5qEBeiAniDhgQXaJlwDgExTqvoC2PS8rTvJ8H2ZVtOVsflf2FTpR2jQ6ISSSJeZAmIQKWZC0l2R+SNvB8lho-RX09T92M+YNgPDcDpVE5ZJNidoegqBoEgRfdzVPbqGyvYaprmgGopM5t2Vs3t-1FSVmLmaUKr+PeUVAiWk6gqqaq2bOiPPXqsv7PLFo2FaSvpUpQFdd9fXs-tAPFUD2aYtdahEXNegG7KU4qEqeJmwlTX2fCSIonE1pkAnyKon7x0MhMpTmVVkM4hIUzgiWjUyUlacosork8CQWsMgOMYh2HPjncbuhEvDce08KifUB9asDQdXP472DpTDFagC63Vx1VcJYx7H5eLb36cD576u42eCjc-7Dd6E3wwt4XegBCWcWL8MCNVpX-exCnt915nBOXo3yjN9VrcKjGeIXx6Ev2V9P6R2gYq4uw6ujVWG8h4+3roTIoFNyokQLmVKMFMhjxhKBbB6VYgFNADEGfu4CNru1ZtAnGnNfa7yzvAxBd5P4hTFioAcQt4pYOvvOVMtB0zUBgZrZ+Y9Lz9kHHnSaiARzKGFkYcI-AcAQDgEIS2RBR4Xg8AAWiKEyNRIxXSMD0fogxeixAcJrJgFRINBg3SIudaceYp4U1htODhC46DmNKuoOe+sGHMg0AEPQr5qZKM4YuYhylKFuMxDoUoElkFMlPrdOagScGfgSFRWgESGQKH8aMKM+cmQVTZFGABH5KI-mVllbaG8MkOgmBOIouSxGDHGBOYc7Jo5qnLN3JKpTqKhLdizXqWNuDVNfiCVQ3jCgKkCBHdp3JOnL0eo5D4IyPAxMpjdWxso1C6ECDdU2NkOFLLahlHcqk4LqRWQUKc6y4YoI5NciYCgNC+KmDMaYhzKROWVh5LylyEDCwcZ3O55Mz6QmeZMN57yulzlan8giFN8QvlCHE55qhEnFKSq1cpGM1ZwtmkRa4QKmSixGOofMC8PQcKxX05m3VBm7T+dDMK4tiVyhyeS0sapnHWxlgafYfzzoxjjFoTZlwbrMKwV3BZN8eUrUNNiqBQyBXZOFRDPMocg7C1ZPsuZ3LpZyrWjS7cpD6XsT+S86xaqxKh1KOMbVbD5k0wrq8FGlg8VGQqlay4IdAhizfNCxGLqGYKsqUqrMNDLwTApuTGxl1LjaBKGiqcwRF6OqCXTV1ysTW4vDS-DwwwHEbLjVc9UoxWkpo6Xql6fLjRmgdk7JofyFRglibKEsIx-DKkvtgyWS0bY1vtord6RqKmYwZbmwRHh+wqFba3W8BI9AQgmK8t5Vb+1vUHSA527USEDJzXpSd4jISjCeV6nEt46pCyXRCyFzjV4ojhYuyRw5Gk5wnB3MuTqV6IjXjXYZE7VEhR2fKaeOIskjEJJ+9N96iE7qgPukah6EC6CwuULxdzWQU1ijqhMd6f1V3vhQVOMGm0SNPaKwu1wS5Ao4XgghD6AMWPzLnJBx8yovjqteVh3baN0GAVaQhIax1msY6VDkYJwr0JQVGTQ-M5o4fYQG3BfH8EgME0a7NVTRMBzZYwFlAwozXVUBCIFhi1B3t9DwuFZGRXFsGMXDjShyZAhc65nt9khQikbdpzJodLUUZ8YwCcUdOW4ekUAA */\r\n  predictableActionArguments: true,\r\n  states: {\r\n    BISECTOR_BY_POINTS: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur un premier point (autre que le sommet de l\\'angle).', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element as Point\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer sur le sommet de l\\'angle.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element as Point\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForThirdElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForThirdElement: {\r\n          entry: (context) => { userMessage('Cliquer sur un troisième point.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[2] = event.element as Point\r\n                const [pointOnSide1, origin, pointOnSide2] = context.figure.selectedElements as Point[]\r\n                context.figure.create('BisectorByPoints', { origin, pointOnSide1, pointOnSide2 })\r\n                context.figure.saveState()\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    CIRCLE_CENTER_POINT: {\r\n      initial: 'waitingForCenter',\r\n      states: {\r\n        waitingForCenter: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur le centre du cercle.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment\r\n            context.figure.currentState = 'POINT_INTERSECTION'\r\n          },\r\n          exit: (context) => {\r\n            context.figure.currentState = ''\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  context.figure.tempCreate('CircleCenterPoint', {\r\n                    center: context.figure.selectedElements[0] as Point,\r\n                    point: context.figure.pointer\r\n                  })\r\n                }\r\n                context.figure.filter = (e) => e instanceof Point\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForPoint'\r\n            }\r\n          }\r\n        },\r\n        waitingForPoint: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur un point du cercle.', context.figure)\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[1] = newPoint\r\n                  const [center, point] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Point\r\n                  ]\r\n                  context.figure.create('CircleCenterPoint', { center, point })\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForCenter'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    CIRCLE_RADIUS: {\r\n      initial: 'waitingForCenter',\r\n      states: {\r\n        waitingForCenter: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur le centre du cercle.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  const dialog = createDialoxBoxRadius(context.figure)\r\n                  dialog.showModal()\r\n                }\r\n                context.figure.filter = (e) => e instanceof Point\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForRadius'\r\n            }\r\n          }\r\n        },\r\n        waitingForRadius: {\r\n          on: {\r\n            RADIUS: {\r\n              actions: (context, event) => {\r\n                const radius = event.radius\r\n                const center = context.figure.selectedElements[0] as Point\r\n                const points = testRadiusIsSegment(event.radius, context.figure)\r\n                if (points !== undefined) {\r\n                  const dynamicRadius = context.figure.create('Distance', { point1: points[0], point2: points[1] })\r\n                  context.figure.create('CircleCenterDynamicRadius', { center, radius: dynamicRadius })\r\n                  context.figure.saveState()\r\n                } else if (radius > 0) {\r\n                  context.figure.create('Circle', { center, radius })\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              target: 'waitingForCenter'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    COLOR: {\r\n      entry: (context, event) => {\r\n        context.figure.options.color = event.text\r\n      }\r\n    },\r\n    DESCRIPTION: {\r\n      entry: (context) => {\r\n        createModalDescription(context.figure)\r\n      }\r\n    },\r\n    DILATE: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Point\r\n      },\r\n      exit: (context) => {\r\n        context.figure.selectedElements = []\r\n        context.figure.tmpElements.forEach(e => { e.remove() })\r\n      },\r\n      initial: 'waitingForCenter',\r\n      states: {\r\n        waitingForCenter: {\r\n          entry: (context) => { userMessage('Cliquer sur le centre de l\\'homothétie.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  const dialog = createDialoxBoxK(context.figure)\r\n                  dialog.showModal()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForCoefficient'\r\n            }\r\n          }\r\n        },\r\n        waitingForCoefficient: {\r\n          on: {\r\n            DILATE_COEF: {\r\n              actions: (context, event) => {\r\n                context.temp.values[0] = event.coefficient\r\n              },\r\n              target: 'waitingForElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForElement: {\r\n          entry: (context) => {\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment || e instanceof Circle || e instanceof Polygon\r\n            const center = context.figure.selectedElements[0] as Point\r\n            const k = context.temp.values[0]\r\n            context.figure.tmpElements.push(context.figure.pointer.dilate(center, k, { color: context.figure.options.tmpColor, isChild: true }))\r\n            userMessage('Cliquer sur l\\'élément à transformer.', context.figure)\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const center = context.figure.selectedElements[0] as Point\r\n                const origin = event.element\r\n                const k = context.temp.values[0]\r\n                origin.dilate(center, k)\r\n                context.figure.saveState()\r\n                context.figure.selectedElements[0] = center\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    DOWNLOAD_LATEX_SVG: {\r\n      entry: (context) => {\r\n        context.temp.htmlElement[0] = selectionRectangle(context.figure)\r\n        // const svg = context.figure.svg.outerHTML\r\n      },\r\n      on: {\r\n        SELECTION_AREA_TO_LATEX: {\r\n          actions: (context, event) => {\r\n            const xMin = context.figure.xMin + context.figure.sxTox(event.xMin)\r\n            const xMax = xMin + context.figure.sxTox(event.width)\r\n            const yMax = context.figure.yMax + context.figure.syToy(event.yMax)\r\n            const yMin = yMax + context.figure.syToy(event.height)\r\n            context.temp.htmlElement[0].remove()\r\n            const latex = context.figure.latex({ xMax, xMin, yMax, yMin })\r\n            const blob = new Blob([latex], { type: 'text/plain' })\r\n            const url = window.URL.createObjectURL(blob)\r\n            const a = document.createElement('a')\r\n            a.style.display = 'none'\r\n            a.href = url\r\n            a.download = 'figure.tex'\r\n            document.body.appendChild(a)\r\n            a.click()\r\n            window.URL.revokeObjectURL(url)\r\n            document.body.removeChild(a)\r\n            context.figure.buttons.get('DRAG')?.click()\r\n          },\r\n          target: 'DRAG'\r\n        },\r\n        SELECTION_AREA_TO_SVG: {\r\n          actions: (context, event) => {\r\n            const xMin = context.figure.xToSx(context.figure.xMin + context.figure.sxTox(event.xMin))\r\n            const yMax = context.figure.yToSy(context.figure.yMax + context.figure.syToy(event.yMax))\r\n            context.temp.htmlElement[0].remove()\r\n            const svg = context.figure.svg.cloneNode(true) as SVGElement\r\n            svg.setAttribute('width', (event.width).toString())\r\n            svg.setAttribute('height', (event.height).toString())\r\n            svg.setAttribute('viewBox', `${xMin} ${yMax} ${event.width as number} ${event.height as number}`)\r\n            const blob = new Blob([svg.outerHTML], { type: 'image/svg+xml' })\r\n            const url = window.URL.createObjectURL(blob)\r\n            const a = document.createElement('a')\r\n            a.style.display = 'none'\r\n            a.href = url\r\n            a.download = 'figure.svg'\r\n            document.body.appendChild(a)\r\n            a.click()\r\n            window.URL.revokeObjectURL(url)\r\n            document.body.removeChild(a)\r\n            context.figure.buttons.get('DRAG')?.click()\r\n          },\r\n          target: 'DRAG'\r\n        }\r\n      }\r\n    },\r\n    DRAG: {\r\n      entry: (context) => {\r\n        if (context.figure.elements.size > 1) {\r\n          userMessage('Cliquer sur un point pour le déplacer.', context.figure)\r\n        } else {\r\n          userMessage('', context.figure)\r\n        }\r\n        context.figure.filter = (e) => e instanceof Point && e.isFree\r\n      },\r\n      exit: (context) => {\r\n        context.figure.divFigure.style.cursor = 'default'\r\n        context.figure.inDrag = undefined\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (context, event) => {\r\n            context.figure.inDrag = event.element\r\n            context.figure.divFigure.style.cursor = 'move'\r\n          },\r\n          cond: (_, event) => event.element !== undefined,\r\n          target: 'DRAG'\r\n        }\r\n      }\r\n    },\r\n    FILL: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Polygon || e instanceof Circle || e instanceof Arc\r\n        context.figure.currentState = 'FILL'\r\n      },\r\n      exit: (context) => {\r\n        context.figure.currentState = ''\r\n        context.figure.selectedElements.forEach(e => { e.isSelected = false })\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (context, event) => {\r\n            const element = event.element\r\n            if (element !== undefined) {\r\n              if (element.fillColor === context.figure.options.color) {\r\n                element.fillColor = 'none'\r\n              } else {\r\n                element.fillColor = context.figure.options.color\r\n              }\r\n              context.figure.saveState()\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    GRID: {\r\n      always: 'DRAG',\r\n      entry: (context) => {\r\n        if (context.figure.grid === undefined) {\r\n          context.figure.grid = context.figure.tempCreate('Grid') as Grid\r\n        } else {\r\n          if (context.figure.grid.isVisible) {\r\n            context.figure.grid.hide()\r\n            context.figure.snapGrid = false\r\n          } else {\r\n            context.figure.grid.show()\r\n            context.figure.snapGrid = true\r\n          }\r\n        }\r\n      }\r\n    },\r\n    HIDE: {\r\n      entry: (context) => {\r\n        context.figure.currentState = 'HIDE'\r\n        userMessage('Cliquer sur l\\'élément à masquer ou à démasquer.', context.figure)\r\n        context.figure.filter = (e) => e.isVisible\r\n        // All context.figure.elements with isHidden set isVisible à true\r\n        context.figure.elements.forEach(e => {\r\n          if (e instanceof Element2D && e.isHidden) {\r\n            e.tempShow()\r\n          }\r\n        })\r\n      },\r\n      exit: (context) => {\r\n        context.figure.currentState = ''\r\n        context.figure.elements.forEach(e => {\r\n          if (e instanceof Element2D && e.isHidden) {\r\n            e.hide()\r\n          }\r\n        })\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (context, event) => {\r\n            if (event.element.isHidden === true) {\r\n              event.element.show()\r\n              event.element.isHidden = false\r\n            } else {\r\n              event.element.tempShow()\r\n              event.element.isHidden = true\r\n            }\r\n            context.figure.saveState()\r\n          },\r\n          cond: (_, event) => event.element !== undefined,\r\n          target: 'HIDE'\r\n        }\r\n      }\r\n    },\r\n    INFORMATIONS: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer sur l\\'élément', context.figure)\r\n        context.figure.filter = (e) => e.isVisible\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (_, event) => {\r\n            console.info(event.element)\r\n          },\r\n          cond: (_, event) => event.element !== undefined,\r\n          target: 'INFORMATIONS'\r\n        }\r\n      }\r\n    },\r\n    INIT: {\r\n      after: {\r\n        1000: 'POINT'\r\n      }\r\n    },\r\n    LATEX: {\r\n      entry: (context) => {\r\n        const latex = context.figure.latex\r\n        const blob = new Blob([latex()], { type: 'text/plain' })\r\n        const url = window.URL.createObjectURL(blob)\r\n        const a = document.createElement('a')\r\n        a.style.display = 'none'\r\n        a.href = url\r\n        a.download = 'figure.tex'\r\n        document.body.appendChild(a)\r\n        a.click()\r\n        window.URL.revokeObjectURL(url)\r\n        document.body.removeChild(a)\r\n        context.figure.buttons.get('DRAG')?.click()\r\n      }\r\n    },\r\n    LINE: {\r\n      entry: (context) => { context.figure.filter = (e) => e instanceof Point },\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => { userMessage('Cliquer sur un premier point de la droite.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  context.figure.tempCreate('Line', { point1: context.figure.selectedElements[0] as Point, point2: context.figure.pointer })\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer sur un deuxième point de la droite.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[1] = newPoint\r\n                  const [point1, point2] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Point\r\n                  ]\r\n                  context.figure.create('Line', { point1, point2 })\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    LINE_PARALLEL: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur un point ou une droite.', context.figure)\r\n            context.figure.filter = (e) =>\r\n              e instanceof Segment || e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => {\r\n            if (context.figure.selectedElements[0] instanceof Point) {\r\n              userMessage('Cliquer sur une droite.', context.figure)\r\n              context.figure.filter = (e) => e instanceof Segment\r\n            } else {\r\n              userMessage('Cliquer sur un point.', context.figure)\r\n              context.figure.filter = (e) => e instanceof Point\r\n            }\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element\r\n                let point: Point\r\n                let line: Segment\r\n                if (context.figure.selectedElements[0] instanceof Point) {\r\n                  [point, line] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Segment\r\n                  ]\r\n                } else {\r\n                  [line, point] = context.figure.selectedElements as [\r\n                    Segment,\r\n                    Point\r\n                  ]\r\n                }\r\n                context.figure.create('LineParallel', { line, point })\r\n                context.figure.saveState()\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    LINE_PERPENDICULAR: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur un point ou une droite.', context.figure)\r\n            context.figure.filter = (e) =>\r\n              e instanceof Segment || e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => {\r\n            if (context.figure.selectedElements[0] instanceof Point) {\r\n              userMessage('Cliquer sur une droite.', context.figure)\r\n              context.figure.filter = (e) => e instanceof Segment\r\n            } else {\r\n              userMessage('Cliquer sur un point.', context.figure)\r\n              context.figure.filter = (e) => e instanceof Point\r\n            }\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element\r\n                let point: Point\r\n                let line: Segment\r\n                if (context.figure.selectedElements[0] instanceof Point) {\r\n                  [point, line] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Segment\r\n                  ]\r\n                } else {\r\n                  [line, point] = context.figure.selectedElements as [\r\n                    Segment,\r\n                    Point\r\n                  ]\r\n                }\r\n                context.figure.create('LinePerpendicular', { line, point })\r\n                context.figure.saveState()\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    MIDDLE: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur la première extrémité du segment ou sur un segment.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment\r\n          },\r\n          on: {\r\n            clickLocation: [\r\n              {\r\n                actions: (context, event) => {\r\n                  context.figure.selectedElements[0] = event.element\r\n                },\r\n                cond: (_, event) => event.element !== undefined && event.element instanceof Point,\r\n                target: 'waitingForSecondElement'\r\n              },\r\n              {\r\n                actions: (context, event) => {\r\n                  const segment = event.element as Segment\r\n                  const point1 = segment.point1\r\n                  const point2 = segment.point2\r\n                  context.figure.create('Middle', { point1, point2 })\r\n                },\r\n                cond: (_, event) => event.element !== undefined && event.element instanceof Segment,\r\n                target: 'waitingForFirstElement'\r\n              }\r\n            ]\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur la deuxième extrémité du segment.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element\r\n                const [point1, point2] = context.figure.selectedElements as [\r\n                  Point,\r\n                  Point\r\n                ]\r\n                context.figure.create('Middle', { point1, point2 })\r\n                context.figure.saveState()\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    MOVE_LABEL: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer sur le point.', context.figure)\r\n        context.figure.filter = (e) => e instanceof Point\r\n      },\r\n      initial: 'waitingForPoint',\r\n      states: {\r\n        waitingForPoint: {\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const point = event.element\r\n                context.figure.inDrag = point.elementTextLabel\r\n              },\r\n              target: 'waitingForPoint'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    NAME_POINT: {\r\n      initial: 'waitingForPoint',\r\n      states: {\r\n        waitingForName: {\r\n          entry: (context) => {\r\n            const dialog = createDialoxBoxName(context.figure)\r\n            dialog.showModal()\r\n          },\r\n          on: {\r\n            TEXT_FROM_DIALOG: {\r\n              actions: (context, event) => {\r\n                const point = context.temp.elements[0] as Point\r\n                point.label = event.text\r\n                context.figure.saveState()\r\n              },\r\n              target: 'waitingForPoint'\r\n            }\r\n          }\r\n        },\r\n        waitingForPoint: {\r\n          entry: (context) => {\r\n            context.figure.filter = (e) => e instanceof Point\r\n            userMessage('Cliquer sur un point à renommer.', context.figure)\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.temp.elements[0] = newPoint\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForName'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    OPEN: {\r\n      entry: (context) => {\r\n        const input = document.createElement('input')\r\n        input.type = 'file'\r\n        input.accept = '.json'\r\n        input.onchange = (e: Event) => {\r\n          const file = (e.target as HTMLInputElement).files?.[0]\r\n          if (file === undefined) {\r\n            return\r\n          }\r\n          const reader = new FileReader()\r\n          reader.readAsText(file, 'UTF-8')\r\n          reader.onload = (readerEvent: ProgressEvent<FileReader>) => {\r\n            const content = (readerEvent?.target?.result as null | string) ?? ''\r\n            if (typeof content === 'string' && content !== '') {\r\n              context.figure.loadJson(JSON.parse(content), true)\r\n            }\r\n          }\r\n        }\r\n        input.click()\r\n        // context.figure.buttons.get('DRAG')?.click()\r\n      }\r\n    },\r\n    PAUSE: {\r\n      entry: (context) => {\r\n        userMessage('', context.figure)\r\n        if (context.intervalId !== undefined) {\r\n          clearInterval(context.intervalId)\r\n        }\r\n      }\r\n    },\r\n    PERPENDICULAR_BISECTOR: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur la première extrémité du segment.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element\r\n                context.figure.tempCreate('PerpendicularBisectorByPoints', {\r\n                  point1: context.figure.selectedElements[0] as Point,\r\n                  point2: context.figure.pointer\r\n                })\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer sur la deuxième extrémité du segment.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element\r\n                const [point1, point2] = context.figure.selectedElements as [\r\n                  Point,\r\n                  Point\r\n                ]\r\n                context.figure.create('PerpendicularBisectorByPoints', { point1, point2 })\r\n                context.figure.saveState()\r\n              },\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    PLAY: {\r\n      entry: (context) => {\r\n        userMessage('', context.figure)\r\n        clearInterval(context.intervalId)\r\n        context.figure.redo()\r\n        context.intervalId = setInterval(() => {\r\n          if (context.figure.stackRedo.length === 0) {\r\n            context.figure.buttons.get('PAUSE')?.click()\r\n            clearInterval(context.intervalId)\r\n            return\r\n          }\r\n          context.figure.redo()\r\n        }, context.figure.options.animationStepInterval)\r\n      }\r\n    },\r\n    PLAY_SKIP_BACK: {\r\n      entry: (context) => {\r\n        userMessage('', context.figure)\r\n        context.figure.undo()\r\n      }\r\n    },\r\n    PLAY_SKIP_FORWARD: {\r\n      entry: (context) => {\r\n        userMessage('', context.figure)\r\n        context.figure.redo()\r\n      }\r\n    },\r\n    POINT: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer pour créer un point.', context.figure)\r\n        context.figure.filter = (e) => e instanceof Point\r\n      },\r\n      initial: 'waitingForLocation',\r\n      states: {\r\n        waitingForLocation: {\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                if (context.figure.hoverPoints.size > 0) {\r\n                  const point = [...context.figure.hoverPoints][0] as Point\r\n                  context.figure.inDrag = point\r\n                  context.figure.divFigure.style.cursor = 'move'\r\n                } else {\r\n                  const { x, y } = event\r\n                  const limitNumberOfPoint = context.figure.options.limitNumberOfElement?.get('Point') ?? Infinity\r\n                  const noLimit = limitNumberOfPoint === undefined || !Number.isFinite(limitNumberOfPoint)\r\n                  const limitReached = [...context.figure.elements?.values()].filter(e => e instanceof Point).length > limitNumberOfPoint\r\n                  if (noLimit || !limitReached) {\r\n                    if (context.figure.options.labelAutomaticBeginsWith !== undefined) {\r\n                      let indiceName = context.figure.options.labelAutomaticBeginsWith.charCodeAt(0)\r\n                      let label = context.figure.options.labelAutomaticBeginsWith\r\n                      while ([...context.figure.elements.values()].some(e => {\r\n                        if (!('label' in e)) return false\r\n                        return e.label === label\r\n                      })) {\r\n                        label = String.fromCharCode(++indiceName)\r\n                      }\r\n                      context.figure.create('Point', { label, x, y })\r\n                    } else {\r\n                      context.figure.create('Point', { x, y })\r\n                    }\r\n                  }\r\n                }\r\n                context.figure.saveState()\r\n              },\r\n              target: 'waitingForLocation'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    POINT_INTERSECTION: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Segment || e instanceof Circle\r\n        context.figure.currentState = 'POINT_INTERSECTION'\r\n      },\r\n      exit: (context) => {\r\n        context.figure.selectedElements = []\r\n        context.figure.tmpElements.forEach(e => { e.remove() })\r\n        context.figure.currentState = ''\r\n      },\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => { userMessage('Cliquer sur une droite, une demi-droite, un segment ou un cercle.', context.figure) },\r\n          exit: (context) => {\r\n            if (context.figure.selectedElements[0]?.isSelected) context.figure.selectedElements[0].isSelected = false\r\n          },\r\n          on: {\r\n            clickLocation: [\r\n              {\r\n                actions: (context, event) => {\r\n                  context.figure.selectedElements[0] = event.element\r\n                  event.element.isSelected = true\r\n                },\r\n                cond: (_, event) => event.element !== undefined,\r\n                target: 'waitingForSecondElement'\r\n              },\r\n              {\r\n                actions: (context, event) => {\r\n                  context.figure.selectedElements[0] = event.possibleElements[0]\r\n                  context.figure.selectedElements[1] = event.possibleElements[1]\r\n                  const [element1, element2] = context.figure.selectedElements\r\n                  if (element1 instanceof Segment) {\r\n                    if (element2 instanceof Segment) {\r\n                      context.figure.create('PointIntersectionLL', { line1: element1, line2: element2 })\r\n                    }\r\n                    if (element2 instanceof Circle) {\r\n                      context.figure.create('PointsIntersectionLC', { circle: element2, line: element1 })\r\n                    }\r\n                    context.figure.saveState()\r\n                  } else if (element1 instanceof Circle) {\r\n                    if (element2 instanceof Segment) {\r\n                      context.figure.create('PointsIntersectionLC', { circle: element1, line: element2 })\r\n                    }\r\n                    if (element2 instanceof Circle) {\r\n                      context.figure.create('PointsIntersectionCC', { circle1: element1, circle2: element2 })\r\n                    }\r\n                    context.figure.saveState()\r\n                  }\r\n                },\r\n                cond: (_, event) => event.possibleElements.length === 2,\r\n                target: 'waitingForFirstElement'\r\n              }\r\n            ]\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          exit: (context) => {\r\n            context.figure.selectedElements.forEach(e => { e.isSelected = false })\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[1] = event.element\r\n                const [element1, element2] = context.figure.selectedElements\r\n                if (element1 instanceof Segment) {\r\n                  if (element2 instanceof Segment) {\r\n                    context.figure.create('PointIntersectionLL', { line1: element1, line2: element2 })\r\n                  }\r\n                  if (element2 instanceof Circle) {\r\n                    context.figure.create('PointsIntersectionLC', { circle: element2, line: element1 })\r\n                  }\r\n                  context.figure.saveState()\r\n                } else if (element1 instanceof Circle) {\r\n                  if (element2 instanceof Segment) {\r\n                    context.figure.create('PointsIntersectionLC', { circle: element1, line: element2 })\r\n                  }\r\n                  if (element2 instanceof Circle) {\r\n                    context.figure.create('PointsIntersectionCC', { circle1: element1, circle2: element2 })\r\n                  }\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    POINT_ON: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Segment || e instanceof Circle\r\n        userMessage('Cliquer sur un segment ou un cercle.', context.figure)\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (context, event) => {\r\n            context.figure.selectedElements[0] = event.element\r\n            if (event.element instanceof Segment) {\r\n              const [point1, point2] = [event.element.point1, event.element.point2]\r\n              const k = ((event.x - point1.x) * (point2.x - point1.x) + (event.y - point1.y) * (point2.y - point1.y)) / (distance(point1, point2) ** 2)\r\n              context.figure.create('PointOnLine', { k, line: event.element })\r\n              context.figure.saveState()\r\n            } else if (event.element instanceof Circle) {\r\n              const angleWithHorizontal = Math.atan2(event.y - event.element.center.y, event.x - event.element.center.x)\r\n              context.figure.create('PointOnCircle', { angleWithHorizontal, circle: event.element })\r\n              context.figure.saveState()\r\n            }\r\n          },\r\n          target: 'POINT_ON'\r\n        }\r\n      }\r\n    },\r\n    POLYGON: {\r\n      id: 'polygon',\r\n      initial: 'init',\r\n      on: {\r\n        STOPPOLYGON: '#polygon.STOPPOLYGON'\r\n      },\r\n      states: {\r\n        init: {\r\n          always: 'waitingElement',\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur un sommet du polygone.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          }\r\n        },\r\n        STOPPOLYGON: {\r\n          always: {\r\n            target: '#polygon.waitingElement'\r\n          },\r\n          entry: (context) => {\r\n            context.figure.create('Polygon', {\r\n              points: context.figure.selectedElements as Point[]\r\n            })\r\n            userMessage('Cliquer sur un sommet pour créer un autre polygone.', context.figure)\r\n            context.figure.saveState()\r\n          }\r\n        },\r\n        waitingElement: {\r\n          exit: (context) => {\r\n            context.figure.tmpElements?.forEach(e => { e.remove() })\r\n          },\r\n          on: {\r\n            clickLocation: [\r\n              {\r\n                actions: (context, event) => {\r\n                  if (context.figure.selectedElements.length > 0) {\r\n                    userMessage('Cliquer sur un nouveau sommet ou sur le premier sommet pour terminer.', context.figure)\r\n                  } else {\r\n                    userMessage('Cliquer sur un sommet du polygone.', context.figure)\r\n                  }\r\n                  const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                  if (newPoint !== undefined) {\r\n                    context.figure.selectedElements.push(newPoint)\r\n                    const points = [...context.figure.selectedElements, context.figure.pointer] as Point[]\r\n                    context.figure.tempCreate('Polygon', { isBuiltWithSegments: false, isChild: true, points })\r\n                  }\r\n                },\r\n                cond: (context, event) => {\r\n                  if (context.figure.selectedElements.length < 2) {\r\n                    return getExistingPointOrCreatetPoindWasASuccess(event)\r\n                  }\r\n                  const last = event.element as Point\r\n                  const first = context.figure.selectedElements[0] as Point\r\n                  const isClickOnFirstPoint = last?.id === first?.id\r\n                  return getExistingPointOrCreatetPoindWasASuccess(event) && !isClickOnFirstPoint\r\n                },\r\n                target: 'waitingElement'\r\n              },\r\n              {\r\n                cond: (context, event) => {\r\n                  if (context.figure.selectedElements.length > 1) {\r\n                    const last = event.element as Point\r\n                    const first = context.figure.selectedElements[0] as Point\r\n                    return last?.id === first?.id\r\n                  }\r\n                  return false\r\n                },\r\n                target: 'STOPPOLYGON'\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      }\r\n    },\r\n    RAY: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur l\\'origine de la demi-droite.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  context.figure.tempCreate('Ray', {\r\n                    point1: context.figure.selectedElements[0] as Point,\r\n                    point2: context.figure.pointer\r\n                  })\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer un point de la demi-droite.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[1] = newPoint\r\n                  const [point1, point2] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Point\r\n                  ]\r\n                  context.figure.create('Ray', { point1, point2 })\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    REDO: {\r\n      entry: (context) => {\r\n        context.figure.redo()\r\n        context.figure.buttons.get('DRAG')?.click()\r\n      }\r\n    },\r\n    REFLECTION: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer sur le centre de la symétrie.', context.figure)\r\n        context.figure.filter = (e) => e instanceof Point\r\n      },\r\n      exit: (context) => {\r\n        context.figure.selectedElements = []\r\n        context.figure.tmpElements.forEach(e => { e.remove() })\r\n      },\r\n      initial: 'waitingForCenter',\r\n      states: {\r\n        waitingForCenter: {\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur l\\'élément à transformer.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment || e instanceof Circle || e instanceof Polygon\r\n            const center = context.figure.selectedElements[0] as Point\r\n            if (center !== undefined) {\r\n              context.figure.selectedElements[0] = center\r\n              context.figure.tmpElements.push(context.figure.pointer.reflect(center, { color: context.figure.options.tmpColor, isChild: true, isSelectable: false }))\r\n            }\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const origin = event.element as Circle | Point | Polygon | Segment\r\n                const center = context.figure.selectedElements[0] as Point\r\n                if (origin !== undefined) {\r\n                  origin.reflect(center)\r\n                  context.figure.saveState()\r\n                  // Le saveState initialise selectedElements à []\r\n                  context.figure.selectedElements[0] = center\r\n                }\r\n              },\r\n              target: 'waitingForElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    REFLECTION_OVER_LINE: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer sur l\\'axe de la symétrie.', context.figure)\r\n        context.figure.filter = (e) => e instanceof Segment\r\n      },\r\n      exit: (context) => {\r\n        context.figure.selectedElements = []\r\n        context.figure.tmpElements.forEach(e => { e.remove() })\r\n      },\r\n      initial: 'waitingForAxis',\r\n      states: {\r\n        waitingForAxis: {\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                context.figure.selectedElements[0] = event.element\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForOrigin'\r\n            }\r\n          }\r\n        },\r\n        waitingForOrigin: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur l\\'élément à transformer.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment || e instanceof Circle || e instanceof Polygon\r\n            const line = context.figure.selectedElements[0] as Segment\r\n            if (line !== undefined) {\r\n              context.figure.selectedElements[0] = line\r\n              context.figure.tempCreate('PointByReflectOverLine', { line, origin: context.figure.pointer })\r\n            }\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const origin = event.element as Circle | Point | Polygon | Segment\r\n                const line = context.figure.selectedElements[0] as Segment\r\n                if (origin !== undefined) {\r\n                  context.figure.create('ElementByReflectOverLine', { line, origin })\r\n                  context.figure.saveState()\r\n                  // Le saveState initialise selectedElements à []\r\n                  context.figure.selectedElements[0] = line\r\n                }\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForOrigin'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    REMOVE: {\r\n      entry: (context) => {\r\n        userMessage('Cliquer sur l\\'élément à supprimer.', context.figure)\r\n        context.figure.filter = (e) => e.isVisible\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (_, event) => {\r\n            event.element.remove()\r\n          },\r\n          cond: (_, event) => event.element !== undefined,\r\n          target: 'REMOVE'\r\n\r\n        }\r\n      }\r\n    },\r\n    RESTART: {\r\n      entry: (context) => {\r\n        userMessage('', context.figure)\r\n        context.figure.restart()\r\n      }\r\n    },\r\n    ROTATE: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Point\r\n      },\r\n      exit: (context) => {\r\n        context.figure.selectedElements.forEach(e => { e.isSelected = false })\r\n        context.figure.selectedElements = []\r\n        context.figure.tmpElements = []\r\n      },\r\n      initial: 'waitingForCenter',\r\n      states: {\r\n        waitingForAngle: {\r\n          on: {\r\n            ANGLE: {\r\n              actions: (context, event) => {\r\n                const angle = event.angle\r\n                context.temp.values[0] = angle\r\n              },\r\n              target: 'waitingForPoint'\r\n            }\r\n          }\r\n        },\r\n        waitingForCenter: {\r\n          entry: (context) => { userMessage('Cliquer sur le centre de rotation.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  const dialog = createDialoxBoxAngle(context.figure)\r\n                  dialog.showModal()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForAngle'\r\n            }\r\n          }\r\n        },\r\n        waitingForPoint: {\r\n          entry: (context) => {\r\n            const center = context.figure.selectedElements[0] as Point\r\n            const angle = context.temp.values[0]\r\n            context.figure.tempCreate('PointByRotation', { angle, center, origin: context.figure.pointer })\r\n            userMessage('Cliquer sur un point.', context.figure)\r\n          },\r\n          exit: (context) => {\r\n            context.figure.tmpElements.forEach(e => { e.remove() })\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const center = context.figure.selectedElements[0] as Point\r\n                const origin = event.element as Point\r\n                const angle = context.temp.values[0]\r\n                context.figure.create('PointByRotation', { angle, center, origin })\r\n                context.figure.saveState()\r\n                context.figure.selectedElements[0] = center\r\n              },\r\n              cond: (_, event) => event.element instanceof Point,\r\n              target: 'waitingForPoint'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    SAVE: {\r\n      entry: (context) => {\r\n        const jsonContent = context.figure.getJsonWithHistory()\r\n        const blob = new Blob([jsonContent], { type: 'text/plain' })\r\n        const url = window.URL.createObjectURL(blob)\r\n\r\n        const a = document.createElement('a')\r\n        a.style.display = 'none'\r\n        a.href = url\r\n        a.download = 'figure.json'\r\n        document.body.appendChild(a)\r\n        a.click()\r\n        window.URL.revokeObjectURL(url)\r\n        document.body.removeChild(a)\r\n        context.figure.buttons.get('DRAG')?.click()\r\n      }\r\n    },\r\n    SEGMENT: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur la première extrémité du segment.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  context.figure.tempCreate('Segment', {\r\n                    point1: context.figure.selectedElements[0] as Point,\r\n                    point2: context.figure.pointer\r\n                  })\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer sur la deuxième extrémité du segment.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[1] = newPoint\r\n                  const [point1, point2] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Point\r\n                  ]\r\n                  context.figure.create('Segment', { point1, point2 })\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    SET_OPTIONS: {\r\n      entry: (context) => {\r\n        context.figure.filter = (e) => e instanceof Element2D\r\n      },\r\n      on: {\r\n        clickLocation: {\r\n          actions: (context, event) => {\r\n            const element = event.element\r\n            if (element !== undefined) {\r\n              element.color = context.figure.options.color\r\n              element.thickness = context.figure.options.thickness\r\n              if ('isDashed' in element) element.isDashed = context.figure.options.isDashed\r\n              // if ('fillColor' in element) element.fillColor = context.figure.options.fillColor\r\n              // if ('fillOpacity' in element) element.fillOpacity = context.figure.options.fillOpacity\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    SHAKE: {\r\n      always: 'DRAG',\r\n      entry: async (context) => {\r\n        await context.figure.shake()\r\n        context.figure.saveState()\r\n      }\r\n    },\r\n    TRANSLATION: {\r\n      exit: (context) => {\r\n        context.temp.elements.forEach((e) => {\r\n          e.isSelected = false\r\n        })\r\n      },\r\n      initial: 'waitingForFistPoint',\r\n      states: {\r\n        waitingForFistPoint: {\r\n          entry: (context) => {\r\n            context.figure.filter = (e) => e instanceof Point\r\n            userMessage('Cliquer sur le premier point qui définit de la translation.', context.figure)\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const point1 = event.element as Point\r\n                context.temp.elements[0] = point1\r\n                point1.isSelected = true\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForSecondPoint'\r\n            }\r\n          }\r\n        },\r\n        waitingForOrigin: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur l\\'objet à transformer.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point || e instanceof Segment || e instanceof Circle || e instanceof Polygon\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const [point1, point2] = context.temp.elements as [Point, Point]\r\n                const origin = event.element\r\n                context.figure.create('ElementByTranslationByPoints', { origin, point1, point2 })\r\n                context.figure.saveState()\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForOrigin'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondPoint: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur le deuxième point qui définit de la translation.', context.figure)\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const point2 = event.element as Point\r\n                context.temp.elements[1] = point2\r\n                point2.isSelected = true\r\n              },\r\n              cond: (_, event) => event.element !== undefined,\r\n              target: 'waitingForOrigin'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    UNDO: {\r\n      entry: (context) => {\r\n        context.figure.undo()\r\n        context.figure.buttons.get('DRAG')?.click()\r\n      }\r\n    },\r\n    VECTOR: {\r\n      initial: 'waitingForFirstElement',\r\n      states: {\r\n        waitingForFirstElement: {\r\n          entry: (context) => {\r\n            userMessage('Cliquer sur l\\'origine de la représentation du vecteur.', context.figure)\r\n            context.figure.filter = (e) => e instanceof Point\r\n          },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[0] = newPoint\r\n                  context.figure.tempCreate('Segment', {\r\n                    point1: context.figure.selectedElements[0] as Point,\r\n                    point2: context.figure.pointer,\r\n                    shape: '->'\r\n                  })\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForSecondElement'\r\n            }\r\n          }\r\n        },\r\n        waitingForSecondElement: {\r\n          entry: (context) => { userMessage('Cliquer sur l\\'extrémité de la représentation du vecteur.', context.figure) },\r\n          on: {\r\n            clickLocation: {\r\n              actions: (context, event) => {\r\n                const newPoint = getExistingPointOrCreatedPoint(context, event)\r\n                if (newPoint !== undefined) {\r\n                  context.figure.selectedElements[1] = newPoint\r\n                  const [point1, point2] = context.figure.selectedElements as [\r\n                    Point,\r\n                    Point\r\n                  ]\r\n                  context.figure.create('VectorByPoints', { origin: point1, point1, point2 })\r\n                  point1.color = ''\r\n                  point2.color = ''\r\n                  context.figure.saveState()\r\n                }\r\n              },\r\n              cond: (_, event) => getExistingPointOrCreatetPoindWasASuccess(event),\r\n              target: 'waitingForFirstElement'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n},\r\n{\r\n  actions: {\r\n    eraseTempElements: (context) => {\r\n      context.figure.tmpElements.forEach(e => { e.remove() })\r\n    },\r\n    highlightButton: (context, event) => {\r\n      const button = context.figure.buttons.get(event.type)\r\n      if (button !== undefined) {\r\n        button.style.backgroundColor = orangeMathaleaLight\r\n      }\r\n      context.figure.buttons.forEach((value, key) => {\r\n        if (key !== event.type) {\r\n          value.style.backgroundColor = 'white'\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n)\r\n\r\nfunction getExistingPointOrCreatedPoint (context: MyContext, event: MyEvent): Point | undefined {\r\n  if (event.element instanceof Point) {\r\n    return event.element\r\n  }\r\n  const [x, y] = [event.x as number, event.y as number]\r\n  if (event.possibleElements !== undefined && event.possibleElements.length === 2) {\r\n    if (event.possibleElements[0] instanceof Segment && event.possibleElements[1] instanceof Segment) {\r\n      return context.figure.create('PointIntersectionLL', { line1: event.possibleElements[0], line2: event.possibleElements[1] })\r\n    }\r\n  }\r\n  if (event.element instanceof Segment) {\r\n    const [point1, point2] = [event.element.point1, event.element.point2]\r\n    const k = ((x - point1.x) * (point2.x - point1.x) + (y - point1.y) * (point2.y - point1.y)) / (distance(point1, point2) ** 2)\r\n    return context.figure.create('PointOnLine', { k, line: event.element })\r\n  }\r\n  if (event.waitingWithModal === true) return undefined\r\n  return context.figure.create('Point', { x, y })\r\n}\r\n\r\nfunction getExistingPointOrCreatetPoindWasASuccess (event: MyEvent): boolean {\r\n  return event.waitingWithModal === false\r\n}\r\n\r\nfunction userMessage (text: string, figure: Figure): void {\r\n  if (!figure.options.automaticUserMessage) return\r\n  const div = figure.divUserMessage\r\n  if (div != null) div.innerHTML = figure.isDynamic ? text : ''\r\n}\r\n\r\nfunction testRadiusIsSegment (radius: any, figure: Figure): [Point, Point] | undefined {\r\n  if (radius === undefined || typeof radius !== 'string') return\r\n  const [label1, label2] = radius.split('')\r\n  const points = [...figure.elements.values()].filter(e => e.type !== 'pointer' && e.type?.includes('Point')) as Point[]\r\n  const matchPoints1 = points.filter(p => p.label === label1)\r\n  const matchPoints2 = points.filter(p => p.label === label2)\r\n  if (matchPoints1.length !== 1 || matchPoints2.length !== 1) return\r\n  return [matchPoints1[0], matchPoints2[0]]\r\n}\r\n\r\nexport default ui\r\n","import { interpret } from 'xstate'\r\n\r\nimport Figure from './Figure'\r\nimport ui from './uiMachine'\r\n\r\nclass SuperFigure extends Figure {\r\n  constructor ({ border = false, dx = 1, dy = 1, height = 400, isDynamic = true, pixelsPerUnit = 30, scale = 1, snapGrid = false, width = 400, xMin = -10, xScale = 1, yMin = -6, yScale = 1 }: { border?: boolean, dx?: number, dy?: number, height?: number, isDynamic?: boolean, pixelsPerUnit?: number, scale?: number, snapGrid?: boolean, width?: number, xMin?: number, xScale?: number, yMin?: number, yScale?: number } = {}) {\r\n    super({ border, dx, dy, height, isDynamic, pixelsPerUnit, scale, snapGrid, width, xMin, xScale, yMin, yScale })\r\n    const machineWithContext = ui.withContext({ figure: this, temp: { elements: [], htmlElement: [], values: [] } })\r\n    this.ui = interpret(machineWithContext).start()\r\n  }\r\n}\r\n\r\nexport default SuperFigure\r\n"],"names":["__assign","s","i","p","__rest","e","t","__values","o","m","__read","n","r","ar","error","__spreadArray","to","from","pack","l","ActionTypes","SpecialTargets","start","stop","raise","send","cancel","nullEvent","assign","log","init","invoke","errorPlatform","update","choose","pure","STATE_DELIMITER","EMPTY_ACTIVITY_MAP","DEFAULT_GUARD_TYPE","TARGETLESS_KEY","_a","matchesState","parentStateId","childStateId","delimiter","parentStateValue","toStateValue","childStateValue","isString","key","getEventType","event","toStatePath","stateId","isArray","isStateLike","state","stateValue","pathToStateValue","statePath","value","marker","mapValues","collection","iteratee","result","collectionKeys","mapFilterValues","predicate","e_1","_b","_c","item","e_1_1","path","props","object","e_2","props_1","props_1_1","prop","e_2_1","nestedPath","accessorProp","e_3","props_2","props_2_1","e_3_1","toStatePaths","flatten","subStateValue","subPath","array","toArrayStrict","toArray","mapContext","mapper","context","_event","e_5","isFunction","subMapper","e_5_1","isBuiltInEvent","eventType","isPromiseLike","isBehavior","partition","items","e_6","truthy","falsy","items_1","items_1_1","e_6_1","updateHistoryStates","hist","subHist","updateHistoryValue","updateContext","assignActions","updatedContext","acc","assignAction","e_7","assignment","meta","partialUpdate","propAssignment","e_7_1","warn","toGuard","condition","guardMap","isObservable","symbolObservable","isMachine","isActor","toEventObject","payload","toSCXMLEvent","scxmlEvent","eventObject","toTransitionConfigArray","configLike","transitions","transitionLike","normalizeTarget","target","evaluateGuard","machine","guard","guards","guardMeta","condFn","toInvokeSource","src","toObserver","nextHandler","errorHandler","completionHandler","noop","isObserver","self","createInvokeId","stateNodeId","index","isRaisableAction","action","initEvent","getActionFunction","actionType","actionFunctionMap","toActionObject","actionObject","exec","toActionObjects","actions","subAction","toActivityDefinition","options","raise$1","resolveRaise","ctx","delaysMap","resolvedEvent","resolvedDelay","configDelay","send$1","resolveSend","resolvedTarget","resolveLog","sendId","cancel$1","activity","activityDef","actorRef","resolveStop","actorRefOrString","resolvedActorRef","after","delayRef","id","idSuffix","done","data","type","doneInvoke","pluckAssigns","actionBlocks","actionBlocks_1","actionBlocks_1_1","block","assign$1","resolveActions","currentState","currentContext","predictableExec","preserveActionOrder","preservedContexts","deferredToBlockEnd","handleAction","blockType","raisedAction","sendAction","log$1","resolved","choose$1","chooseAction","matchedActions","resolvedActionsFromChoose","resolvedContextFromChoose","pure$1","resolvedActionsFromPure","resolvedContext","stop$1","resolvedActionObject","exec_1","contextIndex_1","wrapped","_ctx","args","_i","processBlock","resolvedActions","serviceStack","provide","service","fn","createNullActor","createInvocableActor","invokeDefinition","invokeSrc","serviceCreator","resolvedData","tempActor","createDeferredActor","entity","initialState_1","isSpawnedActor","toActorRef","actorRefLike","isLeafNode","stateNode","getAllChildren","getChildren","sn","getAllStateNodes","stateNodes","getConfiguration","prevStateNodes","e_4","_d","prevConfiguration","prevAdjList","getAdjList","configuration","configuration_1","configuration_1_1","adjList","configuration_2","configuration_2_1","_e","_f","child","configuration_3","configuration_3_1","e_4_1","getValueFromAdj","baseNode","childStateNodes","childStateNode","csn","configuration_4","configuration_4_1","getValue","rootNode","config","has","iterable","member","nextEvents","isInFinalState","getMeta","getTagsFromConfiguration","stateValuesEqual","a","b","aKeys","bKeys","isStateConfig","bindActionToState","boundAction","State","_this","valueKeys","tags","jsonValues","tag","transitionData","defaultOptions","Scheduler","callback","task","nextCallback","children","sessionIdIndex","registry","actor","getGlobal","getDevTools","global","registerService","devTools","spawnBehavior","behavior","observers","mailbox","flushing","flush","event_1","actorCtx","observer","next","handleError","complete","DEFAULT_SPAWN_OPTIONS","InterpreterStatus","Interpreter","nextState","immediate","isParent","error$1","actionOrExec","err","sendAction_1","invokeSource","autoForward","source","label","resolvedOptions","clock","logger","parent","resolvedId","actionsConfig","listener","_g","_h","_j","_k","contextListener","finalChildStateNode","doneData","_l","_m","nextListenerOrObserver","_","completeListener","completeOnce","initialState","resolvedState","e_8","e_9","e_10","e_8_1","_o","e_9_1","_p","_q","e_10_1","scheduler","exitActions","newState","events","e_11","batchChanged","batchedActions","_loop_1","events_1","events_1_1","e_11_1","nextEvent","e_12","e_12_1","timerId","childId","name","childService","doneEvent","promise","canceled","response","errorData","errorEvent","unsubscribed","receivers","listeners","emitted","receive","callbackStop","newListener","receiver","subscription","implementation","dispose","devToolsOptions","ms","interpret","interpreter","simpleSrc","toInvokeDefinition","invokeConfig","invokeDef","NULL_EVENT","STATE_IDENTIFIER","WILDCARD","EMPTY_OBJECT","isStateId","str","createDefaultOptions","StateNode","_context","_stateInfo","stateConfig","order","dfs","invokeId","activities","services","delays","map","transition","eventName","transient","candidates","sameEventType","afterConfig","mutateEntryExit","delay","delayedTransitions","configTransition","resolvedTransition","delayedTransition","initialStateValue","subStateKeys","subStateNodes","subStateKey","stateFromConfig","transitionMap","subStateNode","stateTransitions","enabledTransitions","st","willTransition","nextStateNodes","selectedTransition","candidate","cond","stateIn","isInState","guardPassed","allNextStateNodes","isInternal","targetNode","nodes","possibleAncestor","resolvedConfig","isDone","prevState","prevConfig","entrySet","prevConfig_1","prevConfig_1_1","entryStates","exitStates","doneEvents","grandparent","parentNode","entryActions","invokeActions","stopActions","resolvedStateValue","stateTransition","originalEvent","currentActions","resolvedConfiguration","historyValue","start$1","raisedEvents","nonRaisedActions","didUpdateContext","history","hasAlwaysTransitions","maybeNextState","raisedEvent","changed","stateKey","resolvedStateId","arrayStatePath","currentStateNode","stateIdentifier","historyConfig","relativeStateId","resolve","initialStateNodePaths","initialPath","relativePath","childStatePath","relativeStateValue","historyTarget","relativeChildPath","subHistoryValue","subStatePath","childStateIds","states","_target","isInternalTarget","targetStateNode","transitionConfig","normalizedTarget","internal","onConfig","wildcardConfigs","strictTransitionConfigs_1","transitionConfigArray","eventlessConfig","doneConfig","settleTransitions","formattedTransitions","delayedTransitions_1","delayedTransitions_1_1","createMachine","loadJson","figure","json","eraseHistory","center","dynamicAngle","radius","startAngle","endAngle","origin","pointOnSide1","pointOnSide2","point","point1","point2","line","circle","vector","segment","factor","line1","line2","circle1","circle2","graph","points","idPoint","dynamicNumber","defaultDistanceClick","defaultHistorySize","displayDigits","defaultMaxSlope","defaultMinSlope","defaultDeltaXModal","defaultButtonsWidth","defaultFooterHeight","defaultMinWidth","defaultMinHeight","defaultDivUserMessageHeight","defaultDivUserMessageFontSize","defaultDragAllDelta","colors","orangeMathalea","orangeMathaleaLight","Coords","x","y","intersectionCCCoord","O1","O2","r0","r1","x0","x1","y0","y1","dx","dy","d","x2","y2","h","rx","ry","xi","xiPrime","yi","yiPrime","intersectionLLCoord","da","db","dc","fa","fb","fc","isIntersectionExisting","distance","A","B","intersectionLCCoord","D","C","O","c","xO","yO","Delta","delta","orthogonalProjectionCoord","k","rotationCoord","angle","homothetieCoord","similitudeCoord","angleRadian","reflectOverLineCoord","angleOriented","v","u","OA","OB","scalaire","round","precision","displayNumber","syncShake","repeat","time","timePeranimation","nearX","newX","nearY","newY","freePoints","checkAngle","label1","label2","label3","matchPoints1","matchPoints2","matchPoints3","isValid","point3","calculAngle","checkCoords","checkOnlyAbscissa","matchPoints","message","checkDistance","shake","calculDistance","checkParallel","matchPointsA","matchPointsB","matchPointsC","matchPointsD","pointA","pointB","pointC","pointD","checkSameDistance","checkVector","labelOrigin","labelPoint2","xOrigin","yOrigin","matchVectors","verifOnlyLabelOrigin","matchVectors2","verifOnlyLabelOriginAndPoint2","verifOnlyOrigin","verifOnlyLabelOriginAndOrigin","verifLabelOriginAndPoint2AndOrigin","milliseconds","DynamicNumber","isChild","textAfter","textBefore","cpt","color","maximumFractionDigits","minimumFractionDigits","element","Angle","end","Distance","DynamicCalcul","calculus","dynamicNumbers","values","DynamicX","DynamicY","Element2D","isDashed","isSelectable","isVisible","thickness","__","changeThickness","isHover","isSelected","Graph","expression","prohibitedValues","step","xMax","xMin","fNode","math.parse","pointsCoords","getListOfPoints","f","Graph2","Grid","axeX","axeY","grid","labelX","labelY","stepX","stepY","subGrid","subGridDivisions","yMax","yMin","svgAxeX","svgLine","svgAxeY","svgGrid","svgSubGrid","getLargeSweep","large","sweep","normalizeAngle","polarToCartesian","angleInDegrees","angleInRadians","Arc","addBorders","fillColor","fillOpacity","opacity","ArcBy3PointsAndRadius","tempLine","newStart","Const","ArcByCenterRadiusAndAngles","Segment","borderSize","shape","newPoint1","newPoint2","newSegment","pointerCoords","distanceToP1","distanceToP2","segmentLength","projection","closestX","closestY","x1Svg","x2Svg","y1Svg","y2Svg","axSvg","aySvg","allAreNumbers","bxSvg","bySvg","point1Name","point2Name","numbers","number","Ray","rayDirection","rayLength","normalizedRayDirection","getRayCoordsOut","parentFigure","pente","xOutLeft","yOutLeft","BisectorByPoints","bisectorPoint","originName","pointOnSide1Name","pointOnSide2Name","Circle","newCenter","newCircle","distanceToCenter","xSvg","ySvg","rSvg","CircleCenterDynamicRadius","CircleCenterPoint","newPoint","centerName","pointName","Line","projectionCoords","getCoordsOut","xOutRight","yOutRight","LineByPointVector","LineParallel","LinePerpendicular","PerpendicularBisector","middlePoint","PerpendicularBisectorByPoints","Polygon","isBuiltWithSegments","newPoints","newPolygon","minDistance","idPoints","allCoordsAreNumber","Polyline","Point","colorLabel","isFree","labelDxInPixels","labelDyInPixels","sizeInPixels","x3Svg","x4Svg","y3Svg","y4Svg","M","dilated","pointerX","pointerY","arc","angleStart","angleEnd","polygon","reflected","size","Barycenter","Middle","coordsMiddle","PointOnGraph","abscissa","ordinate","PointByDilate","PointByDynamicDilate","dynamicK","PointByRotation","PointByDynamicRotation","PointByProjection","lineName","PointByProjectionOnAxisX","PointByProjectionOnAxisY","PointByReflect","PointByReflectOverLine","PointBySimilarity","PointByTranslation","PointByTranslationByPoints","PointIntersectionCC","coords","circle1Name","circle2Name","PointIntersectionLC","circleName","PointIntersectionLL","line1Name","line2Name","PointOnCircle","angleWithHorizontal","PointOnLine","isPositive","ray","PointOnLineAtDistance","PointsIntersectionCC","PointsIntersectionLC","TextByPosition","anchor","backgroundColor","dxInPixels","dyInPixels","fontSize","text","superOptions","alignment","alignmentString","renderMathInElement","chaine","styleTransform","MarkSegment","TextByPoint","oldX","oldY","TextDynamicByPosition","ElementByReflectOverLine","optionsWithoudId","ElementByTranslationByPoints","Vector","VectorByPoints","VectorUnitPerpendicular","handleHover","elements","handlePointerAction","possibleElements","elementsFiltered","sendToMachine","elementText","divs","div","waitingWithModal","bisectorByPoints","circleCompass","circlePoint","cursor","description","dilate","drag","dragAll","fill","hide","informations","latex","latexSvg","lineParallel","linePerpendicular","markAngle","matkSegment","mesureAngle","mesureSegment","middle","moveLabel","namePoint","open","pause","perpendicularBisector","play","playSkipBack","playSkipForward","pointIntersection","pointOn","redo","reflection","reflectionOverLine","remove","restart","rotate","save","setOptions","translation","undo","availableIcons","addButtons","list","imgList","buttons","button","img","icon","addColorPalette","translateColor","showSelectedColor","colorMap","dashed","noDashed","addDashedChoice","choice","showSelectedStyle","image","addThicknessChoice","title","range","setToolbar","nbCols","position","showStyles","tools","defaultTools","imgs","divStyles","Figure$1","border","height","isDynamic","pixelsPerUnit","scale","snapGrid","width","xScale","yScale","getMaxSize","style","typeStr","classes","filter","rect","currentIsDynamic","newContainer","direction","isModalOpen","btnRedo","btnUndo","stopDrag","lastRedo","parentContainer","tikz","lastUndo","ul","li","VectorPerpendicular","modal","createDialoxBoxRadius","dialog","input","createDialoxBoxK","createDialoxBoxName","createDialoxBoxAngle","createModalDescription","selectionRectangle","buttonSvg","buttonLatex","container","rectangleContainer","containerLeft","containerTop","isNearCorner","isNearLeftCorner","isNearRightCorner","isNearTopCorner","isNearBottomCorner","isNearTopLeftCorner","isNearTopRightCorner","isNearBottomLeftCorner","isNearBottomRightCorner","left","top","resize","stopResize","ui","userMessage","getExistingPointOrCreatedPoint","getExistingPointOrCreatetPoindWasASuccess","testRadiusIsSegment","dynamicRadius","blob","url","svg","file","reader","readerEvent","content","limitNumberOfPoint","noLimit","limitReached","indiceName","element1","element2","last","first","isClickOnFirstPoint","jsonContent","SuperFigure","Figure","machineWithContext"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154]}