presenter 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/export.js +15 -15
- package/dist/export.js.map +1 -1
- package/dist/export.mjs +233 -226
- package/dist/export.mjs.map +1 -1
- package/dist/objects/Grid.d.ts +2 -0
- package/dist/objects/Group.d.ts +7 -0
- package/dist/presenter.js +2 -2
- package/dist/presenter.js.map +1 -1
- package/dist/presenter.mjs +581 -552
- package/dist/presenter.mjs.map +1 -1
- package/dist/renderer/browser-canvas/types/BrowserCanvasRendererProps.d.ts +1 -0
- package/dist/types/Update.d.ts +2 -1
- package/package.json +1 -1
package/dist/presenter.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presenter.mjs","sources":["../src/types/AnimationType.ts","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-ease/src/back.js","../src/types/Easing.ts","../src/types/Animate.ts","../src/animations/FadeIn.ts","../src/animations/FadeOut.ts","../src/types/Update.ts","../src/animations/Hide.ts","../src/animations/Show.ts","../src/types/Anchor.ts","../src/types/Color.ts","../src/types/SlideWebExtra.ts","../src/utils/color/getAlphaForColor.ts","../src/utils/color/getHexStringForColor.ts","../src/extras/IFrame.ts","../src/types/Alignment.ts","../src/utils/core/assertNever.ts","../src/extras/ScreenCapture.ts","../src/types/ObjectType.ts","../src/types/SlideObject.ts","../src/objects/Arrow.ts","../src/objects/Circle.ts","../src/objects/Group.ts","../src/objects/Grid.ts","../src/objects/Image.ts","../src/objects/Line.ts","../src/objects/Mask.ts","../node_modules/svg-path-properties/dist/main.mjs","../src/utils/color/Transparent.ts","../src/objects/Path.ts","../src/objects/Polygon.ts","../src/objects/Rectangle.ts","../src/objects/SVG.ts","../src/types/FontStyle.ts","../src/types/FontWeight.ts","../src/types/TextStyle.ts","../src/utils/objects/text/getTextUnitsFromTextContent.ts","../src/utils/objects/text/getTextContentLength.ts","../src/objects/Text.ts","../src/navigator/openNavigator.ts","../src/types/Size.ts","../src/types/Presentation.ts","../src/utils/animate/getSlideAnimationDuration.ts","../src/utils/color/getRgbStringForColor.ts","../src/utils/presentation/isFullBodyPresentation.ts","../src/utils/presentation/createPresentationContainer.ts","../src/utils/interpolate/interpolateColor.ts","../src/utils/interpolate/interpolateFallback.ts","../src/utils/interpolate/interpolateNumber.ts","../src/utils/interpolate/defaultInterpolators.ts","../src/utils/interpolate/interpolate.ts","../src/utils/animate/updateObjectStateWithAnimation.ts","../src/utils/presentation/getObjectChildren.ts","../src/utils/presentation/getObjectState.ts","../src/utils/presentation/getSvgImageUrlById.ts","../src/utils/presentation/getPresentationShortcuts.ts","../src/utils/presentation/setupKeyEventListeners.ts","../src/utils/storage/storageConsts.ts","../src/utils/storage/loadPresentationState.ts","../src/utils/storage/storePresentationState.ts","../src/renderer/browser-canvas/types/BrowserCanvasRendererState.ts","../src/renderer/browser-canvas/types/UnifiedCanvasContext.ts","../src/renderer/browser-canvas/utils/clearCanvas.ts","../src/renderer/browser-canvas/utils/createCanvasElement.ts","../src/renderer/browser-canvas/types/UnifiedPath2D.ts","../src/renderer/browser-canvas/utils/createPath2D.ts","../src/utils/objects/arrow/getArrowPoints.ts","../src/renderer/browser-canvas/utils/drawStroke.ts","../src/renderer/browser-canvas/utils/fillPath.ts","../src/renderer/browser-canvas/utils/getPathFromPoints.ts","../src/renderer/browser-canvas/objects/renderArrow.ts","../src/utils/objects/circle/getCircleInsetFillPath.ts","../src/utils/objects/circle/getCirclePath.ts","../src/renderer/browser-canvas/utils/clipToPath.ts","../src/renderer/browser-canvas/objects/renderCircle.ts","../src/types/Position.ts","../src/types/BoundingBox.ts","../src/utils/layout/getBoundingBox.ts","../src/renderer/browser-canvas/objects/renderGroup.ts","../src/utils/objects/rectangle/getRoundedRectanglePath.ts","../src/renderer/browser-canvas/types/UnifiedImage.ts","../src/renderer/browser-canvas/objects/renderImage.ts","../src/utils/objects/line/getLinePath.ts","../src/renderer/browser-canvas/objects/renderLine.ts","../src/renderer/browser-canvas/objects/renderMask.ts","../src/renderer/browser-canvas/objects/renderPath.ts","../src/utils/objects/polygon/getPolygonPath.ts","../src/renderer/browser-canvas/objects/renderPolygon.ts","../src/utils/objects/rectangle/getRectangleInsetFillPath.ts","../src/utils/objects/rectangle/getRectanglePath.ts","../src/renderer/browser-canvas/objects/renderRectangle.ts","../src/renderer/browser-canvas/objects/renderSvg.ts","../src/utils/objects/text/getTextStyleFromText.ts","../src/utils/size/getCombinedSizes2D.ts","../src/renderer/browser-canvas/utils/getSizeFromTextMetrics.ts","../src/renderer/browser-canvas/utils/text/setContextWithTextStyle.ts","../src/renderer/browser-canvas/utils/text/getTextUnitMeasurements.ts","../src/renderer/browser-canvas/objects/renderText.ts","../src/renderer/browser-canvas/utils/defaultObjectRenderers.ts","../src/renderer/browser-canvas/utils/extras/createExtrasElement.ts","../src/renderer/browser-canvas/utils/extras/mountWebExtra.ts","../src/renderer/browser-canvas/utils/loadPresentationImages.ts","../src/renderer/browser-canvas/BrowserCanvasRenderer.ts","../src/types/Pause.ts","../src/types/Slide.ts","../src/types/TextUnit.ts","../src/utils/color/Opaque.ts","../node_modules/d3-polygon/src/area.js","../node_modules/d3-polygon/src/length.js","../node_modules/svgpath/lib/path_parse.js","../node_modules/svgpath/lib/matrix.js","../node_modules/svgpath/lib/transform_parse.js","../node_modules/svgpath/lib/a2c.js","../node_modules/svgpath/lib/ellipse.js","../node_modules/svgpath/lib/svgpath.js","../node_modules/svgpath/index.js","../node_modules/flubber/node_modules/svg-path-properties/src/parse.js","../node_modules/flubber/node_modules/svg-path-properties/src/bezier.js","../node_modules/flubber/node_modules/svg-path-properties/src/a2c.js","../node_modules/flubber/node_modules/svg-path-properties/src/arc.js","../node_modules/flubber/node_modules/svg-path-properties/src/linear.js","../node_modules/flubber/node_modules/svg-path-properties/src/path-properties.js","../node_modules/flubber/src/math.js","../node_modules/flubber/src/errors.js","../node_modules/flubber/src/svg.js","../node_modules/flubber/src/add.js","../node_modules/flubber/src/normalize.js","../node_modules/flubber/src/rotate.js","../node_modules/flubber/src/interpolate.js","../node_modules/earcut/src/earcut.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../src/utils/interpolate/getSmoothPathInterpolator.ts","../src/utils/layout/getSizingFunctions.ts","../src/utils/slide/getKeySlideBuildIndices.ts"],"sourcesContent":["export const AnimationType = {\n /** Represents an animated change in an object's properties. */\n ANIMATE: \"Animate\",\n\n /** Represents a pause in the animation timeline. */\n PAUSE: \"Pause\",\n\n /** Represents an immediate update to an object's properties without animation. */\n UPDATE: \"Update\",\n} as const;\n\nexport type AnimationType = (typeof AnimationType)[keyof typeof AnimationType];\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","import { easeBackInOut, easeCubic, easeCubicIn, easeCubicOut } from \"d3-ease\";\n\nimport { EasingFunction } from \"./EasingFunction\";\n\nexport const Easing = {\n LINEAR: (t: number) => t,\n CUBIC: easeCubic,\n CUBIC_IN: easeCubicIn,\n CUBIC_OUT: easeCubicOut,\n BACK_IN_OUT: easeBackInOut.overshoot(0.8),\n} as const satisfies Record<string, EasingFunction>;\n\nexport const DEFAULT_EASING: EasingFunction = Easing.LINEAR;\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\nimport { DEFAULT_EASING } from \"./Easing\";\nimport { EasingFunction } from \"./EasingFunction\";\nimport { Interpolator } from \"./Interpolator\";\nimport { SlideObject } from \"./SlideObject\";\n\nexport interface Animate<T extends SlideObject> extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.ANIMATE;\n readonly object: T;\n readonly props: Partial<Omit<T, \"objectType\">>;\n readonly delay: number;\n readonly duration: number;\n readonly easing: EasingFunction;\n\n /** Whether animation should block future animations from starting. */\n readonly block: boolean;\n\n /** Custom interpolators to use for performing animation. */\n readonly interpolators: Interpolator<any>[] | null;\n}\n\nexport type AnimationParams<T extends SlideObject> = Partial<Omit<Animate<T>, \"object\" | \"props\">>;\n\nexport function Animate<T extends SlideObject>(\n object: T,\n props: Partial<Omit<T, \"objectType\">>,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return {\n type: AnimationType.ANIMATE,\n object,\n props,\n delay: 0,\n duration: 1000,\n easing: DEFAULT_EASING,\n block: false,\n interpolators: null,\n isKey: false,\n shortcut: null,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n };\n}\n","import { Animate, AnimationParams } from \"../types/Animate\";\nimport { Easing } from \"../types/Easing\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport function FadeIn<T extends SlideObject>(\n object: T,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return Animate(object, { opacity: 1 } as Partial<T>, {\n duration: 500,\n easing: Easing.CUBIC,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n });\n}\n","import { Animate, AnimationParams } from \"../types/Animate\";\nimport { Easing } from \"../types/Easing\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport function FadeOut<T extends SlideObject>(\n object: T,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return Animate(object, { opacity: 0 } as Partial<T>, {\n duration: 500,\n easing: Easing.CUBIC,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n });\n}\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\nimport { SlideObject } from \"./SlideObject\";\n\nexport interface Update<T extends SlideObject> extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.UPDATE;\n readonly object: T;\n readonly props: Partial<Omit<T, \"objectType\">>;\n}\n\nexport function Update<T extends SlideObject>(\n object: T,\n props: Partial<Omit<T, \"objectType\">>,\n): Update<T> {\n return {\n type: AnimationType.UPDATE,\n isKey: false,\n object,\n props,\n shortcut: null,\n };\n}\n","import { SlideObject } from \"../types/SlideObject\";\nimport { Update } from \"../types/Update\";\n\nexport function Hide<T extends SlideObject>(object: T): Update<T> {\n return Update(object, { opacity: 0 } as Partial<T>);\n}\n","import { SlideObject } from \"../types/SlideObject\";\nimport { Update } from \"../types/Update\";\n\nexport function Show<T extends SlideObject>(object: T): Update<T> {\n return Update(object, { opacity: 1 } as Partial<T>);\n}\n","export const Anchor = {\n TOP_LEFT: \"TopLeft\",\n TOP: \"Top\",\n TOP_RIGHT: \"TopRight\",\n LEFT: \"Left\",\n CENTER: \"Center\",\n RIGHT: \"Right\",\n BOTTOM_LEFT: \"BottomLeft\",\n BOTTOM: \"Bottom\",\n BOTTOM_RIGHT: \"BottomRight\",\n} as const;\n\nexport type Anchor = (typeof Anchor)[keyof typeof Anchor];\n\nexport const DEFAULT_ANCHOR: Anchor = Anchor.TOP_LEFT;\n","export interface Color {\n /** Red channel, in [0, 255] */\n red: number;\n\n /** Green channel, in [0, 255] */\n green: number;\n\n /** Blue channel, in [0, 255] */\n blue: number;\n\n /** Alpha channel, in [0, 1] */\n alpha: number;\n}\n\nexport function Color(color: Partial<Color> | string): Color;\nexport function Color(red: number, green: number, blue: number, alpha?: number): Color;\nexport function Color(\n color: Partial<Color> | string | number,\n green: number = 0,\n blue: number = 0,\n alpha: number = 1,\n): Color {\n if (typeof color === \"string\") {\n const hexString = color.replace(\"#\", \"\");\n const hex = parseInt(hexString, 16);\n\n if (isNaN(hex)) {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n\n if (hexString.length === 6) {\n return {\n red: (hex >> 16) & 255,\n green: (hex >> 8) & 255,\n blue: hex & 255,\n alpha: 1,\n };\n } else if (hexString.length === 8) {\n return {\n red: (hex >> 24) & 255,\n green: (hex >> 16) & 255,\n blue: (hex >> 8) & 255,\n alpha: (hex & 255) / 255,\n };\n } else {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n } else if (typeof color === \"number\") {\n return {\n red: color,\n green: green ?? 0,\n blue: blue ?? 0,\n alpha: alpha ?? 1,\n };\n }\n\n return {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 1,\n ...color,\n };\n}\n\nColor.BLACK = Color(0, 0, 0);\nColor.BLUE = Color(0, 0, 255);\nColor.GREEN = Color(0, 255, 0);\nColor.RED = Color(255, 0, 0);\nColor.TRANSPARENT = Color(0, 0, 0, 0);\nColor.WHITE = Color(255, 255, 255);\n\nexport const DEFAULT_COLOR: Color = { red: 0, green: 0, blue: 0, alpha: 1 };\n","import { Anchor } from \"./Anchor\";\n\n/**\n * A \"Web Extra\" is additional HTML/JavaScript content added to a slide. This\n * allows embedded arbitrary web content on a slide. This content is not part of\n * the core slide content, and will not be produced by non-web renderers like\n * PDF/image renderers, but can be used to enhance web-based presentations.\n */\nexport interface SlideWebExtra {\n /** HTML element that will be added to the presentation. */\n readonly content: HTMLElement | null;\n\n /**\n * Setup function that will be called when the extra is mounted.\n * It can optionally return a cleanup function that will be called\n * when the extra is unmounted.\n */\n readonly setup: ((foreignObject: SVGForeignObjectElement) => void | (() => void)) | null;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function SlideWebExtra(props: Partial<SlideWebExtra> | null = null): SlideWebExtra {\n return {\n content: null,\n setup: null,\n anchor: Anchor.TOP_LEFT,\n height: 0,\n width: 0,\n x: 0,\n y: 0,\n ...props,\n };\n}\n","import { Color } from \"../../types/Color\";\n\n/**\n * Returns the alpha value for a color in [0, 1], given the color and the overall opacity of a shape.\n * Combines the color's alpha and the overall opacity.\n */\nexport function getAlphaForColor(color: Color, opacity: number | null = null): number {\n return color.alpha * (opacity ?? 1);\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getHexStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const hex = (red << 16) | (green << 8) | blue;\n const alphaHex = Math.round(getAlphaForColor(color, opacity) * 255);\n return `#${hex.toString(16).padStart(6, \"0\")}${alphaHex !== 255 ? alphaHex.toString(16).padStart(2, \"0\") : \"\"}`;\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { SlideWebExtra } from \"../types/SlideWebExtra\";\nimport { getHexStringForColor } from \"../utils/color/getHexStringForColor\";\n\nexport interface IFrame {\n readonly url: string;\n readonly backgroundColor: Color;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly pointerEvents: string;\n readonly scale: number;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function IFrame(props: Partial<IFrame> | null = null): SlideWebExtra {\n const {\n url = \"https://wikipedia.org/\",\n backgroundColor = Color.TRANSPARENT,\n borderColor = DEFAULT_COLOR,\n borderWidth = 0,\n pointerEvents = \"auto\",\n scale = 1,\n anchor = DEFAULT_ANCHOR,\n height = 1000,\n width = 1000,\n x = 0,\n y = 0,\n } = props || {};\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n iframe.style.backgroundColor = getHexStringForColor(backgroundColor);\n iframe.style.border =\n borderWidth > 0 ? `${borderWidth}px solid ${getHexStringForColor(borderColor)}` : \"none\";\n iframe.style.pointerEvents = pointerEvents;\n\n const scaledSize = (100 / scale).toFixed(3) + \"%\";\n iframe.style.height =\n borderWidth === 0 ? scaledSize : `calc(${scaledSize} - ${borderWidth * 2}px)`;\n iframe.style.width =\n borderWidth === 0 ? scaledSize : `calc(${scaledSize} - ${borderWidth * 2}px)`;\n iframe.style.transform = `scale(${scale})`;\n iframe.style.transformOrigin = \"top left\";\n\n return SlideWebExtra({\n content: iframe,\n anchor,\n height,\n width,\n x,\n y,\n });\n}\n","export const Alignment = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n} as const;\n\nexport type Alignment = (typeof Alignment)[keyof typeof Alignment];\n\nexport const DEFAULT_ALIGNMENT: Alignment = Alignment.LEFT;\n","export function assertNever(value: never, message?: string): never {\n throw new Error((message ?? \"Unexpected value\") + \": \" + value);\n}\n","import { Alignment } from \"../types/Alignment\";\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { SlideWebExtra } from \"../types/SlideWebExtra\";\nimport { assertNever } from \"../utils/core/assertNever\";\n\nexport interface ScreenCapture {\n readonly alignment: Alignment;\n readonly scale: number;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function ScreenCapture(props: Partial<ScreenCapture> | null = null): SlideWebExtra {\n const {\n alignment = Alignment.LEFT,\n scale = 1,\n anchor = DEFAULT_ANCHOR,\n height = 1000,\n width = 1000,\n x = 0,\n y = 0,\n } = props || {};\n\n function setup(foreignObject: SVGForeignObjectElement) {\n // Create video element\n const video = document.createElement(\"video\");\n video.autoplay = true;\n video.style.transform = `scale(${scale})`;\n\n switch (alignment) {\n case Alignment.LEFT:\n video.style.transformOrigin = \"top left\";\n break;\n case Alignment.CENTER:\n video.style.transformOrigin = \"top center\";\n break;\n case Alignment.RIGHT:\n video.style.transformOrigin = \"top right\";\n break;\n default:\n assertNever(alignment);\n }\n foreignObject.appendChild(video);\n\n // Start screen sharing session\n const displayMediaOptions = {\n video: {\n displaySurface: \"window\",\n },\n audio: false,\n };\n\n navigator.mediaDevices\n .getDisplayMedia(displayMediaOptions)\n .then((stream) => {\n const videoTrack = stream.getVideoTracks()[0];\n\n // If user ends screen sharing, hide the video.\n if (videoTrack !== undefined) {\n videoTrack.onended = function () {\n video.style.display = \"none\";\n };\n }\n\n video.srcObject = stream;\n video.play();\n })\n .catch((error) => {\n console.error(\"Could not start screen capture -\", error);\n });\n\n // Stop screen sharing on cleanup\n return () => {\n const tracks = (video.srcObject as MediaStream).getTracks();\n tracks.forEach((track) => track.stop());\n video.style.display = \"none\";\n video.srcObject = null;\n };\n }\n\n return SlideWebExtra({\n content: null,\n setup,\n anchor,\n height,\n width,\n x,\n y,\n });\n}\n","export const ObjectType = {\n ARROW: \"Arrow\",\n CIRCLE: \"Circle\",\n GROUP: \"Group\",\n IMAGE: \"Image\",\n LINE: \"Line\",\n MASK: \"Mask\",\n PATH: \"Path\",\n POLYGON: \"Polygon\",\n RECTANGLE: \"Rectangle\",\n SLIDE_OBJECT: \"SlideObject\",\n SVG: \"SVG\",\n TEXT: \"Text\",\n} as const;\n\nexport type ObjectType = (typeof ObjectType)[keyof typeof ObjectType];\n","import { ObjectType } from \"./ObjectType\";\n\nexport interface SlideObject {\n readonly objectType: string;\n readonly opacity: number;\n}\n\nexport function SlideObject<T>(props: Partial<SlideObject> & T): SlideObject & T {\n return {\n objectType: ObjectType.SLIDE_OBJECT,\n opacity: 1,\n ...props,\n };\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Arrow extends SlideObject {\n readonly objectType: typeof ObjectType.ARROW;\n readonly arrowheadSize: number;\n readonly color: Color;\n readonly drawn: number;\n readonly endX: number;\n readonly endY: number;\n readonly isArrowheadDoubled: boolean;\n readonly isArrowheadFilled: boolean;\n readonly isDrawnFromCenter: boolean;\n readonly startX: number;\n readonly startY: number;\n readonly width: number;\n}\n\nexport function Arrow(props: Partial<Arrow> | null = null): Arrow {\n const { arrowheadSize: inputArrowheadSize, width = 10, ...rest } = props || {};\n const arrowheadSize = inputArrowheadSize ?? width * 4;\n\n return SlideObject({\n objectType: ObjectType.ARROW,\n arrowheadSize,\n color: DEFAULT_COLOR,\n drawn: 1,\n endX: 100,\n endY: 100,\n isArrowheadDoubled: false,\n isArrowheadFilled: false,\n isDrawnFromCenter: false,\n startX: 0,\n startY: 0,\n width,\n ...rest,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nconst DEFAULT_CIRCLE_RADIUS = 50;\n\nexport interface Circle extends SlideObject {\n readonly objectType: typeof ObjectType.CIRCLE;\n readonly anchor: Anchor;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly fill: Color;\n readonly radius: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Circle(props: Partial<Circle> | null = null): Circle {\n return SlideObject({\n objectType: ObjectType.CIRCLE,\n anchor: DEFAULT_ANCHOR,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n fill: DEFAULT_COLOR,\n radius: DEFAULT_CIRCLE_RADIUS,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Group extends SlideObject {\n readonly objectType: typeof ObjectType.GROUP;\n readonly anchor: Anchor;\n readonly height: number;\n readonly objects: SlideObject[];\n readonly rotateOriginPreviewSize: number;\n readonly rotateOriginX: number;\n readonly rotateOriginY: number;\n readonly rotation: number;\n readonly previewColor: Color | null;\n readonly scale: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Group(\n objects: SlideObject[],\n props: Partial<Omit<Group, \"objects\">> | null = null,\n): Group {\n return SlideObject({\n objectType: ObjectType.GROUP,\n anchor: DEFAULT_ANCHOR,\n height: 0,\n objects,\n previewColor: null,\n rotateOriginPreviewSize: 0,\n rotateOriginX: 0,\n rotateOriginY: 0,\n rotation: 0,\n scale: 1,\n width: 0,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { Group } from \"./Group\";\n\nexport interface GridProps {\n readonly anchor: Anchor;\n\n /** Number of columns in the grid. */\n readonly cols: number;\n\n /** Pixels of horizontal space between objects in the grid. */\n readonly gapX: number;\n\n /** Pixels of vertical space between objects in the grid. */\n readonly gapY: number;\n\n /**\n * Height, in pixels, of each object in the grid.\n *\n * If height is variable, a function can be provided that maps the row/col indices to a height.\n */\n readonly height: number | ((row: number, col: number) => number);\n\n /** Function mapping row/col indices to the object in the grid at that index. */\n readonly objects: (row: number, col: number) => SlideObject | null;\n\n /** Number of rows in the grid. */\n readonly rows: number;\n\n /**\n * Width, in pixels, of each object in the grid.\n *\n * If width is variable, a function can be provided that maps the row/col indices to a width.\n */\n readonly width: number | ((row: number, col: number) => number);\n\n readonly x: number;\n readonly y: number;\n}\n\ninterface Return {\n readonly grid: Group;\n readonly objects: (SlideObject | null)[][];\n}\n\nexport function Grid(props: Partial<GridProps>): Return {\n const {\n anchor = DEFAULT_ANCHOR,\n cols = 1,\n rows = 1,\n gapX = 0,\n gapY = 0,\n width = 0,\n height = 0,\n x: originX = 0,\n y: originY = 0,\n objects = () => null,\n } = props;\n\n const gridObjects: (SlideObject | null)[][] = [];\n const groupObjects: SlideObject[] = [];\n\n let x = 0;\n let y = 0;\n for (let row = 0; row < rows; row++) {\n const rowObjects: (SlideObject | null)[] = [];\n x = 0;\n let rowHeight = 0;\n\n for (let col = 0; col < cols; col++) {\n const object = objects(row, col);\n const objectWidth = typeof width === \"function\" ? width(row, col) : width;\n const objectHeight = typeof height === \"function\" ? height(row, col) : height;\n\n rowObjects.push(object);\n if (object != null) {\n groupObjects.push(\n Group([object], {\n x,\n y,\n }),\n );\n }\n\n x += objectWidth + gapX;\n rowHeight = Math.max(rowHeight, objectHeight);\n }\n gridObjects.push(rowObjects);\n y += rowHeight + gapY;\n }\n\n const grid = Group(groupObjects, {\n x: originX,\n y: originY,\n height: y - gapY,\n width: x - gapX,\n anchor,\n });\n\n return {\n grid,\n objects: gridObjects,\n };\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Image extends SlideObject {\n readonly objectType: typeof ObjectType.IMAGE;\n readonly anchor: Anchor;\n readonly height: number;\n readonly imageId: string;\n readonly rounding: number;\n readonly smooth: boolean;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Image(props: Partial<Image> | null = null): Image {\n return SlideObject({\n objectType: ObjectType.IMAGE,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n imageId: \"\",\n rounding: 0,\n smooth: true,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Line extends SlideObject {\n readonly objectType: typeof ObjectType.LINE;\n readonly color: Color;\n readonly drawn: number;\n readonly endX: number;\n readonly endY: number;\n readonly isDrawnFromCenter: boolean;\n readonly isRounded: boolean;\n readonly startX: number;\n readonly startY: number;\n readonly width: number;\n}\n\nexport function Line(props: Partial<Line> | null = null): Line {\n return SlideObject({\n objectType: ObjectType.LINE,\n color: DEFAULT_COLOR,\n drawn: 1,\n endX: 100,\n endY: 100,\n isDrawnFromCenter: false,\n isRounded: false,\n startX: 0,\n startY: 0,\n width: 10,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Mask extends SlideObject {\n readonly objectType: typeof ObjectType.MASK;\n readonly anchor: Anchor;\n readonly height: number;\n readonly objects: SlideObject[];\n\n /** A debugging flag that allows previewing the mask shape. */\n readonly preview: boolean;\n\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Mask(\n objects: SlideObject[],\n props: Partial<Omit<Mask, \"objects\">> | null = null,\n): Mask {\n return SlideObject({\n objectType: ObjectType.MASK,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n objects,\n preview: false,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","// http://geoexamples.com/path-properties/ v2.0.0 Copyright 2025 Roger Veciana i Rovira\nvar t=Object.defineProperty,e=(e,h)=>t(e,\"name\",{value:h,configurable:!0}),h={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},n=/([astvzqmhlc])([^astvzqmhlc]*)/gi,i=/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi,s=e(t=>{const e=(t&&t.length>0?t:\"M0,0\").match(n);if(!e)throw new Error(`No path elements found in string ${t}`);return e.reduce((t,e)=>{let n=e.charAt(0),i=n.toLowerCase(),s=g(e.substring(1));if(\"m\"===i&&s.length>2&&(t.push([n,...s.splice(0,2)]),i=\"l\",n=\"m\"===n?\"l\":\"L\"),\"a\"===i.toLowerCase()&&(5===s.length||6===s.length)){const t=e.substring(1).trim().split(\" \");s=[Number(t[0]),Number(t[1]),Number(t[2]),Number(t[3].charAt(0)),Number(t[3].charAt(1)),Number(t[3].substring(2)),Number(t[4])]}for(;s.length>=0;){if(s.length===h[i]){t.push([n,...s.splice(0,h[i])]);break}if(s.length<h[i])throw new Error(`Malformed path data: \"${n}\" must have ${h[i]} elements and has ${s.length}: ${e}`);t.push([n,...s.splice(0,h[i])])}return t},[])},\"default\"),g=e(t=>{const e=t.match(i);return e?e.map(Number):[]},\"parseValues\"),a=class{static{e(this,\"LinearPosition\")}x0;x1;y0;y1;constructor(t,e,h,n){this.x0=t,this.x1=e,this.y0=h,this.y1=n}getTotalLength=e(()=>Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2)),\"getTotalLength\");getPointAtLength=e(t=>{let e=t/Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2));e=Number.isNaN(e)?1:e;const h=(this.x1-this.x0)*e,n=(this.y1-this.y0)*e;return{x:this.x0+h,y:this.y0+n}},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=Math.sqrt((this.x1-this.x0)*(this.x1-this.x0)+(this.y1-this.y0)*(this.y1-this.y0));return{x:(this.x1-this.x0)/e,y:(this.y1-this.y0)/e}},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getPointAtLength(t),h=this.getTangentAtLength(t);return{x:e.x,y:e.y,tangentX:h.x,tangentY:h.y}},\"getPropertiesAtLength\")},r=class{static{e(this,\"Arc\")}x0;y0;rx;ry;xAxisRotate;LargeArcFlag;SweepFlag;x1;y1;length;constructor(t,e,h,n,i,s,g,a,r){this.x0=t,this.y0=e,this.rx=h,this.ry=n,this.xAxisRotate=i,this.LargeArcFlag=s,this.SweepFlag=g,this.x1=a,this.y1=r;const c=l(300,function(l){return o({x:t,y:e},h,n,i,s,g,{x:a,y:r},l)});this.length=c.arcLength}getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=o({x:this.x0,y:this.y0},this.rx,this.ry,this.xAxisRotate,this.LargeArcFlag,this.SweepFlag,{x:this.x1,y:this.y1},t/this.length);return{x:e.x,y:e.y}},\"getPointAtLength\");getTangentAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=.05,h=this.getPointAtLength(t);let n;t<0?t=0:t>this.length&&(t=this.length),n=t<this.length-e?this.getPointAtLength(t+e):this.getPointAtLength(t-e);const i=n.x-h.x,s=n.y-h.y,g=Math.sqrt(i*i+s*s);return t<this.length-e?{x:-i/g,y:-s/g}:{x:i/g,y:s/g}},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getTangentAtLength(t),h=this.getPointAtLength(t);return{x:h.x,y:h.y,tangentX:e.x,tangentY:e.y}},\"getPropertiesAtLength\")},o=e((t,e,h,n,i,s,g,a)=>{e=Math.abs(e),h=Math.abs(h),n=c(n,360);const r=u(n);if(t.x===g.x&&t.y===g.y)return{x:t.x,y:t.y,ellipticalArcAngle:0};if(0===e||0===h)return{x:0,y:0,ellipticalArcAngle:0};const o=(t.x-g.x)/2,l=(t.y-g.y)/2,x={x:Math.cos(r)*o+Math.sin(r)*l,y:-Math.sin(r)*o+Math.cos(r)*l},p=Math.pow(x.x,2)/Math.pow(e,2)+Math.pow(x.y,2)/Math.pow(h,2);p>1&&(e=Math.sqrt(p)*e,h=Math.sqrt(p)*h);let f=(Math.pow(e,2)*Math.pow(h,2)-Math.pow(e,2)*Math.pow(x.y,2)-Math.pow(h,2)*Math.pow(x.x,2))/(Math.pow(e,2)*Math.pow(x.y,2)+Math.pow(h,2)*Math.pow(x.x,2));f=f<0?0:f;const L=(i!==s?1:-1)*Math.sqrt(f),A=L*(e*x.y/h),M=L*(-h*x.x/e),w={x:Math.cos(r)*A-Math.sin(r)*M+(t.x+g.x)/2,y:Math.sin(r)*A+Math.cos(r)*M+(t.y+g.y)/2},P={x:(x.x-A)/e,y:(x.y-M)/h},T=y({x:1,y:0},P);let d=y(P,{x:(-x.x-A)/e,y:(-x.y-M)/h});!s&&d>0?d-=2*Math.PI:s&&d<0&&(d+=2*Math.PI),d%=2*Math.PI;const b=T+d*a,v=e*Math.cos(b),m=h*Math.sin(b);return{x:Math.cos(r)*v-Math.sin(r)*m+w.x,y:Math.sin(r)*v+Math.cos(r)*m+w.y,ellipticalArcStartAngle:T,ellipticalArcEndAngle:T+d,ellipticalArcAngle:b,ellipticalArcCenter:w,resultantRx:e,resultantRy:h}},\"pointOnEllipticalArc\"),l=e((t,e)=>{t=t??500;let h=0;const n=[],i=[];let s,g=e(0);for(let a=0;a<t;a++){const r=p(a*(1/t),0,1);s=e(r),h+=x(g,s),i.push([g,s]),n.push({t:r,arcLength:h}),g=s}return s=e(1),i.push([g,s]),h+=x(g,s),n.push({t:1,arcLength:h}),{arcLength:h,arcLengthMap:n,approximationLines:i}},\"approximateArcLengthOfCurve\"),c=e((t,e)=>(t%e+e)%e,\"mod\"),u=e(t=>t*(Math.PI/180),\"toRadians\"),x=e((t,e)=>Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),\"distance\"),p=e((t,e,h)=>Math.min(Math.max(t,e),h),\"clamp\"),y=e((t,e)=>{const h=t.x*e.x+t.y*e.y,n=Math.sqrt((Math.pow(t.x,2)+Math.pow(t.y,2))*(Math.pow(e.x,2)+Math.pow(e.y,2)));return(t.x*e.y-t.y*e.x<0?-1:1)*Math.acos(h/n)},\"angleBetween\"),f=[[],[],[-.5773502691896257,.5773502691896258],[0,-.7745966692414833,.7745966692414833],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],L=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],A=[[1],[1,1],[1,2,1],[1,3,3,1]],M=e((t,e,h)=>({x:(1-h)*(1-h)*(1-h)*t[0]+3*(1-h)*(1-h)*h*t[1]+3*(1-h)*h*h*t[2]+h*h*h*t[3],y:(1-h)*(1-h)*(1-h)*e[0]+3*(1-h)*(1-h)*h*e[1]+3*(1-h)*h*h*e[2]+h*h*h*e[3]}),\"cubicPoint\"),w=e((t,e,h)=>T([3*(t[1]-t[0]),3*(t[2]-t[1]),3*(t[3]-t[2])],[3*(e[1]-e[0]),3*(e[2]-e[1]),3*(e[3]-e[2])],h),\"cubicDerivative\"),P=e((t,e,h)=>{let n,i;const s=h/2;n=0;for(let h=0;h<20;h++)i=s*f[20][h]+s,n+=L[20][h]*v(t,e,i);return s*n},\"getCubicArcLength\"),T=e((t,e,h)=>({x:(1-h)*(1-h)*t[0]+2*(1-h)*h*t[1]+h*h*t[2],y:(1-h)*(1-h)*e[0]+2*(1-h)*h*e[1]+h*h*e[2]}),\"quadraticPoint\"),d=e((t,e,h)=>{void 0===h&&(h=1);const n=t[0]-2*t[1]+t[2],i=e[0]-2*e[1]+e[2],s=2*t[1]-2*t[0],g=2*e[1]-2*e[0],a=4*(n*n+i*i),r=4*(n*s+i*g),o=s*s+g*g;if(0===a)return h*Math.sqrt(Math.pow(t[2]-t[0],2)+Math.pow(e[2]-e[0],2));const l=r/(2*a),c=h+l,u=o/a-l*l,x=c*c+u>0?Math.sqrt(c*c+u):0,p=l*l+u>0?Math.sqrt(l*l+u):0,y=l+Math.sqrt(l*l+u)!==0&&(c+x)/(l+p)!==0?u*Math.log(Math.abs((c+x)/(l+p))):0;return Math.sqrt(a)/2*(c*x-l*p+y)},\"getQuadraticArcLength\"),b=e((t,e,h)=>({x:2*(1-h)*(t[1]-t[0])+2*h*(t[2]-t[1]),y:2*(1-h)*(e[1]-e[0])+2*h*(e[2]-e[1])}),\"quadraticDerivative\");function v(t,e,h){const n=m(1,h,t),i=m(1,h,e),s=n*n+i*i;return Math.sqrt(s)}e(v,\"BFunc\");var m=e((t,e,h)=>{const n=h.length-1;let i,s;if(0===n)return 0;if(0===t){s=0;for(let t=0;t<=n;t++)s+=A[n][t]*Math.pow(1-e,n-t)*Math.pow(e,t)*h[t];return s}i=new Array(n);for(let t=0;t<n;t++)i[t]=n*(h[t+1]-h[t]);return m(t-1,e,i)},\"getDerivative\"),q=e((t,e,h)=>{let n=1,i=t/e,s=(t-h(i))/e,g=0;for(;n>.001;){const a=h(i+s),r=Math.abs(t-a)/e;if(r<n)n=r,i+=s;else{const g=h(i-s),a=Math.abs(t-g)/e;a<n?(n=a,i-=s):s/=2}if(g++,g>500)break}return i},\"t2length\"),_=class{static{e(this,\"Bezier\")}a;b;c;d;length;getArcLength;getPoint;getDerivative;constructor(t,e,h,n,i,s,g,a){this.a={x:t,y:e},this.b={x:h,y:n},this.c={x:i,y:s},void 0!==g&&void 0!==a?(this.getArcLength=P,this.getPoint=M,this.getDerivative=w,this.d={x:g,y:a}):(this.getArcLength=d,this.getPoint=T,this.getDerivative=b,this.d={x:0,y:0}),this.length=this.getArcLength([this.a.x,this.b.x,this.c.x,this.d.x],[this.a.y,this.b.y,this.c.y,this.d.y],1)}getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t));return this.getPoint(e,h,n)},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t)),i=this.getDerivative(e,h,n),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;return g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0},g},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t)),i=this.getDerivative(e,h,n),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0};const a=this.getPoint(e,h,n);return{x:a.x,y:a.y,tangentX:g.x,tangentY:g.y}},\"getPropertiesAtLength\");getC=e(()=>this.c,\"getC\");getD=e(()=>this.d,\"getD\")},C=class{static{e(this,\"SVGPathProperties\")}length=0;partial_lengths=[];functions=[];initial_point=null;constructor(t){const e=Array.isArray(t)?t:s(t);let h,n=[0,0],i=[0,0],g=[0,0];for(let t=0;t<e.length;t++){if(\"M\"===e[t][0])n=[e[t][1],e[t][2]],g=[n[0],n[1]],this.functions.push(null),0===t&&(this.initial_point={x:e[t][1],y:e[t][2]});else if(\"m\"===e[t][0])n=[e[t][1]+n[0],e[t][2]+n[1]],g=[n[0],n[1]],this.functions.push(null);else if(\"L\"===e[t][0])this.length+=Math.sqrt(Math.pow(n[0]-e[t][1],2)+Math.pow(n[1]-e[t][2],2)),this.functions.push(new a(n[0],e[t][1],n[1],e[t][2])),n=[e[t][1],e[t][2]];else if(\"l\"===e[t][0])this.length+=Math.sqrt(Math.pow(e[t][1],2)+Math.pow(e[t][2],2)),this.functions.push(new a(n[0],e[t][1]+n[0],n[1],e[t][2]+n[1])),n=[e[t][1]+n[0],e[t][2]+n[1]];else if(\"H\"===e[t][0])this.length+=Math.abs(n[0]-e[t][1]),this.functions.push(new a(n[0],e[t][1],n[1],n[1])),n[0]=e[t][1];else if(\"h\"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new a(n[0],n[0]+e[t][1],n[1],n[1])),n[0]=e[t][1]+n[0];else if(\"V\"===e[t][0])this.length+=Math.abs(n[1]-e[t][1]),this.functions.push(new a(n[0],n[0],n[1],e[t][1])),n[1]=e[t][1];else if(\"v\"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new a(n[0],n[0],n[1],n[1]+e[t][1])),n[1]=e[t][1]+n[1];else if(\"z\"===e[t][0]||\"Z\"===e[t][0])this.length+=Math.sqrt(Math.pow(g[0]-n[0],2)+Math.pow(g[1]-n[1],2)),this.functions.push(new a(n[0],g[0],n[1],g[1])),n=[g[0],g[1]];else if(\"C\"===e[t][0])h=new _(n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4],e[t][5],e[t][6]),this.length+=h.getTotalLength(),n=[e[t][5],e[t][6]],this.functions.push(h);else if(\"c\"===e[t][0])h=new _(n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4],n[0]+e[t][5],n[1]+e[t][6]),h.getTotalLength()>0?(this.length+=h.getTotalLength(),this.functions.push(h),n=[e[t][5]+n[0],e[t][6]+n[1]]):this.functions.push(new a(n[0],n[0],n[1],n[1]));else if(\"S\"===e[t][0]){if(t>0&&[\"C\",\"c\",\"S\",\"s\"].indexOf(e[t-1][0])>-1){if(h){const i=h.getC();h=new _(n[0],n[1],2*n[0]-i.x,2*n[1]-i.y,e[t][1],e[t][2],e[t][3],e[t][4])}}else h=new _(n[0],n[1],n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4]);h&&(this.length+=h.getTotalLength(),n=[e[t][3],e[t][4]],this.functions.push(h))}else if(\"s\"===e[t][0]){if(t>0&&[\"C\",\"c\",\"S\",\"s\"].indexOf(e[t-1][0])>-1){if(h){const i=h.getC(),s=h.getD();h=new _(n[0],n[1],n[0]+s.x-i.x,n[1]+s.y-i.y,n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4])}}else h=new _(n[0],n[1],n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4]);h&&(this.length+=h.getTotalLength(),n=[e[t][3]+n[0],e[t][4]+n[1]],this.functions.push(h))}else if(\"Q\"===e[t][0]){if(n[0]===e[t][1]&&n[1]===e[t][2]){const h=new a(e[t][1],e[t][3],e[t][2],e[t][4]);this.length+=h.getTotalLength(),this.functions.push(h)}else h=new _(n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);n=[e[t][3],e[t][4]],i=[e[t][1],e[t][2]]}else if(\"q\"===e[t][0]){if(0!==e[t][1]||0!==e[t][2])h=new _(n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);else{const h=new a(n[0]+e[t][1],n[0]+e[t][3],n[1]+e[t][2],n[1]+e[t][4]);this.length+=h.getTotalLength(),this.functions.push(h)}i=[n[0]+e[t][1],n[1]+e[t][2]],n=[e[t][3]+n[0],e[t][4]+n[1]]}else if(\"T\"===e[t][0]){if(t>0&&[\"Q\",\"q\",\"T\",\"t\"].indexOf(e[t-1][0])>-1)h=new _(n[0],n[1],2*n[0]-i[0],2*n[1]-i[1],e[t][1],e[t][2],void 0,void 0),this.functions.push(h),this.length+=h.getTotalLength();else{const h=new a(n[0],e[t][1],n[1],e[t][2]);this.functions.push(h),this.length+=h.getTotalLength()}i=[2*n[0]-i[0],2*n[1]-i[1]],n=[e[t][1],e[t][2]]}else if(\"t\"===e[t][0]){if(t>0&&[\"Q\",\"q\",\"T\",\"t\"].indexOf(e[t-1][0])>-1)h=new _(n[0],n[1],2*n[0]-i[0],2*n[1]-i[1],n[0]+e[t][1],n[1]+e[t][2],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);else{const h=new a(n[0],n[0]+e[t][1],n[1],n[1]+e[t][2]);this.length+=h.getTotalLength(),this.functions.push(h)}i=[2*n[0]-i[0],2*n[1]-i[1]],n=[e[t][1]+n[0],e[t][2]+n[1]]}else if(\"A\"===e[t][0]){const h=new r(n[0],n[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],e[t][6],e[t][7]);this.length+=h.getTotalLength(),n=[e[t][6],e[t][7]],this.functions.push(h)}else if(\"a\"===e[t][0]){const h=new r(n[0],n[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],n[0]+e[t][6],n[1]+e[t][7]);this.length+=h.getTotalLength(),n=[n[0]+e[t][6],n[1]+e[t][7]],this.functions.push(h)}this.partial_lengths.push(this.length)}}getPartAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);let e=this.partial_lengths.length-1;for(;this.partial_lengths[e]>=t&&e>0;)e--;return e++,{fraction:t-this.partial_lengths[e-1],i:e}},\"getPartAtLength\");getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getPointAtLength(e.fraction);if(this.initial_point)return this.initial_point;throw new Error(\"Wrong function at this part.\")},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getTangentAtLength(e.fraction);if(this.initial_point)return{x:0,y:0};throw new Error(\"Wrong function at this part.\")},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getPropertiesAtLength(e.fraction);if(this.initial_point)return{x:this.initial_point.x,y:this.initial_point.y,tangentX:0,tangentY:0};throw new Error(\"Wrong function at this part.\")},\"getPropertiesAtLength\");getParts=e(()=>{const t=[];for(let e=0;e<this.functions.length;e++)if(null!==this.functions[e]){this.functions[e]=this.functions[e];const h={start:this.functions[e].getPointAtLength(0),end:this.functions[e].getPointAtLength(this.partial_lengths[e]-this.partial_lengths[e-1]),length:this.partial_lengths[e]-this.partial_lengths[e-1],getPointAtLength:this.functions[e].getPointAtLength,getTangentAtLength:this.functions[e].getTangentAtLength,getPropertiesAtLength:this.functions[e].getPropertiesAtLength};t.push(h)}return t},\"getParts\")},N=class{static{e(this,\"_svgPathProperties\")}inst;constructor(t){if(this.inst=new C(t),!(this instanceof N))return new N(t)}getTotalLength=e(()=>this.inst.getTotalLength(),\"getTotalLength\");getPointAtLength=e(t=>this.inst.getPointAtLength(t),\"getPointAtLength\");getTangentAtLength=e(t=>this.inst.getTangentAtLength(t),\"getTangentAtLength\");getPropertiesAtLength=e(t=>this.inst.getPropertiesAtLength(t),\"getPropertiesAtLength\");getParts=e(()=>this.inst.getParts(),\"getParts\")};export{N as svgPathProperties};","import { Color } from \"../../types/Color\";\n\nexport function Transparent(color: Color = Color.BLACK): Color {\n return { ...color, alpha: 0 };\n}\n","import { svgPathProperties } from \"svg-path-properties\";\n\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { Transparent } from \"../utils/color/Transparent\";\n\nexport interface Path extends SlideObject {\n readonly objectType: typeof ObjectType.PATH;\n readonly anchor: Anchor;\n readonly color: Color;\n readonly drawn: number;\n readonly fill: Color;\n readonly height: number;\n readonly isRounded: boolean;\n readonly path: string;\n readonly pathLength: number;\n readonly strokeWidth: number;\n readonly viewboxHeight: number;\n readonly viewboxWidth: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Path(props: Partial<Path> | null = null): Path {\n const { path, height = 100, width = 100, viewboxHeight, viewboxWidth, ...rest } = props ?? {};\n const pathDescription = path ?? \"M 0 0 L 100 100\";\n\n const pathProperties = new svgPathProperties(pathDescription);\n const pathLength = pathProperties.getTotalLength();\n\n return SlideObject({\n objectType: ObjectType.PATH,\n anchor: DEFAULT_ANCHOR,\n color: DEFAULT_COLOR,\n drawn: 1,\n fill: Transparent(),\n isRounded: false,\n height,\n path: pathDescription,\n pathLength,\n strokeWidth: 4,\n viewboxHeight: viewboxHeight ?? height,\n viewboxWidth: viewboxWidth ?? width,\n width,\n x: 0,\n y: 0,\n ...rest,\n });\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { Position } from \"../types/Position\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Polygon extends SlideObject {\n readonly objectType: typeof ObjectType.POLYGON;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly points: readonly Position[];\n readonly fill: Color;\n}\n\nexport function Polygon(props: Partial<Polygon> | null = null): Polygon {\n return SlideObject({\n objectType: ObjectType.POLYGON,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n points: [\n { x: 0, y: 0 },\n { x: 100, y: 0 },\n { x: 100, y: 100 },\n ],\n fill: DEFAULT_COLOR,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Rectangle extends SlideObject {\n readonly objectType: typeof ObjectType.RECTANGLE;\n readonly anchor: Anchor;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly fill: Color;\n readonly height: number;\n readonly rounding: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Rectangle(props: Partial<Rectangle> | null = null): Rectangle {\n return SlideObject({\n objectType: ObjectType.RECTANGLE,\n anchor: DEFAULT_ANCHOR,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n fill: DEFAULT_COLOR,\n height: 100,\n rounding: 0,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface SVG extends SlideObject {\n readonly objectType: typeof ObjectType.SVG;\n readonly anchor: Anchor;\n readonly height: number;\n readonly svg: string;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function SVG(props: Partial<SVG> | null = null): SVG {\n return SlideObject({\n objectType: ObjectType.SVG,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n svg: \"\",\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","/** Values for the CSS font-style property. */\nexport const FontStyle = {\n NORMAL: \"normal\",\n ITALIC: \"italic\",\n OBLIQUE: \"oblique\",\n} as const;\n\nexport type FontStyle = (typeof FontStyle)[keyof typeof FontStyle];\n\nexport const DEFAULT_FONT_STYLE: FontStyle = FontStyle.NORMAL;\n","export const FontWeight = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900,\n} as const;\n\nexport type FontWeight = (typeof FontWeight)[keyof typeof FontWeight];\n\nexport const DEFAULT_FONT_WEIGHT: FontWeight = FontWeight.NORMAL;\n","import { Color, DEFAULT_COLOR } from \"./Color\";\nimport { DEFAULT_FONT_STYLE, FontStyle } from \"./FontStyle\";\nimport { DEFAULT_FONT_WEIGHT, FontWeight } from \"./FontWeight\";\n\nexport interface TextStyle {\n readonly color: Color;\n readonly fontFamily: string;\n readonly fontSize: number;\n readonly fontStyle: FontStyle;\n readonly fontWeight: FontWeight | number;\n readonly ligatures: boolean;\n}\n\nexport const DEFAULT_TEXT_STYLE: TextStyle = {\n color: DEFAULT_COLOR,\n fontFamily: \"sans-serif\",\n fontSize: 100,\n fontStyle: DEFAULT_FONT_STYLE,\n fontWeight: DEFAULT_FONT_WEIGHT,\n ligatures: false,\n};\n","import { TextContent } from \"../../../types/TextContent\";\nimport { TextUnit } from \"../../../types/TextUnit\";\n\nexport function getTextUnitsFromTextContent(text: TextContent): TextUnit[][] {\n if (typeof text === \"string\") {\n return [[{ text }]];\n }\n return text.map((line) => line.map((unit) => (typeof unit === \"string\" ? { text: unit } : unit)));\n}\n","import { TextContent } from \"../../../types/TextContent\";\nimport { getTextUnitsFromTextContent } from \"./getTextUnitsFromTextContent\";\n\nexport function getTextContentLength(text: TextContent): number {\n const units = getTextUnitsFromTextContent(text);\n return units.reduce(\n (totalLength, line) =>\n totalLength + line.reduce((lineLength, unit) => lineLength + unit.text.length, 0),\n 0,\n );\n}\n","import { Alignment, DEFAULT_ALIGNMENT } from \"../types/Alignment\";\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Animate, AnimationParams } from \"../types/Animate\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { TextContent } from \"../types/TextContent\";\nimport { DEFAULT_TEXT_STYLE, TextStyle } from \"../types/TextStyle\";\nimport { getTextContentLength } from \"../utils/objects/text/getTextContentLength\";\n\nexport interface Text extends SlideObject, TextStyle {\n readonly objectType: typeof ObjectType.TEXT;\n readonly alignment: Alignment;\n readonly anchor: Anchor;\n\n /**\n * The number of characters of the text to show.\n * If `null`, shows all text.\n */\n readonly length: number | null;\n\n readonly lineSpacing: number;\n readonly text: TextContent;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Text(\n text: TextContent = \"\",\n props: Partial<Omit<Text, \"objectType\" | \"text\">> | null = null,\n): Text {\n return SlideObject({\n objectType: ObjectType.TEXT,\n alignment: DEFAULT_ALIGNMENT,\n anchor: DEFAULT_ANCHOR,\n length: null,\n lineSpacing: 1,\n text,\n x: 0,\n y: 0,\n ...DEFAULT_TEXT_STYLE,\n ...props,\n });\n}\n\nText.writeOn = (text: Text, animationParams: AnimationParams<Text> = {}) =>\n Animate(\n text,\n {\n length: getTextContentLength(text.text),\n },\n animationParams,\n );\n","import { Presentation } from \"../types/Presentation\";\nimport { Slide } from \"../types/Slide\";\n\nlet navigatorWindow: Window | null = null;\n\ninterface Args {\n readonly presentation: Presentation;\n readonly onNavigateToSlide: (slideIndex: number) => void;\n}\n\nexport function openNavigator({ presentation, onNavigateToSlide }: Args) {\n if (navigatorWindow !== null && !navigatorWindow.closed) {\n navigatorWindow.focus();\n return;\n }\n\n navigatorWindow = window.open(\"\", \"Navigator\", \"width=300,height=500,left=20,top=50\");\n if (navigatorWindow === null) {\n console.error(\"Failed to open navigator window.\");\n return;\n }\n\n const navigatorElement = createNavigatorElement(presentation, onNavigateToSlide);\n\n navigatorWindow.document.title = presentation.title;\n navigatorWindow.document.body.appendChild(navigatorElement);\n\n navigatorWindow.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" || event.key === \"`\") {\n navigatorWindow?.close();\n navigatorWindow = null;\n }\n });\n}\n\nexport function createNavigatorElement(\n presentation: Presentation,\n onNavigateToSlide: (slideIndex: number) => void,\n): HTMLDivElement {\n const navigatorElement = document.createElement(\"div\");\n navigatorElement.style.fontFamily = \"Arial, sans-serif\";\n\n presentation.slides.forEach((slide, index) => {\n const slideElement = createSlideElement(slide, index);\n slideElement.style.cursor = \"pointer\";\n slideElement.addEventListener(\"click\", (event) => {\n // If shift key is pressed, close window\n if (event.shiftKey) {\n navigatorWindow?.close();\n }\n onNavigateToSlide(index);\n });\n navigatorElement.appendChild(slideElement);\n });\n\n return navigatorElement;\n}\n\nfunction createSlideElement(slide: Slide, slideIndex: number): HTMLDivElement {\n const slideElement = document.createElement(\"div\");\n slideElement.style.marginBottom = \"8px\";\n slideElement.style.padding = \"8px\";\n slideElement.style.backgroundColor = \"#eceed7\";\n slideElement.style.borderRadius = \"4px\";\n slideElement.style.userSelect = \"none\";\n\n slideElement.innerHTML =\n `${slideIndex + 1}: ` + (slide.title.length > 0 ? slide.title : `Slide ${slideIndex + 1}`);\n\n return slideElement;\n}\n","export interface Size {\n readonly height: number;\n readonly width: number;\n}\n\nexport function Size(props: Partial<Size> | null = null): Size {\n return {\n height: 0,\n width: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_SIZE: Size = Size({ width: 0, height: 0 });\n","import { Color } from \"./Color\";\nimport { Resources } from \"./Resources\";\nimport { Size } from \"./Size\";\nimport { Slide } from \"./Slide\";\n\nexport interface Presentation {\n /** The background color of the presentation. */\n readonly backgroundColor: Color;\n\n /** The slides to present as part of the presentation. */\n readonly slides: Slide[];\n\n /** The title of the presentation. */\n readonly title: string;\n\n /** The resources used in the presentation. */\n readonly resources: Resources;\n\n /** The dimensions of the presentation's viewport. */\n readonly size: Size;\n}\n\nexport function Presentation(props: Partial<Presentation> | null = null): Presentation {\n return {\n backgroundColor: Color.WHITE,\n slides: [],\n title: \"Presentation\",\n size: Size({ width: 3840, height: 2160 }),\n resources: {\n images: {},\n },\n ...props,\n };\n}\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getSlideAnimationDuration(slideAnimation: SlideAnimation): number {\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n let startTime = 0;\n let duration = 0;\n\n for (const animation of animations) {\n switch (animation.type) {\n case AnimationType.PAUSE:\n startTime += animation.duration;\n break;\n case AnimationType.ANIMATE:\n duration = Math.max(duration, startTime + animation.delay + animation.duration);\n if (animation.block) {\n startTime += animation.delay + animation.duration;\n }\n break;\n case AnimationType.UPDATE:\n // No-op, instantaneous update.\n break;\n default:\n assertNever(animation);\n }\n }\n\n return duration;\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getRgbStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const alpha = getAlphaForColor(color, opacity);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}\n","export function isFullBodyPresentation(element: HTMLElement): boolean {\n return element === document.body;\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { isFullBodyPresentation } from \"./isFullBodyPresentation\";\n\nexport function createPresentationContainer(\n presentation: Presentation,\n root: HTMLElement,\n): HTMLDivElement {\n const container = document.createElement(\"div\");\n container.style.width = \"100%\";\n container.style.aspectRatio = `${presentation.size.width} / ${presentation.size.height}`;\n\n // Set container to be vertically centered.\n container.style.position = \"relative\";\n container.style.top = \"50%\";\n container.style.transform = \"translateY(-50%)\";\n\n // Set container to be horizontally centered.\n container.style.marginLeft = \"auto\";\n container.style.marginRight = \"auto\";\n\n if (isFullBodyPresentation(root)) {\n // Don't allow scrolling of container\n container.style.overflowY = \"clip\";\n\n // Set document title to title of presentation.\n document.title = presentation.title;\n\n // Set root element styles.\n document.documentElement.style.height = \"100%\";\n\n // Set body styles.\n document.body.style.margin = \"0\";\n document.body.style.height = \"100%\";\n document.body.style.width = \"100%\";\n document.body.style.backgroundColor = \"#000000\";\n\n // Ensure style properties change to maintain aspect ratio fit.\n const targetAspectRatio = presentation.size.height / presentation.size.width;\n updateContainerSize(container, targetAspectRatio);\n\n window\n .matchMedia(`(min-aspect-ratio: ${presentation.size.width} / ${presentation.size.height})`)\n .addEventListener(\"change\", () => updateContainerSize(container, targetAspectRatio));\n }\n\n return container;\n}\n\nfunction updateContainerSize(container: HTMLElement, targetAspectRatio: number) {\n if (window.innerHeight / window.innerWidth > targetAspectRatio) {\n container.style.width = \"100%\";\n container.style.height = \"auto\";\n } else {\n container.style.width = \"auto\";\n container.style.height = \"100%\";\n }\n}\n","import { Color } from \"../../types/Color\";\nimport { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateColor: Interpolator<Color> = {\n check: (value: unknown): value is Color => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Color).red === \"number\" &&\n typeof (value as Color).green === \"number\" &&\n typeof (value as Color).blue === \"number\" &&\n typeof (value as Color).alpha === \"number\"\n );\n },\n interpolate: (from: Color, to: Color, proportion: number): Color => {\n return {\n red: Math.round(from.red + (to.red - from.red) * proportion),\n green: Math.round(from.green + (to.green - from.green) * proportion),\n blue: Math.round(from.blue + (to.blue - from.blue) * proportion),\n alpha: from.alpha + (to.alpha - from.alpha) * proportion,\n };\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\n/** Fallback interpolation function when no other interpolators apply. */\nexport const interpolateFallback: Interpolator<unknown> = {\n check: (_value: unknown): _value is unknown => {\n return true;\n },\n interpolate: (_from: unknown, to: unknown): unknown => {\n return to;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateNumber: Interpolator<number> = {\n check: (value: unknown): value is number => {\n return typeof value === \"number\";\n },\n interpolate: (from: number, to: number, proportion: number): number => {\n return from + (to - from) * proportion;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { interpolateColor } from \"./interpolateColor\";\nimport { interpolateFallback } from \"./interpolateFallback\";\nimport { interpolateNumber } from \"./interpolateNumber\";\n\nexport const DEFAULT_INTERPOLATORS: Interpolator<any>[] = [\n interpolateNumber,\n interpolateColor,\n interpolateFallback,\n];\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { DEFAULT_INTERPOLATORS } from \"./defaultInterpolators\";\n\nexport function interpolate<T extends SlideObject>(\n object: T,\n props: Partial<T>,\n proportion: number,\n customInterpolators: Interpolator<any>[] | null = null,\n): T {\n if (proportion === 0) {\n return object;\n } else if (proportion === 1) {\n return { ...object, ...props };\n }\n\n const interpolators =\n customInterpolators != null\n ? [...customInterpolators, ...DEFAULT_INTERPOLATORS]\n : DEFAULT_INTERPOLATORS;\n\n const interpolatedProps: Partial<T> = {};\n for (const key in props) {\n const fromValue = object[key];\n const toValue = props[key];\n\n for (const interpolator of interpolators) {\n if (interpolator.check(fromValue, key) && interpolator.check(toValue, key)) {\n interpolatedProps[key] = (interpolator as Interpolator<typeof toValue>).interpolate(\n fromValue,\n toValue,\n proportion,\n );\n break;\n }\n }\n }\n\n return { ...object, ...interpolatedProps };\n}\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { assertNever } from \"../core/assertNever\";\nimport { interpolate } from \"../interpolate/interpolate\";\n\n/**\n * Mutably updates the object state to reflect the end state of the animation.\n *\n * If a build time is provided, the object state is updated to the state at that\n * time into the animation.\n *\n * @param objectState Map from original objects to current object state.\n * @param slideAnimation The animation to apply.\n * @param buildTime Optional time (in ms) into the animation to apply.\n */\nexport function updateObjectStateWithAnimation(\n objectState: Map<SlideObject, SlideObject>,\n slideAnimation: SlideAnimation | null,\n buildTime: number | null = null,\n) {\n if (slideAnimation === null) {\n return;\n }\n\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n\n let elapsedTime = 0;\n for (const animation of animations) {\n if (buildTime !== null && elapsedTime > buildTime) {\n // We've reached the current build time, so no more state to update.\n break;\n }\n\n switch (animation.type) {\n case AnimationType.ANIMATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n const timeIntoAnimation = buildTime !== null ? buildTime - elapsedTime : null;\n const proportion = Math.max(\n Math.min(\n timeIntoAnimation !== null\n ? (timeIntoAnimation - animation.delay) / animation.duration\n : 1,\n 1,\n ),\n 0,\n );\n\n objectState.set(animation.object, {\n ...currentObject,\n ...interpolate(\n currentObject,\n animation.props,\n animation.easing(proportion),\n animation.interpolators,\n ),\n });\n\n if (animation.block) {\n elapsedTime += animation.delay + animation.duration;\n }\n break;\n }\n case AnimationType.UPDATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n objectState.set(animation.object, {\n ...currentObject,\n ...animation.props,\n });\n break;\n }\n case AnimationType.PAUSE:\n elapsedTime += animation.duration;\n break;\n default:\n assertNever(animation);\n }\n }\n}\n","import { SlideObject } from \"../../types/SlideObject\";\n\n/**\n * Returns the children of a SlideObject if they exist by checking for an \"objects\" property.\n */\nexport function getObjectChildren(object: SlideObject): SlideObject[] {\n return \"objects\" in object\n ? (object.objects as any).filter((object: any) => \"objectType\" in object)\n : [];\n}\n","import { Slide } from \"../../types/Slide\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { updateObjectStateWithAnimation } from \"../animate/updateObjectStateWithAnimation\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\ninterface Args {\n readonly slide: Slide;\n readonly buildIndex: number;\n readonly buildTime: number | null;\n}\n\n/**\n * Returns a mapping from original object (by reference equality) to its current state.\n */\nexport function getObjectState({\n slide,\n buildIndex,\n buildTime,\n}: Args): Map<SlideObject, SlideObject> {\n const objectState: Map<SlideObject, SlideObject> = new Map();\n\n function addObjectToState(object: SlideObject) {\n objectState.set(object, object);\n for (const childObject of getObjectChildren(object)) {\n addObjectToState(childObject);\n }\n }\n\n for (const object of slide.objects) {\n addObjectToState(object);\n }\n\n // Process animations that have already completed.\n const completedBuildCount = buildTime === null ? buildIndex : buildIndex - 1;\n for (let i = 0; i < completedBuildCount; i++) {\n const animation = slide.animations[i] ?? null;\n updateObjectStateWithAnimation(objectState, animation);\n }\n\n // Process the current animation, if any.\n if (buildTime !== null && buildIndex > 0) {\n const animation = slide.animations[buildIndex - 1] ?? null;\n updateObjectStateWithAnimation(objectState, animation, buildTime);\n }\n\n return objectState;\n}\n","import { ObjectType } from \"../../types/ObjectType\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\n/**\n * Extracts all SVG objects from slides and returns a mapping from image ID to URL.\n * In the case of SVGs, the image URL and path are both the SVG string itself.\n * SVG strings are transformed into data URLs in the image loading process.\n */\nexport function getSvgImageUrlById(presentation: Presentation): Record<string, string> {\n const svgStrings: Record<string, string> = {};\n\n function walkSlideObject(object: SlideObject): void {\n if (object.objectType === ObjectType.SVG) {\n const svg = (object as SlideObject & { svg: string }).svg;\n if (svg !== undefined && svg.length > 0) {\n svgStrings[svg] = svg;\n }\n }\n\n const children = getObjectChildren(object);\n for (const child of children) {\n walkSlideObject(child);\n }\n }\n\n for (const slide of presentation.slides) {\n for (const object of slide.objects) {\n walkSlideObject(object);\n }\n }\n\n return svgStrings;\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { ShortcutConfig } from \"../../types/ShortcutState\";\n\nexport function getPresentationShortcuts(\n presentation: Presentation,\n): Record<string, ShortcutConfig> {\n const { slides } = presentation;\n const shortcuts: Record<string, ShortcutConfig> = {\n // First build of first slide\n s: { slideIndex: 0, buildIndex: 0 },\n\n // First build of current slide\n c: { slideIndex: null, buildIndex: 0 },\n\n // Last build of last slide\n e: {\n slideIndex: slides.length - 1,\n buildIndex: slides[slides.length - 1]?.animations.length ?? 0,\n },\n };\n\n for (let slideIndex = 0; slideIndex < slides.length; slideIndex++) {\n const slide = slides[slideIndex];\n if (slide === undefined) {\n continue;\n }\n\n // Add shortcuts that jump directly to slides\n const shortcut = slide.shortcut;\n addShortcut(shortcuts, shortcut, slideIndex, 0);\n\n // Add shortcuts that jump directly to builds within slides\n for (let animationIndex = 0; animationIndex < slide.animations.length; animationIndex++) {\n const animation = slide.animations[animationIndex];\n if (animation === undefined) {\n continue;\n }\n\n if (Array.isArray(animation)) {\n for (const anim of animation) {\n addShortcut(shortcuts, anim.shortcut, slideIndex, animationIndex + 1);\n }\n } else {\n addShortcut(shortcuts, animation.shortcut, slideIndex, animationIndex + 1);\n }\n }\n }\n\n return shortcuts;\n}\n\nfunction addShortcut(\n shortcuts: Record<string, ShortcutConfig>,\n shortcut: string | string[] | null,\n slideIndex: number,\n buildIndex: number,\n) {\n if (shortcut === null) {\n return;\n }\n\n if (Array.isArray(shortcut)) {\n for (const key of shortcut) {\n shortcuts[key] = { slideIndex, buildIndex };\n }\n } else {\n shortcuts[shortcut] = { slideIndex, buildIndex };\n }\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { ShortcutState } from \"../../types/ShortcutState\";\nimport { getPresentationShortcuts } from \"./getPresentationShortcuts\";\n\ninterface Callbacks {\n readonly onNext: (skipIntermediateBuilds: boolean) => void;\n readonly onPrevious: (skipIntermediateBuilds: boolean) => void;\n readonly onRenderSlide: (slideIndex: number | null, buildIndex: number) => void;\n readonly onShowNavigator: () => void;\n}\n\nexport function setupKeyEventListeners(\n presentation: Presentation,\n element: HTMLElement,\n shortcutState: ShortcutState,\n { onNext, onPrevious, onRenderSlide, onShowNavigator }: Callbacks,\n) {\n shortcutState.shortcuts = getPresentationShortcuts(presentation);\n\n // Show cursor when mouse moves\n element.addEventListener(\"mousemove\", () => {\n element.style.cursor = \"auto\";\n });\n\n element.addEventListener(\"keyup\", (event) => {\n // Reset command\n if (event.code === \"Escape\") {\n shortcutState.textCommand = null;\n return;\n }\n\n // Next slide\n if (event.code === \"ArrowRight\" || event.code === \"Space\") {\n onNext(event.shiftKey);\n return;\n }\n\n // Previous slide\n if (event.code === \"ArrowLeft\") {\n onPrevious(event.shiftKey);\n return;\n }\n\n // Check for an active text command\n if (shortcutState.textCommand !== null) {\n // Submitting a text command\n if (event.code === \"Enter\") {\n const command = shortcutState.textCommand;\n shortcutState.textCommand = null;\n\n // Check for a valid shortcut\n const shortcutConfig = shortcutState.shortcuts[command];\n if (shortcutConfig !== undefined) {\n onRenderSlide(shortcutConfig.slideIndex, shortcutConfig.buildIndex);\n } else if (!isNaN(Number(command))) {\n // Fall back to numbered slide\n onRenderSlide(Number(command) - 1, 0);\n }\n\n return;\n } else if (event.code === \"Backspace\") {\n // Backspace to delete last character\n shortcutState.textCommand = shortcutState.textCommand.slice(0, -1);\n } else {\n // Add character to text command\n shortcutState.textCommand += event.key;\n }\n return;\n }\n\n // Start a new text command\n if (event.key === \"g\") {\n shortcutState.textCommand = \"\";\n return;\n }\n\n // Show navigator\n if (event.key === \"`\") {\n onShowNavigator();\n return;\n }\n });\n}\n","export const LOCAL_STORAGE_KEY = \"presenterState\";\n","import { Presentation } from \"../../types/Presentation\";\nimport { LOCAL_STORAGE_KEY } from \"./storageConsts\";\nimport { StorageState } from \"./StorageState\";\n\nexport function loadPresentationState(\n presentation: Presentation,\n ttlMinutes: number | null,\n): StorageState | null {\n const state = localStorage.getItem(LOCAL_STORAGE_KEY);\n if (state === null) {\n return null;\n }\n\n // If no TTL is provided, don't use any cached data.\n if (ttlMinutes === null) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Check if the value is valid JSON.\n let data: unknown;\n try {\n data = JSON.parse(state);\n } catch (error) {\n console.error(\"Failed to parse presentation state from localStorage:\", error);\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n const { title, timestamp } = data as any;\n let { slideIndex, buildIndex } = data as any;\n\n if (\n typeof title !== \"string\" ||\n typeof slideIndex !== \"number\" ||\n typeof buildIndex !== \"number\" ||\n typeof timestamp !== \"number\"\n ) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // If title doesn't match, ignore the cache.\n if (title !== presentation.title) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Check if the value is older than the cache limit.\n if (Date.now() - timestamp > 1000 * 60 * ttlMinutes) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Validate slide index\n if (slideIndex > presentation.slides.length - 1) {\n slideIndex = presentation.slides.length - 1;\n buildIndex = 0;\n }\n\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Validate build index\n if (buildIndex > slide.animations.length) {\n buildIndex = slide.animations.length;\n }\n\n return {\n title,\n slideIndex,\n buildIndex,\n };\n}\n","import { LOCAL_STORAGE_KEY } from \"./storageConsts\";\nimport { StorageState } from \"./StorageState\";\n\nexport function storePresentationState({ title, slideIndex, buildIndex }: StorageState) {\n localStorage.setItem(\n LOCAL_STORAGE_KEY,\n JSON.stringify({ title, slideIndex, buildIndex, timestamp: Date.now() }),\n );\n}\n","import { ShortcutState } from \"../../../types/ShortcutState\";\nimport { UnifiedImage } from \"./UnifiedImage\";\n\nexport interface BrowserCanvasRendererState {\n canvas: HTMLCanvasElement | null;\n extrasContainer: SVGSVGElement | null;\n mountedExtrasCleanups: (() => void)[];\n\n /** The index of the currently displayed slide. */\n slideIndex: number;\n\n /** The index of the current build within the current slide.\n * If there are N animations on the slide, this will range from 0 to N inclusive.\n */\n buildIndex: number;\n\n /** The ID of the currently running animation, if any. */\n currentAnimationId: number | null;\n\n imageById: Record<string, UnifiedImage>;\n\n shortcutState: ShortcutState;\n}\n\nexport const BROWSER_CANVAS_RENDERER_DEFAULT_STATE: BrowserCanvasRendererState = Object.freeze({\n canvas: null,\n extrasContainer: null,\n mountedExtrasCleanups: [],\n mountedExtrasSlideIndex: null,\n slideIndex: 0,\n buildIndex: 0,\n currentAnimationId: null,\n imageById: {},\n shortcutState: {\n textCommand: null,\n shortcuts: {},\n },\n});\n","import { type CanvasRenderingContext2D as SkiaCanvasRenderingContext2D } from \"skia-canvas\";\n\nexport const CanvasContextType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type CanvasContextType = (typeof CanvasContextType)[keyof typeof CanvasContextType];\n\nexport interface BrowserCanvasContext {\n readonly type: typeof CanvasContextType.Browser;\n readonly context: CanvasRenderingContext2D;\n}\n\nexport interface NodeCanvasContext {\n readonly type: typeof CanvasContextType.Node;\n readonly context: SkiaCanvasRenderingContext2D;\n}\n\n/**\n * A unified CanvasRenderingContext2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedCanvasContext = BrowserCanvasContext | NodeCanvasContext;\n","import { UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\n\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx: UnifiedCanvasContext): void {\n ctx.context.clearRect(0, 0, canvas.width, canvas.height);\n}\n","import { Size } from \"../../../types/Size\";\n\nexport function createCanvasElement(size: Size): HTMLCanvasElement {\n const canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"width\", size.width.toString());\n canvas.setAttribute(\"height\", size.height.toString());\n\n canvas.style.position = \"absolute\";\n canvas.style.width = \"100%\";\n\n return canvas;\n}\n","import { type Path2D as SkiaPath2D } from \"skia-canvas\";\n\nexport const Path2DType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type Path2DType = (typeof Path2DType)[keyof typeof Path2DType];\n\nexport interface BrowserPath2D {\n readonly type: typeof Path2DType.Browser;\n readonly path: Path2D;\n}\n\nexport interface NodePath2D {\n readonly type: typeof Path2DType.Node;\n readonly path: SkiaPath2D;\n}\n\n/**\n * A unified Path2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedPath2D = BrowserPath2D | NodePath2D;\n","import { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\nexport function createPath2D(pathData?: string | undefined): UnifiedPath2D {\n const path = new Path2D(pathData);\n return {\n type: Path2DType.Browser,\n path,\n };\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { Position } from \"../../../types/Position\";\n\ninterface Return {\n readonly arrowPoints: Position[];\n readonly arrowheadPoints: Position[];\n readonly doubledArrowheadPoints: Position[];\n}\n\nexport function getArrowPoints(arrow: Arrow): Return {\n const { drawn, startX, startY, endX, endY, arrowheadSize, isArrowheadFilled, isDrawnFromCenter } =\n arrow;\n const start = { x: startX, y: startY };\n const end = { x: endX, y: endY };\n\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\n const midpoint = { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 };\n\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const length = Math.hypot(dx, dy);\n\n const drawnLength = length * drawn;\n const unitX = Math.cos(angle);\n const unitY = Math.sin(angle);\n\n const drawnStart = isDrawnFromCenter\n ? { x: midpoint.x - (unitX * drawnLength) / 2, y: midpoint.y - (unitY * drawnLength) / 2 }\n : start;\n const drawnEnd = isDrawnFromCenter\n ? { x: midpoint.x + (unitX * drawnLength) / 2, y: midpoint.y + (unitY * drawnLength) / 2 }\n : { x: start.x + unitX * drawnLength, y: start.y + unitY * drawnLength };\n\n const arrowAngle = isArrowheadFilled ? Math.PI / 6 : Math.PI / 4.5;\n const adjustedArrowheadSize = drawnLength < arrowheadSize * 2 ? drawnLength / 2 : arrowheadSize;\n\n const arrowheadBase1 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const arrowheadBase2 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n const doubledArrowheadBase1 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const doubledArrowheadBase2 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n return {\n arrowPoints: [drawnStart, drawnEnd],\n arrowheadPoints: [arrowheadBase1, drawnEnd, arrowheadBase2],\n doubledArrowheadPoints: [doubledArrowheadBase1, drawnStart, doubledArrowheadBase2],\n };\n}\n","import { Color } from \"../../../types/Color\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly color: Color;\n readonly ctx: UnifiedCanvasContext;\n readonly drawn?: number | null;\n readonly isDrawnFromCenter?: boolean;\n readonly isRounded?: boolean;\n readonly opacity?: number | null;\n readonly path: UnifiedPath2D | undefined;\n readonly pathLength?: number | null;\n readonly width: number;\n}\n\nexport function drawStroke({\n ctx,\n color,\n drawn = null,\n isDrawnFromCenter = false,\n isRounded = false,\n opacity = null,\n path,\n pathLength = null,\n width,\n}: Args) {\n if (width === 0 || drawn === 0) {\n return;\n }\n\n if (drawn !== null && pathLength !== null && drawn !== 1) {\n const fullPathLength = pathLength + (isRounded ? width : 0);\n const drawnLength = pathLength * drawn;\n if (!isDrawnFromCenter) {\n ctx.context.setLineDash([drawnLength, fullPathLength - drawnLength]);\n } else {\n ctx.context.setLineDash([\n 0,\n (fullPathLength - drawnLength) / 2,\n drawnLength,\n (fullPathLength - drawnLength) / 2,\n ]);\n }\n } else {\n ctx.context.setLineDash([]);\n }\n\n ctx.context.lineWidth = width;\n ctx.context.strokeStyle = getHexStringForColor(color, opacity);\n ctx.context.lineCap = isRounded ? \"round\" : \"butt\";\n\n if (path === undefined) {\n ctx.context.stroke();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Color } from \"../../../types/Color\";\nimport { getRgbStringForColor } from \"../../../utils/color/getRgbStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly ctx: UnifiedCanvasContext;\n readonly path: UnifiedPath2D | undefined;\n readonly color: Color;\n readonly opacity?: number | null;\n}\n\nexport function fillPath({ ctx, path, color, opacity = null }: Args) {\n ctx.context.fillStyle = getRgbStringForColor(color, opacity);\n\n if (path === undefined) {\n ctx.context.fill();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\nexport function getPathFromPositions(\n positions: Position[],\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const path = createPath();\n\n const firstPosition = positions[0];\n if (firstPosition === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPosition.x, firstPosition.y);\n\n let length = 0;\n\n for (let i = 1; i < positions.length; i++) {\n const position = positions[i];\n const prevPosition = positions[i - 1];\n\n if (position === undefined || prevPosition === undefined) {\n continue;\n }\n\n const dx = position.x - prevPosition.x;\n const dy = position.y - prevPosition.y;\n length += Math.hypot(dx, dy);\n path.path.lineTo(position.x, position.y);\n }\n\n return { path, length };\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { getArrowPoints } from \"../../../utils/objects/arrow/getArrowPoints\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\nimport { getPathFromPositions } from \"../utils/getPathFromPoints\";\n\nexport const renderArrow: BrowserCanvasObjectRenderer<Arrow> = ({\n ctx,\n object: arrow,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = arrow.opacity * opacity;\n if (targetOpacity === 0 || arrow.drawn === 0) {\n return;\n }\n\n const { arrowPoints, arrowheadPoints, doubledArrowheadPoints } = getArrowPoints(arrow);\n\n const { path: arrowPath } = getPathFromPositions(arrowPoints, createPath2D);\n const { path: arrowheadPath } = getPathFromPositions(arrowheadPoints, createPath2D);\n\n // Draw main arrow line\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n // Draw arrowhead\n if (arrow.isArrowheadFilled) {\n arrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: arrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n if (arrow.isArrowheadDoubled) {\n // Draw doubled arrowhead\n const { path: doubledArrowheadPath } = getPathFromPositions(\n doubledArrowheadPoints,\n createPath2D,\n );\n if (arrow.isArrowheadFilled) {\n doubledArrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: doubledArrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: doubledArrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n }\n};\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\n\n/**\n * Returns a circle path that is smaller than the original by half the border width.\n * This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getCircleInsetFillPath(\n circle: Circle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const insetRadius = circle.radius - circle.borderWidth / 2;\n if (insetRadius <= 0) {\n return undefined;\n }\n\n const path = createPath();\n const startAngle = -Math.PI / 2;\n path.path.arc(circle.x, circle.y, insetRadius, startAngle, startAngle + 2 * Math.PI);\n return path;\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getCirclePath(circle: Circle, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const startAngle = -Math.PI / 2;\n\n path.path.arc(circle.x, circle.y, circle.radius, startAngle, startAngle + 2 * Math.PI);\n const length = 2 * Math.PI * circle.radius;\n return { path, length };\n}\n","import { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\n/**\n * Clips the canvas context to the interior of the given path.\n * Must be called between ctx.context.save() and ctx.context.restore().\n */\nexport function clipToPath(ctx: UnifiedCanvasContext, path: UnifiedPath2D): void {\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { getCircleInsetFillPath } from \"../../../utils/objects/circle/getCircleInsetFillPath\";\nimport { getCirclePath } from \"../../../utils/objects/circle/getCirclePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderCircle: BrowserCanvasObjectRenderer<Circle> = ({\n ctx,\n object: circle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = circle.opacity * opacity;\n if (targetOpacity === 0 || (circle.drawn === 0 && circle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getCirclePath(circle, createPath2D);\n\n if (targetOpacity < 1 && circle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke,\n // avoiding the visual artifact on semi-transparent circles.\n const insetFillPath = getCircleInsetFillPath(circle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: circle.borderColor,\n ctx,\n drawn: circle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: circle.borderWidth,\n });\n};\n","export interface Position {\n readonly x: number;\n readonly y: number;\n}\n\nexport function Position(props: Partial<Position> | null = null): Position {\n return {\n x: 0,\n y: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_POSITION = Position();\n","import { DEFAULT_POSITION, Position } from \"./Position\";\nimport { DEFAULT_SIZE, Size } from \"./Size\";\n\nexport interface BoundingBox {\n /** The position of the top-left corner of the bounding box */\n readonly origin: Position;\n\n /** The size of the bounding box */\n readonly size: Size;\n}\n\nexport function BoundingBox(props: Partial<BoundingBox> | null = null): BoundingBox {\n return {\n origin: DEFAULT_POSITION,\n size: DEFAULT_SIZE,\n ...props,\n };\n}\n\nexport const DEFAULT_BOUNDING_BOX: BoundingBox = BoundingBox();\n","import { Anchor } from \"../../types/Anchor\";\nimport { BoundingBox } from \"../../types/BoundingBox\";\nimport { Position } from \"../../types/Position\";\nimport { Size } from \"../../types/Size\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getBoundingBox(position: Position, anchor: Anchor, size: Size): BoundingBox {\n const { x, y } = position;\n const { width, height } = size;\n\n switch (anchor) {\n case Anchor.TOP_LEFT:\n return BoundingBox({\n origin: Position({ x, y }),\n size,\n });\n case Anchor.TOP:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y }),\n size,\n });\n case Anchor.TOP_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y }),\n size,\n });\n case Anchor.LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height / 2 }),\n size,\n });\n case Anchor.CENTER:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height / 2 }),\n size,\n });\n case Anchor.RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height / 2 }),\n size,\n });\n case Anchor.BOTTOM_LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height }),\n size,\n });\n case Anchor.BOTTOM:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height }),\n size,\n });\n case Anchor.BOTTOM_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height }),\n size,\n });\n default:\n assertNever(anchor);\n }\n}\n","import { Group } from \"../../../objects/Group\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderGroup: BrowserCanvasObjectRenderer<Group> = ({\n ctx,\n object: group,\n renderObject,\n opacity,\n}) => {\n const boundingBox = getBoundingBox(\n Position({ x: group.x, y: group.y }),\n group.anchor,\n Size({\n width: group.width * group.scale,\n height: group.height * group.scale,\n }),\n );\n\n const { rotation, rotateOriginX, rotateOriginY } = group;\n\n // Prevent rendering if scale is zero\n if (group.scale === 0) {\n return;\n }\n\n // Apply translation and scale transformations\n ctx.context.translate(boundingBox.origin.x, boundingBox.origin.y);\n ctx.context.scale(group.scale, group.scale);\n\n // Apply rotation transformation\n ctx.context.translate(rotateOriginX, rotateOriginY);\n ctx.context.rotate((rotation * Math.PI) / 180);\n ctx.context.translate(-rotateOriginX, -rotateOriginY);\n\n for (const child of group.objects) {\n renderObject(child, opacity * group.opacity);\n }\n\n // If there's a preview color, render it to help with debugging group size/position\n if (group.previewColor !== null) {\n ctx.context.fillStyle = getHexStringForColor(group.previewColor);\n ctx.context.fillRect(0, 0, group.width, group.height);\n }\n\n // Undo transformations in reverse order, starting with rotation transformation\n ctx.context.translate(rotateOriginX, rotateOriginY);\n ctx.context.rotate((-rotation * Math.PI) / 180);\n ctx.context.translate(-rotateOriginX, -rotateOriginY);\n\n // Show indicator for rotation origin, to help with developing and debugging rotation\n if (group.rotateOriginPreviewSize > 0) {\n ctx.context.fillStyle = \"red\";\n ctx.context.beginPath();\n ctx.context.arc(rotateOriginX, rotateOriginY, group.rotateOriginPreviewSize, 0, 2 * Math.PI);\n ctx.context.fill();\n }\n\n // Undo translation and scale transformations\n ctx.context.scale(1 / group.scale, 1 / group.scale);\n ctx.context.translate(-boundingBox.origin.x, -boundingBox.origin.y);\n};\n","import { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\n\nexport function getRoundedRectanglePath(\n origin: Position,\n size: Size,\n rounding: number,\n createPath: () => UnifiedPath2D,\n overshoot: number = 0,\n): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(origin.x + rounding, origin.y);\n path.path.lineTo(origin.x + size.width - rounding, origin.y);\n path.path.arcTo(\n origin.x + size.width,\n origin.y,\n origin.x + size.width,\n origin.y + rounding,\n rounding,\n );\n path.path.lineTo(origin.x + size.width, origin.y + size.height - rounding);\n path.path.arcTo(\n origin.x + size.width,\n origin.y + size.height,\n origin.x + size.width - rounding,\n origin.y + size.height,\n rounding,\n );\n path.path.lineTo(origin.x + rounding, origin.y + size.height);\n path.path.arcTo(\n origin.x,\n origin.y + size.height,\n origin.x,\n origin.y + size.height - rounding,\n rounding,\n );\n path.path.lineTo(origin.x, origin.y + rounding);\n path.path.arcTo(origin.x, origin.y, origin.x + rounding, origin.y, rounding);\n if (overshoot > 0) {\n path.path.lineTo(origin.x + rounding + overshoot, origin.y);\n }\n\n const length = 2 * (size.width + size.height - 4 * rounding) + 2 * Math.PI * rounding + overshoot;\n return { path, length };\n}\n","import { type Image } from \"skia-canvas\";\n\nexport const ImageType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type ImageType = (typeof ImageType)[keyof typeof ImageType];\n\nexport interface BrowserImage {\n readonly type: typeof ImageType.Browser;\n readonly image: HTMLImageElement;\n}\n\nexport interface NodeImage {\n readonly type: typeof ImageType.Node;\n readonly image: Image;\n}\n\n/**\n * A unified Image type that works in both browser and Node.js environments.\n */\nexport type UnifiedImage = BrowserImage | NodeImage;\n","import { Image } from \"../../../objects/Image\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"../../../utils/objects/rectangle/getRoundedRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\nimport { Path2DType } from \"../types/UnifiedPath2D\";\n\nexport const renderImage: BrowserCanvasObjectRenderer<Image> = ({\n ctx,\n imageById,\n object: image,\n opacity,\n createPath2D,\n}) => {\n const boundingBox = getBoundingBox(\n Position({ x: image.x, y: image.y }),\n image.anchor,\n Size({ width: image.width, height: image.height }),\n );\n\n const imageData = imageById[image.imageId];\n if (imageData === undefined) {\n return;\n }\n\n ctx.context.save();\n\n if (image.rounding > 0) {\n const roundedRectPath = getRoundedRectanglePath(\n boundingBox.origin,\n boundingBox.size,\n image.rounding,\n createPath2D,\n );\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (roundedRectPath.path.type === Path2DType.Browser) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (roundedRectPath.path.type === Path2DType.Node) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n }\n\n ctx.context.globalAlpha = opacity * image.opacity;\n ctx.context.imageSmoothingEnabled = image.smooth;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Node Image in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Browser Image in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n\n // Restore opacity state\n ctx.context.restore();\n};\n","import { Line } from \"../../../objects/Line\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getLinePath(line: Line, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(line.startX, line.startY);\n path.path.lineTo(line.endX, line.endY);\n\n const length = Math.hypot(line.endX - line.startX, line.endY - line.startY);\n\n return { path, length };\n}\n","import { Line } from \"../../../objects/Line\";\nimport { getLinePath } from \"../../../utils/objects/line/getLinePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\n\nexport const renderLine: BrowserCanvasObjectRenderer<Line> = ({\n ctx,\n object: line,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = line.opacity * opacity;\n if (targetOpacity === 0 || line.drawn === 0) {\n return;\n }\n\n const { path, length } = getLinePath(line, createPath2D);\n\n drawStroke({\n color: line.color,\n ctx,\n drawn: line.drawn,\n isDrawnFromCenter: line.isDrawnFromCenter,\n isRounded: line.isRounded,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: line.width,\n });\n};\n","import { Mask } from \"../../../objects/Mask\";\nimport { Color } from \"../../../types/Color\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderMask: BrowserCanvasObjectRenderer<Mask> = ({\n ctx,\n object: mask,\n opacity,\n renderObject,\n}) => {\n ctx.context.save();\n\n const bbox = getBoundingBox(\n Position({ x: mask.x, y: mask.y }),\n mask.anchor,\n Size({ width: mask.width, height: mask.height }),\n );\n\n if (mask.preview) {\n ctx.context.lineWidth = 4;\n ctx.context.strokeStyle = getHexStringForColor(Color.RED);\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.stroke();\n }\n\n ctx.context.beginPath();\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.closePath();\n ctx.context.clip();\n\n for (const child of mask.objects) {\n renderObject(child, opacity * mask.opacity);\n }\n\n ctx.context.restore();\n};\n","import { Path } from \"../../../objects/Path\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPath: BrowserCanvasObjectRenderer<Path> = ({\n ctx,\n object: path,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = path.opacity * opacity;\n if (targetOpacity === 0 || (path.drawn === 0 && path.fill.alpha === 0)) {\n return;\n }\n\n const { origin } = getBoundingBox(\n Position({ x: path.x, y: path.y }),\n path.anchor,\n Size({ width: path.width, height: path.height }),\n );\n const path2D = createPath2D(path.path);\n\n ctx.context.save();\n ctx.context.translate(origin.x, origin.y);\n ctx.context.scale(path.width / path.viewboxWidth, path.height / path.viewboxHeight);\n\n fillPath({\n ctx,\n path: path2D,\n color: path.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: path.color,\n ctx,\n drawn: path.drawn,\n isRounded: path.isRounded,\n path: path2D,\n pathLength: path.pathLength,\n opacity: targetOpacity,\n width: path.strokeWidth,\n });\n\n // Undo transformations\n ctx.context.restore();\n};\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getPolygonPath(polygon: Polygon, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const points = polygon.points;\n\n const firstPoint = points[0];\n if (firstPoint === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPoint.x, firstPoint.y);\n\n let length = 0;\n let previousPoint = firstPoint;\n for (let i = 1; i < points.length; i++) {\n const point = points[i];\n if (point === undefined) {\n continue;\n }\n path.path.lineTo(point.x, point.y);\n const segmentLength = Math.hypot(point.x - previousPoint.x, point.y - previousPoint.y);\n length += segmentLength;\n previousPoint = point;\n }\n\n path.path.closePath();\n const closingSegmentLength = Math.hypot(\n firstPoint.x - previousPoint.x,\n firstPoint.y - previousPoint.y,\n );\n length += closingSegmentLength;\n\n return { path, length };\n}\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { getPolygonPath } from \"../../../utils/objects/polygon/getPolygonPath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPolygon: BrowserCanvasObjectRenderer<Polygon> = ({\n ctx,\n object: polygon,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = polygon.opacity * opacity;\n if (targetOpacity === 0 || (polygon.drawn === 0 && polygon.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getPolygonPath(polygon, createPath2D);\n\n fillPath({\n ctx,\n path,\n color: polygon.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: polygon.borderColor,\n ctx,\n drawn: polygon.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: polygon.borderWidth,\n });\n};\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\n/**\n * Returns a rectangle path that is smaller than the original by half the border width\n * on each side. This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getRectangleInsetFillPath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const inset = rectangle.borderWidth / 2;\n\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const insetWidth = size.width - rectangle.borderWidth;\n const insetHeight = size.height - rectangle.borderWidth;\n if (insetWidth <= 0 || insetHeight <= 0) {\n return undefined;\n }\n\n const insetOrigin = Position({ x: origin.x + inset, y: origin.y + inset });\n const insetSize = Size({ width: insetWidth, height: insetHeight });\n\n const rounding = Math.max(\n 0,\n Math.min(rectangle.rounding - inset, Math.min(insetWidth, insetHeight) / 2),\n );\n\n if (rounding > 0) {\n return getRoundedRectanglePath(insetOrigin, insetSize, rounding, createPath).path;\n }\n\n const path = createPath();\n path.path.moveTo(insetOrigin.x, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y + insetHeight);\n path.path.lineTo(insetOrigin.x, insetOrigin.y + insetHeight);\n path.path.closePath();\n return path;\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\nexport function getRectanglePath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const rounding = Math.max(0, Math.min(rectangle.rounding, Math.min(size.width, size.height) / 2));\n\n // Overshoot needed so that when path is drawn, the line caps cover the corners fully\n const overshoot = Math.min(rectangle.borderWidth * 2, size.width - rounding);\n\n if (rounding > 0) {\n return getRoundedRectanglePath(origin, size, rounding, createPath, overshoot);\n } else {\n const path = createPath();\n path.path.moveTo(origin.x, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y);\n path.path.lineTo(origin.x + overshoot, origin.y);\n\n const length = 2 * (size.width + size.height) + overshoot;\n return { path, length };\n }\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { getRectangleInsetFillPath } from \"../../../utils/objects/rectangle/getRectangleInsetFillPath\";\nimport { getRectanglePath } from \"../../../utils/objects/rectangle/getRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderRectangle: BrowserCanvasObjectRenderer<Rectangle> = ({\n ctx,\n object: rectangle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = rectangle.opacity * opacity;\n if (targetOpacity === 0 || (rectangle.drawn === 0 && rectangle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getRectanglePath(rectangle, createPath2D);\n\n if (targetOpacity < 1 && rectangle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke.\n const insetFillPath = getRectangleInsetFillPath(rectangle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: rectangle.borderColor,\n ctx,\n drawn: rectangle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: rectangle.borderWidth,\n });\n};\n","import { SVG } from \"../../../objects/SVG\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\n\nexport const renderSvg: BrowserCanvasObjectRenderer<SVG> = ({\n ctx,\n imageById,\n object: svg,\n opacity,\n}) => {\n const targetOpacity = svg.opacity * opacity;\n if (targetOpacity === 0 || !svg.svg) {\n return;\n }\n\n const imageData = imageById[svg.svg];\n if (imageData === undefined) {\n return;\n }\n\n const boundingBox = getBoundingBox(\n Position({ x: svg.x, y: svg.y }),\n svg.anchor,\n Size({ width: svg.width, height: svg.height }),\n );\n\n ctx.context.save();\n ctx.context.globalAlpha = targetOpacity;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n default:\n assertNever(ctx);\n }\n\n ctx.context.restore();\n};\n","import { Text } from \"../../../objects/Text\";\nimport { TextStyle } from \"../../../types/TextStyle\";\n\nexport function getTextStyleFromText(text: Text): TextStyle {\n return {\n color: text.color,\n fontFamily: text.fontFamily,\n fontSize: text.fontSize,\n fontStyle: text.fontStyle,\n fontWeight: text.fontWeight,\n ligatures: text.ligatures,\n };\n}\n","import { Size } from \"../../types/Size\";\n\n/**\n * Computes the combined size of a 2D array of sizes.\n *\n * If a line spacing is provided, it's added\n */\nexport function getCombinedSizes2D(sizes: Size[][], lineSpacing: number = 1): Size {\n const width = Math.max(...sizes.map((line) => line.reduce((a, b) => a + b.width, 0)));\n\n let height = 0;\n let previousLineHeight = 0;\n for (let i = 0; i < sizes.length; i++) {\n const line = sizes[i];\n if (line === undefined) {\n continue;\n }\n\n const lineHeight = Math.max(...line.map((unit) => unit.height));\n height += lineHeight + previousLineHeight * (lineSpacing - 1);\n previousLineHeight = lineHeight;\n }\n\n return {\n height,\n width,\n };\n}\n","import { Size } from \"../../../types/Size\";\n\nexport function getSizeFromTextMetrics(textMetrics: TextMetrics): Size {\n return {\n width: textMetrics.width,\n height: textMetrics.fontBoundingBoxAscent,\n };\n}\n","import { TextStyle } from \"../../../../types/TextStyle\";\nimport { getRgbStringForColor } from \"../../../../utils/color/getRgbStringForColor\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\n\nexport function setContextWithTextStyle(\n ctx: UnifiedCanvasContext,\n textStyle: TextStyle,\n opacity: number = 1,\n) {\n ctx.context.fillStyle = getRgbStringForColor(textStyle.color, opacity);\n ctx.context.font = `${textStyle.fontStyle} ${textStyle.fontWeight} ${textStyle.fontSize}px ${textStyle.fontFamily}`;\n\n if (ctx.type === CanvasContextType.Browser) {\n ctx.context.textRendering = textStyle.ligatures ? \"optimizeLegibility\" : \"optimizeSpeed\";\n } else {\n ctx.context.fontVariant = textStyle.ligatures ? \"common-ligatures\" : \"no-common-ligatures\";\n }\n}\n","import { Size } from \"../../../../types/Size\";\nimport { TextStyle } from \"../../../../types/TextStyle\";\nimport { TextUnit } from \"../../../../types/TextUnit\";\nimport { UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\nimport { getSizeFromTextMetrics } from \"../getSizeFromTextMetrics\";\nimport { setContextWithTextStyle } from \"./setContextWithTextStyle\";\n\nexport function getTextUnitMeasurements(\n textUnits: TextUnit[][],\n style: TextStyle,\n ctx: UnifiedCanvasContext,\n): Size[][] {\n const sizes: Size[][] = [];\n\n for (const line of textUnits) {\n const lineSizes: Size[] = [];\n for (const unit of line) {\n const { text, ...unitStyle } = unit;\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle);\n const metrics = ctx.context.measureText(text);\n lineSizes.push(getSizeFromTextMetrics(metrics));\n }\n sizes.push(lineSizes);\n }\n\n return sizes;\n}\n","import { Text } from \"../../../objects/Text\";\nimport { Alignment } from \"../../../types/Alignment\";\nimport { Position } from \"../../../types/Position\";\nimport { TextStyle } from \"../../../types/TextStyle\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getTextStyleFromText } from \"../../../utils/objects/text/getTextStyleFromText\";\nimport { getTextUnitsFromTextContent } from \"../../../utils/objects/text/getTextUnitsFromTextContent\";\nimport { getCombinedSizes2D } from \"../../../utils/size/getCombinedSizes2D\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { getTextUnitMeasurements } from \"../utils/text/getTextUnitMeasurements\";\nimport { setContextWithTextStyle } from \"../utils/text/setContextWithTextStyle\";\n\nexport const renderText: BrowserCanvasObjectRenderer<Text> = ({ ctx, object: text, opacity }) => {\n const targetOpacity = text.opacity * opacity;\n if (targetOpacity === 0) {\n return;\n }\n\n const { length } = text;\n const textUnits = getTextUnitsFromTextContent(text.text);\n const style = getTextStyleFromText(text);\n\n const sizes = getTextUnitMeasurements(textUnits, style, ctx);\n const size = getCombinedSizes2D(sizes, text.lineSpacing);\n const boundingBox = getBoundingBox(Position({ x: text.x, y: text.y }), text.anchor, size);\n\n let x = boundingBox.origin.x;\n let y = boundingBox.origin.y;\n let consumedLength = 0;\n let previousLineHeight = 0;\n\n for (let lineIndex = 0; lineIndex < textUnits.length; lineIndex++) {\n const line = textUnits[lineIndex];\n const lineSizes = sizes[lineIndex];\n\n if (line == undefined || lineSizes == undefined) {\n console.error(\"Could not determine text units or sizes for line\");\n continue;\n }\n\n const lineWidth = lineSizes.reduce((acc, curr) => acc + curr.width, 0);\n const lineHeight =\n lineSizes.length === 0\n ? previousLineHeight\n : lineSizes.reduce((acc, curr) => Math.max(acc, curr.height), 0);\n\n switch (text.alignment) {\n case Alignment.LEFT:\n x = boundingBox.origin.x;\n break;\n case Alignment.CENTER:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth) / 2;\n break;\n case Alignment.RIGHT:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth);\n break;\n default:\n assertNever(text.alignment);\n break;\n }\n y += lineHeight + previousLineHeight * (text.lineSpacing - 1);\n previousLineHeight = lineHeight;\n\n for (let unitIndex = 0; unitIndex < line.length; unitIndex++) {\n if (length !== null && consumedLength >= length) {\n break;\n }\n\n const unit = line[unitIndex];\n const unitSize = lineSizes[unitIndex];\n\n if (unit == undefined || unitSize == undefined) {\n console.error(\"Could not determine text unit or size for unit\");\n continue;\n }\n\n const { text: unitText, ...unitStyle } = unit;\n\n let truncatedUnitText: string | undefined;\n if (length !== null && consumedLength + unitText.length > length) {\n const remainingLength = length - consumedLength;\n truncatedUnitText = unitText.slice(0, remainingLength);\n }\n const targetUnitText = truncatedUnitText ?? unitText;\n consumedLength += targetUnitText.length;\n\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle, targetOpacity);\n ctx.context.fillText(targetUnitText, x, y);\n x += unitSize.width;\n }\n }\n};\n","import { ObjectType } from \"../../../types/ObjectType\";\nimport { renderArrow } from \"../objects/renderArrow\";\nimport { renderCircle } from \"../objects/renderCircle\";\nimport { renderGroup } from \"../objects/renderGroup\";\nimport { renderImage } from \"../objects/renderImage\";\nimport { renderLine } from \"../objects/renderLine\";\nimport { renderMask } from \"../objects/renderMask\";\nimport { renderPath } from \"../objects/renderPath\";\nimport { renderPolygon } from \"../objects/renderPolygon\";\nimport { renderRectangle } from \"../objects/renderRectangle\";\nimport { renderSvg } from \"../objects/renderSvg\";\nimport { renderText } from \"../objects/renderText\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\ntype ObjectRendererMap = Record<ObjectType, BrowserCanvasObjectRenderer<any>>;\n\nexport const DEFAULT_OBJECT_RENDERERS: ObjectRendererMap = {\n [ObjectType.ARROW]: renderArrow,\n [ObjectType.CIRCLE]: renderCircle,\n [ObjectType.GROUP]: renderGroup,\n [ObjectType.IMAGE]: renderImage,\n [ObjectType.LINE]: renderLine,\n [ObjectType.MASK]: renderMask,\n [ObjectType.PATH]: renderPath,\n [ObjectType.POLYGON]: renderPolygon,\n [ObjectType.RECTANGLE]: renderRectangle,\n [ObjectType.SLIDE_OBJECT]: () => {},\n [ObjectType.SVG]: renderSvg,\n [ObjectType.TEXT]: renderText,\n};\n","import { Size } from \"../../../../types/Size\";\n\n/**\n * Extra elements are treated as foreignObjects in an SVG container element.\n * This function creates the extras container SVG element to host the slide extras.\n */\nexport function createExtrasElement(size: Size): SVGSVGElement {\n const extrasElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n extrasElement.setAttribute(\"viewBox\", `0 0 ${size.width} ${size.height}`);\n extrasElement.style.backgroundColor = \"transparent\";\n extrasElement.style.position = \"absolute\";\n extrasElement.style.width = \"100%\";\n\n return extrasElement;\n}\n","import { Position } from \"../../../../types/Position\";\nimport { Size } from \"../../../../types/Size\";\nimport { SlideWebExtra } from \"../../../../types/SlideWebExtra\";\nimport { getBoundingBox } from \"../../../../utils/layout/getBoundingBox\";\n\nexport function mountWebExtra(\n container: SVGSVGElement | null,\n extra: SlideWebExtra,\n): (() => void) | null {\n if (container === null) {\n return null;\n }\n\n const boundingBox = getBoundingBox(\n Position({ x: extra.x, y: extra.y }),\n extra.anchor,\n Size({ width: extra.width, height: extra.height }),\n );\n\n const foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\");\n foreignObject.setAttribute(\"x\", boundingBox.origin.x.toString());\n foreignObject.setAttribute(\"y\", boundingBox.origin.y.toString());\n foreignObject.setAttribute(\"width\", extra.width.toString());\n foreignObject.setAttribute(\"height\", extra.height.toString());\n\n const extraElement = extra.content;\n if (extraElement !== null) {\n foreignObject.appendChild(extraElement);\n }\n\n container.appendChild(foreignObject);\n\n let cleanup: (() => void) | null = null;\n if (extra.setup !== null) {\n const cleanupResult = extra.setup(foreignObject);\n if (cleanupResult !== undefined) {\n cleanup = cleanupResult;\n }\n }\n\n // Return cleanup function\n return () => {\n if (cleanup !== null) {\n cleanup();\n }\n container.removeChild(foreignObject);\n };\n}\n","import { ImageType, UnifiedImage } from \"../types/UnifiedImage\";\n\nexport async function loadPresentationImages(\n imagePathById: Record<string, string>,\n): Promise<Record<string, UnifiedImage>> {\n if (Object.keys(imagePathById).length === 0) {\n return {};\n }\n\n const imageById: Record<string, UnifiedImage> = {};\n\n const loadImage = (src: string): Promise<HTMLImageElement> => {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (err) => reject(err);\n\n // Handle SVGs that aren't already in URL form\n const isRawSVG = src.includes(\"</svg>\");\n if (isRawSVG) {\n // Remove XML header tag, can cause parsing to fail and isn't necessary for SVG rendering\n const sanitized = src.replace(/<\\?xml[^?]*\\?>\\s*/g, \"\");\n\n const svgBlob = new Blob([sanitized], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n img.src = url;\n } else {\n img.src = src;\n }\n });\n };\n\n const loadPromises = Object.entries(imagePathById).map(async ([id, path]) => {\n const img = await loadImage(path);\n imageById[id] = {\n type: ImageType.Browser,\n image: img,\n };\n });\n\n try {\n await Promise.all(loadPromises);\n } catch (error) {\n console.error(\"Error loading images:\", error);\n }\n\n return imageById;\n}\n","import { openNavigator } from \"../../navigator/openNavigator\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getSlideAnimationDuration } from \"../../utils/animate/getSlideAnimationDuration\";\nimport { getRgbStringForColor } from \"../../utils/color/getRgbStringForColor\";\nimport { createPresentationContainer } from \"../../utils/presentation/createPresentationContainer\";\nimport { getObjectState } from \"../../utils/presentation/getObjectState\";\nimport { getSvgImageUrlById } from \"../../utils/presentation/getSvgImageUrlById\";\nimport { setupKeyEventListeners } from \"../../utils/presentation/setupKeyEventListeners\";\nimport { loadPresentationState } from \"../../utils/storage/loadPresentationState\";\nimport { storePresentationState } from \"../../utils/storage/storePresentationState\";\nimport { BrowserCanvasRendererProps } from \"./types/BrowserCanvasRendererProps\";\nimport {\n BROWSER_CANVAS_RENDERER_DEFAULT_STATE,\n BrowserCanvasRendererState,\n} from \"./types/BrowserCanvasRendererState\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"./types/UnifiedCanvasContext\";\nimport { clearCanvas } from \"./utils/clearCanvas\";\nimport { createCanvasElement } from \"./utils/createCanvasElement\";\nimport { createPath2D } from \"./utils/createPath2D\";\nimport { DEFAULT_OBJECT_RENDERERS } from \"./utils/defaultObjectRenderers\";\nimport { createExtrasElement } from \"./utils/extras/createExtrasElement\";\nimport { mountWebExtra } from \"./utils/extras/mountWebExtra\";\nimport { loadPresentationImages } from \"./utils/loadPresentationImages\";\n\nexport class BrowserCanvasRenderer {\n props: BrowserCanvasRendererProps;\n state: BrowserCanvasRendererState;\n\n constructor(props: Partial<BrowserCanvasRendererProps>) {\n const { objectRenderers, ...rest } = props;\n this.props = {\n presentation: Presentation(),\n element: document.body,\n objectRenderers: {\n ...DEFAULT_OBJECT_RENDERERS,\n ...objectRenderers,\n },\n cacheDurationMinutes: 15,\n ...rest,\n };\n this.state = { ...BROWSER_CANVAS_RENDERER_DEFAULT_STATE };\n }\n\n /** Starts the presentation. */\n async present(): Promise<void> {\n const { presentation, element } = this.props;\n const canvas = createCanvasElement(presentation.size);\n const extrasContainer = createExtrasElement(presentation.size);\n\n this.state = {\n ...BROWSER_CANVAS_RENDERER_DEFAULT_STATE,\n imageById: await loadPresentationImages({\n ...presentation.resources.images,\n ...getSvgImageUrlById(presentation),\n }),\n canvas,\n extrasContainer,\n };\n\n const container = createPresentationContainer(presentation, element);\n\n setupKeyEventListeners(presentation, element, this.state.shortcutState, {\n onNext: (skipIntermediateBuilds: boolean) => this.next(skipIntermediateBuilds),\n onPrevious: (skipIntermediateBuilds: boolean) => this.previous(skipIntermediateBuilds),\n onRenderSlide: (slideIndex: number | null, buildIndex: number) => {\n // Set up a shortcut for going back to this slide/build\n this.state.shortcutState.shortcuts.b = {\n slideIndex: this.state.slideIndex,\n buildIndex: this.state.buildIndex,\n };\n\n this.renderSlide(slideIndex ?? this.state.slideIndex, buildIndex);\n },\n onShowNavigator: () =>\n openNavigator({\n presentation,\n onNavigateToSlide: (slideIndex) => this.renderSlide(slideIndex),\n }),\n });\n\n element.replaceChildren();\n container.appendChild(canvas);\n container.appendChild(extrasContainer);\n element.appendChild(container);\n\n const loadedState = loadPresentationState(presentation, this.props.cacheDurationMinutes);\n if (loadedState !== null) {\n this.renderSlide(loadedState.slideIndex, loadedState.buildIndex);\n } else {\n this.renderSlide(0);\n }\n }\n\n renderSlide(slideIndex: number, buildIndex: number = 0, buildTime: number | null = null): void {\n const { objectRenderers, presentation } = this.props;\n const { canvas, imageById } = this.state;\n\n const didSlideIndexChange = this.state.slideIndex !== slideIndex;\n this.state.slideIndex = slideIndex;\n this.state.buildIndex = buildIndex;\n\n // Store state in local storage\n if (buildTime === null) {\n storePresentationState({ title: presentation.title, slideIndex, buildIndex });\n }\n\n const slide = presentation.slides[slideIndex];\n if (slide === undefined || canvas === null) {\n return;\n }\n\n // Handle mounting/unmounting web extras when slide index changes.\n // Also handle it if there are no mounted extras but the slide has extras to mount\n // (e.g. on a presentation's first slide, where slide index will have stayed 0).\n if (\n didSlideIndexChange ||\n (this.state.mountedExtrasCleanups.length === 0 && slide.extras.length > 0)\n ) {\n // Clean up any existing extras\n for (const cleanup of this.state.mountedExtrasCleanups) {\n cleanup();\n }\n this.state.mountedExtrasCleanups = [];\n\n // Mount new extras\n for (const extra of slide.extras) {\n const cleanup = mountWebExtra(this.state.extrasContainer, extra);\n if (cleanup !== null) {\n this.state.mountedExtrasCleanups.push(cleanup);\n }\n }\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (ctx === null) {\n return;\n }\n\n const context: UnifiedCanvasContext = {\n type: CanvasContextType.Browser,\n context: ctx,\n };\n\n clearCanvas(canvas, context);\n\n const objectState = getObjectState({\n slide,\n buildIndex,\n buildTime,\n });\n\n // Render background color.\n context.context.fillStyle = getRgbStringForColor(presentation.backgroundColor);\n context.context.fillRect(0, 0, canvas.width, canvas.height);\n\n function renderObject(object: SlideObject, opacity: number) {\n const objectRenderer = objectRenderers[object.objectType];\n const currentObject = objectState.get(object);\n if (objectRenderer === undefined || currentObject === undefined) {\n return;\n }\n objectRenderer({\n ctx: context,\n imageById,\n object: currentObject,\n opacity,\n renderObject,\n createPath2D,\n });\n }\n\n // Render all objects in the slide.\n for (const object of slide.objects) {\n renderObject(object, 1.0);\n }\n }\n\n next(skipIntermediateBuilds: boolean = false) {\n const { presentation } = this.props;\n const { currentAnimationId, slideIndex, buildIndex } = this.state;\n\n this.props.element.style.cursor = \"none\";\n\n if (currentAnimationId !== null) {\n cancelAnimationFrame(currentAnimationId);\n }\n\n const currentSlide = presentation.slides[slideIndex];\n if (currentSlide === undefined) {\n return;\n }\n\n const nextAnimation = currentSlide.animations[buildIndex];\n\n if (nextAnimation !== undefined && !skipIntermediateBuilds) {\n const startTime = performance.now();\n const animationDuration = getSlideAnimationDuration(nextAnimation);\n\n const animate = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n\n if (elapsed < animationDuration) {\n this.renderSlide(slideIndex, buildIndex + 1, elapsed);\n this.state.currentAnimationId = requestAnimationFrame(animate);\n } else {\n this.renderSlide(slideIndex, buildIndex + 1, null);\n }\n };\n\n this.state.currentAnimationId = requestAnimationFrame(animate);\n } else if (slideIndex + 1 < presentation.slides.length) {\n this.renderSlide(slideIndex + 1);\n }\n }\n\n previous(skipIntermediateBuilds: boolean = false) {\n const { currentAnimationId, slideIndex, buildIndex } = this.state;\n\n this.props.element.style.cursor = \"none\";\n\n if (currentAnimationId !== null) {\n cancelAnimationFrame(currentAnimationId);\n }\n\n if (buildIndex > 0) {\n if (skipIntermediateBuilds) {\n this.renderSlide(slideIndex, 0);\n } else {\n this.renderSlide(slideIndex, buildIndex - 1);\n }\n } else if (slideIndex > 0) {\n const previousSlide = this.props.presentation.slides[slideIndex - 1];\n const buildIndex = skipIntermediateBuilds ? 0 : (previousSlide?.animations.length ?? 0);\n\n this.renderSlide(slideIndex - 1, buildIndex);\n } else {\n this.renderSlide(0, 0);\n }\n }\n}\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\n\nexport interface Pause extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.PAUSE;\n readonly duration: number;\n}\n\nexport function Pause(duration: number = 1000): Pause {\n return {\n type: AnimationType.PAUSE,\n isKey: false,\n duration,\n shortcut: null,\n };\n}\n","import { SlideAnimation } from \"./SlideAnimation\";\nimport { SlideObject } from \"./SlideObject\";\nimport { SlideWebExtra } from \"./SlideWebExtra\";\n\nexport interface Slide {\n readonly objects: SlideObject[];\n readonly animations: SlideAnimation[];\n readonly extras: SlideWebExtra[];\n\n readonly isAllKey: boolean;\n readonly isEndKey: boolean;\n readonly isStartKey: boolean;\n readonly shortcut: string | string[] | null;\n readonly title: string;\n}\n\nexport function Slide(props: Partial<Slide> | null = null): Slide {\n return {\n objects: [],\n animations: [],\n extras: [],\n isAllKey: false,\n isEndKey: true,\n isStartKey: false,\n shortcut: null,\n title: \"\",\n ...props,\n };\n}\n","import { TextStyle } from \"./TextStyle\";\n\n/** A possibly styled piece of text inside of a text object. */\nexport interface TextUnit extends Partial<TextStyle> {\n readonly text: string;\n}\n\nexport function TextUnit(text: string, props: Partial<Omit<TextUnit, \"text\">> = {}): TextUnit {\n return {\n ...props,\n text,\n };\n}\n","import { Color } from \"../../types/Color\";\n\nexport function Opaque(color: Color = Color.BLACK): Color {\n return { ...color, alpha: 1 };\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.sqrt(xa * xa + ya * ya);\n }\n\n return perimeter;\n}\n","'use strict';\n\n\nvar paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 };\n\nvar SPECIAL_SPACES = [\n 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF\n];\n\nfunction isSpace(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029) || // Line terminators\n // White spaces\n (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && SPECIAL_SPACES.indexOf(ch) >= 0);\n}\n\nfunction isCommand(code) {\n /*eslint-disable no-bitwise*/\n switch (code | 0x20) {\n case 0x6D/* m */:\n case 0x7A/* z */:\n case 0x6C/* l */:\n case 0x68/* h */:\n case 0x76/* v */:\n case 0x63/* c */:\n case 0x73/* s */:\n case 0x71/* q */:\n case 0x74/* t */:\n case 0x61/* a */:\n case 0x72/* r */:\n return true;\n }\n return false;\n}\n\nfunction isArc(code) {\n return (code | 0x20) === 0x61;\n}\n\nfunction isDigit(code) {\n return (code >= 48 && code <= 57); // 0..9\n}\n\nfunction isDigitStart(code) {\n return (code >= 48 && code <= 57) || /* 0..9 */\n code === 0x2B || /* + */\n code === 0x2D || /* - */\n code === 0x2E; /* . */\n}\n\n\nfunction State(path) {\n this.index = 0;\n this.path = path;\n this.max = path.length;\n this.result = [];\n this.param = 0.0;\n this.err = '';\n this.segmentStart = 0;\n this.data = [];\n}\n\nfunction skipSpaces(state) {\n while (state.index < state.max && isSpace(state.path.charCodeAt(state.index))) {\n state.index++;\n }\n}\n\n\nfunction scanFlag(state) {\n var ch = state.path.charCodeAt(state.index);\n\n if (ch === 0x30/* 0 */) {\n state.param = 0;\n state.index++;\n return;\n }\n\n if (ch === 0x31/* 1 */) {\n state.param = 1;\n state.index++;\n return;\n }\n\n state.err = 'SvgPath: arc flag can be 0 or 1 only (at pos ' + state.index + ')';\n}\n\n\nfunction scanParam(state) {\n var start = state.index,\n index = start,\n max = state.max,\n zeroFirst = false,\n hasCeiling = false,\n hasDecimal = false,\n hasDot = false,\n ch;\n\n if (index >= max) {\n state.err = 'SvgPath: missed param (at pos ' + index + ')';\n return;\n }\n ch = state.path.charCodeAt(index);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n //\n if (!isDigit(ch) && ch !== 0x2E/* . */) {\n state.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n return;\n }\n\n if (ch !== 0x2E/* . */) {\n zeroFirst = (ch === 0x30/* 0 */);\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n state.err = 'SvgPath: numbers started with `0` such as `09` are illegal (at pos ' + start + ')';\n return;\n }\n }\n\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n hasCeiling = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x2E/* . */) {\n hasDot = true;\n index++;\n while (isDigit(state.path.charCodeAt(index))) {\n index++;\n hasDecimal = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x65/* e */ || ch === 0x45/* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n }\n if (index < max && isDigit(state.path.charCodeAt(index))) {\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n }\n } else {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n }\n\n state.index = index;\n state.param = parseFloat(state.path.slice(start, index)) + 0.0;\n}\n\n\nfunction finalizeSegment(state) {\n var cmd, cmdLC;\n\n // Process duplicated commands (without comand name)\n\n // This logic is shamelessly borrowed from Raphael\n // https://github.com/DmitryBaranovskiy/raphael/\n //\n cmd = state.path[state.segmentStart];\n cmdLC = cmd.toLowerCase();\n\n var params = state.data;\n\n if (cmdLC === 'm' && params.length > 2) {\n state.result.push([ cmd, params[0], params[1] ]);\n params = params.slice(2);\n cmdLC = 'l';\n cmd = (cmd === 'm') ? 'l' : 'L';\n }\n\n if (cmdLC === 'r') {\n state.result.push([ cmd ].concat(params));\n } else {\n\n while (params.length >= paramCounts[cmdLC]) {\n state.result.push([ cmd ].concat(params.splice(0, paramCounts[cmdLC])));\n if (!paramCounts[cmdLC]) {\n break;\n }\n }\n }\n}\n\n\nfunction scanSegment(state) {\n var max = state.max,\n cmdCode, is_arc, comma_found, need_params, i;\n\n state.segmentStart = state.index;\n cmdCode = state.path.charCodeAt(state.index);\n is_arc = isArc(cmdCode);\n\n if (!isCommand(cmdCode)) {\n state.err = 'SvgPath: bad command ' + state.path[state.index] + ' (at pos ' + state.index + ')';\n return;\n }\n\n need_params = paramCounts[state.path[state.index].toLowerCase()];\n\n state.index++;\n skipSpaces(state);\n\n state.data = [];\n\n if (!need_params) {\n // Z\n finalizeSegment(state);\n return;\n }\n\n comma_found = false;\n\n for (;;) {\n for (i = need_params; i > 0; i--) {\n if (is_arc && (i === 3 || i === 4)) scanFlag(state);\n else scanParam(state);\n\n if (state.err.length) {\n finalizeSegment(state);\n return;\n }\n state.data.push(state.param);\n\n skipSpaces(state);\n comma_found = false;\n\n if (state.index < max && state.path.charCodeAt(state.index) === 0x2C/* , */) {\n state.index++;\n skipSpaces(state);\n comma_found = true;\n }\n }\n\n // after ',' param is mandatory\n if (comma_found) {\n continue;\n }\n\n if (state.index >= state.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(state.path.charCodeAt(state.index))) {\n break;\n }\n }\n\n finalizeSegment(state);\n}\n\n\n/* Returns array of segments:\n *\n * [\n * [ command, coord1, coord2, ... ]\n * ]\n */\nmodule.exports = function pathParse(svgPath) {\n var state = new State(svgPath);\n var max = state.max;\n\n skipSpaces(state);\n\n while (state.index < max && !state.err.length) {\n scanSegment(state);\n }\n\n if (state.result.length) {\n if ('mM'.indexOf(state.result[0][0]) < 0) {\n state.err = 'SvgPath: string should start with `M` or `m`';\n state.result = [];\n } else {\n state.result[0][0] = 'M';\n }\n }\n\n return {\n err: state.err,\n segments: state.result\n };\n};\n","'use strict';\n\n// combine 2 matrixes\n// m1, m2 - [a, b, c, d, e, g]\n//\nfunction combine(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n}\n\n\nfunction Matrix() {\n if (!(this instanceof Matrix)) { return new Matrix(); }\n this.queue = []; // list of matrixes to apply\n this.cache = null; // combined matrix cache\n}\n\n\nMatrix.prototype.matrix = function (m) {\n if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {\n return this;\n }\n this.cache = null;\n this.queue.push(m);\n return this;\n};\n\n\nMatrix.prototype.translate = function (tx, ty) {\n if (tx !== 0 || ty !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, 0, 1, tx, ty ]);\n }\n return this;\n};\n\n\nMatrix.prototype.scale = function (sx, sy) {\n if (sx !== 1 || sy !== 1) {\n this.cache = null;\n this.queue.push([ sx, 0, 0, sy, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.rotate = function (angle, rx, ry) {\n var rad, cos, sin;\n\n if (angle !== 0) {\n this.translate(rx, ry);\n\n rad = angle * Math.PI / 180;\n cos = Math.cos(rad);\n sin = Math.sin(rad);\n\n this.queue.push([ cos, sin, -sin, cos, 0, 0 ]);\n this.cache = null;\n\n this.translate(-rx, -ry);\n }\n return this;\n};\n\n\nMatrix.prototype.skewX = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, Math.tan(angle * Math.PI / 180), 1, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.skewY = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, Math.tan(angle * Math.PI / 180), 0, 1, 0, 0 ]);\n }\n return this;\n};\n\n\n// Flatten queue\n//\nMatrix.prototype.toArray = function () {\n if (this.cache) {\n return this.cache;\n }\n\n if (!this.queue.length) {\n this.cache = [ 1, 0, 0, 1, 0, 0 ];\n return this.cache;\n }\n\n this.cache = this.queue[0];\n\n if (this.queue.length === 1) {\n return this.cache;\n }\n\n for (var i = 1; i < this.queue.length; i++) {\n this.cache = combine(this.cache, this.queue[i]);\n }\n\n return this.cache;\n};\n\n\n// Apply list of matrixes to (x,y) point.\n// If `isRelative` set, `translate` component of matrix will be skipped\n//\nMatrix.prototype.calc = function (x, y, isRelative) {\n var m;\n\n // Don't change point on empty transforms queue\n if (!this.queue.length) { return [ x, y ]; }\n\n // Calculate final matrix, if not exists\n //\n // NB. if you deside to apply transforms to point one-by-one,\n // they should be taken in reverse order\n\n if (!this.cache) {\n this.cache = this.toArray();\n }\n\n m = this.cache;\n\n // Apply matrix to point\n return [\n x * m[0] + y * m[2] + (isRelative ? 0 : m[4]),\n x * m[1] + y * m[3] + (isRelative ? 0 : m[5])\n ];\n};\n\n\nmodule.exports = Matrix;\n","'use strict';\n\n\nvar Matrix = require('./matrix');\n\nvar operations = {\n matrix: true,\n scale: true,\n rotate: true,\n translate: true,\n skewX: true,\n skewY: true\n};\n\nvar CMD_SPLIT_RE = /\\s*(matrix|translate|scale|rotate|skewX|skewY)\\s*\\(\\s*(.+?)\\s*\\)[\\s,]*/;\nvar PARAMS_SPLIT_RE = /[\\s,]+/;\n\n\nmodule.exports = function transformParse(transformString) {\n var matrix = new Matrix();\n var cmd, params;\n\n // Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate', '-45', '']\n transformString.split(CMD_SPLIT_RE).forEach(function (item) {\n\n // Skip empty elements\n if (!item.length) { return; }\n\n // remember operation\n if (typeof operations[item] !== 'undefined') {\n cmd = item;\n return;\n }\n\n // extract params & att operation to matrix\n params = item.split(PARAMS_SPLIT_RE).map(function (i) {\n return +i || 0;\n });\n\n // If params count is not correct - ignore command\n switch (cmd) {\n case 'matrix':\n if (params.length === 6) {\n matrix.matrix(params);\n }\n return;\n\n case 'scale':\n if (params.length === 1) {\n matrix.scale(params[0], params[0]);\n } else if (params.length === 2) {\n matrix.scale(params[0], params[1]);\n }\n return;\n\n case 'rotate':\n if (params.length === 1) {\n matrix.rotate(params[0], 0, 0);\n } else if (params.length === 3) {\n matrix.rotate(params[0], params[1], params[2]);\n }\n return;\n\n case 'translate':\n if (params.length === 1) {\n matrix.translate(params[0], 0);\n } else if (params.length === 2) {\n matrix.translate(params[0], params[1]);\n }\n return;\n\n case 'skewX':\n if (params.length === 1) {\n matrix.skewX(params[0]);\n }\n return;\n\n case 'skewY':\n if (params.length === 1) {\n matrix.skewY(params[0]);\n }\n return;\n }\n });\n\n return matrix;\n};\n","// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n\n // Add this to work with arbitrary vectors:\n // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n // rounding errors, e.g. -1.0000000000000002 can screw up this\n if (dot > 1.0) { dot = 1.0; }\n if (dot < -1.0) { dot = -1.0; }\n\n return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n // Step 1.\n //\n // Moving an ellipse so origin will be the middlepoint between our two\n // points. After that, rotate it to line up ellipse axes with coordinate\n // axes.\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n var rx_sq = rx * rx;\n var ry_sq = ry * ry;\n var x1p_sq = x1p * x1p;\n var y1p_sq = y1p * y1p;\n\n // Step 2.\n //\n // Compute coordinates of the centre of this ellipse (cx', cy')\n // in the new coordinate system.\n //\n var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n if (radicant < 0) {\n // due to rounding errors it might be e.g. -1.3877787807814457e-17\n radicant = 0;\n }\n\n radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n var cxp = radicant * rx/ry * y1p;\n var cyp = radicant * -ry/rx * x1p;\n\n // Step 3.\n //\n // Transform back to get centre coordinates (cx, cy) in the original\n // coordinate system.\n //\n var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n // Step 4.\n //\n // Compute angles (theta1, delta_theta).\n //\n var v1x = (x1p - cxp) / rx;\n var v1y = (y1p - cyp) / ry;\n var v2x = (-x1p - cxp) / rx;\n var v2y = (-y1p - cyp) / ry;\n\n var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n if (fs === 0 && delta_theta > 0) {\n delta_theta -= TAU;\n }\n if (fs === 1 && delta_theta < 0) {\n delta_theta += TAU;\n }\n\n return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n var alpha = 4/3 * Math.tan(delta_theta/4);\n\n var x1 = Math.cos(theta1);\n var y1 = Math.sin(theta1);\n var x2 = Math.cos(theta1 + delta_theta);\n var y2 = Math.sin(theta1 + delta_theta);\n\n return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nmodule.exports = function a2c(x1, y1, x2, y2, fa, fs, rx, ry, phi) {\n var sin_phi = Math.sin(phi * TAU / 360);\n var cos_phi = Math.cos(phi * TAU / 360);\n\n // Make sure radii are valid\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n if (x1p === 0 && y1p === 0) {\n // we're asked to draw line to itself\n return [];\n }\n\n if (rx === 0 || ry === 0) {\n // one of the radii is zero\n return [];\n }\n\n\n // Compensate out-of-range radii\n //\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n\n // Get center parameters (cx, cy, theta1, delta_theta)\n //\n var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n var result = [];\n var theta1 = cc[2];\n var delta_theta = cc[3];\n\n // Split an arc to multiple segments, so each segment\n // will be less than τ/4 (= 90°)\n //\n var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n delta_theta /= segments;\n\n for (var i = 0; i < segments; i++) {\n result.push(approximate_unit_arc(theta1, delta_theta));\n theta1 += delta_theta;\n }\n\n // We have a bezier approximation of a unit circle,\n // now need to transform back to the original ellipse\n //\n return result.map(function (curve) {\n for (var i = 0; i < curve.length; i += 2) {\n var x = curve[i + 0];\n var y = curve[i + 1];\n\n // scale\n x *= rx;\n y *= ry;\n\n // rotate\n var xp = cos_phi*x - sin_phi*y;\n var yp = sin_phi*x + cos_phi*y;\n\n // translate\n curve[i + 0] = xp + cc[0];\n curve[i + 1] = yp + cc[1];\n }\n\n return curve;\n });\n};\n","'use strict';\n\n/* eslint-disable space-infix-ops */\n\n// The precision used to consider an ellipse as a circle\n//\nvar epsilon = 0.0000000001;\n\n// To convert degree in radians\n//\nvar torad = Math.PI / 180;\n\n// Class constructor :\n// an ellipse centred at 0 with radii rx,ry and x - axis - angle ax.\n//\nfunction Ellipse(rx, ry, ax) {\n if (!(this instanceof Ellipse)) { return new Ellipse(rx, ry, ax); }\n this.rx = rx;\n this.ry = ry;\n this.ax = ax;\n}\n\n// Apply a linear transform m to the ellipse\n// m is an array representing a matrix :\n// - -\n// | m[0] m[2] |\n// | m[1] m[3] |\n// - -\n//\nEllipse.prototype.transform = function (m) {\n // We consider the current ellipse as image of the unit circle\n // by first scale(rx,ry) and then rotate(ax) ...\n // So we apply ma = m x rotate(ax) x scale(rx,ry) to the unit circle.\n var c = Math.cos(this.ax * torad), s = Math.sin(this.ax * torad);\n var ma = [\n this.rx * (m[0]*c + m[2]*s),\n this.rx * (m[1]*c + m[3]*s),\n this.ry * (-m[0]*s + m[2]*c),\n this.ry * (-m[1]*s + m[3]*c)\n ];\n\n // ma * transpose(ma) = [ J L ]\n // [ L K ]\n // L is calculated later (if the image is not a circle)\n var J = ma[0]*ma[0] + ma[2]*ma[2],\n K = ma[1]*ma[1] + ma[3]*ma[3];\n\n // the discriminant of the characteristic polynomial of ma * transpose(ma)\n var D = ((ma[0]-ma[3])*(ma[0]-ma[3]) + (ma[2]+ma[1])*(ma[2]+ma[1])) *\n ((ma[0]+ma[3])*(ma[0]+ma[3]) + (ma[2]-ma[1])*(ma[2]-ma[1]));\n\n // the \"mean eigenvalue\"\n var JK = (J + K) / 2;\n\n // check if the image is (almost) a circle\n if (D < epsilon * JK) {\n // if it is\n this.rx = this.ry = Math.sqrt(JK);\n this.ax = 0;\n return this;\n }\n\n // if it is not a circle\n var L = ma[0]*ma[1] + ma[2]*ma[3];\n\n D = Math.sqrt(D);\n\n // {l1,l2} = the two eigen values of ma * transpose(ma)\n var l1 = JK + D/2,\n l2 = JK - D/2;\n // the x - axis - rotation angle is the argument of the l1 - eigenvector\n /*eslint-disable indent*/\n this.ax = (Math.abs(L) < epsilon && Math.abs(l1 - K) < epsilon) ?\n 90\n :\n Math.atan(Math.abs(L) > Math.abs(l1 - K) ?\n (l1 - J) / L\n :\n L / (l1 - K)\n ) * 180 / Math.PI;\n /*eslint-enable indent*/\n\n // if ax > 0 => rx = sqrt(l1), ry = sqrt(l2), else exchange axes and ax += 90\n if (this.ax >= 0) {\n // if ax in [0,90]\n this.rx = Math.sqrt(l1);\n this.ry = Math.sqrt(l2);\n } else {\n // if ax in ]-90,0[ => exchange axes\n this.ax += 90;\n this.rx = Math.sqrt(l2);\n this.ry = Math.sqrt(l1);\n }\n\n return this;\n};\n\n// Check if the ellipse is (almost) degenerate, i.e. rx = 0 or ry = 0\n//\nEllipse.prototype.isDegenerate = function () {\n return (this.rx < epsilon * this.ry || this.ry < epsilon * this.rx);\n};\n\nmodule.exports = Ellipse;\n","// SVG Path transformations library\n//\n// Usage:\n//\n// SvgPath('...')\n// .translate(-150, -100)\n// .scale(0.5)\n// .translate(-150, -100)\n// .toFixed(1)\n// .toString()\n//\n\n'use strict';\n\n\nvar pathParse = require('./path_parse');\nvar transformParse = require('./transform_parse');\nvar matrix = require('./matrix');\nvar a2c = require('./a2c');\nvar ellipse = require('./ellipse');\n\n\n// Class constructor\n//\nfunction SvgPath(path) {\n if (!(this instanceof SvgPath)) { return new SvgPath(path); }\n\n var pstate = pathParse(path);\n\n // Array of path segments.\n // Each segment is array [command, param1, param2, ...]\n this.segments = pstate.segments;\n\n // Error message on parse error.\n this.err = pstate.err;\n\n // Transforms stack for lazy evaluation\n this.__stack = [];\n}\n\nSvgPath.from = function (src) {\n if (typeof src === 'string') return new SvgPath(src);\n\n if (src instanceof SvgPath) {\n // Create empty object\n var s = new SvgPath('');\n\n // Clone properies\n s.err = src.err;\n s.segments = src.segments.map(function (sgm) { return sgm.slice(); });\n s.__stack = src.__stack.map(function (m) {\n return matrix().matrix(m.toArray());\n });\n\n return s;\n }\n\n throw new Error('SvgPath.from: invalid param type ' + src);\n};\n\n\nSvgPath.prototype.__matrix = function (m) {\n var self = this, i;\n\n // Quick leave for empty matrix\n if (!m.queue.length) { return; }\n\n this.iterate(function (s, index, x, y) {\n var p, result, name, isRelative;\n\n switch (s[0]) {\n\n // Process 'assymetric' commands separately\n case 'v':\n p = m.calc(0, s[1], true);\n result = (p[0] === 0) ? [ 'v', p[1] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'V':\n p = m.calc(x, s[1], false);\n result = (p[0] === m.calc(x, y, false)[0]) ? [ 'V', p[1] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'h':\n p = m.calc(s[1], 0, true);\n result = (p[1] === 0) ? [ 'h', p[0] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'H':\n p = m.calc(s[1], y, false);\n result = (p[1] === m.calc(x, y, false)[1]) ? [ 'H', p[0] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'a':\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n\n // Drop segment if arc is empty (end point === start point)\n /*if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n return [];\n }*/\n\n // Transform rx, ry and the x-axis-rotation\n var ma = m.toArray();\n var e = ellipse(s[1], s[2], s[3]).transform(ma);\n\n // flip sweep-flag if matrix is not orientation-preserving\n if (ma[0] * ma[3] - ma[1] * ma[2] < 0) {\n s[5] = s[5] ? '0' : '1';\n }\n\n // Transform end point as usual (without translation for relative notation)\n p = m.calc(s[6], s[7], s[0] === 'a');\n\n // Empty arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n break;\n }\n\n // if the resulting ellipse is (almost) a segment ...\n if (e.isDegenerate()) {\n // replace the arc by a line\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n } else {\n // if it is a real ellipse\n // s[0], s[4] and s[5] are not modified\n result = [ s[0], e.rx, e.ry, e.ax, s[4], s[5], p[0], p[1] ];\n }\n\n break;\n\n case 'm':\n // Edge case. The very first `m` should be processed as absolute, if happens.\n // Make sense for coord shift transforms.\n isRelative = index > 0;\n\n p = m.calc(s[1], s[2], isRelative);\n result = [ 'm', p[0], p[1] ];\n break;\n\n default:\n name = s[0];\n result = [ name ];\n isRelative = (name.toLowerCase() === name);\n\n // Apply transformations to the segment\n for (i = 1; i < s.length; i += 2) {\n p = m.calc(s[i], s[i + 1], isRelative);\n result.push(p[0], p[1]);\n }\n }\n\n self.segments[index] = result;\n }, true);\n};\n\n\n// Apply stacked commands\n//\nSvgPath.prototype.__evaluateStack = function () {\n var m, i;\n\n if (!this.__stack.length) { return; }\n\n if (this.__stack.length === 1) {\n this.__matrix(this.__stack[0]);\n this.__stack = [];\n return;\n }\n\n m = matrix();\n i = this.__stack.length;\n\n while (--i >= 0) {\n m.matrix(this.__stack[i].toArray());\n }\n\n this.__matrix(m);\n this.__stack = [];\n};\n\n\n// Convert processed SVG Path back to string\n//\nSvgPath.prototype.toString = function () {\n var result = '', prevCmd = '', cmdSkipped = false;\n\n this.__evaluateStack();\n\n for (var i = 0, len = this.segments.length; i < len; i++) {\n var segment = this.segments[i];\n var cmd = segment[0];\n\n // Command not repeating => store\n if (cmd !== prevCmd || cmd === 'm' || cmd === 'M') {\n // workaround for FontForge SVG importing bug, keep space between \"z m\".\n if (cmd === 'm' && prevCmd === 'z') result += ' ';\n result += cmd;\n\n cmdSkipped = false;\n } else {\n cmdSkipped = true;\n }\n\n // Store segment params\n for (var pos = 1; pos < segment.length; pos++) {\n var val = segment[pos];\n // Space can be skipped\n // 1. After command (always)\n // 2. For negative value (with '-' at start)\n if (pos === 1) {\n if (cmdSkipped && val >= 0) result += ' ';\n } else if (val >= 0) result += ' ';\n\n result += val;\n }\n\n prevCmd = cmd;\n }\n\n return result;\n};\n\n\n// Translate path to (x [, y])\n//\nSvgPath.prototype.translate = function (x, y) {\n this.__stack.push(matrix().translate(x, y || 0));\n return this;\n};\n\n\n// Scale path to (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.scale = function (sx, sy) {\n this.__stack.push(matrix().scale(sx, (!sy && (sy !== 0)) ? sx : sy));\n return this;\n};\n\n\n// Rotate path around point (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.rotate = function (angle, rx, ry) {\n this.__stack.push(matrix().rotate(angle, rx || 0, ry || 0));\n return this;\n};\n\n\n// Skew path along the X axis by `degrees` angle\n//\nSvgPath.prototype.skewX = function (degrees) {\n this.__stack.push(matrix().skewX(degrees));\n return this;\n};\n\n\n// Skew path along the Y axis by `degrees` angle\n//\nSvgPath.prototype.skewY = function (degrees) {\n this.__stack.push(matrix().skewY(degrees));\n return this;\n};\n\n\n// Apply matrix transform (array of 6 elements)\n//\nSvgPath.prototype.matrix = function (m) {\n this.__stack.push(matrix().matrix(m));\n return this;\n};\n\n\n// Transform path according to \"transform\" attr of SVG spec\n//\nSvgPath.prototype.transform = function (transformString) {\n if (!transformString.trim()) {\n return this;\n }\n this.__stack.push(transformParse(transformString));\n return this;\n};\n\n\n// Round coords with given decimal precition.\n// 0 by default (to integers)\n//\nSvgPath.prototype.round = function (d) {\n var contourStartDeltaX = 0, contourStartDeltaY = 0, deltaX = 0, deltaY = 0, l;\n\n d = d || 0;\n\n this.__evaluateStack();\n\n this.segments.forEach(function (s) {\n var isRelative = (s[0].toLowerCase() === s[0]);\n\n switch (s[0]) {\n case 'H':\n case 'h':\n if (isRelative) { s[1] += deltaX; }\n deltaX = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'V':\n case 'v':\n if (isRelative) { s[1] += deltaY; }\n deltaY = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'Z':\n case 'z':\n deltaX = contourStartDeltaX;\n deltaY = contourStartDeltaY;\n return;\n\n case 'M':\n case 'm':\n if (isRelative) {\n s[1] += deltaX;\n s[2] += deltaY;\n }\n\n deltaX = s[1] - s[1].toFixed(d);\n deltaY = s[2] - s[2].toFixed(d);\n\n contourStartDeltaX = deltaX;\n contourStartDeltaY = deltaY;\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n return;\n\n case 'A':\n case 'a':\n // [cmd, rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n if (isRelative) {\n s[6] += deltaX;\n s[7] += deltaY;\n }\n\n deltaX = s[6] - s[6].toFixed(d);\n deltaY = s[7] - s[7].toFixed(d);\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n s[3] = +s[3].toFixed(d + 2); // better precision for rotation\n s[6] = +s[6].toFixed(d);\n s[7] = +s[7].toFixed(d);\n return;\n\n default:\n // a c l q s t\n l = s.length;\n\n if (isRelative) {\n s[l - 2] += deltaX;\n s[l - 1] += deltaY;\n }\n\n deltaX = s[l - 2] - s[l - 2].toFixed(d);\n deltaY = s[l - 1] - s[l - 1].toFixed(d);\n\n s.forEach(function (val, i) {\n if (!i) { return; }\n s[i] = +s[i].toFixed(d);\n });\n return;\n }\n });\n\n return this;\n};\n\n\n// Apply iterator function to all segments. If function returns result,\n// current segment will be replaced to array of returned segments.\n// If empty array is returned, current regment will be deleted.\n//\nSvgPath.prototype.iterate = function (iterator, keepLazyStack) {\n var segments = this.segments,\n replacements = {},\n needReplace = false,\n lastX = 0,\n lastY = 0,\n countourStartX = 0,\n countourStartY = 0;\n var i, j, newSegments;\n\n if (!keepLazyStack) {\n this.__evaluateStack();\n }\n\n segments.forEach(function (s, index) {\n\n var res = iterator(s, index, lastX, lastY);\n\n if (Array.isArray(res)) {\n replacements[index] = res;\n needReplace = true;\n }\n\n var isRelative = (s[0] === s[0].toLowerCase());\n\n // calculate absolute X and Y\n switch (s[0]) {\n case 'm':\n case 'M':\n lastX = s[1] + (isRelative ? lastX : 0);\n lastY = s[2] + (isRelative ? lastY : 0);\n countourStartX = lastX;\n countourStartY = lastY;\n return;\n\n case 'h':\n case 'H':\n lastX = s[1] + (isRelative ? lastX : 0);\n return;\n\n case 'v':\n case 'V':\n lastY = s[1] + (isRelative ? lastY : 0);\n return;\n\n case 'z':\n case 'Z':\n // That make sence for multiple contours\n lastX = countourStartX;\n lastY = countourStartY;\n return;\n\n default:\n lastX = s[s.length - 2] + (isRelative ? lastX : 0);\n lastY = s[s.length - 1] + (isRelative ? lastY : 0);\n }\n });\n\n // Replace segments if iterator return results\n\n if (!needReplace) { return this; }\n\n newSegments = [];\n\n for (i = 0; i < segments.length; i++) {\n if (typeof replacements[i] !== 'undefined') {\n for (j = 0; j < replacements[i].length; j++) {\n newSegments.push(replacements[i][j]);\n }\n } else {\n newSegments.push(segments[i]);\n }\n }\n\n this.segments = newSegments;\n\n return this;\n};\n\n\n// Converts segments from relative to absolute\n//\nSvgPath.prototype.abs = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameUC = name.toUpperCase(),\n i;\n\n // Skip absolute commands\n if (name === nameUC) { return; }\n\n s[0] = nameUC;\n\n switch (name) {\n case 'v':\n // v has shifted coords parity\n s[1] += y;\n return;\n\n case 'a':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] += x;\n s[7] += y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] += i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts segments from absolute to relative\n//\nSvgPath.prototype.rel = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameLC = name.toLowerCase(),\n i;\n\n // Skip relative commands\n if (name === nameLC) { return; }\n\n // Don't touch the first M to avoid potential confusions.\n if (index === 0 && name === 'M') { return; }\n\n s[0] = nameLC;\n\n switch (name) {\n case 'V':\n // V has shifted coords parity\n s[1] -= y;\n return;\n\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] -= x;\n s[7] -= y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] -= i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts arcs to cubic bézier curves\n//\nSvgPath.prototype.unarc = function () {\n this.iterate(function (s, index, x, y) {\n var new_segments, nextX, nextY, result = [], name = s[0];\n\n // Skip anything except arcs\n if (name !== 'A' && name !== 'a') { return null; }\n\n if (name === 'a') {\n // convert relative arc coordinates to absolute\n nextX = x + s[6];\n nextY = y + s[7];\n } else {\n nextX = s[6];\n nextY = s[7];\n }\n\n new_segments = a2c(x, y, nextX, nextY, s[4], s[5], s[1], s[2], s[3]);\n\n // Degenerated arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if (new_segments.length === 0) {\n return [ [ s[0] === 'a' ? 'l' : 'L', s[6], s[7] ] ];\n }\n\n new_segments.forEach(function (s) {\n result.push([ 'C', s[2], s[3], s[4], s[5], s[6], s[7] ]);\n });\n\n return result;\n });\n\n return this;\n};\n\n\n// Converts smooth curves (with missed control point) to generic curves\n//\nSvgPath.prototype.unshort = function () {\n var segments = this.segments;\n var prevControlX, prevControlY, prevSegment;\n var curControlX, curControlY;\n\n // TODO: add lazy evaluation flag when relative commands supported\n\n this.iterate(function (s, idx, x, y) {\n var name = s[0], nameUC = name.toUpperCase(), isRelative;\n\n // First command MUST be M|m, it's safe to skip.\n // Protect from access to [-1] for sure.\n if (!idx) { return; }\n\n if (nameUC === 'T') { // quadratic curve\n isRelative = (name === 't');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'Q') {\n prevControlX = prevSegment[1] - x;\n prevControlY = prevSegment[2] - y;\n } else if (prevSegment[0] === 'q') {\n prevControlX = prevSegment[1] - prevSegment[3];\n prevControlY = prevSegment[2] - prevSegment[4];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'q' : 'Q',\n curControlX, curControlY,\n s[1], s[2]\n ];\n\n } else if (nameUC === 'S') { // cubic curve\n isRelative = (name === 's');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'C') {\n prevControlX = prevSegment[3] - x;\n prevControlY = prevSegment[4] - y;\n } else if (prevSegment[0] === 'c') {\n prevControlX = prevSegment[3] - prevSegment[5];\n prevControlY = prevSegment[4] - prevSegment[6];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'c' : 'C',\n curControlX, curControlY,\n s[1], s[2], s[3], s[4]\n ];\n }\n });\n\n return this;\n};\n\n\nmodule.exports = SvgPath;\n","'use strict';\n\nmodule.exports = require('./lib/svgpath');\n","//Parses an SVG path into an object.\n//Taken from https://github.com/jkroso/parse-svg-path\n//Re-written so it can be used with rollup\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0};\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig;\n\nexport default function(path) {\n var data = [];\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase();\n\t\targs = parseValues(args);\n\n\t\t// overloaded moveTo\n\t\tif (type === 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)));\n\t\t\ttype = 'l';\n\t\t\tcommand = command === 'm' ? 'l' : 'L';\n\t\t}\n\n\t\twhile (args.length >= 0) {\n\t\t\tif (args.length === length[type]) {\n\t\t\t\targs.unshift(command);\n\t\t\t\treturn data.push(args);\n\t\t\t}\n\t\t\tif (args.length < length[type]) {\n throw new Error('malformed path data');\n }\n\t\t\tdata.push([command].concat(args.splice(0, length[type])));\n\t\t}\n\t});\n return data;\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig;\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number);\n\treturn numbers ? numbers.map(Number) : [];\n}\n","//Calculate Bezier curve length and positionAtLength\n//Algorithms taken from http://bl.ocks.org/hnakamur/e7efd0602bfc15f66fc5, https://gist.github.com/tunght13488/6744e77c242cc7a94859 and http://stackoverflow.com/questions/11854907/calculate-the-length-of-a-segment-of-a-quadratic-bezier\n\nexport default function(ax, ay, bx, by, cx, cy, dx, dy) {\n return new Bezier(ax, ay, bx, by, cx, cy, dx, dy);\n}\n\nfunction Bezier(ax, ay, bx, by, cx, cy, dx, dy) {\n this.a = {x:ax, y:ay};\n this.b = {x:bx, y:by};\n this.c = {x:cx, y:cy};\n this.d = {x:dx, y:dy};\n\n if(dx !== null && dx !== undefined && dy !== null && dy !== undefined){\n this.getArcLength = getCubicArcLength;\n this.getPoint = cubicPoint;\n this.getDerivative = cubicDerivative;\n } else {\n this.getArcLength = getQuadraticArcLength;\n this.getPoint = quadraticPoint;\n this.getDerivative = quadraticDerivative;\n }\n\n this.init();\n}\n\nBezier.prototype = {\n constructor: Bezier,\n init: function() {\n\n this.length = this.getArcLength([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n },\n\n getTotalLength: function() {\n return this.length;\n },\n getPointAtLength: function(length) {\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n return this.getPoint([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y],\n t);\n },\n getTangentAtLength: function(length){\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n var derivative = this.getDerivative([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y], t);\n var mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n var tangent;\n if (mdl > 0){\n tangent = {x: derivative.x/mdl, y: derivative.y/mdl};\n } else {\n tangent = {x: 0, y: 0};\n }\n return tangent;\n },\n getPropertiesAtLength: function(length){\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n var derivative = this.getDerivative([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y], t);\n var mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n var tangent;\n if (mdl > 0){\n tangent = {x: derivative.x/mdl, y: derivative.y/mdl};\n } else {\n tangent = {x: 0, y: 0};\n }\n var point = this.getPoint([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y],\n t);\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n }\n};\n\nfunction quadraticDerivative(xs, ys, t){\n return {x: (1 - t) * 2*(xs[1] - xs[0]) +t * 2*(xs[2] - xs[1]),\n y: (1 - t) * 2*(ys[1] - ys[0]) +t * 2*(ys[2] - ys[1])\n };\n}\n\nfunction cubicDerivative(xs, ys, t){\n var derivative = quadraticPoint(\n [3*(xs[1] - xs[0]), 3*(xs[2] - xs[1]), 3*(xs[3] - xs[2])],\n [3*(ys[1] - ys[0]), 3*(ys[2] - ys[1]), 3*(ys[3] - ys[2])],\n t);\n return derivative;\n}\n\nfunction t2length(length, total_length, func, xs, ys){\n var error = 1;\n var t = length/total_length;\n var step = (length - func(xs, ys, t))/total_length\n\n while (error > 0.001){\n var increasedTLength = func(xs, ys, t + step);\n var decreasedTLength = func(xs, ys, t - step);\n var increasedTError = Math.abs(length - increasedTLength)/total_length;\n var decreasedTError = Math.abs(length - decreasedTLength)/total_length;\n if (increasedTError < error) {\n error = increasedTError\n t += step\n } else if (decreasedTError < error) {\n error = decreasedTError\n t -= step\n } else {\n step /= 2\n }\n }\n\n return t;\n}\n\nfunction quadraticPoint(xs, ys, t){\n var x = (1 - t) * (1 - t) * xs[0] + 2 * (1 - t) * t * xs[1] + t * t * xs[2];\n var y = (1 - t) * (1 - t) * ys[0] + 2 * (1 - t) * t * ys[1] + t * t * ys[2];\n return {x: x, y: y};\n}\n\nfunction cubicPoint(xs, ys, t){\n var x = (1 - t) * (1 - t) * (1 - t) * xs[0] + 3 * (1 - t) * (1 - t) * t * xs[1] +\n 3 * (1 - t) * t * t * xs[2] + t * t * t * xs[3];\n var y = (1 - t) * (1 - t) * (1 - t) * ys[0] + 3 * (1 - t) * (1 - t) * t * ys[1] +\n 3 * (1 - t) * t * t * ys[2] + t * t * t * ys[3];\n\n return {x: x, y: y};\n}\n\nfunction getQuadraticArcLength(xs, ys, t) {\n if (t === undefined) {\n t = 1;\n }\n var ax = xs[0] - 2 * xs[1] + xs[2];\n var ay = ys[0] - 2 * ys[1] + ys[2];\n var bx = 2 * xs[1] - 2 * xs[0];\n var by = 2 * ys[1] - 2 * ys[0];\n\n var A = 4 * (ax * ax + ay * ay);\n var B = 4 * (ax * bx + ay * by);\n var C = bx * bx + by * by;\n\n if(A === 0){\n return t * Math.sqrt(Math.pow(xs[2] - xs[0], 2) + Math.pow(ys[2] - ys[0], 2));\n }\n var b = B/(2*A);\n var c = C/A;\n var u = t + b;\n var k = c - b*b;\n\n return (Math.sqrt(A)/2)*(\n u*Math.sqrt(u*u+k)-b*Math.sqrt(b*b+k)+\n k*Math.log(Math.abs(\n (u+Math.sqrt(u*u+k))/(b+Math.sqrt(b*b+k))\n ))\n );\n\n}\n\n// Legendre-Gauss abscissae (xi values, defined at i=n as the roots of the nth order Legendre polynomial Pn(x))\nvar tValues = [\n [],\n [],\n [-0.5773502691896257645091487805019574556476,0.5773502691896257645091487805019574556476],\n [0,-0.7745966692414833770358530799564799221665,0.7745966692414833770358530799564799221665],\n [-0.3399810435848562648026657591032446872005,0.3399810435848562648026657591032446872005,-0.8611363115940525752239464888928095050957,0.8611363115940525752239464888928095050957],\n [0,-0.5384693101056830910363144207002088049672,0.5384693101056830910363144207002088049672,-0.9061798459386639927976268782993929651256,0.9061798459386639927976268782993929651256],\n [0.6612093864662645136613995950199053470064,-0.6612093864662645136613995950199053470064,-0.2386191860831969086305017216807119354186,0.2386191860831969086305017216807119354186,-0.9324695142031520278123015544939946091347,0.9324695142031520278123015544939946091347],\n [0, 0.4058451513773971669066064120769614633473,-0.4058451513773971669066064120769614633473,-0.7415311855993944398638647732807884070741,0.7415311855993944398638647732807884070741,-0.9491079123427585245261896840478512624007,0.9491079123427585245261896840478512624007],\n [-0.1834346424956498049394761423601839806667,0.1834346424956498049394761423601839806667,-0.5255324099163289858177390491892463490419,0.5255324099163289858177390491892463490419,-0.7966664774136267395915539364758304368371,0.7966664774136267395915539364758304368371,-0.9602898564975362316835608685694729904282,0.9602898564975362316835608685694729904282],\n [0,-0.8360311073266357942994297880697348765441,0.8360311073266357942994297880697348765441,-0.9681602395076260898355762029036728700494,0.9681602395076260898355762029036728700494,-0.3242534234038089290385380146433366085719,0.3242534234038089290385380146433366085719,-0.6133714327005903973087020393414741847857,0.6133714327005903973087020393414741847857],\n [-0.1488743389816312108848260011297199846175,0.1488743389816312108848260011297199846175,-0.4333953941292471907992659431657841622000,0.4333953941292471907992659431657841622000,-0.6794095682990244062343273651148735757692,0.6794095682990244062343273651148735757692,-0.8650633666889845107320966884234930485275,0.8650633666889845107320966884234930485275,-0.9739065285171717200779640120844520534282,0.9739065285171717200779640120844520534282],\n [0,-0.2695431559523449723315319854008615246796,0.2695431559523449723315319854008615246796,-0.5190961292068118159257256694586095544802,0.5190961292068118159257256694586095544802,-0.7301520055740493240934162520311534580496,0.7301520055740493240934162520311534580496,-0.8870625997680952990751577693039272666316,0.8870625997680952990751577693039272666316,-0.9782286581460569928039380011228573907714,0.9782286581460569928039380011228573907714],\n [-0.1252334085114689154724413694638531299833,0.1252334085114689154724413694638531299833,-0.3678314989981801937526915366437175612563,0.3678314989981801937526915366437175612563,-0.5873179542866174472967024189405342803690,0.5873179542866174472967024189405342803690,-0.7699026741943046870368938332128180759849,0.7699026741943046870368938332128180759849,-0.9041172563704748566784658661190961925375,0.9041172563704748566784658661190961925375,-0.9815606342467192506905490901492808229601,0.9815606342467192506905490901492808229601],\n [0,-0.2304583159551347940655281210979888352115,0.2304583159551347940655281210979888352115,-0.4484927510364468528779128521276398678019,0.4484927510364468528779128521276398678019,-0.6423493394403402206439846069955156500716,0.6423493394403402206439846069955156500716,-0.8015780907333099127942064895828598903056,0.8015780907333099127942064895828598903056,-0.9175983992229779652065478365007195123904,0.9175983992229779652065478365007195123904,-0.9841830547185881494728294488071096110649,0.9841830547185881494728294488071096110649],\n [-0.1080549487073436620662446502198347476119,0.1080549487073436620662446502198347476119,-0.3191123689278897604356718241684754668342,0.3191123689278897604356718241684754668342,-0.5152486363581540919652907185511886623088,0.5152486363581540919652907185511886623088,-0.6872929048116854701480198030193341375384,0.6872929048116854701480198030193341375384,-0.8272013150697649931897947426503949610397,0.8272013150697649931897947426503949610397,-0.9284348836635735173363911393778742644770,0.9284348836635735173363911393778742644770,-0.9862838086968123388415972667040528016760,0.9862838086968123388415972667040528016760],\n [0,-0.2011940939974345223006283033945962078128,0.2011940939974345223006283033945962078128,-0.3941513470775633698972073709810454683627,0.3941513470775633698972073709810454683627,-0.5709721726085388475372267372539106412383,0.5709721726085388475372267372539106412383,-0.7244177313601700474161860546139380096308,0.7244177313601700474161860546139380096308,-0.8482065834104272162006483207742168513662,0.8482065834104272162006483207742168513662,-0.9372733924007059043077589477102094712439,0.9372733924007059043077589477102094712439,-0.9879925180204854284895657185866125811469,0.9879925180204854284895657185866125811469],\n [-0.0950125098376374401853193354249580631303,0.0950125098376374401853193354249580631303,-0.2816035507792589132304605014604961064860,0.2816035507792589132304605014604961064860,-0.4580167776572273863424194429835775735400,0.4580167776572273863424194429835775735400,-0.6178762444026437484466717640487910189918,0.6178762444026437484466717640487910189918,-0.7554044083550030338951011948474422683538,0.7554044083550030338951011948474422683538,-0.8656312023878317438804678977123931323873,0.8656312023878317438804678977123931323873,-0.9445750230732325760779884155346083450911,0.9445750230732325760779884155346083450911,-0.9894009349916499325961541734503326274262,0.9894009349916499325961541734503326274262],\n [0,-0.1784841814958478558506774936540655574754,0.1784841814958478558506774936540655574754,-0.3512317634538763152971855170953460050405,0.3512317634538763152971855170953460050405,-0.5126905370864769678862465686295518745829,0.5126905370864769678862465686295518745829,-0.6576711592166907658503022166430023351478,0.6576711592166907658503022166430023351478,-0.7815140038968014069252300555204760502239,0.7815140038968014069252300555204760502239,-0.8802391537269859021229556944881556926234,0.8802391537269859021229556944881556926234,-0.9506755217687677612227169578958030214433,0.9506755217687677612227169578958030214433,-0.9905754753144173356754340199406652765077,0.9905754753144173356754340199406652765077],\n [-0.0847750130417353012422618529357838117333,0.0847750130417353012422618529357838117333,-0.2518862256915055095889728548779112301628,0.2518862256915055095889728548779112301628,-0.4117511614628426460359317938330516370789,0.4117511614628426460359317938330516370789,-0.5597708310739475346078715485253291369276,0.5597708310739475346078715485253291369276,-0.6916870430603532078748910812888483894522,0.6916870430603532078748910812888483894522,-0.8037049589725231156824174550145907971032,0.8037049589725231156824174550145907971032,-0.8926024664975557392060605911271455154078,0.8926024664975557392060605911271455154078,-0.9558239495713977551811958929297763099728,0.9558239495713977551811958929297763099728,-0.9915651684209309467300160047061507702525,0.9915651684209309467300160047061507702525],\n [0,-0.1603586456402253758680961157407435495048,0.1603586456402253758680961157407435495048,-0.3165640999636298319901173288498449178922,0.3165640999636298319901173288498449178922,-0.4645707413759609457172671481041023679762,0.4645707413759609457172671481041023679762,-0.6005453046616810234696381649462392798683,0.6005453046616810234696381649462392798683,-0.7209661773352293786170958608237816296571,0.7209661773352293786170958608237816296571,-0.8227146565371428249789224867127139017745,0.8227146565371428249789224867127139017745,-0.9031559036148179016426609285323124878093,0.9031559036148179016426609285323124878093,-0.9602081521348300308527788406876515266150,0.9602081521348300308527788406876515266150,-0.9924068438435844031890176702532604935893,0.9924068438435844031890176702532604935893],\n [-0.0765265211334973337546404093988382110047,0.0765265211334973337546404093988382110047,-0.2277858511416450780804961953685746247430,0.2277858511416450780804961953685746247430,-0.3737060887154195606725481770249272373957,0.3737060887154195606725481770249272373957,-0.5108670019508270980043640509552509984254,0.5108670019508270980043640509552509984254,-0.6360536807265150254528366962262859367433,0.6360536807265150254528366962262859367433,-0.7463319064601507926143050703556415903107,0.7463319064601507926143050703556415903107,-0.8391169718222188233945290617015206853296,0.8391169718222188233945290617015206853296,-0.9122344282513259058677524412032981130491,0.9122344282513259058677524412032981130491,-0.9639719272779137912676661311972772219120,0.9639719272779137912676661311972772219120,-0.9931285991850949247861223884713202782226,0.9931285991850949247861223884713202782226],\n [0,-0.1455618541608950909370309823386863301163,0.1455618541608950909370309823386863301163,-0.2880213168024010966007925160646003199090,0.2880213168024010966007925160646003199090,-0.4243421202074387835736688885437880520964,0.4243421202074387835736688885437880520964,-0.5516188358872198070590187967243132866220,0.5516188358872198070590187967243132866220,-0.6671388041974123193059666699903391625970,0.6671388041974123193059666699903391625970,-0.7684399634756779086158778513062280348209,0.7684399634756779086158778513062280348209,-0.8533633645833172836472506385875676702761,0.8533633645833172836472506385875676702761,-0.9200993341504008287901871337149688941591,0.9200993341504008287901871337149688941591,-0.9672268385663062943166222149076951614246,0.9672268385663062943166222149076951614246,-0.9937521706203895002602420359379409291933,0.9937521706203895002602420359379409291933],\n [-0.0697392733197222212138417961186280818222,0.0697392733197222212138417961186280818222,-0.2078604266882212854788465339195457342156,0.2078604266882212854788465339195457342156,-0.3419358208920842251581474204273796195591,0.3419358208920842251581474204273796195591,-0.4693558379867570264063307109664063460953,0.4693558379867570264063307109664063460953,-0.5876404035069115929588769276386473488776,0.5876404035069115929588769276386473488776,-0.6944872631866827800506898357622567712673,0.6944872631866827800506898357622567712673,-0.7878168059792081620042779554083515213881,0.7878168059792081620042779554083515213881,-0.8658125777203001365364256370193787290847,0.8658125777203001365364256370193787290847,-0.9269567721871740005206929392590531966353,0.9269567721871740005206929392590531966353,-0.9700604978354287271239509867652687108059,0.9700604978354287271239509867652687108059,-0.9942945854823992920730314211612989803930,0.9942945854823992920730314211612989803930],\n [0,-0.1332568242984661109317426822417661370104,0.1332568242984661109317426822417661370104,-0.2641356809703449305338695382833096029790,0.2641356809703449305338695382833096029790,-0.3903010380302908314214888728806054585780,0.3903010380302908314214888728806054585780,-0.5095014778460075496897930478668464305448,0.5095014778460075496897930478668464305448,-0.6196098757636461563850973116495956533871,0.6196098757636461563850973116495956533871,-0.7186613631319501944616244837486188483299,0.7186613631319501944616244837486188483299,-0.8048884016188398921511184069967785579414,0.8048884016188398921511184069967785579414,-0.8767523582704416673781568859341456716389,0.8767523582704416673781568859341456716389,-0.9329710868260161023491969890384229782357,0.9329710868260161023491969890384229782357,-0.9725424712181152319560240768207773751816,0.9725424712181152319560240768207773751816,-0.9947693349975521235239257154455743605736,0.9947693349975521235239257154455743605736],\n [-0.0640568928626056260850430826247450385909,0.0640568928626056260850430826247450385909,-0.1911188674736163091586398207570696318404,0.1911188674736163091586398207570696318404,-0.3150426796961633743867932913198102407864,0.3150426796961633743867932913198102407864,-0.4337935076260451384870842319133497124524,0.4337935076260451384870842319133497124524,-0.5454214713888395356583756172183723700107,0.5454214713888395356583756172183723700107,-0.6480936519369755692524957869107476266696,0.6480936519369755692524957869107476266696,-0.7401241915785543642438281030999784255232,0.7401241915785543642438281030999784255232,-0.8200019859739029219539498726697452080761,0.8200019859739029219539498726697452080761,-0.8864155270044010342131543419821967550873,0.8864155270044010342131543419821967550873,-0.9382745520027327585236490017087214496548,0.9382745520027327585236490017087214496548,-0.9747285559713094981983919930081690617411,0.9747285559713094981983919930081690617411,-0.9951872199970213601799974097007368118745,0.9951872199970213601799974097007368118745]\n];\n\n// Legendre-Gauss weights (wi values, defined by a function linked to in the Bezier primer article)\nvar cValues = [\n [],[],\n [1.0,1.0],\n [0.8888888888888888888888888888888888888888,0.5555555555555555555555555555555555555555,0.5555555555555555555555555555555555555555],\n [0.6521451548625461426269360507780005927646,0.6521451548625461426269360507780005927646,0.3478548451374538573730639492219994072353,0.3478548451374538573730639492219994072353],\n [0.5688888888888888888888888888888888888888,0.4786286704993664680412915148356381929122,0.4786286704993664680412915148356381929122,0.2369268850561890875142640407199173626432,0.2369268850561890875142640407199173626432],\n [0.3607615730481386075698335138377161116615,0.3607615730481386075698335138377161116615,0.4679139345726910473898703439895509948116,0.4679139345726910473898703439895509948116,0.1713244923791703450402961421727328935268,0.1713244923791703450402961421727328935268],\n [0.4179591836734693877551020408163265306122,0.3818300505051189449503697754889751338783,0.3818300505051189449503697754889751338783,0.2797053914892766679014677714237795824869,0.2797053914892766679014677714237795824869,0.1294849661688696932706114326790820183285,0.1294849661688696932706114326790820183285],\n [0.3626837833783619829651504492771956121941,0.3626837833783619829651504492771956121941,0.3137066458778872873379622019866013132603,0.3137066458778872873379622019866013132603,0.2223810344533744705443559944262408844301,0.2223810344533744705443559944262408844301,0.1012285362903762591525313543099621901153,0.1012285362903762591525313543099621901153],\n [0.3302393550012597631645250692869740488788,0.1806481606948574040584720312429128095143,0.1806481606948574040584720312429128095143,0.0812743883615744119718921581105236506756,0.0812743883615744119718921581105236506756,0.3123470770400028400686304065844436655987,0.3123470770400028400686304065844436655987,0.2606106964029354623187428694186328497718,0.2606106964029354623187428694186328497718],\n [0.2955242247147528701738929946513383294210,0.2955242247147528701738929946513383294210,0.2692667193099963550912269215694693528597,0.2692667193099963550912269215694693528597,0.2190863625159820439955349342281631924587,0.2190863625159820439955349342281631924587,0.1494513491505805931457763396576973324025,0.1494513491505805931457763396576973324025,0.0666713443086881375935688098933317928578,0.0666713443086881375935688098933317928578],\n [0.2729250867779006307144835283363421891560,0.2628045445102466621806888698905091953727,0.2628045445102466621806888698905091953727,0.2331937645919904799185237048431751394317,0.2331937645919904799185237048431751394317,0.1862902109277342514260976414316558916912,0.1862902109277342514260976414316558916912,0.1255803694649046246346942992239401001976,0.1255803694649046246346942992239401001976,0.0556685671161736664827537204425485787285,0.0556685671161736664827537204425485787285],\n [0.2491470458134027850005624360429512108304,0.2491470458134027850005624360429512108304,0.2334925365383548087608498989248780562594,0.2334925365383548087608498989248780562594,0.2031674267230659217490644558097983765065,0.2031674267230659217490644558097983765065,0.1600783285433462263346525295433590718720,0.1600783285433462263346525295433590718720,0.1069393259953184309602547181939962242145,0.1069393259953184309602547181939962242145,0.0471753363865118271946159614850170603170,0.0471753363865118271946159614850170603170],\n [0.2325515532308739101945895152688359481566,0.2262831802628972384120901860397766184347,0.2262831802628972384120901860397766184347,0.2078160475368885023125232193060527633865,0.2078160475368885023125232193060527633865,0.1781459807619457382800466919960979955128,0.1781459807619457382800466919960979955128,0.1388735102197872384636017768688714676218,0.1388735102197872384636017768688714676218,0.0921214998377284479144217759537971209236,0.0921214998377284479144217759537971209236,0.0404840047653158795200215922009860600419,0.0404840047653158795200215922009860600419],\n [0.2152638534631577901958764433162600352749,0.2152638534631577901958764433162600352749,0.2051984637212956039659240656612180557103,0.2051984637212956039659240656612180557103,0.1855383974779378137417165901251570362489,0.1855383974779378137417165901251570362489,0.1572031671581935345696019386238421566056,0.1572031671581935345696019386238421566056,0.1215185706879031846894148090724766259566,0.1215185706879031846894148090724766259566,0.0801580871597602098056332770628543095836,0.0801580871597602098056332770628543095836,0.0351194603317518630318328761381917806197,0.0351194603317518630318328761381917806197],\n [0.2025782419255612728806201999675193148386,0.1984314853271115764561183264438393248186,0.1984314853271115764561183264438393248186,0.1861610000155622110268005618664228245062,0.1861610000155622110268005618664228245062,0.1662692058169939335532008604812088111309,0.1662692058169939335532008604812088111309,0.1395706779261543144478047945110283225208,0.1395706779261543144478047945110283225208,0.1071592204671719350118695466858693034155,0.1071592204671719350118695466858693034155,0.0703660474881081247092674164506673384667,0.0703660474881081247092674164506673384667,0.0307532419961172683546283935772044177217,0.0307532419961172683546283935772044177217],\n [0.1894506104550684962853967232082831051469,0.1894506104550684962853967232082831051469,0.1826034150449235888667636679692199393835,0.1826034150449235888667636679692199393835,0.1691565193950025381893120790303599622116,0.1691565193950025381893120790303599622116,0.1495959888165767320815017305474785489704,0.1495959888165767320815017305474785489704,0.1246289712555338720524762821920164201448,0.1246289712555338720524762821920164201448,0.0951585116824927848099251076022462263552,0.0951585116824927848099251076022462263552,0.0622535239386478928628438369943776942749,0.0622535239386478928628438369943776942749,0.0271524594117540948517805724560181035122,0.0271524594117540948517805724560181035122],\n [0.1794464703562065254582656442618856214487,0.1765627053669926463252709901131972391509,0.1765627053669926463252709901131972391509,0.1680041021564500445099706637883231550211,0.1680041021564500445099706637883231550211,0.1540457610768102880814315948019586119404,0.1540457610768102880814315948019586119404,0.1351363684685254732863199817023501973721,0.1351363684685254732863199817023501973721,0.1118838471934039710947883856263559267358,0.1118838471934039710947883856263559267358,0.0850361483171791808835353701910620738504,0.0850361483171791808835353701910620738504,0.0554595293739872011294401653582446605128,0.0554595293739872011294401653582446605128,0.0241483028685479319601100262875653246916,0.0241483028685479319601100262875653246916],\n [0.1691423829631435918406564701349866103341,0.1691423829631435918406564701349866103341,0.1642764837458327229860537764659275904123,0.1642764837458327229860537764659275904123,0.1546846751262652449254180038363747721932,0.1546846751262652449254180038363747721932,0.1406429146706506512047313037519472280955,0.1406429146706506512047313037519472280955,0.1225552067114784601845191268002015552281,0.1225552067114784601845191268002015552281,0.1009420441062871655628139849248346070628,0.1009420441062871655628139849248346070628,0.0764257302548890565291296776166365256053,0.0764257302548890565291296776166365256053,0.0497145488949697964533349462026386416808,0.0497145488949697964533349462026386416808,0.0216160135264833103133427102664524693876,0.0216160135264833103133427102664524693876],\n [0.1610544498487836959791636253209167350399,0.1589688433939543476499564394650472016787,0.1589688433939543476499564394650472016787,0.1527660420658596667788554008976629984610,0.1527660420658596667788554008976629984610,0.1426067021736066117757461094419029724756,0.1426067021736066117757461094419029724756,0.1287539625393362276755157848568771170558,0.1287539625393362276755157848568771170558,0.1115666455473339947160239016817659974813,0.1115666455473339947160239016817659974813,0.0914900216224499994644620941238396526609,0.0914900216224499994644620941238396526609,0.0690445427376412265807082580060130449618,0.0690445427376412265807082580060130449618,0.0448142267656996003328381574019942119517,0.0448142267656996003328381574019942119517,0.0194617882297264770363120414644384357529,0.0194617882297264770363120414644384357529],\n [0.1527533871307258506980843319550975934919,0.1527533871307258506980843319550975934919,0.1491729864726037467878287370019694366926,0.1491729864726037467878287370019694366926,0.1420961093183820513292983250671649330345,0.1420961093183820513292983250671649330345,0.1316886384491766268984944997481631349161,0.1316886384491766268984944997481631349161,0.1181945319615184173123773777113822870050,0.1181945319615184173123773777113822870050,0.1019301198172404350367501354803498761666,0.1019301198172404350367501354803498761666,0.0832767415767047487247581432220462061001,0.0832767415767047487247581432220462061001,0.0626720483341090635695065351870416063516,0.0626720483341090635695065351870416063516,0.0406014298003869413310399522749321098790,0.0406014298003869413310399522749321098790,0.0176140071391521183118619623518528163621,0.0176140071391521183118619623518528163621],\n [0.1460811336496904271919851476833711882448,0.1445244039899700590638271665537525436099,0.1445244039899700590638271665537525436099,0.1398873947910731547221334238675831108927,0.1398873947910731547221334238675831108927,0.1322689386333374617810525744967756043290,0.1322689386333374617810525744967756043290,0.1218314160537285341953671771257335983563,0.1218314160537285341953671771257335983563,0.1087972991671483776634745780701056420336,0.1087972991671483776634745780701056420336,0.0934444234560338615532897411139320884835,0.0934444234560338615532897411139320884835,0.0761001136283793020170516533001831792261,0.0761001136283793020170516533001831792261,0.0571344254268572082836358264724479574912,0.0571344254268572082836358264724479574912,0.0369537897708524937999506682993296661889,0.0369537897708524937999506682993296661889,0.0160172282577743333242246168584710152658,0.0160172282577743333242246168584710152658],\n [0.1392518728556319933754102483418099578739,0.1392518728556319933754102483418099578739,0.1365414983460151713525738312315173965863,0.1365414983460151713525738312315173965863,0.1311735047870623707329649925303074458757,0.1311735047870623707329649925303074458757,0.1232523768105124242855609861548144719594,0.1232523768105124242855609861548144719594,0.1129322960805392183934006074217843191142,0.1129322960805392183934006074217843191142,0.1004141444428809649320788378305362823508,0.1004141444428809649320788378305362823508,0.0859416062170677274144436813727028661891,0.0859416062170677274144436813727028661891,0.0697964684245204880949614189302176573987,0.0697964684245204880949614189302176573987,0.0522933351526832859403120512732112561121,0.0522933351526832859403120512732112561121,0.0337749015848141547933022468659129013491,0.0337749015848141547933022468659129013491,0.0146279952982722006849910980471854451902,0.0146279952982722006849910980471854451902],\n [0.1336545721861061753514571105458443385831,0.1324620394046966173716424647033169258050,0.1324620394046966173716424647033169258050,0.1289057221880821499785953393997936532597,0.1289057221880821499785953393997936532597,0.1230490843067295304675784006720096548158,0.1230490843067295304675784006720096548158,0.1149966402224113649416435129339613014914,0.1149966402224113649416435129339613014914,0.1048920914645414100740861850147438548584,0.1048920914645414100740861850147438548584,0.0929157660600351474770186173697646486034,0.0929157660600351474770186173697646486034,0.0792814117767189549228925247420432269137,0.0792814117767189549228925247420432269137,0.0642324214085258521271696151589109980391,0.0642324214085258521271696151589109980391,0.0480376717310846685716410716320339965612,0.0480376717310846685716410716320339965612,0.0309880058569794443106942196418845053837,0.0309880058569794443106942196418845053837,0.0134118594871417720813094934586150649766,0.0134118594871417720813094934586150649766],\n [0.1279381953467521569740561652246953718517,0.1279381953467521569740561652246953718517,0.1258374563468282961213753825111836887264,0.1258374563468282961213753825111836887264,0.1216704729278033912044631534762624256070,0.1216704729278033912044631534762624256070,0.1155056680537256013533444839067835598622,0.1155056680537256013533444839067835598622,0.1074442701159656347825773424466062227946,0.1074442701159656347825773424466062227946,0.0976186521041138882698806644642471544279,0.0976186521041138882698806644642471544279,0.0861901615319532759171852029837426671850,0.0861901615319532759171852029837426671850,0.0733464814110803057340336152531165181193,0.0733464814110803057340336152531165181193,0.0592985849154367807463677585001085845412,0.0592985849154367807463677585001085845412,0.0442774388174198061686027482113382288593,0.0442774388174198061686027482113382288593,0.0285313886289336631813078159518782864491,0.0285313886289336631813078159518782864491,0.0123412297999871995468056670700372915759,0.0123412297999871995468056670700372915759]\n];\n\n// LUT for binomial coefficient arrays per curve order 'n'\nvar binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];\n\n// Look up what the binomial coefficient is for pair {n,k}\nfunction binomials(n, k) {\n return binomialCoefficients[n][k];\n}\n\n/**\n * Compute the curve derivative (hodograph) at t.\n */\nfunction getDerivative(derivative, t, vs) {\n // the derivative of any 't'-less function is zero.\n var n = vs.length - 1,\n _vs,\n value,\n k;\n if (n === 0) {\n return 0;\n }\n\n // direct values? compute!\n if (derivative === 0) {\n value = 0;\n for (k = 0; k <= n; k++) {\n value += binomials(n, k) * Math.pow(1 - t, n - k) * Math.pow(t, k) * vs[k];\n }\n return value;\n } else {\n // Still some derivative? go down one order, then try\n // for the lower order curve's.\n _vs = new Array(n);\n for (k = 0; k < n; k++) {\n _vs[k] = n * (vs[k + 1] - vs[k]);\n }\n return getDerivative(derivative - 1, t, _vs);\n }\n}\n\nfunction B(xs, ys, t) {\n var xbase = getDerivative(1, t, xs);\n var ybase = getDerivative(1, t, ys);\n var combined = xbase * xbase + ybase * ybase;\n return Math.sqrt(combined);\n}\n\nfunction getCubicArcLength(xs, ys, t) {\n var z, sum, i, correctedT;\n\n /*if (xs.length >= tValues.length) {\n throw new Error('too high n bezier');\n }*/\n\n if (t === undefined) {\n t = 1;\n }\n var n = 20;\n\n z = t / 2;\n sum = 0;\n for (i = 0; i < n; i++) {\n correctedT = z * tValues[n][i] + z;\n sum += cValues[n][i] * B(xs, ys, correctedT);\n }\n return z * sum;\n}\n","//This file is taken from the following project: https://github.com/fontello/svgpath\n// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n\n // Add this to work with arbitrary vectors:\n // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n // rounding errors, e.g. -1.0000000000000002 can screw up this\n if (dot > 1.0) { dot = 1.0; }\n if (dot < -1.0) { dot = -1.0; }\n\n return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n // Step 1.\n //\n // Moving an ellipse so origin will be the middlepoint between our two\n // points. After that, rotate it to line up ellipse axes with coordinate\n // axes.\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n var rx_sq = rx * rx;\n var ry_sq = ry * ry;\n var x1p_sq = x1p * x1p;\n var y1p_sq = y1p * y1p;\n\n // Step 2.\n //\n // Compute coordinates of the centre of this ellipse (cx', cy')\n // in the new coordinate system.\n //\n var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n if (radicant < 0) {\n // due to rounding errors it might be e.g. -1.3877787807814457e-17\n radicant = 0;\n }\n\n radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n var cxp = radicant * rx/ry * y1p;\n var cyp = radicant * -ry/rx * x1p;\n\n // Step 3.\n //\n // Transform back to get centre coordinates (cx, cy) in the original\n // coordinate system.\n //\n var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n // Step 4.\n //\n // Compute angles (theta1, delta_theta).\n //\n var v1x = (x1p - cxp) / rx;\n var v1y = (y1p - cyp) / ry;\n var v2x = (-x1p - cxp) / rx;\n var v2y = (-y1p - cyp) / ry;\n\n var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n if (fs === 0 && delta_theta > 0) {\n delta_theta -= TAU;\n }\n if (fs === 1 && delta_theta < 0) {\n delta_theta += TAU;\n }\n\n return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n var alpha = 4/3 * Math.tan(delta_theta/4);\n\n var x1 = Math.cos(theta1);\n var y1 = Math.sin(theta1);\n var x2 = Math.cos(theta1 + delta_theta);\n var y2 = Math.sin(theta1 + delta_theta);\n\n return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nexport default function(x1, y1, rx, ry, phi, fa, fs, x2, y2) {\n var sin_phi = Math.sin(phi * TAU / 360);\n var cos_phi = Math.cos(phi * TAU / 360);\n\n // Make sure radii are valid\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n if (x1p === 0 && y1p === 0) {\n // we're asked to draw line to itself\n return [];\n }\n\n if (rx === 0 || ry === 0) {\n // one of the radii is zero\n return [];\n }\n\n\n // Compensate out-of-range radii\n //\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n\n // Get center parameters (cx, cy, theta1, delta_theta)\n //\n var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n var result = [];\n var theta1 = cc[2];\n var delta_theta = cc[3];\n\n // Split an arc to multiple segments, so each segment\n // will be less than τ/4 (= 90°)\n //\n var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n delta_theta /= segments;\n\n for (var i = 0; i < segments; i++) {\n result.push(approximate_unit_arc(theta1, delta_theta));\n theta1 += delta_theta;\n }\n\n // We have a bezier approximation of a unit circle,\n // now need to transform back to the original ellipse\n //\n return result.map(function (curve) {\n for (var i = 0; i < curve.length; i += 2) {\n var x = curve[i + 0];\n var y = curve[i + 1];\n\n // scale\n x *= rx;\n y *= ry;\n\n // rotate\n var xp = cos_phi*x - sin_phi*y;\n var yp = sin_phi*x + cos_phi*y;\n\n // translate\n curve[i + 0] = xp + cc[0];\n curve[i + 1] = yp + cc[1];\n }\n\n return curve;\n });\n}","//Calculate ans Arc curve length and positionAtLength\n//Definitions taken from https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths\nimport a2c from \"./a2c\";\nimport Bezier from \"./bezier\";\n\n\nexport default function(x0, y0, rx,ry, xAxisRotate, LargeArcFlag,SweepFlag, x,y) {\n return new Arc(x0, y0, rx,ry, xAxisRotate, LargeArcFlag,SweepFlag, x,y);\n}\n\nfunction Arc(x0, y0,rx,ry, xAxisRotate, LargeArcFlag,SweepFlag,x,y) {\n var length = 0;\n var partialLengths = [];\n var curves = [];\n var res = a2c(x0, y0,rx,ry, xAxisRotate, LargeArcFlag,SweepFlag,x,y);\n res.forEach(function(d){\n var curve = new Bezier(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]);\n var curveLength = curve.getTotalLength();\n length += curveLength;\n partialLengths.push(curveLength);\n curves.push(curve);\n });\n this.length = length;\n this.partialLengths = partialLengths;\n this.curves = curves;\n}\n\nArc.prototype = {\n constructor: Arc,\n init: function() {\n\n \n },\n\n getTotalLength: function() {\n return this.length;\n },\n getPointAtLength: function(fractionLength) {\n \n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > this.length){\n fractionLength = this.length;\n }\n var i = this.partialLengths.length - 1;\n\n while(this.partialLengths[i] >= fractionLength && this.partialLengths[i] > 0){\n i--;\n }\n if(i<this.partialLengths.length-1){\n i++;\n }\n\n var lengthOffset = 0;\n for(var j=0; j<i; j++){\n lengthOffset += this.partialLengths[j];\n }\n\n return this.curves[i].getPointAtLength(fractionLength - lengthOffset);\n },\n getTangentAtLength: function(fractionLength) {\n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > this.length){\n fractionLength = this.length;\n }\n var i = this.partialLengths.length - 1;\n\n while(this.partialLengths[i] >= fractionLength && this.partialLengths[i] > 0){\n i--;\n }\n if(i<this.partialLengths.length-1){\n i++;\n }\n\n var lengthOffset = 0;\n for(var j=0; j<i; j++){\n lengthOffset += this.partialLengths[j];\n }\n\n return this.curves[i].getTangentAtLength(fractionLength - lengthOffset);\n },\n getPropertiesAtLength: function(fractionLength){\n var tangent = this.getTangentAtLength(fractionLength);\n var point = this.getPointAtLength(fractionLength);\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n }\n};","export default function(x0, x1, y0, y1) {\n return new LinearPosition(x0, x1, y0, y1);\n\n}\n\nfunction LinearPosition(x0, x1, y0, y1){\n this.x0 = x0;\n this.x1 = x1;\n this.y0 = y0;\n this.y1 = y1;\n}\n\nLinearPosition.prototype.getTotalLength = function(){\n return Math.sqrt(Math.pow(this.x0 - this.x1, 2) +\n Math.pow(this.y0 - this.y1, 2));\n};\n\nLinearPosition.prototype.getPointAtLength = function(pos){\n var fraction = pos/ (Math.sqrt(Math.pow(this.x0 - this.x1, 2) +\n Math.pow(this.y0 - this.y1, 2)));\n\n var newDeltaX = (this.x1 - this.x0)*fraction;\n var newDeltaY = (this.y1 - this.y0)*fraction;\n return { x: this.x0 + newDeltaX, y: this.y0 + newDeltaY };\n};\nLinearPosition.prototype.getTangentAtLength = function(){\n var module = Math.sqrt((this.x1 - this.x0) * (this.x1 - this.x0) +\n (this.y1 - this.y0) * (this.y1 - this.y0));\n return { x: (this.x1 - this.x0)/module, y: (this.y1 - this.y0)/module };\n};\nLinearPosition.prototype.getPropertiesAtLength = function(pos){\n var point = this.getPointAtLength(pos);\n var tangent = this.getTangentAtLength();\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n};\n","import parse from \"./parse\";\nimport Bezier from \"./bezier\";\nimport Arc from \"./arc\";\nimport LinearPosition from \"./linear\";\n\nexport default function(svgString) {\n var length = 0;\n var partial_lengths = [];\n var functions = [];\n\n function svgProperties(string){\n if(!string){return null;}\n var parsed = parse(string);\n var cur = [0, 0];\n var prev_point = [0, 0];\n var curve;\n var ringStart;\n for (var i = 0; i < parsed.length; i++){\n //moveTo\n if(parsed[i][0] === \"M\"){\n cur = [parsed[i][1], parsed[i][2]];\n ringStart = [cur[0], cur[1]];\n functions.push(null);\n } else if(parsed[i][0] === \"m\"){\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];\n ringStart = [cur[0], cur[1]];\n functions.push(null);\n }\n //lineTo\n else if(parsed[i][0] === \"L\"){\n length = length + Math.sqrt(Math.pow(cur[0] - parsed[i][1], 2) + Math.pow(cur[1] - parsed[i][2], 2));\n functions.push(new LinearPosition(cur[0], parsed[i][1], cur[1], parsed[i][2]));\n cur = [parsed[i][1], parsed[i][2]];\n } else if(parsed[i][0] === \"l\"){\n length = length + Math.sqrt(Math.pow(parsed[i][1], 2) + Math.pow(parsed[i][2], 2));\n functions.push(new LinearPosition(cur[0], parsed[i][1] + cur[0], cur[1], parsed[i][2] + cur[1]));\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];\n } else if(parsed[i][0] === \"H\"){\n length = length + Math.abs(cur[0] - parsed[i][1]);\n functions.push(new LinearPosition(cur[0], parsed[i][1], cur[1], cur[1]));\n cur[0] = parsed[i][1];\n } else if(parsed[i][0] === \"h\"){\n length = length + Math.abs(parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0] + parsed[i][1], cur[1], cur[1]));\n cur[0] = parsed[i][1] + cur[0];\n } else if(parsed[i][0] === \"V\"){\n length = length + Math.abs(cur[1] - parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0], cur[1], parsed[i][1]));\n cur[1] = parsed[i][1];\n } else if(parsed[i][0] === \"v\"){\n length = length + Math.abs(parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0], cur[1], cur[1] + parsed[i][1]));\n cur[1] = parsed[i][1] + cur[1];\n //Close path\n } else if(parsed[i][0] === \"z\" || parsed[i][0] === \"Z\"){\n length = length + Math.sqrt(Math.pow(ringStart[0] - cur[0], 2) + Math.pow(ringStart[1] - cur[1], 2));\n functions.push(new LinearPosition(cur[0], ringStart[0], cur[1], ringStart[1]));\n cur = [ringStart[0], ringStart[1]];\n }\n //Cubic Bezier curves\n else if(parsed[i][0] === \"C\"){\n curve = new Bezier(cur[0], cur[1] , parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4] , parsed[i][5], parsed[i][6]);\n length = length + curve.getTotalLength();\n cur = [parsed[i][5], parsed[i][6]];\n functions.push(curve);\n } else if(parsed[i][0] === \"c\"){\n curve = new Bezier(cur[0], cur[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4] , cur[0] + parsed[i][5], cur[1] + parsed[i][6]);\n length = length + curve.getTotalLength();\n cur = [parsed[i][5] + cur[0], parsed[i][6] + cur[1]];\n functions.push(curve);\n } else if(parsed[i][0] === \"S\"){\n if(i>0 && [\"C\",\"c\",\"S\",\"s\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2*cur[0] - parsed[i-1][parsed[i-1].length - 4], 2*cur[1] - parsed[i-1][parsed[i-1].length - 3], parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n } else {\n curve = new Bezier(cur[0], cur[1] , cur[0], cur[1], parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n cur = [parsed[i][3], parsed[i][4]];\n functions.push(curve);\n } else if(parsed[i][0] === \"s\"){ //240 225\n if(i>0 && [\"C\",\"c\",\"S\",\"s\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , cur[0] + curve.d.x - curve.c.x, cur[1] + curve.d.y - curve.c.y, cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n } else {\n curve = new Bezier(cur[0], cur[1] , cur[0], cur[1], cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];\n functions.push(curve);\n }\n //Quadratic Bezier curves\n else if(parsed[i][0] === \"Q\"){\n if(cur[0] != parsed[i][1] && cur[1] != parsed[i][2]){\n curve = new Bezier(cur[0], cur[1] , parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n } else {\n curve = new LinearPosition(parsed[i][1], parsed[i][3], parsed[i][2], parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n functions.push(curve);\n cur = [parsed[i][3], parsed[i][4]];\n prev_point = [parsed[i][1], parsed[i][2]];\n\n } else if(parsed[i][0] === \"q\"){\n if(!(parsed[i][1] == 0 && parsed[i][2] == 0)){\n curve = new Bezier(cur[0], cur[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n } else {\n curve = new LinearPosition(cur[0] + parsed[i][1], cur[0] + parsed[i][3], cur[1] + parsed[i][2], cur[1] + parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n prev_point = [cur[0] + parsed[i][1], cur[1] + parsed[i][2]];\n cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];\n functions.push(curve);\n } else if(parsed[i][0] === \"T\"){\n if(i>0 && [\"Q\",\"q\",\"T\",\"t\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1] , parsed[i][1], parsed[i][2]);\n } else {\n curve = new LinearPosition(cur[0], parsed[i][1], cur[1], parsed[i][2]);\n }\n functions.push(curve);\n length = length + curve.getTotalLength();\n prev_point = [2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1]];\n cur = [parsed[i][1], parsed[i][2]];\n\n } else if(parsed[i][0] === \"t\"){\n if(i>0 && [\"Q\",\"q\",\"T\",\"t\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2]);\n } else {\n curve = new LinearPosition(cur[0], cur[0] + parsed[i][1], cur[1], cur[1] + parsed[i][2]);\n }\n length = length + curve.getTotalLength();\n prev_point = [2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1]];\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[0]];\n functions.push(curve);\n } else if(parsed[i][0] === \"A\"){\n curve = new Arc(cur[0], cur[1], parsed[i][1], parsed[i][2], parsed[i][3], parsed[i][4], parsed[i][5], parsed[i][6], parsed[i][7]);\n\n length = length + curve.getTotalLength();\n cur = [parsed[i][6], parsed[i][7]];\n functions.push(curve);\n } else if(parsed[i][0] === \"a\"){\n curve = new Arc(cur[0], cur[1], parsed[i][1], parsed[i][2], parsed[i][3], parsed[i][4], parsed[i][5], cur[0] + parsed[i][6], cur[1] + parsed[i][7]);\n\n length = length + curve.getTotalLength();\n cur = [cur[0] + parsed[i][6], cur[1] + parsed[i][7]];\n functions.push(curve);\n }\n partial_lengths.push(length);\n\n }\n return svgProperties;\n }\n\n svgProperties.getTotalLength = function(){\n return length;\n };\n\n svgProperties.getPointAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getPointAtLength(fractionPart.fraction);\n };\n\n svgProperties.getTangentAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getTangentAtLength(fractionPart.fraction);\n };\n\n svgProperties.getPropertiesAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getPropertiesAtLength(fractionPart.fraction);\n };\n\n var getPartAtLength = function(fractionLength){\n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > length){\n fractionLength = length;\n }\n\n var i = partial_lengths.length - 1;\n\n while(partial_lengths[i] >= fractionLength && partial_lengths[i] > 0){\n i--;\n }\n i++;\n return {fraction: fractionLength-partial_lengths[i-1], i: i};\n };\n\n return svgProperties(svgString);\n}\n","import { toPathString } from \"./svg.js\";\nimport { polygonCentroid as d3Centroid } from \"d3-polygon\";\n\nexport function distance(a, b) {\n return Math.sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));\n}\n\nexport function pointAlong(a, b, pct) {\n return [a[0] + (b[0] - a[0]) * pct, a[1] + (b[1] - a[1]) * pct];\n}\n\nexport function samePoint(a, b) {\n return distance(a, b) < 1e-9;\n}\n\nexport function interpolatePoints(a, b, string) {\n let interpolators = a.map((d, i) => interpolatePoint(d, b[i]));\n\n return function(t) {\n let values = interpolators.map(fn => fn(t));\n return string ? toPathString(values) : values;\n };\n}\n\nexport function interpolatePoint(a, b) {\n return function(t) {\n return a.map((d, i) => d + t * (b[i] - d));\n };\n}\n\nexport function isFiniteNumber(number) {\n return typeof number === \"number\" && isFinite(number);\n}\n\n// Use plain mean if it's a degenerate polygon (colinear points or single point)\nexport function polygonCentroid(polygon) {\n return nonZeroArea(polygon) ? d3Centroid(polygon) : [\n (polygon[0][0] + polygon[polygon.length - 1][0]) / 2,\n (polygon[0][1] + polygon[polygon.length - 1][1]) / 2\n ];\n}\n\nfunction nonZeroArea(polygon) {\n\n for (let i = 0; i < polygon.length - 2; i++) {\n\n let a = polygon[i],\n b = polygon[i + 1],\n c = polygon[i + 2];\n\n if (a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) {\n return true;\n }\n\n }\n\n return false;\n\n}\n","export const INVALID_INPUT = `All shapes must be supplied as arrays of [x, y] points or an SVG path string (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d).\nExample valid ways of supplying a shape would be:\n[[0, 0], [10, 0], [10, 10]]\n\"M0,0 L10,0 L10,10Z\"\n`;\n\nexport const INVALID_INPUT_ALL = `flubber.all() expects two arrays of equal length as arguments. Each element in both arrays should be an array of [x, y] points or an SVG path string (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d).`;\n\nexport const INVALID_PATH_STRING = `Invalid SVG path string supplied.\nPath string reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\n`;\n","import Path from \"svgpath\";\nimport { svgPathProperties } from \"svg-path-properties\";\nimport normalizeRing from \"./normalize.js\";\nimport { isFiniteNumber } from \"./math.js\";\nimport { INVALID_INPUT } from \"./errors.js\";\n\nfunction parse(str) {\n return new Path(str).abs();\n}\n\nfunction split(parsed) {\n return parsed\n .toString()\n .split(\"M\")\n .map((d, i) => {\n d = d.trim();\n return i && d ? \"M\" + d : d;\n })\n .filter(d => d);\n}\n\nexport function toPathString(ring) {\n return \"M\" + ring.join(\"L\") + \"Z\";\n}\n\nexport function splitPathString(str) {\n return split(parse(str));\n}\n\nexport function pathStringToRing(str, maxSegmentLength) {\n let parsed = parse(str);\n\n return exactRing(parsed) || approximateRing(parsed, maxSegmentLength);\n}\n\nfunction exactRing(parsed) {\n let segments = parsed.segments || [],\n ring = [];\n\n if (!segments.length || segments[0][0] !== \"M\") {\n return false;\n }\n\n for (let i = 0; i < segments.length; i++) {\n let [command, x, y] = segments[i];\n if ((command === \"M\" && i) || command === \"Z\") {\n break;\n } else if (command === \"M\" || command === \"L\") {\n ring.push([x, y]);\n } else if (command === \"H\") {\n ring.push([x, ring[ring.length - 1][1]]);\n } else if (command === \"V\") {\n ring.push([ring[ring.length - 1][0], x]);\n } else {\n return false;\n }\n }\n\n return ring.length ? { ring } : false;\n}\n\nfunction approximateRing(parsed, maxSegmentLength) {\n let ringPath = split(parsed)[0],\n ring = [],\n props,\n len,\n m,\n numPoints = 3;\n\n if (!ringPath) {\n throw new TypeError(INVALID_INPUT);\n }\n\n m = measure(ringPath);\n len = m.getTotalLength();\n\n if (maxSegmentLength && isFiniteNumber(maxSegmentLength) && maxSegmentLength > 0) {\n numPoints = Math.max(numPoints, Math.ceil(len / maxSegmentLength));\n }\n\n for (let i = 0; i < numPoints; i++) {\n let p = m.getPointAtLength(len * i / numPoints);\n ring.push([p.x, p.y]);\n }\n\n return {\n ring,\n skipBisect: true\n };\n}\n\nfunction measure(d) {\n // Use native browser measurement if running in browser\n if (typeof window !== \"undefined\" && window && window.document) {\n try {\n let path = window.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttributeNS(null, \"d\", d);\n return path;\n } catch (e) {}\n }\n // Fall back to svg-path-properties\n return svgPathProperties(d);\n}\n","import { polygonLength } from \"d3-polygon\";\nimport { distance, pointAlong } from \"./math.js\";\n\nexport function addPoints(ring, numPoints) {\n const desiredLength = ring.length + numPoints,\n step = polygonLength(ring) / numPoints;\n\n let i = 0,\n cursor = 0,\n insertAt = step / 2;\n\n while (ring.length < desiredLength) {\n let a = ring[i],\n b = ring[(i + 1) % ring.length],\n segment = distance(a, b);\n\n if (insertAt <= cursor + segment) {\n ring.splice(i + 1, 0, segment ? pointAlong(a, b, (insertAt - cursor) / segment) : a.slice(0));\n insertAt += step;\n continue;\n }\n\n cursor += segment;\n i++;\n }\n}\n\nexport function bisect(ring, maxSegmentLength = Infinity) {\n for (let i = 0; i < ring.length; i++) {\n let a = ring[i],\n b = i === ring.length - 1 ? ring[0] : ring[i + 1];\n\n // Could splice the whole set for a segment instead, but a bit messy\n while (distance(a, b) > maxSegmentLength) {\n b = pointAlong(a, b, 0.5);\n ring.splice(i + 1, 0, b);\n }\n }\n}\n","import { polygonArea } from \"d3-polygon\";\nimport { pathStringToRing } from \"./svg.js\";\nimport { samePoint, isFiniteNumber } from \"./math.js\";\nimport { bisect } from \"./add.js\";\nimport { INVALID_INPUT } from \"./errors.js\";\n\nexport default function normalizeRing(ring, maxSegmentLength) {\n let points, area, skipBisect;\n\n if (typeof ring === \"string\") {\n let converted = pathStringToRing(ring, maxSegmentLength);\n ring = converted.ring;\n skipBisect = converted.skipBisect;\n } else if (!Array.isArray(ring)) {\n throw new TypeError(INVALID_INPUT);\n }\n\n points = ring.slice(0);\n\n if (!validRing(points)) {\n throw new TypeError(INVALID_INPUT);\n }\n\n // TODO skip this test to avoid scale issues?\n // Chosen epsilon (1e-6) is problematic for small coordinate range\n if (points.length > 1 && samePoint(points[0], points[points.length - 1])) {\n points.pop();\n }\n\n area = polygonArea(points);\n\n // Make all rings clockwise\n if (area > 0) {\n points.reverse();\n }\n\n if (\n !skipBisect &&\n maxSegmentLength &&\n isFiniteNumber(maxSegmentLength) &&\n maxSegmentLength > 0\n ) {\n bisect(points, maxSegmentLength);\n }\n\n return points;\n}\n\nfunction validRing(ring) {\n return ring.every(function(point) {\n return (\n Array.isArray(point) &&\n point.length >= 2 &&\n isFiniteNumber(point[0]) &&\n isFiniteNumber(point[1])\n );\n });\n}\n","import { distance } from \"./math.js\";\n\nexport default function(ring, vs) {\n let len = ring.length,\n min = Infinity,\n bestOffset,\n sumOfSquares,\n spliced;\n\n for (let offset = 0; offset < len; offset++) {\n sumOfSquares = 0;\n\n vs.forEach(function(p, i){\n let d = distance(ring[(offset + i) % len], p);\n sumOfSquares += d * d;\n });\n\n if (sumOfSquares < min) {\n min = sumOfSquares;\n bestOffset = offset;\n }\n }\n\n if (bestOffset) {\n spliced = ring.splice(0, bestOffset);\n ring.splice(ring.length, 0, ...spliced);\n }\n}\n","import normalizeRing from \"./normalize.js\";\nimport { addPoints } from \"./add.js\";\nimport rotate from \"./rotate.js\";\nimport { interpolatePoints } from \"./math.js\";\n\nexport default function(fromShape, toShape, { maxSegmentLength = 10, string = true } = {}) {\n let fromRing = normalizeRing(fromShape, maxSegmentLength),\n toRing = normalizeRing(toShape, maxSegmentLength),\n interpolator = interpolateRing(fromRing, toRing, string);\n\n // Extra optimization for near either end with path strings\n if (!string || (typeof fromShape !== \"string\" && typeof toShape !== \"string\")) {\n return interpolator;\n }\n\n return t => {\n if (t < 1e-4 && typeof fromShape === \"string\") {\n return fromShape;\n }\n if (1 - t < 1e-4 && typeof toShape === \"string\") {\n return toShape;\n }\n return interpolator(t);\n };\n}\n\nexport function interpolateRing(fromRing, toRing, string) {\n let diff;\n\n diff = fromRing.length - toRing.length;\n\n // TODO bisect and add points in one step?\n addPoints(fromRing, diff < 0 ? diff * -1 : 0);\n addPoints(toRing, diff > 0 ? diff : 0);\n\n rotate(fromRing, toRing);\n\n return interpolatePoints(fromRing, toRing, string);\n}\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import { interpolate } from \"flubber\";\n\nimport { Interpolator } from \"../../types/Interpolator\";\n\nexport function getSmoothPathInterpolator(\n fromPath: string,\n toPath: string,\n maxSegmentLength: number = 3,\n): Interpolator<string> {\n const pathInterpolator = interpolate(fromPath, toPath, { maxSegmentLength });\n\n return {\n check: (value: unknown): value is string => {\n return typeof value === \"string\";\n },\n interpolate: (_fromPath: string, _toPath: string, proportion: number): string => {\n return pathInterpolator(proportion);\n },\n };\n}\n","import { Position } from \"../../types/Position\";\nimport { Size } from \"../../types/Size\";\n\ninterface Return {\n scaleX: (proportion: number) => number;\n scaleY: (proportion: number) => number;\n position: (xProportion: number, yProportion: number) => Position;\n}\n\n/** Returns sizing functions for calculating proportional sizes. */\nexport function getSizingFunctions(size: Size): Return {\n const scaleX = (proportion: number) => size.width * proportion;\n const scaleY = (proportion: number) => size.height * proportion;\n\n return {\n scaleX,\n scaleY,\n position: (xProportion: number, yProportion: number) =>\n Position({\n x: scaleX(xProportion),\n y: scaleY(yProportion),\n }),\n };\n}\n","import { Slide } from \"../../types/Slide\";\n\n/**\n * Slides can define which builds are considered \"key\", e.g. to indicate which builds should be included in exports.\n */\nexport function getKeySlideBuildIndices(slide: Slide): number[] {\n const buildIndices: number[] = [];\n\n // If every build is key, include all build indices\n if (slide.isAllKey) {\n for (let i = 0; i <= slide.animations.length; i++) {\n buildIndices.push(i);\n }\n return buildIndices;\n }\n\n // Slide can configure its own starting state to be key\n if (slide.isStartKey) {\n buildIndices.push(0);\n }\n\n // Check animations for key build indicators\n slide.animations.forEach((animation, animationIndex) => {\n if (Array.isArray(animation)) {\n if (animation.some((anim) => anim.isKey)) {\n buildIndices.push(animationIndex + 1);\n }\n } else {\n if (animation.isKey) {\n buildIndices.push(animationIndex + 1);\n }\n }\n });\n\n // Slide can configure its own ending state to be key\n if (slide.isEndKey && buildIndices[buildIndices.length - 1] !== slide.animations.length) {\n buildIndices.push(slide.animations.length);\n }\n\n return buildIndices;\n}\n"],"names":["AnimationType","cubicIn","t","cubicOut","cubicInOut","overshoot","custom","s","backIn","backOut","backInOut","Easing","easeCubic","easeCubicIn","easeCubicOut","easeBackInOut","DEFAULT_EASING","Animate","object","props","animationParams","FadeIn","FadeOut","Update","Hide","Show","Anchor","DEFAULT_ANCHOR","Color","color","green","blue","alpha","hexString","hex","DEFAULT_COLOR","SlideWebExtra","getAlphaForColor","opacity","getHexStringForColor","red","alphaHex","IFrame","url","backgroundColor","borderColor","borderWidth","pointerEvents","scale","anchor","height","width","x","y","iframe","scaledSize","Alignment","DEFAULT_ALIGNMENT","assertNever","value","message","ScreenCapture","alignment","setup","foreignObject","video","displayMediaOptions","stream","videoTrack","error","track","ObjectType","SlideObject","Arrow","inputArrowheadSize","rest","arrowheadSize","DEFAULT_CIRCLE_RADIUS","Circle","Group","objects","Grid","cols","rows","gapX","gapY","originX","originY","gridObjects","groupObjects","row","rowObjects","rowHeight","col","objectWidth","objectHeight","Image","Line","Mask","e","h","n","i","g","_a","a","__publicField","r","o","c","l","u","p","f","L","A","w","P","T","d","b","v","m","M","q","_","C","N","Transparent","Path","path","viewboxHeight","viewboxWidth","pathDescription","pathLength","svgPathProperties","Polygon","Rectangle","SVG","FontStyle","DEFAULT_FONT_STYLE","FontWeight","DEFAULT_FONT_WEIGHT","DEFAULT_TEXT_STYLE","getTextUnitsFromTextContent","text","line","unit","getTextContentLength","totalLength","lineLength","Text","navigatorWindow","openNavigator","presentation","onNavigateToSlide","navigatorElement","createNavigatorElement","event","slide","index","slideElement","createSlideElement","slideIndex","Size","DEFAULT_SIZE","Presentation","getSlideAnimationDuration","slideAnimation","animations","startTime","duration","animation","getRgbStringForColor","isFullBodyPresentation","element","createPresentationContainer","root","container","targetAspectRatio","updateContainerSize","interpolateColor","from","to","proportion","interpolateFallback","_value","_from","interpolateNumber","DEFAULT_INTERPOLATORS","interpolate","customInterpolators","interpolators","interpolatedProps","key","fromValue","toValue","interpolator","updateObjectStateWithAnimation","objectState","buildTime","elapsedTime","currentObject","timeIntoAnimation","getObjectChildren","getObjectState","buildIndex","addObjectToState","childObject","completedBuildCount","getSvgImageUrlById","svgStrings","walkSlideObject","svg","children","child","getPresentationShortcuts","slides","shortcuts","shortcut","addShortcut","animationIndex","anim","setupKeyEventListeners","shortcutState","onNext","onPrevious","onRenderSlide","onShowNavigator","command","shortcutConfig","LOCAL_STORAGE_KEY","loadPresentationState","ttlMinutes","state","data","title","timestamp","storePresentationState","BROWSER_CANVAS_RENDERER_DEFAULT_STATE","CanvasContextType","clearCanvas","canvas","ctx","createCanvasElement","size","Path2DType","createPath2D","pathData","getArrowPoints","arrow","drawn","startX","startY","endX","endY","isArrowheadFilled","isDrawnFromCenter","start","end","angle","midpoint","dx","dy","drawnLength","unitX","unitY","drawnStart","drawnEnd","arrowAngle","adjustedArrowheadSize","arrowheadBase1","arrowheadBase2","doubledArrowheadBase1","doubledArrowheadBase2","drawStroke","isRounded","fullPathLength","fillPath","getPathFromPositions","positions","createPath","firstPosition","length","position","prevPosition","renderArrow","targetOpacity","arrowPoints","arrowheadPoints","doubledArrowheadPoints","arrowPath","arrowheadPath","doubledArrowheadPath","getCircleInsetFillPath","circle","insetRadius","startAngle","getCirclePath","clipToPath","renderCircle","insetFillPath","Position","DEFAULT_POSITION","BoundingBox","getBoundingBox","renderGroup","group","renderObject","boundingBox","rotation","rotateOriginX","rotateOriginY","getRoundedRectanglePath","origin","rounding","ImageType","renderImage","imageById","image","imageData","roundedRectPath","getLinePath","renderLine","renderMask","mask","bbox","renderPath","path2D","getPolygonPath","polygon","points","firstPoint","previousPoint","point","segmentLength","closingSegmentLength","renderPolygon","getRectangleInsetFillPath","rectangle","inset","insetWidth","insetHeight","insetOrigin","insetSize","getRectanglePath","renderRectangle","renderSvg","getTextStyleFromText","getCombinedSizes2D","sizes","lineSpacing","previousLineHeight","lineHeight","getSizeFromTextMetrics","textMetrics","setContextWithTextStyle","textStyle","getTextUnitMeasurements","textUnits","style","lineSizes","unitStyle","combinedStyle","metrics","renderText","consumedLength","lineIndex","lineWidth","acc","curr","unitIndex","unitSize","unitText","truncatedUnitText","remainingLength","targetUnitText","DEFAULT_OBJECT_RENDERERS","createExtrasElement","extrasElement","mountWebExtra","extra","extraElement","cleanup","cleanupResult","loadPresentationImages","imagePathById","loadImage","src","resolve","reject","img","err","sanitized","svgBlob","loadPromises","id","BrowserCanvasRenderer","objectRenderers","extrasContainer","skipIntermediateBuilds","loadedState","didSlideIndexChange","context","objectRenderer","currentAnimationId","currentSlide","nextAnimation","animationDuration","animate","currentTime","elapsed","previousSlide","Pause","Slide","TextUnit","Opaque","polygonArea","area","polygonLength","xa","ya","xb","yb","perimeter","paramCounts","SPECIAL_SPACES","isSpace","ch","isCommand","code","isArc","isDigit","isDigitStart","State","skipSpaces","scanFlag","scanParam","max","zeroFirst","hasCeiling","hasDecimal","hasDot","finalizeSegment","cmd","cmdLC","params","scanSegment","cmdCode","is_arc","comma_found","need_params","path_parse","svgPath","combine","m1","m2","Matrix","tx","ty","sx","sy","rx","ry","rad","cos","sin","isRelative","matrix","require$$0","operations","CMD_SPLIT_RE","PARAMS_SPLIT_RE","transform_parse","transformString","item","TAU","unit_vector_angle","ux","uy","vx","vy","sign","dot","get_arc_center","x1","y1","x2","y2","fa","fs","sin_phi","cos_phi","x1p","y1p","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","cx","cy","v1x","v1y","v2x","v2y","theta1","delta_theta","approximate_unit_arc","a2c","phi","lambda","cc","result","segments","curve","xp","yp","epsilon","torad","Ellipse","ax","ma","J","K","D","JK","l1","l2","ellipse","pathParse","transformParse","require$$1","require$$2","require$$3","require$$4","SvgPath","pstate","sgm","self","name","prevCmd","cmdSkipped","len","segment","pos","val","degrees","contourStartDeltaX","contourStartDeltaY","deltaX","deltaY","iterator","keepLazyStack","replacements","needReplace","lastX","lastY","countourStartX","countourStartY","j","newSegments","res","nameUC","nameLC","new_segments","nextX","nextY","prevControlX","prevControlY","prevSegment","curControlX","curControlY","idx","svgpath","parse$1","args","type","parseValues","number","numbers","Bezier","ay","bx","by","getCubicArcLength","cubicPoint","cubicDerivative","getQuadraticArcLength","quadraticPoint","quadraticDerivative","t2length","derivative","mdl","tangent","xs","ys","total_length","func","step","increasedTLength","decreasedTLength","increasedTError","decreasedTError","B","k","tValues","cValues","binomialCoefficients","binomials","getDerivative","vs","_vs","xbase","ybase","combined","z","sum","correctedT","Arc","x0","y0","xAxisRotate","LargeArcFlag","SweepFlag","partialLengths","curves","curveLength","fractionLength","lengthOffset","LinearPosition","fraction","newDeltaX","newDeltaY","module","svgString","partial_lengths","functions","svgProperties","string","parsed","parse","cur","prev_point","ringStart","fractionPart","getPartAtLength","distance","pointAlong","pct","samePoint","interpolatePoints","interpolatePoint","values","fn","toPathString","isFiniteNumber","INVALID_INPUT","str","split","ring","pathStringToRing","maxSegmentLength","exactRing","approximateRing","ringPath","numPoints","measure","addPoints","desiredLength","cursor","insertAt","bisect","normalizeRing","skipBisect","converted","validRing","rotate","min","bestOffset","sumOfSquares","spliced","offset","fromShape","toShape","fromRing","toRing","interpolateRing","diff","earcutModule","earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","again","ear","pass","indexCurve","stop","prev","next","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minZ","zOrder","maxZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","list","getLeftmost","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","mx","my","tanMin","tan","sectorContainsSector","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","o1","o2","o3","o4","onSegment","num","inside","a2","Node","b2","an","bp","trianglesArea","holeIndex","ascending","bisector","compare","ascendingComparator","lo","hi","mid","getSmoothPathInterpolator","fromPath","toPath","pathInterpolator","_fromPath","_toPath","getSizingFunctions","scaleX","scaleY","xProportion","yProportion","getKeySlideBuildIndices","buildIndices"],"mappings":"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AmB,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,qBAAmB,oBAAkB,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,mBAAiB,kBAAgB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,CAAC,GAAEC,KAAE,CAAC,CAAA,GAAG,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,oBAAkB,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,oBAAkB,kBAAiB,GAAE,CAAC,mBAAiB,mBAAiB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,sBAAoB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,kBAAgB,kBAAgB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,sBAAoB,sBAAoB,sBAAoB,sBAAoB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,kBAAiB,GAAE,CAAC,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,sBAAoB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAm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","x_google_ignoreList":[1,2,28,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]}
|
|
1
|
+
{"version":3,"file":"presenter.mjs","sources":["../src/types/AnimationType.ts","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-ease/src/back.js","../src/types/Easing.ts","../src/types/Animate.ts","../src/animations/FadeIn.ts","../src/animations/FadeOut.ts","../src/types/Update.ts","../src/animations/Hide.ts","../src/animations/Show.ts","../src/types/Anchor.ts","../src/types/Color.ts","../src/types/SlideWebExtra.ts","../src/utils/color/getAlphaForColor.ts","../src/utils/color/getHexStringForColor.ts","../src/extras/IFrame.ts","../src/types/Alignment.ts","../src/utils/core/assertNever.ts","../src/extras/ScreenCapture.ts","../src/types/ObjectType.ts","../src/types/SlideObject.ts","../src/objects/Arrow.ts","../src/objects/Circle.ts","../src/objects/Group.ts","../src/objects/Grid.ts","../src/objects/Image.ts","../src/objects/Line.ts","../src/objects/Mask.ts","../node_modules/svg-path-properties/dist/main.mjs","../src/utils/color/Transparent.ts","../src/objects/Path.ts","../src/objects/Polygon.ts","../src/objects/Rectangle.ts","../src/objects/SVG.ts","../src/types/FontStyle.ts","../src/types/FontWeight.ts","../src/types/TextStyle.ts","../src/utils/objects/text/getTextUnitsFromTextContent.ts","../src/utils/objects/text/getTextContentLength.ts","../src/objects/Text.ts","../src/navigator/openNavigator.ts","../src/types/Size.ts","../src/types/Presentation.ts","../src/utils/animate/getSlideAnimationDuration.ts","../src/utils/color/getRgbStringForColor.ts","../src/utils/presentation/isFullBodyPresentation.ts","../src/utils/presentation/createPresentationContainer.ts","../src/utils/interpolate/interpolateColor.ts","../src/utils/interpolate/interpolateFallback.ts","../src/utils/interpolate/interpolateNumber.ts","../src/utils/interpolate/defaultInterpolators.ts","../src/utils/interpolate/interpolate.ts","../src/utils/animate/updateObjectStateWithAnimation.ts","../src/utils/presentation/getObjectChildren.ts","../src/utils/presentation/getObjectState.ts","../src/utils/presentation/getSvgImageUrlById.ts","../src/utils/presentation/getPresentationShortcuts.ts","../src/utils/presentation/setupKeyEventListeners.ts","../src/utils/storage/storageConsts.ts","../src/utils/storage/loadPresentationState.ts","../src/utils/storage/storePresentationState.ts","../src/renderer/browser-canvas/types/BrowserCanvasRendererState.ts","../src/renderer/browser-canvas/types/UnifiedCanvasContext.ts","../src/renderer/browser-canvas/utils/clearCanvas.ts","../src/renderer/browser-canvas/utils/createCanvasElement.ts","../src/renderer/browser-canvas/types/UnifiedPath2D.ts","../src/renderer/browser-canvas/utils/createPath2D.ts","../src/utils/objects/arrow/getArrowPoints.ts","../src/renderer/browser-canvas/utils/drawStroke.ts","../src/renderer/browser-canvas/utils/fillPath.ts","../src/renderer/browser-canvas/utils/getPathFromPoints.ts","../src/renderer/browser-canvas/objects/renderArrow.ts","../src/utils/objects/circle/getCircleInsetFillPath.ts","../src/utils/objects/circle/getCirclePath.ts","../src/renderer/browser-canvas/utils/clipToPath.ts","../src/renderer/browser-canvas/objects/renderCircle.ts","../src/types/Position.ts","../src/types/BoundingBox.ts","../src/utils/layout/getBoundingBox.ts","../src/renderer/browser-canvas/objects/renderGroup.ts","../src/utils/objects/rectangle/getRoundedRectanglePath.ts","../src/renderer/browser-canvas/types/UnifiedImage.ts","../src/renderer/browser-canvas/objects/renderImage.ts","../src/utils/objects/line/getLinePath.ts","../src/renderer/browser-canvas/objects/renderLine.ts","../src/renderer/browser-canvas/objects/renderMask.ts","../src/renderer/browser-canvas/objects/renderPath.ts","../src/utils/objects/polygon/getPolygonPath.ts","../src/renderer/browser-canvas/objects/renderPolygon.ts","../src/utils/objects/rectangle/getRectangleInsetFillPath.ts","../src/utils/objects/rectangle/getRectanglePath.ts","../src/renderer/browser-canvas/objects/renderRectangle.ts","../src/renderer/browser-canvas/objects/renderSvg.ts","../src/utils/objects/text/getTextStyleFromText.ts","../src/utils/size/getCombinedSizes2D.ts","../src/renderer/browser-canvas/utils/getSizeFromTextMetrics.ts","../src/renderer/browser-canvas/utils/text/setContextWithTextStyle.ts","../src/renderer/browser-canvas/utils/text/getTextUnitMeasurements.ts","../src/renderer/browser-canvas/objects/renderText.ts","../src/renderer/browser-canvas/utils/defaultObjectRenderers.ts","../src/renderer/browser-canvas/utils/extras/createExtrasElement.ts","../src/renderer/browser-canvas/utils/extras/mountWebExtra.ts","../src/renderer/browser-canvas/utils/loadPresentationImages.ts","../src/renderer/browser-canvas/BrowserCanvasRenderer.ts","../src/types/Pause.ts","../src/types/Slide.ts","../src/types/TextUnit.ts","../src/utils/color/Opaque.ts","../node_modules/d3-polygon/src/area.js","../node_modules/d3-polygon/src/length.js","../node_modules/svgpath/lib/path_parse.js","../node_modules/svgpath/lib/matrix.js","../node_modules/svgpath/lib/transform_parse.js","../node_modules/svgpath/lib/a2c.js","../node_modules/svgpath/lib/ellipse.js","../node_modules/svgpath/lib/svgpath.js","../node_modules/svgpath/index.js","../node_modules/flubber/node_modules/svg-path-properties/src/parse.js","../node_modules/flubber/node_modules/svg-path-properties/src/bezier.js","../node_modules/flubber/node_modules/svg-path-properties/src/a2c.js","../node_modules/flubber/node_modules/svg-path-properties/src/arc.js","../node_modules/flubber/node_modules/svg-path-properties/src/linear.js","../node_modules/flubber/node_modules/svg-path-properties/src/path-properties.js","../node_modules/flubber/src/math.js","../node_modules/flubber/src/errors.js","../node_modules/flubber/src/svg.js","../node_modules/flubber/src/add.js","../node_modules/flubber/src/normalize.js","../node_modules/flubber/src/rotate.js","../node_modules/flubber/src/interpolate.js","../node_modules/earcut/src/earcut.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../src/utils/interpolate/getSmoothPathInterpolator.ts","../src/utils/layout/getSizingFunctions.ts","../src/utils/slide/getKeySlideBuildIndices.ts"],"sourcesContent":["export const AnimationType = {\n /** Represents an animated change in an object's properties. */\n ANIMATE: \"Animate\",\n\n /** Represents a pause in the animation timeline. */\n PAUSE: \"Pause\",\n\n /** Represents an immediate update to an object's properties without animation. */\n UPDATE: \"Update\",\n} as const;\n\nexport type AnimationType = (typeof AnimationType)[keyof typeof AnimationType];\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","import { easeBackInOut, easeCubic, easeCubicIn, easeCubicOut } from \"d3-ease\";\n\nimport { EasingFunction } from \"./EasingFunction\";\n\nexport const Easing = {\n LINEAR: (t: number) => t,\n CUBIC: easeCubic,\n CUBIC_IN: easeCubicIn,\n CUBIC_OUT: easeCubicOut,\n BACK_IN_OUT: easeBackInOut.overshoot(0.8),\n} as const satisfies Record<string, EasingFunction>;\n\nexport const DEFAULT_EASING: EasingFunction = Easing.LINEAR;\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\nimport { DEFAULT_EASING } from \"./Easing\";\nimport { EasingFunction } from \"./EasingFunction\";\nimport { Interpolator } from \"./Interpolator\";\nimport { SlideObject } from \"./SlideObject\";\n\nexport interface Animate<T extends SlideObject> extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.ANIMATE;\n readonly object: T;\n readonly props: Partial<Omit<T, \"objectType\">>;\n readonly delay: number;\n readonly duration: number;\n readonly easing: EasingFunction;\n\n /** Whether animation should block future animations from starting. */\n readonly block: boolean;\n\n /** Custom interpolators to use for performing animation. */\n readonly interpolators: Interpolator<any>[] | null;\n}\n\nexport type AnimationParams<T extends SlideObject> = Partial<Omit<Animate<T>, \"object\" | \"props\">>;\n\nexport function Animate<T extends SlideObject>(\n object: T,\n props: Partial<Omit<T, \"objectType\">>,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return {\n type: AnimationType.ANIMATE,\n object,\n props,\n delay: 0,\n duration: 1000,\n easing: DEFAULT_EASING,\n block: false,\n interpolators: null,\n isKey: false,\n shortcut: null,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n };\n}\n","import { Animate, AnimationParams } from \"../types/Animate\";\nimport { Easing } from \"../types/Easing\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport function FadeIn<T extends SlideObject>(\n object: T,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return Animate(object, { opacity: 1 } as Partial<T>, {\n duration: 500,\n easing: Easing.CUBIC,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n });\n}\n","import { Animate, AnimationParams } from \"../types/Animate\";\nimport { Easing } from \"../types/Easing\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport function FadeOut<T extends SlideObject>(\n object: T,\n animationParams: AnimationParams<T> | number = {},\n): Animate<T> {\n return Animate(object, { opacity: 0 } as Partial<T>, {\n duration: 500,\n easing: Easing.CUBIC,\n ...(typeof animationParams === \"number\" ? { duration: animationParams } : animationParams),\n });\n}\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\nimport { SlideObject } from \"./SlideObject\";\n\nexport interface Update<T extends SlideObject> extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.UPDATE;\n readonly object: T;\n readonly props: Partial<Omit<T, \"objectType\">>;\n}\n\nexport type UpdateParams<T extends SlideObject> = Partial<Omit<Update<T>, \"object\" | \"props\">>;\n\nexport function Update<T extends SlideObject>(\n object: T,\n props: Partial<Omit<T, \"objectType\">>,\n updateParams: UpdateParams<T> = {},\n): Update<T> {\n return {\n type: AnimationType.UPDATE,\n isKey: false,\n object,\n props,\n shortcut: null,\n ...updateParams,\n };\n}\n","import { SlideObject } from \"../types/SlideObject\";\nimport { Update } from \"../types/Update\";\n\nexport function Hide<T extends SlideObject>(object: T): Update<T> {\n return Update(object, { opacity: 0 } as Partial<T>);\n}\n","import { SlideObject } from \"../types/SlideObject\";\nimport { Update } from \"../types/Update\";\n\nexport function Show<T extends SlideObject>(object: T): Update<T> {\n return Update(object, { opacity: 1 } as Partial<T>);\n}\n","export const Anchor = {\n TOP_LEFT: \"TopLeft\",\n TOP: \"Top\",\n TOP_RIGHT: \"TopRight\",\n LEFT: \"Left\",\n CENTER: \"Center\",\n RIGHT: \"Right\",\n BOTTOM_LEFT: \"BottomLeft\",\n BOTTOM: \"Bottom\",\n BOTTOM_RIGHT: \"BottomRight\",\n} as const;\n\nexport type Anchor = (typeof Anchor)[keyof typeof Anchor];\n\nexport const DEFAULT_ANCHOR: Anchor = Anchor.TOP_LEFT;\n","export interface Color {\n /** Red channel, in [0, 255] */\n red: number;\n\n /** Green channel, in [0, 255] */\n green: number;\n\n /** Blue channel, in [0, 255] */\n blue: number;\n\n /** Alpha channel, in [0, 1] */\n alpha: number;\n}\n\nexport function Color(color: Partial<Color> | string): Color;\nexport function Color(red: number, green: number, blue: number, alpha?: number): Color;\nexport function Color(\n color: Partial<Color> | string | number,\n green: number = 0,\n blue: number = 0,\n alpha: number = 1,\n): Color {\n if (typeof color === \"string\") {\n const hexString = color.replace(\"#\", \"\");\n const hex = parseInt(hexString, 16);\n\n if (isNaN(hex)) {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n\n if (hexString.length === 6) {\n return {\n red: (hex >> 16) & 255,\n green: (hex >> 8) & 255,\n blue: hex & 255,\n alpha: 1,\n };\n } else if (hexString.length === 8) {\n return {\n red: (hex >> 24) & 255,\n green: (hex >> 16) & 255,\n blue: (hex >> 8) & 255,\n alpha: (hex & 255) / 255,\n };\n } else {\n console.warn(\"Invalid hex color format:\", color);\n return DEFAULT_COLOR;\n }\n } else if (typeof color === \"number\") {\n return {\n red: color,\n green: green ?? 0,\n blue: blue ?? 0,\n alpha: alpha ?? 1,\n };\n }\n\n return {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 1,\n ...color,\n };\n}\n\nColor.BLACK = Color(0, 0, 0);\nColor.BLUE = Color(0, 0, 255);\nColor.GREEN = Color(0, 255, 0);\nColor.RED = Color(255, 0, 0);\nColor.TRANSPARENT = Color(0, 0, 0, 0);\nColor.WHITE = Color(255, 255, 255);\n\nexport const DEFAULT_COLOR: Color = { red: 0, green: 0, blue: 0, alpha: 1 };\n","import { Anchor } from \"./Anchor\";\n\n/**\n * A \"Web Extra\" is additional HTML/JavaScript content added to a slide. This\n * allows embedded arbitrary web content on a slide. This content is not part of\n * the core slide content, and will not be produced by non-web renderers like\n * PDF/image renderers, but can be used to enhance web-based presentations.\n */\nexport interface SlideWebExtra {\n /** HTML element that will be added to the presentation. */\n readonly content: HTMLElement | null;\n\n /**\n * Setup function that will be called when the extra is mounted.\n * It can optionally return a cleanup function that will be called\n * when the extra is unmounted.\n */\n readonly setup: ((foreignObject: SVGForeignObjectElement) => void | (() => void)) | null;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function SlideWebExtra(props: Partial<SlideWebExtra> | null = null): SlideWebExtra {\n return {\n content: null,\n setup: null,\n anchor: Anchor.TOP_LEFT,\n height: 0,\n width: 0,\n x: 0,\n y: 0,\n ...props,\n };\n}\n","import { Color } from \"../../types/Color\";\n\n/**\n * Returns the alpha value for a color in [0, 1], given the color and the overall opacity of a shape.\n * Combines the color's alpha and the overall opacity.\n */\nexport function getAlphaForColor(color: Color, opacity: number | null = null): number {\n return color.alpha * (opacity ?? 1);\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getHexStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const hex = (red << 16) | (green << 8) | blue;\n const alphaHex = Math.round(getAlphaForColor(color, opacity) * 255);\n return `#${hex.toString(16).padStart(6, \"0\")}${alphaHex !== 255 ? alphaHex.toString(16).padStart(2, \"0\") : \"\"}`;\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { SlideWebExtra } from \"../types/SlideWebExtra\";\nimport { getHexStringForColor } from \"../utils/color/getHexStringForColor\";\n\nexport interface IFrame {\n readonly url: string;\n readonly backgroundColor: Color;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly pointerEvents: string;\n readonly scale: number;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function IFrame(props: Partial<IFrame> | null = null): SlideWebExtra {\n const {\n url = \"https://wikipedia.org/\",\n backgroundColor = Color.TRANSPARENT,\n borderColor = DEFAULT_COLOR,\n borderWidth = 0,\n pointerEvents = \"auto\",\n scale = 1,\n anchor = DEFAULT_ANCHOR,\n height = 1000,\n width = 1000,\n x = 0,\n y = 0,\n } = props || {};\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n iframe.style.backgroundColor = getHexStringForColor(backgroundColor);\n iframe.style.border =\n borderWidth > 0 ? `${borderWidth}px solid ${getHexStringForColor(borderColor)}` : \"none\";\n iframe.style.pointerEvents = pointerEvents;\n\n const scaledSize = (100 / scale).toFixed(3) + \"%\";\n iframe.style.height =\n borderWidth === 0 ? scaledSize : `calc(${scaledSize} - ${borderWidth * 2}px)`;\n iframe.style.width =\n borderWidth === 0 ? scaledSize : `calc(${scaledSize} - ${borderWidth * 2}px)`;\n iframe.style.transform = `scale(${scale})`;\n iframe.style.transformOrigin = \"top left\";\n\n return SlideWebExtra({\n content: iframe,\n anchor,\n height,\n width,\n x,\n y,\n });\n}\n","export const Alignment = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n} as const;\n\nexport type Alignment = (typeof Alignment)[keyof typeof Alignment];\n\nexport const DEFAULT_ALIGNMENT: Alignment = Alignment.LEFT;\n","export function assertNever(value: never, message?: string): never {\n throw new Error((message ?? \"Unexpected value\") + \": \" + value);\n}\n","import { Alignment } from \"../types/Alignment\";\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { SlideWebExtra } from \"../types/SlideWebExtra\";\nimport { assertNever } from \"../utils/core/assertNever\";\n\nexport interface ScreenCapture {\n readonly alignment: Alignment;\n readonly scale: number;\n\n readonly anchor: Anchor;\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function ScreenCapture(props: Partial<ScreenCapture> | null = null): SlideWebExtra {\n const {\n alignment = Alignment.LEFT,\n scale = 1,\n anchor = DEFAULT_ANCHOR,\n height = 1000,\n width = 1000,\n x = 0,\n y = 0,\n } = props || {};\n\n function setup(foreignObject: SVGForeignObjectElement) {\n // Create video element\n const video = document.createElement(\"video\");\n video.autoplay = true;\n video.style.transform = `scale(${scale})`;\n\n switch (alignment) {\n case Alignment.LEFT:\n video.style.transformOrigin = \"top left\";\n break;\n case Alignment.CENTER:\n video.style.transformOrigin = \"top center\";\n break;\n case Alignment.RIGHT:\n video.style.transformOrigin = \"top right\";\n break;\n default:\n assertNever(alignment);\n }\n foreignObject.appendChild(video);\n\n // Start screen sharing session\n const displayMediaOptions = {\n video: {\n displaySurface: \"window\",\n },\n audio: false,\n };\n\n navigator.mediaDevices\n .getDisplayMedia(displayMediaOptions)\n .then((stream) => {\n const videoTrack = stream.getVideoTracks()[0];\n\n // If user ends screen sharing, hide the video.\n if (videoTrack !== undefined) {\n videoTrack.onended = function () {\n video.style.display = \"none\";\n };\n }\n\n video.srcObject = stream;\n video.play();\n })\n .catch((error) => {\n console.error(\"Could not start screen capture -\", error);\n });\n\n // Stop screen sharing on cleanup\n return () => {\n const tracks = (video.srcObject as MediaStream).getTracks();\n tracks.forEach((track) => track.stop());\n video.style.display = \"none\";\n video.srcObject = null;\n };\n }\n\n return SlideWebExtra({\n content: null,\n setup,\n anchor,\n height,\n width,\n x,\n y,\n });\n}\n","export const ObjectType = {\n ARROW: \"Arrow\",\n CIRCLE: \"Circle\",\n GROUP: \"Group\",\n IMAGE: \"Image\",\n LINE: \"Line\",\n MASK: \"Mask\",\n PATH: \"Path\",\n POLYGON: \"Polygon\",\n RECTANGLE: \"Rectangle\",\n SLIDE_OBJECT: \"SlideObject\",\n SVG: \"SVG\",\n TEXT: \"Text\",\n} as const;\n\nexport type ObjectType = (typeof ObjectType)[keyof typeof ObjectType];\n","import { ObjectType } from \"./ObjectType\";\n\nexport interface SlideObject {\n readonly objectType: string;\n readonly opacity: number;\n}\n\nexport function SlideObject<T>(props: Partial<SlideObject> & T): SlideObject & T {\n return {\n objectType: ObjectType.SLIDE_OBJECT,\n opacity: 1,\n ...props,\n };\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Arrow extends SlideObject {\n readonly objectType: typeof ObjectType.ARROW;\n readonly arrowheadSize: number;\n readonly color: Color;\n readonly drawn: number;\n readonly endX: number;\n readonly endY: number;\n readonly isArrowheadDoubled: boolean;\n readonly isArrowheadFilled: boolean;\n readonly isDrawnFromCenter: boolean;\n readonly startX: number;\n readonly startY: number;\n readonly width: number;\n}\n\nexport function Arrow(props: Partial<Arrow> | null = null): Arrow {\n const { arrowheadSize: inputArrowheadSize, width = 10, ...rest } = props || {};\n const arrowheadSize = inputArrowheadSize ?? width * 4;\n\n return SlideObject({\n objectType: ObjectType.ARROW,\n arrowheadSize,\n color: DEFAULT_COLOR,\n drawn: 1,\n endX: 100,\n endY: 100,\n isArrowheadDoubled: false,\n isArrowheadFilled: false,\n isDrawnFromCenter: false,\n startX: 0,\n startY: 0,\n width,\n ...rest,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nconst DEFAULT_CIRCLE_RADIUS = 50;\n\nexport interface Circle extends SlideObject {\n readonly objectType: typeof ObjectType.CIRCLE;\n readonly anchor: Anchor;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly fill: Color;\n readonly radius: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Circle(props: Partial<Circle> | null = null): Circle {\n return SlideObject({\n objectType: ObjectType.CIRCLE,\n anchor: DEFAULT_ANCHOR,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n fill: DEFAULT_COLOR,\n radius: DEFAULT_CIRCLE_RADIUS,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Group extends SlideObject {\n readonly objectType: typeof ObjectType.GROUP;\n readonly anchor: Anchor;\n readonly height: number;\n readonly objects: SlideObject[];\n readonly rotateOriginPreviewSize: number;\n readonly rotateOriginX: number;\n readonly rotateOriginY: number;\n readonly rotation: number;\n readonly skewOriginPreviewSize: number;\n readonly skewOriginX: number;\n readonly skewOriginY: number;\n readonly skewX: number;\n readonly skewY: number;\n readonly previewColor: Color | null;\n readonly scale: number;\n readonly scaleX: number;\n readonly scaleY: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Group(\n objects: SlideObject[],\n props: Partial<Omit<Group, \"objects\">> | null = null,\n): Group {\n return SlideObject({\n objectType: ObjectType.GROUP,\n anchor: DEFAULT_ANCHOR,\n height: 0,\n objects,\n previewColor: null,\n rotateOriginPreviewSize: 0,\n rotateOriginX: 0,\n rotateOriginY: 0,\n rotation: 0,\n skewOriginPreviewSize: 0,\n skewOriginX: 0,\n skewOriginY: 0,\n skewX: 0,\n skewY: 0,\n scale: 1,\n scaleX: 1,\n scaleY: 1,\n width: 0,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { Group } from \"./Group\";\n\nexport interface GridProps {\n readonly anchor: Anchor;\n\n /** Number of columns in the grid. */\n readonly cols: number;\n\n /** Pixels of horizontal space between objects in the grid. */\n readonly gapX: number;\n\n /** Pixels of vertical space between objects in the grid. */\n readonly gapY: number;\n\n /** Additional properties to apply to the grid's backing Group. */\n readonly groupProps: Partial<Group>;\n\n /**\n * Height, in pixels, of each object in the grid.\n *\n * If height is variable, a function can be provided that maps the row/col indices to a height.\n */\n readonly height: number | ((row: number, col: number) => number);\n\n /** Function mapping row/col indices to the object in the grid at that index. */\n readonly objects: (row: number, col: number) => SlideObject | null;\n\n /** Number of rows in the grid. */\n readonly rows: number;\n\n /**\n * Width, in pixels, of each object in the grid.\n *\n * If width is variable, a function can be provided that maps the row/col indices to a width.\n */\n readonly width: number | ((row: number, col: number) => number);\n\n readonly x: number;\n readonly y: number;\n}\n\ninterface Return {\n readonly grid: Group;\n readonly objects: (SlideObject | null)[][];\n}\n\nexport function Grid(props: Partial<GridProps>): Return {\n const {\n anchor = DEFAULT_ANCHOR,\n cols = 1,\n rows = 1,\n gapX = 0,\n gapY = 0,\n groupProps = {},\n width = 0,\n height = 0,\n x: originX = 0,\n y: originY = 0,\n objects = () => null,\n } = props;\n\n const gridObjects: (SlideObject | null)[][] = [];\n const groupObjects: SlideObject[] = [];\n\n let x = 0;\n let y = 0;\n for (let row = 0; row < rows; row++) {\n const rowObjects: (SlideObject | null)[] = [];\n x = 0;\n let rowHeight = 0;\n\n for (let col = 0; col < cols; col++) {\n const object = objects(row, col);\n const objectWidth = typeof width === \"function\" ? width(row, col) : width;\n const objectHeight = typeof height === \"function\" ? height(row, col) : height;\n\n rowObjects.push(object);\n if (object != null) {\n groupObjects.push(\n Group([object], {\n x,\n y,\n }),\n );\n }\n\n x += objectWidth + gapX;\n rowHeight = Math.max(rowHeight, objectHeight);\n }\n gridObjects.push(rowObjects);\n y += rowHeight + gapY;\n }\n\n const grid = Group(groupObjects, {\n x: originX,\n y: originY,\n height: y - gapY,\n width: x - gapX,\n anchor,\n ...groupProps,\n });\n\n return {\n grid,\n objects: gridObjects,\n };\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Image extends SlideObject {\n readonly objectType: typeof ObjectType.IMAGE;\n readonly anchor: Anchor;\n readonly height: number;\n readonly imageId: string;\n readonly rounding: number;\n readonly smooth: boolean;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Image(props: Partial<Image> | null = null): Image {\n return SlideObject({\n objectType: ObjectType.IMAGE,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n imageId: \"\",\n rounding: 0,\n smooth: true,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Line extends SlideObject {\n readonly objectType: typeof ObjectType.LINE;\n readonly color: Color;\n readonly drawn: number;\n readonly endX: number;\n readonly endY: number;\n readonly isDrawnFromCenter: boolean;\n readonly isRounded: boolean;\n readonly startX: number;\n readonly startY: number;\n readonly width: number;\n}\n\nexport function Line(props: Partial<Line> | null = null): Line {\n return SlideObject({\n objectType: ObjectType.LINE,\n color: DEFAULT_COLOR,\n drawn: 1,\n endX: 100,\n endY: 100,\n isDrawnFromCenter: false,\n isRounded: false,\n startX: 0,\n startY: 0,\n width: 10,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Mask extends SlideObject {\n readonly objectType: typeof ObjectType.MASK;\n readonly anchor: Anchor;\n readonly height: number;\n readonly objects: SlideObject[];\n\n /** A debugging flag that allows previewing the mask shape. */\n readonly preview: boolean;\n\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Mask(\n objects: SlideObject[],\n props: Partial<Omit<Mask, \"objects\">> | null = null,\n): Mask {\n return SlideObject({\n objectType: ObjectType.MASK,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n objects,\n preview: false,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","// http://geoexamples.com/path-properties/ v2.0.0 Copyright 2025 Roger Veciana i Rovira\nvar t=Object.defineProperty,e=(e,h)=>t(e,\"name\",{value:h,configurable:!0}),h={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},n=/([astvzqmhlc])([^astvzqmhlc]*)/gi,i=/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi,s=e(t=>{const e=(t&&t.length>0?t:\"M0,0\").match(n);if(!e)throw new Error(`No path elements found in string ${t}`);return e.reduce((t,e)=>{let n=e.charAt(0),i=n.toLowerCase(),s=g(e.substring(1));if(\"m\"===i&&s.length>2&&(t.push([n,...s.splice(0,2)]),i=\"l\",n=\"m\"===n?\"l\":\"L\"),\"a\"===i.toLowerCase()&&(5===s.length||6===s.length)){const t=e.substring(1).trim().split(\" \");s=[Number(t[0]),Number(t[1]),Number(t[2]),Number(t[3].charAt(0)),Number(t[3].charAt(1)),Number(t[3].substring(2)),Number(t[4])]}for(;s.length>=0;){if(s.length===h[i]){t.push([n,...s.splice(0,h[i])]);break}if(s.length<h[i])throw new Error(`Malformed path data: \"${n}\" must have ${h[i]} elements and has ${s.length}: ${e}`);t.push([n,...s.splice(0,h[i])])}return t},[])},\"default\"),g=e(t=>{const e=t.match(i);return e?e.map(Number):[]},\"parseValues\"),a=class{static{e(this,\"LinearPosition\")}x0;x1;y0;y1;constructor(t,e,h,n){this.x0=t,this.x1=e,this.y0=h,this.y1=n}getTotalLength=e(()=>Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2)),\"getTotalLength\");getPointAtLength=e(t=>{let e=t/Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2));e=Number.isNaN(e)?1:e;const h=(this.x1-this.x0)*e,n=(this.y1-this.y0)*e;return{x:this.x0+h,y:this.y0+n}},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=Math.sqrt((this.x1-this.x0)*(this.x1-this.x0)+(this.y1-this.y0)*(this.y1-this.y0));return{x:(this.x1-this.x0)/e,y:(this.y1-this.y0)/e}},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getPointAtLength(t),h=this.getTangentAtLength(t);return{x:e.x,y:e.y,tangentX:h.x,tangentY:h.y}},\"getPropertiesAtLength\")},r=class{static{e(this,\"Arc\")}x0;y0;rx;ry;xAxisRotate;LargeArcFlag;SweepFlag;x1;y1;length;constructor(t,e,h,n,i,s,g,a,r){this.x0=t,this.y0=e,this.rx=h,this.ry=n,this.xAxisRotate=i,this.LargeArcFlag=s,this.SweepFlag=g,this.x1=a,this.y1=r;const c=l(300,function(l){return o({x:t,y:e},h,n,i,s,g,{x:a,y:r},l)});this.length=c.arcLength}getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=o({x:this.x0,y:this.y0},this.rx,this.ry,this.xAxisRotate,this.LargeArcFlag,this.SweepFlag,{x:this.x1,y:this.y1},t/this.length);return{x:e.x,y:e.y}},\"getPointAtLength\");getTangentAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=.05,h=this.getPointAtLength(t);let n;t<0?t=0:t>this.length&&(t=this.length),n=t<this.length-e?this.getPointAtLength(t+e):this.getPointAtLength(t-e);const i=n.x-h.x,s=n.y-h.y,g=Math.sqrt(i*i+s*s);return t<this.length-e?{x:-i/g,y:-s/g}:{x:i/g,y:s/g}},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getTangentAtLength(t),h=this.getPointAtLength(t);return{x:h.x,y:h.y,tangentX:e.x,tangentY:e.y}},\"getPropertiesAtLength\")},o=e((t,e,h,n,i,s,g,a)=>{e=Math.abs(e),h=Math.abs(h),n=c(n,360);const r=u(n);if(t.x===g.x&&t.y===g.y)return{x:t.x,y:t.y,ellipticalArcAngle:0};if(0===e||0===h)return{x:0,y:0,ellipticalArcAngle:0};const o=(t.x-g.x)/2,l=(t.y-g.y)/2,x={x:Math.cos(r)*o+Math.sin(r)*l,y:-Math.sin(r)*o+Math.cos(r)*l},p=Math.pow(x.x,2)/Math.pow(e,2)+Math.pow(x.y,2)/Math.pow(h,2);p>1&&(e=Math.sqrt(p)*e,h=Math.sqrt(p)*h);let f=(Math.pow(e,2)*Math.pow(h,2)-Math.pow(e,2)*Math.pow(x.y,2)-Math.pow(h,2)*Math.pow(x.x,2))/(Math.pow(e,2)*Math.pow(x.y,2)+Math.pow(h,2)*Math.pow(x.x,2));f=f<0?0:f;const L=(i!==s?1:-1)*Math.sqrt(f),A=L*(e*x.y/h),M=L*(-h*x.x/e),w={x:Math.cos(r)*A-Math.sin(r)*M+(t.x+g.x)/2,y:Math.sin(r)*A+Math.cos(r)*M+(t.y+g.y)/2},P={x:(x.x-A)/e,y:(x.y-M)/h},T=y({x:1,y:0},P);let d=y(P,{x:(-x.x-A)/e,y:(-x.y-M)/h});!s&&d>0?d-=2*Math.PI:s&&d<0&&(d+=2*Math.PI),d%=2*Math.PI;const b=T+d*a,v=e*Math.cos(b),m=h*Math.sin(b);return{x:Math.cos(r)*v-Math.sin(r)*m+w.x,y:Math.sin(r)*v+Math.cos(r)*m+w.y,ellipticalArcStartAngle:T,ellipticalArcEndAngle:T+d,ellipticalArcAngle:b,ellipticalArcCenter:w,resultantRx:e,resultantRy:h}},\"pointOnEllipticalArc\"),l=e((t,e)=>{t=t??500;let h=0;const n=[],i=[];let s,g=e(0);for(let a=0;a<t;a++){const r=p(a*(1/t),0,1);s=e(r),h+=x(g,s),i.push([g,s]),n.push({t:r,arcLength:h}),g=s}return s=e(1),i.push([g,s]),h+=x(g,s),n.push({t:1,arcLength:h}),{arcLength:h,arcLengthMap:n,approximationLines:i}},\"approximateArcLengthOfCurve\"),c=e((t,e)=>(t%e+e)%e,\"mod\"),u=e(t=>t*(Math.PI/180),\"toRadians\"),x=e((t,e)=>Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),\"distance\"),p=e((t,e,h)=>Math.min(Math.max(t,e),h),\"clamp\"),y=e((t,e)=>{const h=t.x*e.x+t.y*e.y,n=Math.sqrt((Math.pow(t.x,2)+Math.pow(t.y,2))*(Math.pow(e.x,2)+Math.pow(e.y,2)));return(t.x*e.y-t.y*e.x<0?-1:1)*Math.acos(h/n)},\"angleBetween\"),f=[[],[],[-.5773502691896257,.5773502691896258],[0,-.7745966692414833,.7745966692414833],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],L=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],A=[[1],[1,1],[1,2,1],[1,3,3,1]],M=e((t,e,h)=>({x:(1-h)*(1-h)*(1-h)*t[0]+3*(1-h)*(1-h)*h*t[1]+3*(1-h)*h*h*t[2]+h*h*h*t[3],y:(1-h)*(1-h)*(1-h)*e[0]+3*(1-h)*(1-h)*h*e[1]+3*(1-h)*h*h*e[2]+h*h*h*e[3]}),\"cubicPoint\"),w=e((t,e,h)=>T([3*(t[1]-t[0]),3*(t[2]-t[1]),3*(t[3]-t[2])],[3*(e[1]-e[0]),3*(e[2]-e[1]),3*(e[3]-e[2])],h),\"cubicDerivative\"),P=e((t,e,h)=>{let n,i;const s=h/2;n=0;for(let h=0;h<20;h++)i=s*f[20][h]+s,n+=L[20][h]*v(t,e,i);return s*n},\"getCubicArcLength\"),T=e((t,e,h)=>({x:(1-h)*(1-h)*t[0]+2*(1-h)*h*t[1]+h*h*t[2],y:(1-h)*(1-h)*e[0]+2*(1-h)*h*e[1]+h*h*e[2]}),\"quadraticPoint\"),d=e((t,e,h)=>{void 0===h&&(h=1);const n=t[0]-2*t[1]+t[2],i=e[0]-2*e[1]+e[2],s=2*t[1]-2*t[0],g=2*e[1]-2*e[0],a=4*(n*n+i*i),r=4*(n*s+i*g),o=s*s+g*g;if(0===a)return h*Math.sqrt(Math.pow(t[2]-t[0],2)+Math.pow(e[2]-e[0],2));const l=r/(2*a),c=h+l,u=o/a-l*l,x=c*c+u>0?Math.sqrt(c*c+u):0,p=l*l+u>0?Math.sqrt(l*l+u):0,y=l+Math.sqrt(l*l+u)!==0&&(c+x)/(l+p)!==0?u*Math.log(Math.abs((c+x)/(l+p))):0;return Math.sqrt(a)/2*(c*x-l*p+y)},\"getQuadraticArcLength\"),b=e((t,e,h)=>({x:2*(1-h)*(t[1]-t[0])+2*h*(t[2]-t[1]),y:2*(1-h)*(e[1]-e[0])+2*h*(e[2]-e[1])}),\"quadraticDerivative\");function v(t,e,h){const n=m(1,h,t),i=m(1,h,e),s=n*n+i*i;return Math.sqrt(s)}e(v,\"BFunc\");var m=e((t,e,h)=>{const n=h.length-1;let i,s;if(0===n)return 0;if(0===t){s=0;for(let t=0;t<=n;t++)s+=A[n][t]*Math.pow(1-e,n-t)*Math.pow(e,t)*h[t];return s}i=new Array(n);for(let t=0;t<n;t++)i[t]=n*(h[t+1]-h[t]);return m(t-1,e,i)},\"getDerivative\"),q=e((t,e,h)=>{let n=1,i=t/e,s=(t-h(i))/e,g=0;for(;n>.001;){const a=h(i+s),r=Math.abs(t-a)/e;if(r<n)n=r,i+=s;else{const g=h(i-s),a=Math.abs(t-g)/e;a<n?(n=a,i-=s):s/=2}if(g++,g>500)break}return i},\"t2length\"),_=class{static{e(this,\"Bezier\")}a;b;c;d;length;getArcLength;getPoint;getDerivative;constructor(t,e,h,n,i,s,g,a){this.a={x:t,y:e},this.b={x:h,y:n},this.c={x:i,y:s},void 0!==g&&void 0!==a?(this.getArcLength=P,this.getPoint=M,this.getDerivative=w,this.d={x:g,y:a}):(this.getArcLength=d,this.getPoint=T,this.getDerivative=b,this.d={x:0,y:0}),this.length=this.getArcLength([this.a.x,this.b.x,this.c.x,this.d.x],[this.a.y,this.b.y,this.c.y,this.d.y],1)}getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t));return this.getPoint(e,h,n)},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t)),i=this.getDerivative(e,h,n),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;return g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0},g},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],h=[this.a.y,this.b.y,this.c.y,this.d.y],n=q(t,this.length,t=>this.getArcLength(e,h,t)),i=this.getDerivative(e,h,n),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0};const a=this.getPoint(e,h,n);return{x:a.x,y:a.y,tangentX:g.x,tangentY:g.y}},\"getPropertiesAtLength\");getC=e(()=>this.c,\"getC\");getD=e(()=>this.d,\"getD\")},C=class{static{e(this,\"SVGPathProperties\")}length=0;partial_lengths=[];functions=[];initial_point=null;constructor(t){const e=Array.isArray(t)?t:s(t);let h,n=[0,0],i=[0,0],g=[0,0];for(let t=0;t<e.length;t++){if(\"M\"===e[t][0])n=[e[t][1],e[t][2]],g=[n[0],n[1]],this.functions.push(null),0===t&&(this.initial_point={x:e[t][1],y:e[t][2]});else if(\"m\"===e[t][0])n=[e[t][1]+n[0],e[t][2]+n[1]],g=[n[0],n[1]],this.functions.push(null);else if(\"L\"===e[t][0])this.length+=Math.sqrt(Math.pow(n[0]-e[t][1],2)+Math.pow(n[1]-e[t][2],2)),this.functions.push(new a(n[0],e[t][1],n[1],e[t][2])),n=[e[t][1],e[t][2]];else if(\"l\"===e[t][0])this.length+=Math.sqrt(Math.pow(e[t][1],2)+Math.pow(e[t][2],2)),this.functions.push(new a(n[0],e[t][1]+n[0],n[1],e[t][2]+n[1])),n=[e[t][1]+n[0],e[t][2]+n[1]];else if(\"H\"===e[t][0])this.length+=Math.abs(n[0]-e[t][1]),this.functions.push(new a(n[0],e[t][1],n[1],n[1])),n[0]=e[t][1];else if(\"h\"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new a(n[0],n[0]+e[t][1],n[1],n[1])),n[0]=e[t][1]+n[0];else if(\"V\"===e[t][0])this.length+=Math.abs(n[1]-e[t][1]),this.functions.push(new a(n[0],n[0],n[1],e[t][1])),n[1]=e[t][1];else if(\"v\"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new a(n[0],n[0],n[1],n[1]+e[t][1])),n[1]=e[t][1]+n[1];else if(\"z\"===e[t][0]||\"Z\"===e[t][0])this.length+=Math.sqrt(Math.pow(g[0]-n[0],2)+Math.pow(g[1]-n[1],2)),this.functions.push(new a(n[0],g[0],n[1],g[1])),n=[g[0],g[1]];else if(\"C\"===e[t][0])h=new _(n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4],e[t][5],e[t][6]),this.length+=h.getTotalLength(),n=[e[t][5],e[t][6]],this.functions.push(h);else if(\"c\"===e[t][0])h=new _(n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4],n[0]+e[t][5],n[1]+e[t][6]),h.getTotalLength()>0?(this.length+=h.getTotalLength(),this.functions.push(h),n=[e[t][5]+n[0],e[t][6]+n[1]]):this.functions.push(new a(n[0],n[0],n[1],n[1]));else if(\"S\"===e[t][0]){if(t>0&&[\"C\",\"c\",\"S\",\"s\"].indexOf(e[t-1][0])>-1){if(h){const i=h.getC();h=new _(n[0],n[1],2*n[0]-i.x,2*n[1]-i.y,e[t][1],e[t][2],e[t][3],e[t][4])}}else h=new _(n[0],n[1],n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4]);h&&(this.length+=h.getTotalLength(),n=[e[t][3],e[t][4]],this.functions.push(h))}else if(\"s\"===e[t][0]){if(t>0&&[\"C\",\"c\",\"S\",\"s\"].indexOf(e[t-1][0])>-1){if(h){const i=h.getC(),s=h.getD();h=new _(n[0],n[1],n[0]+s.x-i.x,n[1]+s.y-i.y,n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4])}}else h=new _(n[0],n[1],n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4]);h&&(this.length+=h.getTotalLength(),n=[e[t][3]+n[0],e[t][4]+n[1]],this.functions.push(h))}else if(\"Q\"===e[t][0]){if(n[0]===e[t][1]&&n[1]===e[t][2]){const h=new a(e[t][1],e[t][3],e[t][2],e[t][4]);this.length+=h.getTotalLength(),this.functions.push(h)}else h=new _(n[0],n[1],e[t][1],e[t][2],e[t][3],e[t][4],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);n=[e[t][3],e[t][4]],i=[e[t][1],e[t][2]]}else if(\"q\"===e[t][0]){if(0!==e[t][1]||0!==e[t][2])h=new _(n[0],n[1],n[0]+e[t][1],n[1]+e[t][2],n[0]+e[t][3],n[1]+e[t][4],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);else{const h=new a(n[0]+e[t][1],n[0]+e[t][3],n[1]+e[t][2],n[1]+e[t][4]);this.length+=h.getTotalLength(),this.functions.push(h)}i=[n[0]+e[t][1],n[1]+e[t][2]],n=[e[t][3]+n[0],e[t][4]+n[1]]}else if(\"T\"===e[t][0]){if(t>0&&[\"Q\",\"q\",\"T\",\"t\"].indexOf(e[t-1][0])>-1)h=new _(n[0],n[1],2*n[0]-i[0],2*n[1]-i[1],e[t][1],e[t][2],void 0,void 0),this.functions.push(h),this.length+=h.getTotalLength();else{const h=new a(n[0],e[t][1],n[1],e[t][2]);this.functions.push(h),this.length+=h.getTotalLength()}i=[2*n[0]-i[0],2*n[1]-i[1]],n=[e[t][1],e[t][2]]}else if(\"t\"===e[t][0]){if(t>0&&[\"Q\",\"q\",\"T\",\"t\"].indexOf(e[t-1][0])>-1)h=new _(n[0],n[1],2*n[0]-i[0],2*n[1]-i[1],n[0]+e[t][1],n[1]+e[t][2],void 0,void 0),this.length+=h.getTotalLength(),this.functions.push(h);else{const h=new a(n[0],n[0]+e[t][1],n[1],n[1]+e[t][2]);this.length+=h.getTotalLength(),this.functions.push(h)}i=[2*n[0]-i[0],2*n[1]-i[1]],n=[e[t][1]+n[0],e[t][2]+n[1]]}else if(\"A\"===e[t][0]){const h=new r(n[0],n[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],e[t][6],e[t][7]);this.length+=h.getTotalLength(),n=[e[t][6],e[t][7]],this.functions.push(h)}else if(\"a\"===e[t][0]){const h=new r(n[0],n[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],n[0]+e[t][6],n[1]+e[t][7]);this.length+=h.getTotalLength(),n=[n[0]+e[t][6],n[1]+e[t][7]],this.functions.push(h)}this.partial_lengths.push(this.length)}}getPartAtLength=e(t=>{t<0?t=0:t>this.length&&(t=this.length);let e=this.partial_lengths.length-1;for(;this.partial_lengths[e]>=t&&e>0;)e--;return e++,{fraction:t-this.partial_lengths[e-1],i:e}},\"getPartAtLength\");getTotalLength=e(()=>this.length,\"getTotalLength\");getPointAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getPointAtLength(e.fraction);if(this.initial_point)return this.initial_point;throw new Error(\"Wrong function at this part.\")},\"getPointAtLength\");getTangentAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getTangentAtLength(e.fraction);if(this.initial_point)return{x:0,y:0};throw new Error(\"Wrong function at this part.\")},\"getTangentAtLength\");getPropertiesAtLength=e(t=>{const e=this.getPartAtLength(t),h=this.functions[e.i];if(h)return h.getPropertiesAtLength(e.fraction);if(this.initial_point)return{x:this.initial_point.x,y:this.initial_point.y,tangentX:0,tangentY:0};throw new Error(\"Wrong function at this part.\")},\"getPropertiesAtLength\");getParts=e(()=>{const t=[];for(let e=0;e<this.functions.length;e++)if(null!==this.functions[e]){this.functions[e]=this.functions[e];const h={start:this.functions[e].getPointAtLength(0),end:this.functions[e].getPointAtLength(this.partial_lengths[e]-this.partial_lengths[e-1]),length:this.partial_lengths[e]-this.partial_lengths[e-1],getPointAtLength:this.functions[e].getPointAtLength,getTangentAtLength:this.functions[e].getTangentAtLength,getPropertiesAtLength:this.functions[e].getPropertiesAtLength};t.push(h)}return t},\"getParts\")},N=class{static{e(this,\"_svgPathProperties\")}inst;constructor(t){if(this.inst=new C(t),!(this instanceof N))return new N(t)}getTotalLength=e(()=>this.inst.getTotalLength(),\"getTotalLength\");getPointAtLength=e(t=>this.inst.getPointAtLength(t),\"getPointAtLength\");getTangentAtLength=e(t=>this.inst.getTangentAtLength(t),\"getTangentAtLength\");getPropertiesAtLength=e(t=>this.inst.getPropertiesAtLength(t),\"getPropertiesAtLength\");getParts=e(()=>this.inst.getParts(),\"getParts\")};export{N as svgPathProperties};","import { Color } from \"../../types/Color\";\n\nexport function Transparent(color: Color = Color.BLACK): Color {\n return { ...color, alpha: 0 };\n}\n","import { svgPathProperties } from \"svg-path-properties\";\n\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { Transparent } from \"../utils/color/Transparent\";\n\nexport interface Path extends SlideObject {\n readonly objectType: typeof ObjectType.PATH;\n readonly anchor: Anchor;\n readonly color: Color;\n readonly drawn: number;\n readonly fill: Color;\n readonly height: number;\n readonly isRounded: boolean;\n readonly path: string;\n readonly pathLength: number;\n readonly strokeWidth: number;\n readonly viewboxHeight: number;\n readonly viewboxWidth: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Path(props: Partial<Path> | null = null): Path {\n const { path, height = 100, width = 100, viewboxHeight, viewboxWidth, ...rest } = props ?? {};\n const pathDescription = path ?? \"M 0 0 L 100 100\";\n\n const pathProperties = new svgPathProperties(pathDescription);\n const pathLength = pathProperties.getTotalLength();\n\n return SlideObject({\n objectType: ObjectType.PATH,\n anchor: DEFAULT_ANCHOR,\n color: DEFAULT_COLOR,\n drawn: 1,\n fill: Transparent(),\n isRounded: false,\n height,\n path: pathDescription,\n pathLength,\n strokeWidth: 4,\n viewboxHeight: viewboxHeight ?? height,\n viewboxWidth: viewboxWidth ?? width,\n width,\n x: 0,\n y: 0,\n ...rest,\n });\n}\n","import { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { Position } from \"../types/Position\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Polygon extends SlideObject {\n readonly objectType: typeof ObjectType.POLYGON;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly points: readonly Position[];\n readonly fill: Color;\n}\n\nexport function Polygon(props: Partial<Polygon> | null = null): Polygon {\n return SlideObject({\n objectType: ObjectType.POLYGON,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n points: [\n { x: 0, y: 0 },\n { x: 100, y: 0 },\n { x: 100, y: 100 },\n ],\n fill: DEFAULT_COLOR,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Color, DEFAULT_COLOR } from \"../types/Color\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface Rectangle extends SlideObject {\n readonly objectType: typeof ObjectType.RECTANGLE;\n readonly anchor: Anchor;\n readonly borderColor: Color;\n readonly borderWidth: number;\n readonly drawn: number;\n readonly fill: Color;\n readonly height: number;\n readonly rounding: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Rectangle(props: Partial<Rectangle> | null = null): Rectangle {\n return SlideObject({\n objectType: ObjectType.RECTANGLE,\n anchor: DEFAULT_ANCHOR,\n borderColor: DEFAULT_COLOR,\n borderWidth: 0,\n drawn: 1,\n fill: DEFAULT_COLOR,\n height: 100,\n rounding: 0,\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","import { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\n\nexport interface SVG extends SlideObject {\n readonly objectType: typeof ObjectType.SVG;\n readonly anchor: Anchor;\n readonly height: number;\n readonly svg: string;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n}\n\nexport function SVG(props: Partial<SVG> | null = null): SVG {\n return SlideObject({\n objectType: ObjectType.SVG,\n anchor: DEFAULT_ANCHOR,\n height: 100,\n svg: \"\",\n width: 100,\n x: 0,\n y: 0,\n ...props,\n });\n}\n","/** Values for the CSS font-style property. */\nexport const FontStyle = {\n NORMAL: \"normal\",\n ITALIC: \"italic\",\n OBLIQUE: \"oblique\",\n} as const;\n\nexport type FontStyle = (typeof FontStyle)[keyof typeof FontStyle];\n\nexport const DEFAULT_FONT_STYLE: FontStyle = FontStyle.NORMAL;\n","export const FontWeight = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900,\n} as const;\n\nexport type FontWeight = (typeof FontWeight)[keyof typeof FontWeight];\n\nexport const DEFAULT_FONT_WEIGHT: FontWeight = FontWeight.NORMAL;\n","import { Color, DEFAULT_COLOR } from \"./Color\";\nimport { DEFAULT_FONT_STYLE, FontStyle } from \"./FontStyle\";\nimport { DEFAULT_FONT_WEIGHT, FontWeight } from \"./FontWeight\";\n\nexport interface TextStyle {\n readonly color: Color;\n readonly fontFamily: string;\n readonly fontSize: number;\n readonly fontStyle: FontStyle;\n readonly fontWeight: FontWeight | number;\n readonly ligatures: boolean;\n}\n\nexport const DEFAULT_TEXT_STYLE: TextStyle = {\n color: DEFAULT_COLOR,\n fontFamily: \"sans-serif\",\n fontSize: 100,\n fontStyle: DEFAULT_FONT_STYLE,\n fontWeight: DEFAULT_FONT_WEIGHT,\n ligatures: false,\n};\n","import { TextContent } from \"../../../types/TextContent\";\nimport { TextUnit } from \"../../../types/TextUnit\";\n\nexport function getTextUnitsFromTextContent(text: TextContent): TextUnit[][] {\n if (typeof text === \"string\") {\n return [[{ text }]];\n }\n return text.map((line) => line.map((unit) => (typeof unit === \"string\" ? { text: unit } : unit)));\n}\n","import { TextContent } from \"../../../types/TextContent\";\nimport { getTextUnitsFromTextContent } from \"./getTextUnitsFromTextContent\";\n\nexport function getTextContentLength(text: TextContent): number {\n const units = getTextUnitsFromTextContent(text);\n return units.reduce(\n (totalLength, line) =>\n totalLength + line.reduce((lineLength, unit) => lineLength + unit.text.length, 0),\n 0,\n );\n}\n","import { Alignment, DEFAULT_ALIGNMENT } from \"../types/Alignment\";\nimport { Anchor, DEFAULT_ANCHOR } from \"../types/Anchor\";\nimport { Animate, AnimationParams } from \"../types/Animate\";\nimport { ObjectType } from \"../types/ObjectType\";\nimport { SlideObject } from \"../types/SlideObject\";\nimport { TextContent } from \"../types/TextContent\";\nimport { DEFAULT_TEXT_STYLE, TextStyle } from \"../types/TextStyle\";\nimport { getTextContentLength } from \"../utils/objects/text/getTextContentLength\";\n\nexport interface Text extends SlideObject, TextStyle {\n readonly objectType: typeof ObjectType.TEXT;\n readonly alignment: Alignment;\n readonly anchor: Anchor;\n\n /**\n * The number of characters of the text to show.\n * If `null`, shows all text.\n */\n readonly length: number | null;\n\n readonly lineSpacing: number;\n readonly text: TextContent;\n readonly x: number;\n readonly y: number;\n}\n\nexport function Text(\n text: TextContent = \"\",\n props: Partial<Omit<Text, \"objectType\" | \"text\">> | null = null,\n): Text {\n return SlideObject({\n objectType: ObjectType.TEXT,\n alignment: DEFAULT_ALIGNMENT,\n anchor: DEFAULT_ANCHOR,\n length: null,\n lineSpacing: 1,\n text,\n x: 0,\n y: 0,\n ...DEFAULT_TEXT_STYLE,\n ...props,\n });\n}\n\nText.writeOn = (text: Text, animationParams: AnimationParams<Text> = {}) =>\n Animate(\n text,\n {\n length: getTextContentLength(text.text),\n },\n animationParams,\n );\n","import { Presentation } from \"../types/Presentation\";\nimport { Slide } from \"../types/Slide\";\n\nlet navigatorWindow: Window | null = null;\n\ninterface Args {\n readonly presentation: Presentation;\n readonly onNavigateToSlide: (slideIndex: number) => void;\n}\n\nexport function openNavigator({ presentation, onNavigateToSlide }: Args) {\n if (navigatorWindow !== null && !navigatorWindow.closed) {\n navigatorWindow.focus();\n return;\n }\n\n navigatorWindow = window.open(\"\", \"Navigator\", \"width=300,height=500,left=20,top=50\");\n if (navigatorWindow === null) {\n console.error(\"Failed to open navigator window.\");\n return;\n }\n\n const navigatorElement = createNavigatorElement(presentation, onNavigateToSlide);\n\n navigatorWindow.document.title = presentation.title;\n navigatorWindow.document.body.appendChild(navigatorElement);\n\n navigatorWindow.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" || event.key === \"`\") {\n navigatorWindow?.close();\n navigatorWindow = null;\n }\n });\n}\n\nexport function createNavigatorElement(\n presentation: Presentation,\n onNavigateToSlide: (slideIndex: number) => void,\n): HTMLDivElement {\n const navigatorElement = document.createElement(\"div\");\n navigatorElement.style.fontFamily = \"Arial, sans-serif\";\n\n presentation.slides.forEach((slide, index) => {\n const slideElement = createSlideElement(slide, index);\n slideElement.style.cursor = \"pointer\";\n slideElement.addEventListener(\"click\", (event) => {\n // If shift key is pressed, close window\n if (event.shiftKey) {\n navigatorWindow?.close();\n }\n onNavigateToSlide(index);\n });\n navigatorElement.appendChild(slideElement);\n });\n\n return navigatorElement;\n}\n\nfunction createSlideElement(slide: Slide, slideIndex: number): HTMLDivElement {\n const slideElement = document.createElement(\"div\");\n slideElement.style.marginBottom = \"8px\";\n slideElement.style.padding = \"8px\";\n slideElement.style.backgroundColor = \"#eceed7\";\n slideElement.style.borderRadius = \"4px\";\n slideElement.style.userSelect = \"none\";\n\n slideElement.innerHTML =\n `${slideIndex + 1}: ` + (slide.title.length > 0 ? slide.title : `Slide ${slideIndex + 1}`);\n\n return slideElement;\n}\n","export interface Size {\n readonly height: number;\n readonly width: number;\n}\n\nexport function Size(props: Partial<Size> | null = null): Size {\n return {\n height: 0,\n width: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_SIZE: Size = Size({ width: 0, height: 0 });\n","import { Color } from \"./Color\";\nimport { Resources } from \"./Resources\";\nimport { Size } from \"./Size\";\nimport { Slide } from \"./Slide\";\n\nexport interface Presentation {\n /** The background color of the presentation. */\n readonly backgroundColor: Color;\n\n /** The slides to present as part of the presentation. */\n readonly slides: Slide[];\n\n /** The title of the presentation. */\n readonly title: string;\n\n /** The resources used in the presentation. */\n readonly resources: Resources;\n\n /** The dimensions of the presentation's viewport. */\n readonly size: Size;\n}\n\nexport function Presentation(props: Partial<Presentation> | null = null): Presentation {\n return {\n backgroundColor: Color.WHITE,\n slides: [],\n title: \"Presentation\",\n size: Size({ width: 3840, height: 2160 }),\n resources: {\n images: {},\n },\n ...props,\n };\n}\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getSlideAnimationDuration(slideAnimation: SlideAnimation): number {\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n let startTime = 0;\n let duration = 0;\n\n for (const animation of animations) {\n switch (animation.type) {\n case AnimationType.PAUSE:\n startTime += animation.duration;\n break;\n case AnimationType.ANIMATE:\n duration = Math.max(duration, startTime + animation.delay + animation.duration);\n if (animation.block) {\n startTime += animation.delay + animation.duration;\n }\n break;\n case AnimationType.UPDATE:\n // No-op, instantaneous update.\n break;\n default:\n assertNever(animation);\n }\n }\n\n return duration;\n}\n","import { Color } from \"../../types/Color\";\nimport { getAlphaForColor } from \"./getAlphaForColor\";\n\nexport function getRgbStringForColor(color: Color, opacity: number | null = null): string {\n const { red, green, blue } = color;\n const alpha = getAlphaForColor(color, opacity);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}\n","export function isFullBodyPresentation(element: HTMLElement): boolean {\n return element === document.body;\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { isFullBodyPresentation } from \"./isFullBodyPresentation\";\n\nexport function createPresentationContainer(\n presentation: Presentation,\n root: HTMLElement,\n): HTMLDivElement {\n const container = document.createElement(\"div\");\n container.style.width = \"100%\";\n container.style.aspectRatio = `${presentation.size.width} / ${presentation.size.height}`;\n\n // Set container to be vertically centered.\n container.style.position = \"relative\";\n container.style.top = \"50%\";\n container.style.transform = \"translateY(-50%)\";\n\n // Set container to be horizontally centered.\n container.style.marginLeft = \"auto\";\n container.style.marginRight = \"auto\";\n\n if (isFullBodyPresentation(root)) {\n // Don't allow scrolling of container\n container.style.overflowY = \"clip\";\n\n // Set document title to title of presentation.\n document.title = presentation.title;\n\n // Set root element styles.\n document.documentElement.style.height = \"100%\";\n\n // Set body styles.\n document.body.style.margin = \"0\";\n document.body.style.height = \"100%\";\n document.body.style.width = \"100%\";\n document.body.style.backgroundColor = \"#000000\";\n\n // Ensure style properties change to maintain aspect ratio fit.\n const targetAspectRatio = presentation.size.height / presentation.size.width;\n updateContainerSize(container, targetAspectRatio);\n\n window\n .matchMedia(`(min-aspect-ratio: ${presentation.size.width} / ${presentation.size.height})`)\n .addEventListener(\"change\", () => updateContainerSize(container, targetAspectRatio));\n }\n\n return container;\n}\n\nfunction updateContainerSize(container: HTMLElement, targetAspectRatio: number) {\n if (window.innerHeight / window.innerWidth > targetAspectRatio) {\n container.style.width = \"100%\";\n container.style.height = \"auto\";\n } else {\n container.style.width = \"auto\";\n container.style.height = \"100%\";\n }\n}\n","import { Color } from \"../../types/Color\";\nimport { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateColor: Interpolator<Color> = {\n check: (value: unknown): value is Color => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Color).red === \"number\" &&\n typeof (value as Color).green === \"number\" &&\n typeof (value as Color).blue === \"number\" &&\n typeof (value as Color).alpha === \"number\"\n );\n },\n interpolate: (from: Color, to: Color, proportion: number): Color => {\n return {\n red: Math.round(from.red + (to.red - from.red) * proportion),\n green: Math.round(from.green + (to.green - from.green) * proportion),\n blue: Math.round(from.blue + (to.blue - from.blue) * proportion),\n alpha: from.alpha + (to.alpha - from.alpha) * proportion,\n };\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\n/** Fallback interpolation function when no other interpolators apply. */\nexport const interpolateFallback: Interpolator<unknown> = {\n check: (_value: unknown): _value is unknown => {\n return true;\n },\n interpolate: (_from: unknown, to: unknown): unknown => {\n return to;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\n\nexport const interpolateNumber: Interpolator<number> = {\n check: (value: unknown): value is number => {\n return typeof value === \"number\";\n },\n interpolate: (from: number, to: number, proportion: number): number => {\n return from + (to - from) * proportion;\n },\n};\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { interpolateColor } from \"./interpolateColor\";\nimport { interpolateFallback } from \"./interpolateFallback\";\nimport { interpolateNumber } from \"./interpolateNumber\";\n\nexport const DEFAULT_INTERPOLATORS: Interpolator<any>[] = [\n interpolateNumber,\n interpolateColor,\n interpolateFallback,\n];\n","import { Interpolator } from \"../../types/Interpolator\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { DEFAULT_INTERPOLATORS } from \"./defaultInterpolators\";\n\nexport function interpolate<T extends SlideObject>(\n object: T,\n props: Partial<T>,\n proportion: number,\n customInterpolators: Interpolator<any>[] | null = null,\n): T {\n if (proportion === 0) {\n return object;\n } else if (proportion === 1) {\n return { ...object, ...props };\n }\n\n const interpolators =\n customInterpolators != null\n ? [...customInterpolators, ...DEFAULT_INTERPOLATORS]\n : DEFAULT_INTERPOLATORS;\n\n const interpolatedProps: Partial<T> = {};\n for (const key in props) {\n const fromValue = object[key];\n const toValue = props[key];\n\n for (const interpolator of interpolators) {\n if (interpolator.check(fromValue, key) && interpolator.check(toValue, key)) {\n interpolatedProps[key] = (interpolator as Interpolator<typeof toValue>).interpolate(\n fromValue,\n toValue,\n proportion,\n );\n break;\n }\n }\n }\n\n return { ...object, ...interpolatedProps };\n}\n","import { AnimationType } from \"../../types/AnimationType\";\nimport { SlideAnimation } from \"../../types/SlideAnimation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { assertNever } from \"../core/assertNever\";\nimport { interpolate } from \"../interpolate/interpolate\";\n\n/**\n * Mutably updates the object state to reflect the end state of the animation.\n *\n * If a build time is provided, the object state is updated to the state at that\n * time into the animation.\n *\n * @param objectState Map from original objects to current object state.\n * @param slideAnimation The animation to apply.\n * @param buildTime Optional time (in ms) into the animation to apply.\n */\nexport function updateObjectStateWithAnimation(\n objectState: Map<SlideObject, SlideObject>,\n slideAnimation: SlideAnimation | null,\n buildTime: number | null = null,\n) {\n if (slideAnimation === null) {\n return;\n }\n\n const animations = Array.isArray(slideAnimation) ? slideAnimation : [slideAnimation];\n\n let elapsedTime = 0;\n for (const animation of animations) {\n if (buildTime !== null && elapsedTime > buildTime) {\n // We've reached the current build time, so no more state to update.\n break;\n }\n\n switch (animation.type) {\n case AnimationType.ANIMATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n const timeIntoAnimation = buildTime !== null ? buildTime - elapsedTime : null;\n const proportion = Math.max(\n Math.min(\n timeIntoAnimation !== null\n ? (timeIntoAnimation - animation.delay) / animation.duration\n : 1,\n 1,\n ),\n 0,\n );\n\n objectState.set(animation.object, {\n ...currentObject,\n ...interpolate(\n currentObject,\n animation.props,\n animation.easing(proportion),\n animation.interpolators,\n ),\n });\n\n if (animation.block) {\n elapsedTime += animation.delay + animation.duration;\n }\n break;\n }\n case AnimationType.UPDATE: {\n const currentObject = objectState.get(animation.object);\n if (currentObject === undefined) {\n break;\n }\n\n objectState.set(animation.object, {\n ...currentObject,\n ...animation.props,\n });\n break;\n }\n case AnimationType.PAUSE:\n elapsedTime += animation.duration;\n break;\n default:\n assertNever(animation);\n }\n }\n}\n","import { SlideObject } from \"../../types/SlideObject\";\n\n/**\n * Returns the children of a SlideObject if they exist by checking for an \"objects\" property.\n */\nexport function getObjectChildren(object: SlideObject): SlideObject[] {\n return \"objects\" in object\n ? (object.objects as any).filter((object: any) => \"objectType\" in object)\n : [];\n}\n","import { Slide } from \"../../types/Slide\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { updateObjectStateWithAnimation } from \"../animate/updateObjectStateWithAnimation\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\ninterface Args {\n readonly slide: Slide;\n readonly buildIndex: number;\n readonly buildTime: number | null;\n}\n\n/**\n * Returns a mapping from original object (by reference equality) to its current state.\n */\nexport function getObjectState({\n slide,\n buildIndex,\n buildTime,\n}: Args): Map<SlideObject, SlideObject> {\n const objectState: Map<SlideObject, SlideObject> = new Map();\n\n function addObjectToState(object: SlideObject) {\n objectState.set(object, object);\n for (const childObject of getObjectChildren(object)) {\n addObjectToState(childObject);\n }\n }\n\n for (const object of slide.objects) {\n addObjectToState(object);\n }\n\n // Process animations that have already completed.\n const completedBuildCount = buildTime === null ? buildIndex : buildIndex - 1;\n for (let i = 0; i < completedBuildCount; i++) {\n const animation = slide.animations[i] ?? null;\n updateObjectStateWithAnimation(objectState, animation);\n }\n\n // Process the current animation, if any.\n if (buildTime !== null && buildIndex > 0) {\n const animation = slide.animations[buildIndex - 1] ?? null;\n updateObjectStateWithAnimation(objectState, animation, buildTime);\n }\n\n return objectState;\n}\n","import { ObjectType } from \"../../types/ObjectType\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getObjectChildren } from \"./getObjectChildren\";\n\n/**\n * Extracts all SVG objects from slides and returns a mapping from image ID to URL.\n * In the case of SVGs, the image URL and path are both the SVG string itself.\n * SVG strings are transformed into data URLs in the image loading process.\n */\nexport function getSvgImageUrlById(presentation: Presentation): Record<string, string> {\n const svgStrings: Record<string, string> = {};\n\n function walkSlideObject(object: SlideObject): void {\n if (object.objectType === ObjectType.SVG) {\n const svg = (object as SlideObject & { svg: string }).svg;\n if (svg !== undefined && svg.length > 0) {\n svgStrings[svg] = svg;\n }\n }\n\n const children = getObjectChildren(object);\n for (const child of children) {\n walkSlideObject(child);\n }\n }\n\n for (const slide of presentation.slides) {\n for (const object of slide.objects) {\n walkSlideObject(object);\n }\n }\n\n return svgStrings;\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { ShortcutConfig } from \"../../types/ShortcutState\";\n\nexport function getPresentationShortcuts(\n presentation: Presentation,\n): Record<string, ShortcutConfig> {\n const { slides } = presentation;\n const shortcuts: Record<string, ShortcutConfig> = {\n // First build of first slide\n s: { slideIndex: 0, buildIndex: 0 },\n\n // First build of current slide\n c: { slideIndex: null, buildIndex: 0 },\n\n // Last build of last slide\n e: {\n slideIndex: slides.length - 1,\n buildIndex: slides[slides.length - 1]?.animations.length ?? 0,\n },\n };\n\n for (let slideIndex = 0; slideIndex < slides.length; slideIndex++) {\n const slide = slides[slideIndex];\n if (slide === undefined) {\n continue;\n }\n\n // Add shortcuts that jump directly to slides\n const shortcut = slide.shortcut;\n addShortcut(shortcuts, shortcut, slideIndex, 0);\n\n // Add shortcuts that jump directly to builds within slides\n for (let animationIndex = 0; animationIndex < slide.animations.length; animationIndex++) {\n const animation = slide.animations[animationIndex];\n if (animation === undefined) {\n continue;\n }\n\n if (Array.isArray(animation)) {\n for (const anim of animation) {\n addShortcut(shortcuts, anim.shortcut, slideIndex, animationIndex + 1);\n }\n } else {\n addShortcut(shortcuts, animation.shortcut, slideIndex, animationIndex + 1);\n }\n }\n }\n\n return shortcuts;\n}\n\nfunction addShortcut(\n shortcuts: Record<string, ShortcutConfig>,\n shortcut: string | string[] | null,\n slideIndex: number,\n buildIndex: number,\n) {\n if (shortcut === null) {\n return;\n }\n\n if (Array.isArray(shortcut)) {\n for (const key of shortcut) {\n shortcuts[key] = { slideIndex, buildIndex };\n }\n } else {\n shortcuts[shortcut] = { slideIndex, buildIndex };\n }\n}\n","import { Presentation } from \"../../types/Presentation\";\nimport { ShortcutState } from \"../../types/ShortcutState\";\nimport { getPresentationShortcuts } from \"./getPresentationShortcuts\";\n\ninterface Callbacks {\n readonly onNext: (skipIntermediateBuilds: boolean) => void;\n readonly onPrevious: (skipIntermediateBuilds: boolean) => void;\n readonly onRenderSlide: (slideIndex: number | null, buildIndex: number) => void;\n readonly onShowNavigator: () => void;\n}\n\nexport function setupKeyEventListeners(\n presentation: Presentation,\n element: HTMLElement,\n shortcutState: ShortcutState,\n { onNext, onPrevious, onRenderSlide, onShowNavigator }: Callbacks,\n) {\n shortcutState.shortcuts = getPresentationShortcuts(presentation);\n\n // Show cursor when mouse moves\n element.addEventListener(\"mousemove\", () => {\n element.style.cursor = \"auto\";\n });\n\n element.addEventListener(\"keyup\", (event) => {\n // Reset command\n if (event.code === \"Escape\") {\n shortcutState.textCommand = null;\n return;\n }\n\n // Next slide\n if (event.code === \"ArrowRight\" || event.code === \"Space\") {\n onNext(event.shiftKey);\n return;\n }\n\n // Previous slide\n if (event.code === \"ArrowLeft\") {\n onPrevious(event.shiftKey);\n return;\n }\n\n // Check for an active text command\n if (shortcutState.textCommand !== null) {\n // Submitting a text command\n if (event.code === \"Enter\") {\n const command = shortcutState.textCommand;\n shortcutState.textCommand = null;\n\n // Check for a valid shortcut\n const shortcutConfig = shortcutState.shortcuts[command];\n if (shortcutConfig !== undefined) {\n onRenderSlide(shortcutConfig.slideIndex, shortcutConfig.buildIndex);\n } else if (!isNaN(Number(command))) {\n // Fall back to numbered slide\n onRenderSlide(Number(command) - 1, 0);\n }\n\n return;\n } else if (event.code === \"Backspace\") {\n // Backspace to delete last character\n shortcutState.textCommand = shortcutState.textCommand.slice(0, -1);\n } else {\n // Add character to text command\n shortcutState.textCommand += event.key;\n }\n return;\n }\n\n // Start a new text command\n if (event.key === \"g\") {\n shortcutState.textCommand = \"\";\n return;\n }\n\n // Show navigator\n if (event.key === \"`\") {\n onShowNavigator();\n return;\n }\n });\n}\n","export const LOCAL_STORAGE_KEY = \"presenterState\";\n","import { Presentation } from \"../../types/Presentation\";\nimport { LOCAL_STORAGE_KEY } from \"./storageConsts\";\nimport { StorageState } from \"./StorageState\";\n\nexport function loadPresentationState(\n presentation: Presentation,\n ttlMinutes: number | null,\n): StorageState | null {\n const state = localStorage.getItem(LOCAL_STORAGE_KEY);\n if (state === null) {\n return null;\n }\n\n // If no TTL is provided, don't use any cached data.\n if (ttlMinutes === null) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Check if the value is valid JSON.\n let data: unknown;\n try {\n data = JSON.parse(state);\n } catch (error) {\n console.error(\"Failed to parse presentation state from localStorage:\", error);\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n const { title, timestamp } = data as any;\n let { slideIndex, buildIndex } = data as any;\n\n if (\n typeof title !== \"string\" ||\n typeof slideIndex !== \"number\" ||\n typeof buildIndex !== \"number\" ||\n typeof timestamp !== \"number\"\n ) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // If title doesn't match, ignore the cache.\n if (title !== presentation.title) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Check if the value is older than the cache limit.\n if (Date.now() - timestamp > 1000 * 60 * ttlMinutes) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Validate slide index\n if (slideIndex > presentation.slides.length - 1) {\n slideIndex = presentation.slides.length - 1;\n buildIndex = 0;\n }\n\n const slide = presentation.slides[slideIndex];\n if (slide === undefined) {\n localStorage.removeItem(LOCAL_STORAGE_KEY);\n return null;\n }\n\n // Validate build index\n if (buildIndex > slide.animations.length) {\n buildIndex = slide.animations.length;\n }\n\n return {\n title,\n slideIndex,\n buildIndex,\n };\n}\n","import { LOCAL_STORAGE_KEY } from \"./storageConsts\";\nimport { StorageState } from \"./StorageState\";\n\nexport function storePresentationState({ title, slideIndex, buildIndex }: StorageState) {\n localStorage.setItem(\n LOCAL_STORAGE_KEY,\n JSON.stringify({ title, slideIndex, buildIndex, timestamp: Date.now() }),\n );\n}\n","import { ShortcutState } from \"../../../types/ShortcutState\";\nimport { UnifiedImage } from \"./UnifiedImage\";\n\nexport interface BrowserCanvasRendererState {\n canvas: HTMLCanvasElement | null;\n extrasContainer: SVGSVGElement | null;\n mountedExtrasCleanups: (() => void)[];\n\n /** The index of the currently displayed slide. */\n slideIndex: number;\n\n /** The index of the current build within the current slide.\n * If there are N animations on the slide, this will range from 0 to N inclusive.\n */\n buildIndex: number;\n\n /** The ID of the currently running animation, if any. */\n currentAnimationId: number | null;\n\n imageById: Record<string, UnifiedImage>;\n\n shortcutState: ShortcutState;\n}\n\nexport const BROWSER_CANVAS_RENDERER_DEFAULT_STATE: BrowserCanvasRendererState = Object.freeze({\n canvas: null,\n extrasContainer: null,\n mountedExtrasCleanups: [],\n mountedExtrasSlideIndex: null,\n slideIndex: 0,\n buildIndex: 0,\n currentAnimationId: null,\n imageById: {},\n shortcutState: {\n textCommand: null,\n shortcuts: {},\n },\n});\n","import { type CanvasRenderingContext2D as SkiaCanvasRenderingContext2D } from \"skia-canvas\";\n\nexport const CanvasContextType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type CanvasContextType = (typeof CanvasContextType)[keyof typeof CanvasContextType];\n\nexport interface BrowserCanvasContext {\n readonly type: typeof CanvasContextType.Browser;\n readonly context: CanvasRenderingContext2D;\n}\n\nexport interface NodeCanvasContext {\n readonly type: typeof CanvasContextType.Node;\n readonly context: SkiaCanvasRenderingContext2D;\n}\n\n/**\n * A unified CanvasRenderingContext2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedCanvasContext = BrowserCanvasContext | NodeCanvasContext;\n","import { UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\n\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx: UnifiedCanvasContext): void {\n ctx.context.clearRect(0, 0, canvas.width, canvas.height);\n}\n","import { Size } from \"../../../types/Size\";\n\nexport function createCanvasElement(size: Size): HTMLCanvasElement {\n const canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"width\", size.width.toString());\n canvas.setAttribute(\"height\", size.height.toString());\n\n canvas.style.position = \"absolute\";\n canvas.style.width = \"100%\";\n\n return canvas;\n}\n","import { type Path2D as SkiaPath2D } from \"skia-canvas\";\n\nexport const Path2DType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type Path2DType = (typeof Path2DType)[keyof typeof Path2DType];\n\nexport interface BrowserPath2D {\n readonly type: typeof Path2DType.Browser;\n readonly path: Path2D;\n}\n\nexport interface NodePath2D {\n readonly type: typeof Path2DType.Node;\n readonly path: SkiaPath2D;\n}\n\n/**\n * A unified Path2D type that works in both browser and Node.js environments.\n */\nexport type UnifiedPath2D = BrowserPath2D | NodePath2D;\n","import { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\nexport function createPath2D(pathData?: string | undefined): UnifiedPath2D {\n const path = new Path2D(pathData);\n return {\n type: Path2DType.Browser,\n path,\n };\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { Position } from \"../../../types/Position\";\n\ninterface Return {\n readonly arrowPoints: Position[];\n readonly arrowheadPoints: Position[];\n readonly doubledArrowheadPoints: Position[];\n}\n\nexport function getArrowPoints(arrow: Arrow): Return {\n const { drawn, startX, startY, endX, endY, arrowheadSize, isArrowheadFilled, isDrawnFromCenter } =\n arrow;\n const start = { x: startX, y: startY };\n const end = { x: endX, y: endY };\n\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\n const midpoint = { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 };\n\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const length = Math.hypot(dx, dy);\n\n const drawnLength = length * drawn;\n const unitX = Math.cos(angle);\n const unitY = Math.sin(angle);\n\n const drawnStart = isDrawnFromCenter\n ? { x: midpoint.x - (unitX * drawnLength) / 2, y: midpoint.y - (unitY * drawnLength) / 2 }\n : start;\n const drawnEnd = isDrawnFromCenter\n ? { x: midpoint.x + (unitX * drawnLength) / 2, y: midpoint.y + (unitY * drawnLength) / 2 }\n : { x: start.x + unitX * drawnLength, y: start.y + unitY * drawnLength };\n\n const arrowAngle = isArrowheadFilled ? Math.PI / 6 : Math.PI / 4.5;\n const adjustedArrowheadSize = drawnLength < arrowheadSize * 2 ? drawnLength / 2 : arrowheadSize;\n\n const arrowheadBase1 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const arrowheadBase2 = {\n x: drawnEnd.x - adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnEnd.y - adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n const doubledArrowheadBase1 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle - arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle - arrowAngle),\n };\n\n const doubledArrowheadBase2 = {\n x: drawnStart.x + adjustedArrowheadSize * Math.cos(angle + arrowAngle),\n y: drawnStart.y + adjustedArrowheadSize * Math.sin(angle + arrowAngle),\n };\n\n return {\n arrowPoints: [drawnStart, drawnEnd],\n arrowheadPoints: [arrowheadBase1, drawnEnd, arrowheadBase2],\n doubledArrowheadPoints: [doubledArrowheadBase1, drawnStart, doubledArrowheadBase2],\n };\n}\n","import { Color } from \"../../../types/Color\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly color: Color;\n readonly ctx: UnifiedCanvasContext;\n readonly drawn?: number | null;\n readonly isDrawnFromCenter?: boolean;\n readonly isRounded?: boolean;\n readonly opacity?: number | null;\n readonly path: UnifiedPath2D | undefined;\n readonly pathLength?: number | null;\n readonly width: number;\n}\n\nexport function drawStroke({\n ctx,\n color,\n drawn = null,\n isDrawnFromCenter = false,\n isRounded = false,\n opacity = null,\n path,\n pathLength = null,\n width,\n}: Args) {\n if (width === 0 || drawn === 0) {\n return;\n }\n\n if (drawn !== null && pathLength !== null && drawn !== 1) {\n const fullPathLength = pathLength + (isRounded ? width : 0);\n const drawnLength = pathLength * drawn;\n if (!isDrawnFromCenter) {\n ctx.context.setLineDash([drawnLength, fullPathLength - drawnLength]);\n } else {\n ctx.context.setLineDash([\n 0,\n (fullPathLength - drawnLength) / 2,\n drawnLength,\n (fullPathLength - drawnLength) / 2,\n ]);\n }\n } else {\n ctx.context.setLineDash([]);\n }\n\n ctx.context.lineWidth = width;\n ctx.context.strokeStyle = getHexStringForColor(color, opacity);\n ctx.context.lineCap = isRounded ? \"round\" : \"butt\";\n\n if (path === undefined) {\n ctx.context.stroke();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.stroke(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Color } from \"../../../types/Color\";\nimport { getRgbStringForColor } from \"../../../utils/color/getRgbStringForColor\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\ninterface Args {\n readonly ctx: UnifiedCanvasContext;\n readonly path: UnifiedPath2D | undefined;\n readonly color: Color;\n readonly opacity?: number | null;\n}\n\nexport function fillPath({ ctx, path, color, opacity = null }: Args) {\n ctx.context.fillStyle = getRgbStringForColor(color, opacity);\n\n if (path === undefined) {\n ctx.context.fill();\n return;\n }\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.fill(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\nexport function getPathFromPositions(\n positions: Position[],\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const path = createPath();\n\n const firstPosition = positions[0];\n if (firstPosition === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPosition.x, firstPosition.y);\n\n let length = 0;\n\n for (let i = 1; i < positions.length; i++) {\n const position = positions[i];\n const prevPosition = positions[i - 1];\n\n if (position === undefined || prevPosition === undefined) {\n continue;\n }\n\n const dx = position.x - prevPosition.x;\n const dy = position.y - prevPosition.y;\n length += Math.hypot(dx, dy);\n path.path.lineTo(position.x, position.y);\n }\n\n return { path, length };\n}\n","import { Arrow } from \"../../../objects/Arrow\";\nimport { getArrowPoints } from \"../../../utils/objects/arrow/getArrowPoints\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\nimport { getPathFromPositions } from \"../utils/getPathFromPoints\";\n\nexport const renderArrow: BrowserCanvasObjectRenderer<Arrow> = ({\n ctx,\n object: arrow,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = arrow.opacity * opacity;\n if (targetOpacity === 0 || arrow.drawn === 0) {\n return;\n }\n\n const { arrowPoints, arrowheadPoints, doubledArrowheadPoints } = getArrowPoints(arrow);\n\n const { path: arrowPath } = getPathFromPositions(arrowPoints, createPath2D);\n const { path: arrowheadPath } = getPathFromPositions(arrowheadPoints, createPath2D);\n\n // Draw main arrow line\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n // Draw arrowhead\n if (arrow.isArrowheadFilled) {\n arrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: arrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: arrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n\n if (arrow.isArrowheadDoubled) {\n // Draw doubled arrowhead\n const { path: doubledArrowheadPath } = getPathFromPositions(\n doubledArrowheadPoints,\n createPath2D,\n );\n if (arrow.isArrowheadFilled) {\n doubledArrowheadPath.path.closePath();\n fillPath({\n ctx,\n path: doubledArrowheadPath,\n color: arrow.color,\n opacity: targetOpacity,\n });\n }\n drawStroke({\n color: arrow.color,\n ctx,\n path: doubledArrowheadPath,\n opacity: targetOpacity,\n width: arrow.width,\n });\n }\n};\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\n\n/**\n * Returns a circle path that is smaller than the original by half the border width.\n * This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getCircleInsetFillPath(\n circle: Circle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const insetRadius = circle.radius - circle.borderWidth / 2;\n if (insetRadius <= 0) {\n return undefined;\n }\n\n const path = createPath();\n const startAngle = -Math.PI / 2;\n path.path.arc(circle.x, circle.y, insetRadius, startAngle, startAngle + 2 * Math.PI);\n return path;\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getCirclePath(circle: Circle, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const startAngle = -Math.PI / 2;\n\n path.path.arc(circle.x, circle.y, circle.radius, startAngle, startAngle + 2 * Math.PI);\n const length = 2 * Math.PI * circle.radius;\n return { path, length };\n}\n","import { assertNever } from \"../../../utils/core/assertNever\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../types/UnifiedCanvasContext\";\nimport { Path2DType, UnifiedPath2D } from \"../types/UnifiedPath2D\";\n\n/**\n * Clips the canvas context to the interior of the given path.\n * Must be called between ctx.context.save() and ctx.context.restore().\n */\nexport function clipToPath(ctx: UnifiedCanvasContext, path: UnifiedPath2D): void {\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (path.type === Path2DType.Browser) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (path.type === Path2DType.Node) {\n ctx.context.clip(path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n}\n","import { Circle } from \"../../../objects/Circle\";\nimport { getCircleInsetFillPath } from \"../../../utils/objects/circle/getCircleInsetFillPath\";\nimport { getCirclePath } from \"../../../utils/objects/circle/getCirclePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderCircle: BrowserCanvasObjectRenderer<Circle> = ({\n ctx,\n object: circle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = circle.opacity * opacity;\n if (targetOpacity === 0 || (circle.drawn === 0 && circle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getCirclePath(circle, createPath2D);\n\n if (targetOpacity < 1 && circle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke,\n // avoiding the visual artifact on semi-transparent circles.\n const insetFillPath = getCircleInsetFillPath(circle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: circle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: circle.borderColor,\n ctx,\n drawn: circle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: circle.borderWidth,\n });\n};\n","export interface Position {\n readonly x: number;\n readonly y: number;\n}\n\nexport function Position(props: Partial<Position> | null = null): Position {\n return {\n x: 0,\n y: 0,\n ...props,\n };\n}\n\nexport const DEFAULT_POSITION = Position();\n","import { DEFAULT_POSITION, Position } from \"./Position\";\nimport { DEFAULT_SIZE, Size } from \"./Size\";\n\nexport interface BoundingBox {\n /** The position of the top-left corner of the bounding box */\n readonly origin: Position;\n\n /** The size of the bounding box */\n readonly size: Size;\n}\n\nexport function BoundingBox(props: Partial<BoundingBox> | null = null): BoundingBox {\n return {\n origin: DEFAULT_POSITION,\n size: DEFAULT_SIZE,\n ...props,\n };\n}\n\nexport const DEFAULT_BOUNDING_BOX: BoundingBox = BoundingBox();\n","import { Anchor } from \"../../types/Anchor\";\nimport { BoundingBox } from \"../../types/BoundingBox\";\nimport { Position } from \"../../types/Position\";\nimport { Size } from \"../../types/Size\";\nimport { assertNever } from \"../core/assertNever\";\n\nexport function getBoundingBox(position: Position, anchor: Anchor, size: Size): BoundingBox {\n const { x, y } = position;\n const { width, height } = size;\n\n switch (anchor) {\n case Anchor.TOP_LEFT:\n return BoundingBox({\n origin: Position({ x, y }),\n size,\n });\n case Anchor.TOP:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y }),\n size,\n });\n case Anchor.TOP_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y }),\n size,\n });\n case Anchor.LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height / 2 }),\n size,\n });\n case Anchor.CENTER:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height / 2 }),\n size,\n });\n case Anchor.RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height / 2 }),\n size,\n });\n case Anchor.BOTTOM_LEFT:\n return BoundingBox({\n origin: Position({ x, y: y - height }),\n size,\n });\n case Anchor.BOTTOM:\n return BoundingBox({\n origin: Position({ x: x - width / 2, y: y - height }),\n size,\n });\n case Anchor.BOTTOM_RIGHT:\n return BoundingBox({\n origin: Position({ x: x - width, y: y - height }),\n size,\n });\n default:\n assertNever(anchor);\n }\n}\n","import { Group } from \"../../../objects/Group\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderGroup: BrowserCanvasObjectRenderer<Group> = ({\n ctx,\n object: group,\n renderObject,\n opacity,\n}) => {\n const scaleX = group.scale * group.scaleX;\n const scaleY = group.scale * group.scaleY;\n const boundingBox = getBoundingBox(\n Position({ x: group.x, y: group.y }),\n group.anchor,\n Size({\n width: group.width * Math.abs(scaleX),\n height: group.height * Math.abs(scaleY),\n }),\n );\n\n const { rotation, rotateOriginX, rotateOriginY, skewOriginX, skewOriginY, skewX, skewY } = group;\n\n // Prevent rendering if scale is zero\n if (scaleX === 0 || scaleY === 0) {\n return;\n }\n\n ctx.context.save();\n\n // Apply translation and scale transformations\n ctx.context.translate(boundingBox.origin.x, boundingBox.origin.y);\n ctx.context.scale(scaleX, scaleY);\n\n // Apply rotation transformation\n ctx.context.translate(rotateOriginX, rotateOriginY);\n ctx.context.rotate((rotation * Math.PI) / 180);\n ctx.context.translate(-rotateOriginX, -rotateOriginY);\n\n // Apply skew transformation\n ctx.context.translate(skewOriginX, skewOriginY);\n ctx.context.transform(\n 1,\n Math.tan((skewY * Math.PI) / 180),\n Math.tan((skewX * Math.PI) / 180),\n 1,\n 0,\n 0,\n );\n ctx.context.translate(-skewOriginX, -skewOriginY);\n\n for (const child of group.objects) {\n renderObject(child, opacity * group.opacity);\n }\n\n // If there's a preview color, render it to help with debugging group size/position\n if (group.previewColor !== null) {\n ctx.context.fillStyle = getHexStringForColor(group.previewColor);\n ctx.context.fillRect(0, 0, group.width, group.height);\n }\n\n // Show indicator for rotation origin, to help with developing and debugging rotation\n if (group.rotateOriginPreviewSize > 0) {\n ctx.context.fillStyle = \"red\";\n ctx.context.beginPath();\n ctx.context.arc(rotateOriginX, rotateOriginY, group.rotateOriginPreviewSize, 0, 2 * Math.PI);\n ctx.context.fill();\n }\n\n // Show indicator for skew origin, to help with developing and debugging skew\n if (group.skewOriginPreviewSize > 0) {\n ctx.context.fillStyle = \"blue\";\n ctx.context.beginPath();\n ctx.context.arc(skewOriginX, skewOriginY, group.skewOriginPreviewSize, 0, 2 * Math.PI);\n ctx.context.fill();\n }\n\n ctx.context.restore();\n};\n","import { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\n\nexport function getRoundedRectanglePath(\n origin: Position,\n size: Size,\n rounding: number,\n createPath: () => UnifiedPath2D,\n overshoot: number = 0,\n): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(origin.x + rounding, origin.y);\n path.path.lineTo(origin.x + size.width - rounding, origin.y);\n path.path.arcTo(\n origin.x + size.width,\n origin.y,\n origin.x + size.width,\n origin.y + rounding,\n rounding,\n );\n path.path.lineTo(origin.x + size.width, origin.y + size.height - rounding);\n path.path.arcTo(\n origin.x + size.width,\n origin.y + size.height,\n origin.x + size.width - rounding,\n origin.y + size.height,\n rounding,\n );\n path.path.lineTo(origin.x + rounding, origin.y + size.height);\n path.path.arcTo(\n origin.x,\n origin.y + size.height,\n origin.x,\n origin.y + size.height - rounding,\n rounding,\n );\n path.path.lineTo(origin.x, origin.y + rounding);\n path.path.arcTo(origin.x, origin.y, origin.x + rounding, origin.y, rounding);\n if (overshoot > 0) {\n path.path.lineTo(origin.x + rounding + overshoot, origin.y);\n }\n\n const length = 2 * (size.width + size.height - 4 * rounding) + 2 * Math.PI * rounding + overshoot;\n return { path, length };\n}\n","import { type Image } from \"skia-canvas\";\n\nexport const ImageType = {\n Browser: \"browser\",\n Node: \"node\",\n} as const;\n\nexport type ImageType = (typeof ImageType)[keyof typeof ImageType];\n\nexport interface BrowserImage {\n readonly type: typeof ImageType.Browser;\n readonly image: HTMLImageElement;\n}\n\nexport interface NodeImage {\n readonly type: typeof ImageType.Node;\n readonly image: Image;\n}\n\n/**\n * A unified Image type that works in both browser and Node.js environments.\n */\nexport type UnifiedImage = BrowserImage | NodeImage;\n","import { Image } from \"../../../objects/Image\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"../../../utils/objects/rectangle/getRoundedRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\nimport { Path2DType } from \"../types/UnifiedPath2D\";\n\nexport const renderImage: BrowserCanvasObjectRenderer<Image> = ({\n ctx,\n imageById,\n object: image,\n opacity,\n createPath2D,\n}) => {\n const boundingBox = getBoundingBox(\n Position({ x: image.x, y: image.y }),\n image.anchor,\n Size({ width: image.width, height: image.height }),\n );\n\n const imageData = imageById[image.imageId];\n if (imageData === undefined) {\n return;\n }\n\n ctx.context.save();\n\n if (image.rounding > 0) {\n const roundedRectPath = getRoundedRectanglePath(\n boundingBox.origin,\n boundingBox.size,\n image.rounding,\n createPath2D,\n );\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (roundedRectPath.path.type === Path2DType.Browser) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Node Path2D in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (roundedRectPath.path.type === Path2DType.Node) {\n ctx.context.clip(roundedRectPath.path.path);\n } else {\n console.warn(\"Attempted to use Browser Path2D in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n }\n\n ctx.context.globalAlpha = opacity * image.opacity;\n ctx.context.imageSmoothingEnabled = image.smooth;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Node Image in Browser Canvas context\");\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n } else {\n console.warn(\"Attempted to use Browser Image in Node Canvas context\");\n }\n break;\n default:\n assertNever(ctx);\n }\n\n // Restore opacity state\n ctx.context.restore();\n};\n","import { Line } from \"../../../objects/Line\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getLinePath(line: Line, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n\n path.path.moveTo(line.startX, line.startY);\n path.path.lineTo(line.endX, line.endY);\n\n const length = Math.hypot(line.endX - line.startX, line.endY - line.startY);\n\n return { path, length };\n}\n","import { Line } from \"../../../objects/Line\";\nimport { getLinePath } from \"../../../utils/objects/line/getLinePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\n\nexport const renderLine: BrowserCanvasObjectRenderer<Line> = ({\n ctx,\n object: line,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = line.opacity * opacity;\n if (targetOpacity === 0 || line.drawn === 0) {\n return;\n }\n\n const { path, length } = getLinePath(line, createPath2D);\n\n drawStroke({\n color: line.color,\n ctx,\n drawn: line.drawn,\n isDrawnFromCenter: line.isDrawnFromCenter,\n isRounded: line.isRounded,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: line.width,\n });\n};\n","import { Mask } from \"../../../objects/Mask\";\nimport { Color } from \"../../../types/Color\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getHexStringForColor } from \"../../../utils/color/getHexStringForColor\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\nexport const renderMask: BrowserCanvasObjectRenderer<Mask> = ({\n ctx,\n object: mask,\n opacity,\n renderObject,\n}) => {\n ctx.context.save();\n\n const bbox = getBoundingBox(\n Position({ x: mask.x, y: mask.y }),\n mask.anchor,\n Size({ width: mask.width, height: mask.height }),\n );\n\n if (mask.preview) {\n ctx.context.lineWidth = 4;\n ctx.context.strokeStyle = getHexStringForColor(Color.RED);\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.stroke();\n }\n\n ctx.context.beginPath();\n ctx.context.rect(bbox.origin.x, bbox.origin.y, bbox.size.width, bbox.size.height);\n ctx.context.closePath();\n ctx.context.clip();\n\n for (const child of mask.objects) {\n renderObject(child, opacity * mask.opacity);\n }\n\n ctx.context.restore();\n};\n","import { Path } from \"../../../objects/Path\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPath: BrowserCanvasObjectRenderer<Path> = ({\n ctx,\n object: path,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = path.opacity * opacity;\n if (targetOpacity === 0 || (path.drawn === 0 && path.fill.alpha === 0)) {\n return;\n }\n\n const { origin } = getBoundingBox(\n Position({ x: path.x, y: path.y }),\n path.anchor,\n Size({ width: path.width, height: path.height }),\n );\n const path2D = createPath2D(path.path);\n\n ctx.context.save();\n ctx.context.translate(origin.x, origin.y);\n ctx.context.scale(path.width / path.viewboxWidth, path.height / path.viewboxHeight);\n\n fillPath({\n ctx,\n path: path2D,\n color: path.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: path.color,\n ctx,\n drawn: path.drawn,\n isRounded: path.isRounded,\n path: path2D,\n pathLength: path.pathLength,\n opacity: targetOpacity,\n width: path.strokeWidth,\n });\n\n // Undo transformations\n ctx.context.restore();\n};\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\n\nexport function getPolygonPath(polygon: Polygon, createPath: () => UnifiedPath2D): PathWithLength {\n const path = createPath();\n const points = polygon.points;\n\n const firstPoint = points[0];\n if (firstPoint === undefined) {\n return { path, length: 0 };\n }\n\n path.path.moveTo(firstPoint.x, firstPoint.y);\n\n let length = 0;\n let previousPoint = firstPoint;\n for (let i = 1; i < points.length; i++) {\n const point = points[i];\n if (point === undefined) {\n continue;\n }\n path.path.lineTo(point.x, point.y);\n const segmentLength = Math.hypot(point.x - previousPoint.x, point.y - previousPoint.y);\n length += segmentLength;\n previousPoint = point;\n }\n\n path.path.closePath();\n const closingSegmentLength = Math.hypot(\n firstPoint.x - previousPoint.x,\n firstPoint.y - previousPoint.y,\n );\n length += closingSegmentLength;\n\n return { path, length };\n}\n","import { Polygon } from \"../../../objects/Polygon\";\nimport { getPolygonPath } from \"../../../utils/objects/polygon/getPolygonPath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderPolygon: BrowserCanvasObjectRenderer<Polygon> = ({\n ctx,\n object: polygon,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = polygon.opacity * opacity;\n if (targetOpacity === 0 || (polygon.drawn === 0 && polygon.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getPolygonPath(polygon, createPath2D);\n\n fillPath({\n ctx,\n path,\n color: polygon.fill,\n opacity: targetOpacity,\n });\n\n drawStroke({\n color: polygon.borderColor,\n ctx,\n drawn: polygon.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: polygon.borderWidth,\n });\n};\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\n/**\n * Returns a rectangle path that is smaller than the original by half the border width\n * on each side. This is used as a clip region when drawing semi-transparent shapes.\n */\nexport function getRectangleInsetFillPath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): UnifiedPath2D | undefined {\n const inset = rectangle.borderWidth / 2;\n\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const insetWidth = size.width - rectangle.borderWidth;\n const insetHeight = size.height - rectangle.borderWidth;\n if (insetWidth <= 0 || insetHeight <= 0) {\n return undefined;\n }\n\n const insetOrigin = Position({ x: origin.x + inset, y: origin.y + inset });\n const insetSize = Size({ width: insetWidth, height: insetHeight });\n\n const rounding = Math.max(\n 0,\n Math.min(rectangle.rounding - inset, Math.min(insetWidth, insetHeight) / 2),\n );\n\n if (rounding > 0) {\n return getRoundedRectanglePath(insetOrigin, insetSize, rounding, createPath).path;\n }\n\n const path = createPath();\n path.path.moveTo(insetOrigin.x, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y);\n path.path.lineTo(insetOrigin.x + insetWidth, insetOrigin.y + insetHeight);\n path.path.lineTo(insetOrigin.x, insetOrigin.y + insetHeight);\n path.path.closePath();\n return path;\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { UnifiedPath2D } from \"../../../renderer/browser-canvas/types/UnifiedPath2D\";\nimport { PathWithLength } from \"../../../types/PathWithLength\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { getBoundingBox } from \"../../layout/getBoundingBox\";\nimport { getRoundedRectanglePath } from \"./getRoundedRectanglePath\";\n\nexport function getRectanglePath(\n rectangle: Rectangle,\n createPath: () => UnifiedPath2D,\n): PathWithLength {\n const { origin, size } = getBoundingBox(\n Position({ x: rectangle.x, y: rectangle.y }),\n rectangle.anchor,\n Size({ width: rectangle.width, height: rectangle.height }),\n );\n\n const rounding = Math.max(0, Math.min(rectangle.rounding, Math.min(size.width, size.height) / 2));\n\n // Overshoot needed so that when path is drawn, the line caps cover the corners fully\n const overshoot = Math.min(rectangle.borderWidth * 2, size.width - rounding);\n\n if (rounding > 0) {\n return getRoundedRectanglePath(origin, size, rounding, createPath, overshoot);\n } else {\n const path = createPath();\n path.path.moveTo(origin.x, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y);\n path.path.lineTo(origin.x + size.width, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y + size.height);\n path.path.lineTo(origin.x, origin.y);\n path.path.lineTo(origin.x + overshoot, origin.y);\n\n const length = 2 * (size.width + size.height) + overshoot;\n return { path, length };\n }\n}\n","import { Rectangle } from \"../../../objects/Rectangle\";\nimport { getRectangleInsetFillPath } from \"../../../utils/objects/rectangle/getRectangleInsetFillPath\";\nimport { getRectanglePath } from \"../../../utils/objects/rectangle/getRectanglePath\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { clipToPath } from \"../utils/clipToPath\";\nimport { drawStroke } from \"../utils/drawStroke\";\nimport { fillPath } from \"../utils/fillPath\";\n\nexport const renderRectangle: BrowserCanvasObjectRenderer<Rectangle> = ({\n ctx,\n object: rectangle,\n opacity,\n createPath2D,\n}) => {\n const targetOpacity = rectangle.opacity * opacity;\n if (targetOpacity === 0 || (rectangle.drawn === 0 && rectangle.fill.alpha === 0)) {\n return;\n }\n\n const { path, length } = getRectanglePath(rectangle, createPath2D);\n\n if (targetOpacity < 1 && rectangle.borderWidth > 0) {\n // Clip fill to an inset path so it doesn't extend under the stroke.\n const insetFillPath = getRectangleInsetFillPath(rectangle, createPath2D);\n if (insetFillPath !== undefined) {\n ctx.context.save();\n clipToPath(ctx, insetFillPath);\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n ctx.context.restore();\n }\n } else {\n fillPath({ ctx, path, color: rectangle.fill, opacity: targetOpacity });\n }\n\n drawStroke({\n color: rectangle.borderColor,\n ctx,\n drawn: rectangle.drawn,\n path,\n pathLength: length,\n opacity: targetOpacity,\n width: rectangle.borderWidth,\n });\n};\n","import { SVG } from \"../../../objects/SVG\";\nimport { Position } from \"../../../types/Position\";\nimport { Size } from \"../../../types/Size\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { CanvasContextType } from \"../types/UnifiedCanvasContext\";\nimport { ImageType } from \"../types/UnifiedImage\";\n\nexport const renderSvg: BrowserCanvasObjectRenderer<SVG> = ({\n ctx,\n imageById,\n object: svg,\n opacity,\n}) => {\n const targetOpacity = svg.opacity * opacity;\n if (targetOpacity === 0 || !svg.svg) {\n return;\n }\n\n const imageData = imageById[svg.svg];\n if (imageData === undefined) {\n return;\n }\n\n const boundingBox = getBoundingBox(\n Position({ x: svg.x, y: svg.y }),\n svg.anchor,\n Size({ width: svg.width, height: svg.height }),\n );\n\n ctx.context.save();\n ctx.context.globalAlpha = targetOpacity;\n\n switch (ctx.type) {\n case CanvasContextType.Browser:\n if (imageData.type === ImageType.Browser) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n case CanvasContextType.Node:\n if (imageData.type === ImageType.Node) {\n ctx.context.drawImage(\n imageData.image,\n boundingBox.origin.x,\n boundingBox.origin.y,\n boundingBox.size.width,\n boundingBox.size.height,\n );\n }\n break;\n default:\n assertNever(ctx);\n }\n\n ctx.context.restore();\n};\n","import { Text } from \"../../../objects/Text\";\nimport { TextStyle } from \"../../../types/TextStyle\";\n\nexport function getTextStyleFromText(text: Text): TextStyle {\n return {\n color: text.color,\n fontFamily: text.fontFamily,\n fontSize: text.fontSize,\n fontStyle: text.fontStyle,\n fontWeight: text.fontWeight,\n ligatures: text.ligatures,\n };\n}\n","import { Size } from \"../../types/Size\";\n\n/**\n * Computes the combined size of a 2D array of sizes.\n *\n * If a line spacing is provided, it's added\n */\nexport function getCombinedSizes2D(sizes: Size[][], lineSpacing: number = 1): Size {\n const width = Math.max(...sizes.map((line) => line.reduce((a, b) => a + b.width, 0)));\n\n let height = 0;\n let previousLineHeight = 0;\n for (let i = 0; i < sizes.length; i++) {\n const line = sizes[i];\n if (line === undefined) {\n continue;\n }\n\n const lineHeight = Math.max(...line.map((unit) => unit.height));\n height += lineHeight + previousLineHeight * (lineSpacing - 1);\n previousLineHeight = lineHeight;\n }\n\n return {\n height,\n width,\n };\n}\n","import { Size } from \"../../../types/Size\";\n\nexport function getSizeFromTextMetrics(textMetrics: TextMetrics): Size {\n return {\n width: textMetrics.width,\n height: textMetrics.fontBoundingBoxAscent,\n };\n}\n","import { TextStyle } from \"../../../../types/TextStyle\";\nimport { getRgbStringForColor } from \"../../../../utils/color/getRgbStringForColor\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\n\nexport function setContextWithTextStyle(\n ctx: UnifiedCanvasContext,\n textStyle: TextStyle,\n opacity: number = 1,\n) {\n ctx.context.fillStyle = getRgbStringForColor(textStyle.color, opacity);\n ctx.context.font = `${textStyle.fontStyle} ${textStyle.fontWeight} ${textStyle.fontSize}px ${textStyle.fontFamily}`;\n\n if (ctx.type === CanvasContextType.Browser) {\n ctx.context.textRendering = textStyle.ligatures ? \"optimizeLegibility\" : \"optimizeSpeed\";\n } else {\n ctx.context.fontVariant = textStyle.ligatures ? \"common-ligatures\" : \"no-common-ligatures\";\n }\n}\n","import { Size } from \"../../../../types/Size\";\nimport { TextStyle } from \"../../../../types/TextStyle\";\nimport { TextUnit } from \"../../../../types/TextUnit\";\nimport { UnifiedCanvasContext } from \"../../types/UnifiedCanvasContext\";\nimport { getSizeFromTextMetrics } from \"../getSizeFromTextMetrics\";\nimport { setContextWithTextStyle } from \"./setContextWithTextStyle\";\n\nexport function getTextUnitMeasurements(\n textUnits: TextUnit[][],\n style: TextStyle,\n ctx: UnifiedCanvasContext,\n): Size[][] {\n const sizes: Size[][] = [];\n\n for (const line of textUnits) {\n const lineSizes: Size[] = [];\n for (const unit of line) {\n const { text, ...unitStyle } = unit;\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle);\n const metrics = ctx.context.measureText(text);\n lineSizes.push(getSizeFromTextMetrics(metrics));\n }\n sizes.push(lineSizes);\n }\n\n return sizes;\n}\n","import { Text } from \"../../../objects/Text\";\nimport { Alignment } from \"../../../types/Alignment\";\nimport { Position } from \"../../../types/Position\";\nimport { TextStyle } from \"../../../types/TextStyle\";\nimport { assertNever } from \"../../../utils/core/assertNever\";\nimport { getBoundingBox } from \"../../../utils/layout/getBoundingBox\";\nimport { getTextStyleFromText } from \"../../../utils/objects/text/getTextStyleFromText\";\nimport { getTextUnitsFromTextContent } from \"../../../utils/objects/text/getTextUnitsFromTextContent\";\nimport { getCombinedSizes2D } from \"../../../utils/size/getCombinedSizes2D\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\nimport { getTextUnitMeasurements } from \"../utils/text/getTextUnitMeasurements\";\nimport { setContextWithTextStyle } from \"../utils/text/setContextWithTextStyle\";\n\nexport const renderText: BrowserCanvasObjectRenderer<Text> = ({ ctx, object: text, opacity }) => {\n const targetOpacity = text.opacity * opacity;\n if (targetOpacity === 0) {\n return;\n }\n\n const { length } = text;\n const textUnits = getTextUnitsFromTextContent(text.text);\n const style = getTextStyleFromText(text);\n\n const sizes = getTextUnitMeasurements(textUnits, style, ctx);\n const size = getCombinedSizes2D(sizes, text.lineSpacing);\n const boundingBox = getBoundingBox(Position({ x: text.x, y: text.y }), text.anchor, size);\n\n let x = boundingBox.origin.x;\n let y = boundingBox.origin.y;\n let consumedLength = 0;\n let previousLineHeight = 0;\n\n for (let lineIndex = 0; lineIndex < textUnits.length; lineIndex++) {\n const line = textUnits[lineIndex];\n const lineSizes = sizes[lineIndex];\n\n if (line == undefined || lineSizes == undefined) {\n console.error(\"Could not determine text units or sizes for line\");\n continue;\n }\n\n const lineWidth = lineSizes.reduce((acc, curr) => acc + curr.width, 0);\n const lineHeight =\n lineSizes.length === 0\n ? previousLineHeight\n : lineSizes.reduce((acc, curr) => Math.max(acc, curr.height), 0);\n\n switch (text.alignment) {\n case Alignment.LEFT:\n x = boundingBox.origin.x;\n break;\n case Alignment.CENTER:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth) / 2;\n break;\n case Alignment.RIGHT:\n x = boundingBox.origin.x + (boundingBox.size.width - lineWidth);\n break;\n default:\n assertNever(text.alignment);\n break;\n }\n y += lineHeight + previousLineHeight * (text.lineSpacing - 1);\n previousLineHeight = lineHeight;\n\n for (let unitIndex = 0; unitIndex < line.length; unitIndex++) {\n if (length !== null && consumedLength >= length) {\n break;\n }\n\n const unit = line[unitIndex];\n const unitSize = lineSizes[unitIndex];\n\n if (unit == undefined || unitSize == undefined) {\n console.error(\"Could not determine text unit or size for unit\");\n continue;\n }\n\n const { text: unitText, ...unitStyle } = unit;\n\n let truncatedUnitText: string | undefined;\n if (length !== null && consumedLength + unitText.length > length) {\n const remainingLength = length - consumedLength;\n truncatedUnitText = unitText.slice(0, remainingLength);\n }\n const targetUnitText = truncatedUnitText ?? unitText;\n consumedLength += targetUnitText.length;\n\n const combinedStyle: TextStyle = { ...style, ...unitStyle };\n setContextWithTextStyle(ctx, combinedStyle, targetOpacity);\n ctx.context.fillText(targetUnitText, x, y);\n x += unitSize.width;\n }\n }\n};\n","import { ObjectType } from \"../../../types/ObjectType\";\nimport { renderArrow } from \"../objects/renderArrow\";\nimport { renderCircle } from \"../objects/renderCircle\";\nimport { renderGroup } from \"../objects/renderGroup\";\nimport { renderImage } from \"../objects/renderImage\";\nimport { renderLine } from \"../objects/renderLine\";\nimport { renderMask } from \"../objects/renderMask\";\nimport { renderPath } from \"../objects/renderPath\";\nimport { renderPolygon } from \"../objects/renderPolygon\";\nimport { renderRectangle } from \"../objects/renderRectangle\";\nimport { renderSvg } from \"../objects/renderSvg\";\nimport { renderText } from \"../objects/renderText\";\nimport { BrowserCanvasObjectRenderer } from \"../types/BrowserCanvasObjectRenderer\";\n\ntype ObjectRendererMap = Record<ObjectType, BrowserCanvasObjectRenderer<any>>;\n\nexport const DEFAULT_OBJECT_RENDERERS: ObjectRendererMap = {\n [ObjectType.ARROW]: renderArrow,\n [ObjectType.CIRCLE]: renderCircle,\n [ObjectType.GROUP]: renderGroup,\n [ObjectType.IMAGE]: renderImage,\n [ObjectType.LINE]: renderLine,\n [ObjectType.MASK]: renderMask,\n [ObjectType.PATH]: renderPath,\n [ObjectType.POLYGON]: renderPolygon,\n [ObjectType.RECTANGLE]: renderRectangle,\n [ObjectType.SLIDE_OBJECT]: () => {},\n [ObjectType.SVG]: renderSvg,\n [ObjectType.TEXT]: renderText,\n};\n","import { Size } from \"../../../../types/Size\";\n\n/**\n * Extra elements are treated as foreignObjects in an SVG container element.\n * This function creates the extras container SVG element to host the slide extras.\n */\nexport function createExtrasElement(size: Size): SVGSVGElement {\n const extrasElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n extrasElement.setAttribute(\"viewBox\", `0 0 ${size.width} ${size.height}`);\n extrasElement.style.backgroundColor = \"transparent\";\n extrasElement.style.position = \"absolute\";\n extrasElement.style.width = \"100%\";\n\n return extrasElement;\n}\n","import { Position } from \"../../../../types/Position\";\nimport { Size } from \"../../../../types/Size\";\nimport { SlideWebExtra } from \"../../../../types/SlideWebExtra\";\nimport { getBoundingBox } from \"../../../../utils/layout/getBoundingBox\";\n\nexport function mountWebExtra(\n container: SVGSVGElement | null,\n extra: SlideWebExtra,\n): (() => void) | null {\n if (container === null) {\n return null;\n }\n\n const boundingBox = getBoundingBox(\n Position({ x: extra.x, y: extra.y }),\n extra.anchor,\n Size({ width: extra.width, height: extra.height }),\n );\n\n const foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\");\n foreignObject.setAttribute(\"x\", boundingBox.origin.x.toString());\n foreignObject.setAttribute(\"y\", boundingBox.origin.y.toString());\n foreignObject.setAttribute(\"width\", extra.width.toString());\n foreignObject.setAttribute(\"height\", extra.height.toString());\n\n const extraElement = extra.content;\n if (extraElement !== null) {\n foreignObject.appendChild(extraElement);\n }\n\n container.appendChild(foreignObject);\n\n let cleanup: (() => void) | null = null;\n if (extra.setup !== null) {\n const cleanupResult = extra.setup(foreignObject);\n if (cleanupResult !== undefined) {\n cleanup = cleanupResult;\n }\n }\n\n // Return cleanup function\n return () => {\n if (cleanup !== null) {\n cleanup();\n }\n container.removeChild(foreignObject);\n };\n}\n","import { ImageType, UnifiedImage } from \"../types/UnifiedImage\";\n\nexport async function loadPresentationImages(\n imagePathById: Record<string, string>,\n): Promise<Record<string, UnifiedImage>> {\n if (Object.keys(imagePathById).length === 0) {\n return {};\n }\n\n const imageById: Record<string, UnifiedImage> = {};\n\n const loadImage = (src: string): Promise<HTMLImageElement> => {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (err) => reject(err);\n\n // Handle SVGs that aren't already in URL form\n const isRawSVG = src.includes(\"</svg>\");\n if (isRawSVG) {\n // Remove XML header tag, can cause parsing to fail and isn't necessary for SVG rendering\n const sanitized = src.replace(/<\\?xml[^?]*\\?>\\s*/g, \"\");\n\n const svgBlob = new Blob([sanitized], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n img.src = url;\n } else {\n img.src = src;\n }\n });\n };\n\n const loadPromises = Object.entries(imagePathById).map(async ([id, path]) => {\n const img = await loadImage(path);\n imageById[id] = {\n type: ImageType.Browser,\n image: img,\n };\n });\n\n try {\n await Promise.all(loadPromises);\n } catch (error) {\n console.error(\"Error loading images:\", error);\n }\n\n return imageById;\n}\n","import { openNavigator } from \"../../navigator/openNavigator\";\nimport { Presentation } from \"../../types/Presentation\";\nimport { SlideObject } from \"../../types/SlideObject\";\nimport { getSlideAnimationDuration } from \"../../utils/animate/getSlideAnimationDuration\";\nimport { getRgbStringForColor } from \"../../utils/color/getRgbStringForColor\";\nimport { createPresentationContainer } from \"../../utils/presentation/createPresentationContainer\";\nimport { getObjectState } from \"../../utils/presentation/getObjectState\";\nimport { getSvgImageUrlById } from \"../../utils/presentation/getSvgImageUrlById\";\nimport { setupKeyEventListeners } from \"../../utils/presentation/setupKeyEventListeners\";\nimport { loadPresentationState } from \"../../utils/storage/loadPresentationState\";\nimport { storePresentationState } from \"../../utils/storage/storePresentationState\";\nimport { BrowserCanvasRendererProps } from \"./types/BrowserCanvasRendererProps\";\nimport {\n BROWSER_CANVAS_RENDERER_DEFAULT_STATE,\n BrowserCanvasRendererState,\n} from \"./types/BrowserCanvasRendererState\";\nimport { CanvasContextType, UnifiedCanvasContext } from \"./types/UnifiedCanvasContext\";\nimport { clearCanvas } from \"./utils/clearCanvas\";\nimport { createCanvasElement } from \"./utils/createCanvasElement\";\nimport { createPath2D } from \"./utils/createPath2D\";\nimport { DEFAULT_OBJECT_RENDERERS } from \"./utils/defaultObjectRenderers\";\nimport { createExtrasElement } from \"./utils/extras/createExtrasElement\";\nimport { mountWebExtra } from \"./utils/extras/mountWebExtra\";\nimport { loadPresentationImages } from \"./utils/loadPresentationImages\";\n\nexport class BrowserCanvasRenderer {\n props: BrowserCanvasRendererProps;\n state: BrowserCanvasRendererState;\n\n constructor(props: Partial<BrowserCanvasRendererProps>) {\n const { objectRenderers, scale = 1, ...rest } = props;\n this.props = {\n presentation: Presentation(),\n element: document.body,\n objectRenderers: {\n ...DEFAULT_OBJECT_RENDERERS,\n ...objectRenderers,\n },\n cacheDurationMinutes: 15,\n scale: getValidScale(scale),\n ...rest,\n };\n this.state = { ...BROWSER_CANVAS_RENDERER_DEFAULT_STATE };\n }\n\n /** Starts the presentation. */\n async present(): Promise<void> {\n const { presentation, element, scale } = this.props;\n const canvas = createCanvasElement(presentation.size);\n const extrasContainer = createExtrasElement(presentation.size);\n extrasContainer.style.transformOrigin = \"center center\";\n extrasContainer.style.transform = `scale(${scale})`;\n\n this.state = {\n ...BROWSER_CANVAS_RENDERER_DEFAULT_STATE,\n imageById: await loadPresentationImages({\n ...presentation.resources.images,\n ...getSvgImageUrlById(presentation),\n }),\n canvas,\n extrasContainer,\n };\n\n const container = createPresentationContainer(presentation, element);\n\n setupKeyEventListeners(presentation, element, this.state.shortcutState, {\n onNext: (skipIntermediateBuilds: boolean) => this.next(skipIntermediateBuilds),\n onPrevious: (skipIntermediateBuilds: boolean) => this.previous(skipIntermediateBuilds),\n onRenderSlide: (slideIndex: number | null, buildIndex: number) => {\n // Set up a shortcut for going back to this slide/build\n this.state.shortcutState.shortcuts.b = {\n slideIndex: this.state.slideIndex,\n buildIndex: this.state.buildIndex,\n };\n\n this.renderSlide(slideIndex ?? this.state.slideIndex, buildIndex);\n },\n onShowNavigator: () =>\n openNavigator({\n presentation,\n onNavigateToSlide: (slideIndex) => this.renderSlide(slideIndex),\n }),\n });\n\n element.replaceChildren();\n container.appendChild(canvas);\n container.appendChild(extrasContainer);\n element.appendChild(container);\n\n const loadedState = loadPresentationState(presentation, this.props.cacheDurationMinutes);\n if (loadedState !== null) {\n this.renderSlide(loadedState.slideIndex, loadedState.buildIndex);\n } else {\n this.renderSlide(0);\n }\n }\n\n renderSlide(slideIndex: number, buildIndex: number = 0, buildTime: number | null = null): void {\n const { objectRenderers, presentation, scale } = this.props;\n const { canvas, imageById } = this.state;\n\n const didSlideIndexChange = this.state.slideIndex !== slideIndex;\n this.state.slideIndex = slideIndex;\n this.state.buildIndex = buildIndex;\n\n // Store state in local storage\n if (buildTime === null) {\n storePresentationState({ title: presentation.title, slideIndex, buildIndex });\n }\n\n const slide = presentation.slides[slideIndex];\n if (slide === undefined || canvas === null) {\n return;\n }\n\n // Handle mounting/unmounting web extras when slide index changes.\n // Also handle it if there are no mounted extras but the slide has extras to mount\n // (e.g. on a presentation's first slide, where slide index will have stayed 0).\n if (\n didSlideIndexChange ||\n (this.state.mountedExtrasCleanups.length === 0 && slide.extras.length > 0)\n ) {\n // Clean up any existing extras\n for (const cleanup of this.state.mountedExtrasCleanups) {\n cleanup();\n }\n this.state.mountedExtrasCleanups = [];\n\n // Mount new extras\n for (const extra of slide.extras) {\n const cleanup = mountWebExtra(this.state.extrasContainer, extra);\n if (cleanup !== null) {\n this.state.mountedExtrasCleanups.push(cleanup);\n }\n }\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (ctx === null) {\n return;\n }\n\n const context: UnifiedCanvasContext = {\n type: CanvasContextType.Browser,\n context: ctx,\n };\n\n clearCanvas(canvas, context);\n\n const objectState = getObjectState({\n slide,\n buildIndex,\n buildTime,\n });\n\n // Render background color.\n context.context.fillStyle = getRgbStringForColor(presentation.backgroundColor);\n context.context.fillRect(0, 0, canvas.width, canvas.height);\n\n function renderObject(object: SlideObject, opacity: number) {\n const objectRenderer = objectRenderers[object.objectType];\n const currentObject = objectState.get(object);\n if (objectRenderer === undefined || currentObject === undefined) {\n return;\n }\n objectRenderer({\n ctx: context,\n imageById,\n object: currentObject,\n opacity,\n renderObject,\n createPath2D,\n });\n }\n\n const needsScaleTransformation = scale !== 1;\n if (needsScaleTransformation) {\n context.context.save();\n context.context.translate(\n (canvas.width * (1 - scale)) / 2,\n (canvas.height * (1 - scale)) / 2,\n );\n context.context.scale(scale, scale);\n }\n\n // Render all objects in the slide.\n for (const object of slide.objects) {\n renderObject(object, 1.0);\n }\n\n if (needsScaleTransformation) {\n context.context.restore();\n }\n }\n\n next(skipIntermediateBuilds: boolean = false) {\n const { presentation } = this.props;\n const { currentAnimationId, slideIndex, buildIndex } = this.state;\n\n this.props.element.style.cursor = \"none\";\n\n if (currentAnimationId !== null) {\n cancelAnimationFrame(currentAnimationId);\n }\n\n const currentSlide = presentation.slides[slideIndex];\n if (currentSlide === undefined) {\n return;\n }\n\n const nextAnimation = currentSlide.animations[buildIndex];\n\n if (nextAnimation !== undefined && !skipIntermediateBuilds) {\n const startTime = performance.now();\n const animationDuration = getSlideAnimationDuration(nextAnimation);\n\n const animate = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n\n if (elapsed < animationDuration) {\n this.renderSlide(slideIndex, buildIndex + 1, elapsed);\n this.state.currentAnimationId = requestAnimationFrame(animate);\n } else {\n this.renderSlide(slideIndex, buildIndex + 1, null);\n }\n };\n\n this.state.currentAnimationId = requestAnimationFrame(animate);\n } else if (slideIndex + 1 < presentation.slides.length) {\n this.renderSlide(slideIndex + 1);\n }\n }\n\n previous(skipIntermediateBuilds: boolean = false) {\n const { currentAnimationId, slideIndex, buildIndex } = this.state;\n\n this.props.element.style.cursor = \"none\";\n\n if (currentAnimationId !== null) {\n cancelAnimationFrame(currentAnimationId);\n }\n\n if (buildIndex > 0) {\n if (skipIntermediateBuilds) {\n this.renderSlide(slideIndex, 0);\n } else {\n this.renderSlide(slideIndex, buildIndex - 1);\n }\n } else if (slideIndex > 0) {\n const previousSlide = this.props.presentation.slides[slideIndex - 1];\n const buildIndex = skipIntermediateBuilds ? 0 : (previousSlide?.animations.length ?? 0);\n\n this.renderSlide(slideIndex - 1, buildIndex);\n } else {\n this.renderSlide(0, 0);\n }\n }\n}\n\nfunction getValidScale(scale: number): number {\n if (scale <= 0 || scale > 1) {\n console.warn(\n `BrowserCanvasRenderer scale must be positive and no greater than 1. Received ${scale}; using 1 instead.`,\n );\n return 1;\n }\n\n return scale;\n}\n","import { AnimationType } from \"./AnimationType\";\nimport { BaseUnitSlideAnimation } from \"./BaseUnitSlideAnimation\";\n\nexport interface Pause extends BaseUnitSlideAnimation {\n readonly type: typeof AnimationType.PAUSE;\n readonly duration: number;\n}\n\nexport function Pause(duration: number = 1000): Pause {\n return {\n type: AnimationType.PAUSE,\n isKey: false,\n duration,\n shortcut: null,\n };\n}\n","import { SlideAnimation } from \"./SlideAnimation\";\nimport { SlideObject } from \"./SlideObject\";\nimport { SlideWebExtra } from \"./SlideWebExtra\";\n\nexport interface Slide {\n readonly objects: SlideObject[];\n readonly animations: SlideAnimation[];\n readonly extras: SlideWebExtra[];\n\n readonly isAllKey: boolean;\n readonly isEndKey: boolean;\n readonly isStartKey: boolean;\n readonly shortcut: string | string[] | null;\n readonly title: string;\n}\n\nexport function Slide(props: Partial<Slide> | null = null): Slide {\n return {\n objects: [],\n animations: [],\n extras: [],\n isAllKey: false,\n isEndKey: true,\n isStartKey: false,\n shortcut: null,\n title: \"\",\n ...props,\n };\n}\n","import { TextStyle } from \"./TextStyle\";\n\n/** A possibly styled piece of text inside of a text object. */\nexport interface TextUnit extends Partial<TextStyle> {\n readonly text: string;\n}\n\nexport function TextUnit(text: string, props: Partial<Omit<TextUnit, \"text\">> = {}): TextUnit {\n return {\n ...props,\n text,\n };\n}\n","import { Color } from \"../../types/Color\";\n\nexport function Opaque(color: Color = Color.BLACK): Color {\n return { ...color, alpha: 1 };\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.sqrt(xa * xa + ya * ya);\n }\n\n return perimeter;\n}\n","'use strict';\n\n\nvar paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 };\n\nvar SPECIAL_SPACES = [\n 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF\n];\n\nfunction isSpace(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029) || // Line terminators\n // White spaces\n (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && SPECIAL_SPACES.indexOf(ch) >= 0);\n}\n\nfunction isCommand(code) {\n /*eslint-disable no-bitwise*/\n switch (code | 0x20) {\n case 0x6D/* m */:\n case 0x7A/* z */:\n case 0x6C/* l */:\n case 0x68/* h */:\n case 0x76/* v */:\n case 0x63/* c */:\n case 0x73/* s */:\n case 0x71/* q */:\n case 0x74/* t */:\n case 0x61/* a */:\n case 0x72/* r */:\n return true;\n }\n return false;\n}\n\nfunction isArc(code) {\n return (code | 0x20) === 0x61;\n}\n\nfunction isDigit(code) {\n return (code >= 48 && code <= 57); // 0..9\n}\n\nfunction isDigitStart(code) {\n return (code >= 48 && code <= 57) || /* 0..9 */\n code === 0x2B || /* + */\n code === 0x2D || /* - */\n code === 0x2E; /* . */\n}\n\n\nfunction State(path) {\n this.index = 0;\n this.path = path;\n this.max = path.length;\n this.result = [];\n this.param = 0.0;\n this.err = '';\n this.segmentStart = 0;\n this.data = [];\n}\n\nfunction skipSpaces(state) {\n while (state.index < state.max && isSpace(state.path.charCodeAt(state.index))) {\n state.index++;\n }\n}\n\n\nfunction scanFlag(state) {\n var ch = state.path.charCodeAt(state.index);\n\n if (ch === 0x30/* 0 */) {\n state.param = 0;\n state.index++;\n return;\n }\n\n if (ch === 0x31/* 1 */) {\n state.param = 1;\n state.index++;\n return;\n }\n\n state.err = 'SvgPath: arc flag can be 0 or 1 only (at pos ' + state.index + ')';\n}\n\n\nfunction scanParam(state) {\n var start = state.index,\n index = start,\n max = state.max,\n zeroFirst = false,\n hasCeiling = false,\n hasDecimal = false,\n hasDot = false,\n ch;\n\n if (index >= max) {\n state.err = 'SvgPath: missed param (at pos ' + index + ')';\n return;\n }\n ch = state.path.charCodeAt(index);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n //\n if (!isDigit(ch) && ch !== 0x2E/* . */) {\n state.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n return;\n }\n\n if (ch !== 0x2E/* . */) {\n zeroFirst = (ch === 0x30/* 0 */);\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n state.err = 'SvgPath: numbers started with `0` such as `09` are illegal (at pos ' + start + ')';\n return;\n }\n }\n\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n hasCeiling = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x2E/* . */) {\n hasDot = true;\n index++;\n while (isDigit(state.path.charCodeAt(index))) {\n index++;\n hasDecimal = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x65/* e */ || ch === 0x45/* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n }\n if (index < max && isDigit(state.path.charCodeAt(index))) {\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n }\n } else {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n }\n\n state.index = index;\n state.param = parseFloat(state.path.slice(start, index)) + 0.0;\n}\n\n\nfunction finalizeSegment(state) {\n var cmd, cmdLC;\n\n // Process duplicated commands (without comand name)\n\n // This logic is shamelessly borrowed from Raphael\n // https://github.com/DmitryBaranovskiy/raphael/\n //\n cmd = state.path[state.segmentStart];\n cmdLC = cmd.toLowerCase();\n\n var params = state.data;\n\n if (cmdLC === 'm' && params.length > 2) {\n state.result.push([ cmd, params[0], params[1] ]);\n params = params.slice(2);\n cmdLC = 'l';\n cmd = (cmd === 'm') ? 'l' : 'L';\n }\n\n if (cmdLC === 'r') {\n state.result.push([ cmd ].concat(params));\n } else {\n\n while (params.length >= paramCounts[cmdLC]) {\n state.result.push([ cmd ].concat(params.splice(0, paramCounts[cmdLC])));\n if (!paramCounts[cmdLC]) {\n break;\n }\n }\n }\n}\n\n\nfunction scanSegment(state) {\n var max = state.max,\n cmdCode, is_arc, comma_found, need_params, i;\n\n state.segmentStart = state.index;\n cmdCode = state.path.charCodeAt(state.index);\n is_arc = isArc(cmdCode);\n\n if (!isCommand(cmdCode)) {\n state.err = 'SvgPath: bad command ' + state.path[state.index] + ' (at pos ' + state.index + ')';\n return;\n }\n\n need_params = paramCounts[state.path[state.index].toLowerCase()];\n\n state.index++;\n skipSpaces(state);\n\n state.data = [];\n\n if (!need_params) {\n // Z\n finalizeSegment(state);\n return;\n }\n\n comma_found = false;\n\n for (;;) {\n for (i = need_params; i > 0; i--) {\n if (is_arc && (i === 3 || i === 4)) scanFlag(state);\n else scanParam(state);\n\n if (state.err.length) {\n finalizeSegment(state);\n return;\n }\n state.data.push(state.param);\n\n skipSpaces(state);\n comma_found = false;\n\n if (state.index < max && state.path.charCodeAt(state.index) === 0x2C/* , */) {\n state.index++;\n skipSpaces(state);\n comma_found = true;\n }\n }\n\n // after ',' param is mandatory\n if (comma_found) {\n continue;\n }\n\n if (state.index >= state.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(state.path.charCodeAt(state.index))) {\n break;\n }\n }\n\n finalizeSegment(state);\n}\n\n\n/* Returns array of segments:\n *\n * [\n * [ command, coord1, coord2, ... ]\n * ]\n */\nmodule.exports = function pathParse(svgPath) {\n var state = new State(svgPath);\n var max = state.max;\n\n skipSpaces(state);\n\n while (state.index < max && !state.err.length) {\n scanSegment(state);\n }\n\n if (state.result.length) {\n if ('mM'.indexOf(state.result[0][0]) < 0) {\n state.err = 'SvgPath: string should start with `M` or `m`';\n state.result = [];\n } else {\n state.result[0][0] = 'M';\n }\n }\n\n return {\n err: state.err,\n segments: state.result\n };\n};\n","'use strict';\n\n// combine 2 matrixes\n// m1, m2 - [a, b, c, d, e, g]\n//\nfunction combine(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n}\n\n\nfunction Matrix() {\n if (!(this instanceof Matrix)) { return new Matrix(); }\n this.queue = []; // list of matrixes to apply\n this.cache = null; // combined matrix cache\n}\n\n\nMatrix.prototype.matrix = function (m) {\n if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {\n return this;\n }\n this.cache = null;\n this.queue.push(m);\n return this;\n};\n\n\nMatrix.prototype.translate = function (tx, ty) {\n if (tx !== 0 || ty !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, 0, 1, tx, ty ]);\n }\n return this;\n};\n\n\nMatrix.prototype.scale = function (sx, sy) {\n if (sx !== 1 || sy !== 1) {\n this.cache = null;\n this.queue.push([ sx, 0, 0, sy, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.rotate = function (angle, rx, ry) {\n var rad, cos, sin;\n\n if (angle !== 0) {\n this.translate(rx, ry);\n\n rad = angle * Math.PI / 180;\n cos = Math.cos(rad);\n sin = Math.sin(rad);\n\n this.queue.push([ cos, sin, -sin, cos, 0, 0 ]);\n this.cache = null;\n\n this.translate(-rx, -ry);\n }\n return this;\n};\n\n\nMatrix.prototype.skewX = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, Math.tan(angle * Math.PI / 180), 1, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.skewY = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, Math.tan(angle * Math.PI / 180), 0, 1, 0, 0 ]);\n }\n return this;\n};\n\n\n// Flatten queue\n//\nMatrix.prototype.toArray = function () {\n if (this.cache) {\n return this.cache;\n }\n\n if (!this.queue.length) {\n this.cache = [ 1, 0, 0, 1, 0, 0 ];\n return this.cache;\n }\n\n this.cache = this.queue[0];\n\n if (this.queue.length === 1) {\n return this.cache;\n }\n\n for (var i = 1; i < this.queue.length; i++) {\n this.cache = combine(this.cache, this.queue[i]);\n }\n\n return this.cache;\n};\n\n\n// Apply list of matrixes to (x,y) point.\n// If `isRelative` set, `translate` component of matrix will be skipped\n//\nMatrix.prototype.calc = function (x, y, isRelative) {\n var m;\n\n // Don't change point on empty transforms queue\n if (!this.queue.length) { return [ x, y ]; }\n\n // Calculate final matrix, if not exists\n //\n // NB. if you deside to apply transforms to point one-by-one,\n // they should be taken in reverse order\n\n if (!this.cache) {\n this.cache = this.toArray();\n }\n\n m = this.cache;\n\n // Apply matrix to point\n return [\n x * m[0] + y * m[2] + (isRelative ? 0 : m[4]),\n x * m[1] + y * m[3] + (isRelative ? 0 : m[5])\n ];\n};\n\n\nmodule.exports = Matrix;\n","'use strict';\n\n\nvar Matrix = require('./matrix');\n\nvar operations = {\n matrix: true,\n scale: true,\n rotate: true,\n translate: true,\n skewX: true,\n skewY: true\n};\n\nvar CMD_SPLIT_RE = /\\s*(matrix|translate|scale|rotate|skewX|skewY)\\s*\\(\\s*(.+?)\\s*\\)[\\s,]*/;\nvar PARAMS_SPLIT_RE = /[\\s,]+/;\n\n\nmodule.exports = function transformParse(transformString) {\n var matrix = new Matrix();\n var cmd, params;\n\n // Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate', '-45', '']\n transformString.split(CMD_SPLIT_RE).forEach(function (item) {\n\n // Skip empty elements\n if (!item.length) { return; }\n\n // remember operation\n if (typeof operations[item] !== 'undefined') {\n cmd = item;\n return;\n }\n\n // extract params & att operation to matrix\n params = item.split(PARAMS_SPLIT_RE).map(function (i) {\n return +i || 0;\n });\n\n // If params count is not correct - ignore command\n switch (cmd) {\n case 'matrix':\n if (params.length === 6) {\n matrix.matrix(params);\n }\n return;\n\n case 'scale':\n if (params.length === 1) {\n matrix.scale(params[0], params[0]);\n } else if (params.length === 2) {\n matrix.scale(params[0], params[1]);\n }\n return;\n\n case 'rotate':\n if (params.length === 1) {\n matrix.rotate(params[0], 0, 0);\n } else if (params.length === 3) {\n matrix.rotate(params[0], params[1], params[2]);\n }\n return;\n\n case 'translate':\n if (params.length === 1) {\n matrix.translate(params[0], 0);\n } else if (params.length === 2) {\n matrix.translate(params[0], params[1]);\n }\n return;\n\n case 'skewX':\n if (params.length === 1) {\n matrix.skewX(params[0]);\n }\n return;\n\n case 'skewY':\n if (params.length === 1) {\n matrix.skewY(params[0]);\n }\n return;\n }\n });\n\n return matrix;\n};\n","// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n\n // Add this to work with arbitrary vectors:\n // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n // rounding errors, e.g. -1.0000000000000002 can screw up this\n if (dot > 1.0) { dot = 1.0; }\n if (dot < -1.0) { dot = -1.0; }\n\n return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n // Step 1.\n //\n // Moving an ellipse so origin will be the middlepoint between our two\n // points. After that, rotate it to line up ellipse axes with coordinate\n // axes.\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n var rx_sq = rx * rx;\n var ry_sq = ry * ry;\n var x1p_sq = x1p * x1p;\n var y1p_sq = y1p * y1p;\n\n // Step 2.\n //\n // Compute coordinates of the centre of this ellipse (cx', cy')\n // in the new coordinate system.\n //\n var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n if (radicant < 0) {\n // due to rounding errors it might be e.g. -1.3877787807814457e-17\n radicant = 0;\n }\n\n radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n var cxp = radicant * rx/ry * y1p;\n var cyp = radicant * -ry/rx * x1p;\n\n // Step 3.\n //\n // Transform back to get centre coordinates (cx, cy) in the original\n // coordinate system.\n //\n var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n // Step 4.\n //\n // Compute angles (theta1, delta_theta).\n //\n var v1x = (x1p - cxp) / rx;\n var v1y = (y1p - cyp) / ry;\n var v2x = (-x1p - cxp) / rx;\n var v2y = (-y1p - cyp) / ry;\n\n var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n if (fs === 0 && delta_theta > 0) {\n delta_theta -= TAU;\n }\n if (fs === 1 && delta_theta < 0) {\n delta_theta += TAU;\n }\n\n return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n var alpha = 4/3 * Math.tan(delta_theta/4);\n\n var x1 = Math.cos(theta1);\n var y1 = Math.sin(theta1);\n var x2 = Math.cos(theta1 + delta_theta);\n var y2 = Math.sin(theta1 + delta_theta);\n\n return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nmodule.exports = function a2c(x1, y1, x2, y2, fa, fs, rx, ry, phi) {\n var sin_phi = Math.sin(phi * TAU / 360);\n var cos_phi = Math.cos(phi * TAU / 360);\n\n // Make sure radii are valid\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n if (x1p === 0 && y1p === 0) {\n // we're asked to draw line to itself\n return [];\n }\n\n if (rx === 0 || ry === 0) {\n // one of the radii is zero\n return [];\n }\n\n\n // Compensate out-of-range radii\n //\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n\n // Get center parameters (cx, cy, theta1, delta_theta)\n //\n var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n var result = [];\n var theta1 = cc[2];\n var delta_theta = cc[3];\n\n // Split an arc to multiple segments, so each segment\n // will be less than τ/4 (= 90°)\n //\n var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n delta_theta /= segments;\n\n for (var i = 0; i < segments; i++) {\n result.push(approximate_unit_arc(theta1, delta_theta));\n theta1 += delta_theta;\n }\n\n // We have a bezier approximation of a unit circle,\n // now need to transform back to the original ellipse\n //\n return result.map(function (curve) {\n for (var i = 0; i < curve.length; i += 2) {\n var x = curve[i + 0];\n var y = curve[i + 1];\n\n // scale\n x *= rx;\n y *= ry;\n\n // rotate\n var xp = cos_phi*x - sin_phi*y;\n var yp = sin_phi*x + cos_phi*y;\n\n // translate\n curve[i + 0] = xp + cc[0];\n curve[i + 1] = yp + cc[1];\n }\n\n return curve;\n });\n};\n","'use strict';\n\n/* eslint-disable space-infix-ops */\n\n// The precision used to consider an ellipse as a circle\n//\nvar epsilon = 0.0000000001;\n\n// To convert degree in radians\n//\nvar torad = Math.PI / 180;\n\n// Class constructor :\n// an ellipse centred at 0 with radii rx,ry and x - axis - angle ax.\n//\nfunction Ellipse(rx, ry, ax) {\n if (!(this instanceof Ellipse)) { return new Ellipse(rx, ry, ax); }\n this.rx = rx;\n this.ry = ry;\n this.ax = ax;\n}\n\n// Apply a linear transform m to the ellipse\n// m is an array representing a matrix :\n// - -\n// | m[0] m[2] |\n// | m[1] m[3] |\n// - -\n//\nEllipse.prototype.transform = function (m) {\n // We consider the current ellipse as image of the unit circle\n // by first scale(rx,ry) and then rotate(ax) ...\n // So we apply ma = m x rotate(ax) x scale(rx,ry) to the unit circle.\n var c = Math.cos(this.ax * torad), s = Math.sin(this.ax * torad);\n var ma = [\n this.rx * (m[0]*c + m[2]*s),\n this.rx * (m[1]*c + m[3]*s),\n this.ry * (-m[0]*s + m[2]*c),\n this.ry * (-m[1]*s + m[3]*c)\n ];\n\n // ma * transpose(ma) = [ J L ]\n // [ L K ]\n // L is calculated later (if the image is not a circle)\n var J = ma[0]*ma[0] + ma[2]*ma[2],\n K = ma[1]*ma[1] + ma[3]*ma[3];\n\n // the discriminant of the characteristic polynomial of ma * transpose(ma)\n var D = ((ma[0]-ma[3])*(ma[0]-ma[3]) + (ma[2]+ma[1])*(ma[2]+ma[1])) *\n ((ma[0]+ma[3])*(ma[0]+ma[3]) + (ma[2]-ma[1])*(ma[2]-ma[1]));\n\n // the \"mean eigenvalue\"\n var JK = (J + K) / 2;\n\n // check if the image is (almost) a circle\n if (D < epsilon * JK) {\n // if it is\n this.rx = this.ry = Math.sqrt(JK);\n this.ax = 0;\n return this;\n }\n\n // if it is not a circle\n var L = ma[0]*ma[1] + ma[2]*ma[3];\n\n D = Math.sqrt(D);\n\n // {l1,l2} = the two eigen values of ma * transpose(ma)\n var l1 = JK + D/2,\n l2 = JK - D/2;\n // the x - axis - rotation angle is the argument of the l1 - eigenvector\n /*eslint-disable indent*/\n this.ax = (Math.abs(L) < epsilon && Math.abs(l1 - K) < epsilon) ?\n 90\n :\n Math.atan(Math.abs(L) > Math.abs(l1 - K) ?\n (l1 - J) / L\n :\n L / (l1 - K)\n ) * 180 / Math.PI;\n /*eslint-enable indent*/\n\n // if ax > 0 => rx = sqrt(l1), ry = sqrt(l2), else exchange axes and ax += 90\n if (this.ax >= 0) {\n // if ax in [0,90]\n this.rx = Math.sqrt(l1);\n this.ry = Math.sqrt(l2);\n } else {\n // if ax in ]-90,0[ => exchange axes\n this.ax += 90;\n this.rx = Math.sqrt(l2);\n this.ry = Math.sqrt(l1);\n }\n\n return this;\n};\n\n// Check if the ellipse is (almost) degenerate, i.e. rx = 0 or ry = 0\n//\nEllipse.prototype.isDegenerate = function () {\n return (this.rx < epsilon * this.ry || this.ry < epsilon * this.rx);\n};\n\nmodule.exports = Ellipse;\n","// SVG Path transformations library\n//\n// Usage:\n//\n// SvgPath('...')\n// .translate(-150, -100)\n// .scale(0.5)\n// .translate(-150, -100)\n// .toFixed(1)\n// .toString()\n//\n\n'use strict';\n\n\nvar pathParse = require('./path_parse');\nvar transformParse = require('./transform_parse');\nvar matrix = require('./matrix');\nvar a2c = require('./a2c');\nvar ellipse = require('./ellipse');\n\n\n// Class constructor\n//\nfunction SvgPath(path) {\n if (!(this instanceof SvgPath)) { return new SvgPath(path); }\n\n var pstate = pathParse(path);\n\n // Array of path segments.\n // Each segment is array [command, param1, param2, ...]\n this.segments = pstate.segments;\n\n // Error message on parse error.\n this.err = pstate.err;\n\n // Transforms stack for lazy evaluation\n this.__stack = [];\n}\n\nSvgPath.from = function (src) {\n if (typeof src === 'string') return new SvgPath(src);\n\n if (src instanceof SvgPath) {\n // Create empty object\n var s = new SvgPath('');\n\n // Clone properies\n s.err = src.err;\n s.segments = src.segments.map(function (sgm) { return sgm.slice(); });\n s.__stack = src.__stack.map(function (m) {\n return matrix().matrix(m.toArray());\n });\n\n return s;\n }\n\n throw new Error('SvgPath.from: invalid param type ' + src);\n};\n\n\nSvgPath.prototype.__matrix = function (m) {\n var self = this, i;\n\n // Quick leave for empty matrix\n if (!m.queue.length) { return; }\n\n this.iterate(function (s, index, x, y) {\n var p, result, name, isRelative;\n\n switch (s[0]) {\n\n // Process 'assymetric' commands separately\n case 'v':\n p = m.calc(0, s[1], true);\n result = (p[0] === 0) ? [ 'v', p[1] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'V':\n p = m.calc(x, s[1], false);\n result = (p[0] === m.calc(x, y, false)[0]) ? [ 'V', p[1] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'h':\n p = m.calc(s[1], 0, true);\n result = (p[1] === 0) ? [ 'h', p[0] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'H':\n p = m.calc(s[1], y, false);\n result = (p[1] === m.calc(x, y, false)[1]) ? [ 'H', p[0] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'a':\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n\n // Drop segment if arc is empty (end point === start point)\n /*if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n return [];\n }*/\n\n // Transform rx, ry and the x-axis-rotation\n var ma = m.toArray();\n var e = ellipse(s[1], s[2], s[3]).transform(ma);\n\n // flip sweep-flag if matrix is not orientation-preserving\n if (ma[0] * ma[3] - ma[1] * ma[2] < 0) {\n s[5] = s[5] ? '0' : '1';\n }\n\n // Transform end point as usual (without translation for relative notation)\n p = m.calc(s[6], s[7], s[0] === 'a');\n\n // Empty arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n break;\n }\n\n // if the resulting ellipse is (almost) a segment ...\n if (e.isDegenerate()) {\n // replace the arc by a line\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n } else {\n // if it is a real ellipse\n // s[0], s[4] and s[5] are not modified\n result = [ s[0], e.rx, e.ry, e.ax, s[4], s[5], p[0], p[1] ];\n }\n\n break;\n\n case 'm':\n // Edge case. The very first `m` should be processed as absolute, if happens.\n // Make sense for coord shift transforms.\n isRelative = index > 0;\n\n p = m.calc(s[1], s[2], isRelative);\n result = [ 'm', p[0], p[1] ];\n break;\n\n default:\n name = s[0];\n result = [ name ];\n isRelative = (name.toLowerCase() === name);\n\n // Apply transformations to the segment\n for (i = 1; i < s.length; i += 2) {\n p = m.calc(s[i], s[i + 1], isRelative);\n result.push(p[0], p[1]);\n }\n }\n\n self.segments[index] = result;\n }, true);\n};\n\n\n// Apply stacked commands\n//\nSvgPath.prototype.__evaluateStack = function () {\n var m, i;\n\n if (!this.__stack.length) { return; }\n\n if (this.__stack.length === 1) {\n this.__matrix(this.__stack[0]);\n this.__stack = [];\n return;\n }\n\n m = matrix();\n i = this.__stack.length;\n\n while (--i >= 0) {\n m.matrix(this.__stack[i].toArray());\n }\n\n this.__matrix(m);\n this.__stack = [];\n};\n\n\n// Convert processed SVG Path back to string\n//\nSvgPath.prototype.toString = function () {\n var result = '', prevCmd = '', cmdSkipped = false;\n\n this.__evaluateStack();\n\n for (var i = 0, len = this.segments.length; i < len; i++) {\n var segment = this.segments[i];\n var cmd = segment[0];\n\n // Command not repeating => store\n if (cmd !== prevCmd || cmd === 'm' || cmd === 'M') {\n // workaround for FontForge SVG importing bug, keep space between \"z m\".\n if (cmd === 'm' && prevCmd === 'z') result += ' ';\n result += cmd;\n\n cmdSkipped = false;\n } else {\n cmdSkipped = true;\n }\n\n // Store segment params\n for (var pos = 1; pos < segment.length; pos++) {\n var val = segment[pos];\n // Space can be skipped\n // 1. After command (always)\n // 2. For negative value (with '-' at start)\n if (pos === 1) {\n if (cmdSkipped && val >= 0) result += ' ';\n } else if (val >= 0) result += ' ';\n\n result += val;\n }\n\n prevCmd = cmd;\n }\n\n return result;\n};\n\n\n// Translate path to (x [, y])\n//\nSvgPath.prototype.translate = function (x, y) {\n this.__stack.push(matrix().translate(x, y || 0));\n return this;\n};\n\n\n// Scale path to (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.scale = function (sx, sy) {\n this.__stack.push(matrix().scale(sx, (!sy && (sy !== 0)) ? sx : sy));\n return this;\n};\n\n\n// Rotate path around point (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.rotate = function (angle, rx, ry) {\n this.__stack.push(matrix().rotate(angle, rx || 0, ry || 0));\n return this;\n};\n\n\n// Skew path along the X axis by `degrees` angle\n//\nSvgPath.prototype.skewX = function (degrees) {\n this.__stack.push(matrix().skewX(degrees));\n return this;\n};\n\n\n// Skew path along the Y axis by `degrees` angle\n//\nSvgPath.prototype.skewY = function (degrees) {\n this.__stack.push(matrix().skewY(degrees));\n return this;\n};\n\n\n// Apply matrix transform (array of 6 elements)\n//\nSvgPath.prototype.matrix = function (m) {\n this.__stack.push(matrix().matrix(m));\n return this;\n};\n\n\n// Transform path according to \"transform\" attr of SVG spec\n//\nSvgPath.prototype.transform = function (transformString) {\n if (!transformString.trim()) {\n return this;\n }\n this.__stack.push(transformParse(transformString));\n return this;\n};\n\n\n// Round coords with given decimal precition.\n// 0 by default (to integers)\n//\nSvgPath.prototype.round = function (d) {\n var contourStartDeltaX = 0, contourStartDeltaY = 0, deltaX = 0, deltaY = 0, l;\n\n d = d || 0;\n\n this.__evaluateStack();\n\n this.segments.forEach(function (s) {\n var isRelative = (s[0].toLowerCase() === s[0]);\n\n switch (s[0]) {\n case 'H':\n case 'h':\n if (isRelative) { s[1] += deltaX; }\n deltaX = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'V':\n case 'v':\n if (isRelative) { s[1] += deltaY; }\n deltaY = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'Z':\n case 'z':\n deltaX = contourStartDeltaX;\n deltaY = contourStartDeltaY;\n return;\n\n case 'M':\n case 'm':\n if (isRelative) {\n s[1] += deltaX;\n s[2] += deltaY;\n }\n\n deltaX = s[1] - s[1].toFixed(d);\n deltaY = s[2] - s[2].toFixed(d);\n\n contourStartDeltaX = deltaX;\n contourStartDeltaY = deltaY;\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n return;\n\n case 'A':\n case 'a':\n // [cmd, rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n if (isRelative) {\n s[6] += deltaX;\n s[7] += deltaY;\n }\n\n deltaX = s[6] - s[6].toFixed(d);\n deltaY = s[7] - s[7].toFixed(d);\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n s[3] = +s[3].toFixed(d + 2); // better precision for rotation\n s[6] = +s[6].toFixed(d);\n s[7] = +s[7].toFixed(d);\n return;\n\n default:\n // a c l q s t\n l = s.length;\n\n if (isRelative) {\n s[l - 2] += deltaX;\n s[l - 1] += deltaY;\n }\n\n deltaX = s[l - 2] - s[l - 2].toFixed(d);\n deltaY = s[l - 1] - s[l - 1].toFixed(d);\n\n s.forEach(function (val, i) {\n if (!i) { return; }\n s[i] = +s[i].toFixed(d);\n });\n return;\n }\n });\n\n return this;\n};\n\n\n// Apply iterator function to all segments. If function returns result,\n// current segment will be replaced to array of returned segments.\n// If empty array is returned, current regment will be deleted.\n//\nSvgPath.prototype.iterate = function (iterator, keepLazyStack) {\n var segments = this.segments,\n replacements = {},\n needReplace = false,\n lastX = 0,\n lastY = 0,\n countourStartX = 0,\n countourStartY = 0;\n var i, j, newSegments;\n\n if (!keepLazyStack) {\n this.__evaluateStack();\n }\n\n segments.forEach(function (s, index) {\n\n var res = iterator(s, index, lastX, lastY);\n\n if (Array.isArray(res)) {\n replacements[index] = res;\n needReplace = true;\n }\n\n var isRelative = (s[0] === s[0].toLowerCase());\n\n // calculate absolute X and Y\n switch (s[0]) {\n case 'm':\n case 'M':\n lastX = s[1] + (isRelative ? lastX : 0);\n lastY = s[2] + (isRelative ? lastY : 0);\n countourStartX = lastX;\n countourStartY = lastY;\n return;\n\n case 'h':\n case 'H':\n lastX = s[1] + (isRelative ? lastX : 0);\n return;\n\n case 'v':\n case 'V':\n lastY = s[1] + (isRelative ? lastY : 0);\n return;\n\n case 'z':\n case 'Z':\n // That make sence for multiple contours\n lastX = countourStartX;\n lastY = countourStartY;\n return;\n\n default:\n lastX = s[s.length - 2] + (isRelative ? lastX : 0);\n lastY = s[s.length - 1] + (isRelative ? lastY : 0);\n }\n });\n\n // Replace segments if iterator return results\n\n if (!needReplace) { return this; }\n\n newSegments = [];\n\n for (i = 0; i < segments.length; i++) {\n if (typeof replacements[i] !== 'undefined') {\n for (j = 0; j < replacements[i].length; j++) {\n newSegments.push(replacements[i][j]);\n }\n } else {\n newSegments.push(segments[i]);\n }\n }\n\n this.segments = newSegments;\n\n return this;\n};\n\n\n// Converts segments from relative to absolute\n//\nSvgPath.prototype.abs = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameUC = name.toUpperCase(),\n i;\n\n // Skip absolute commands\n if (name === nameUC) { return; }\n\n s[0] = nameUC;\n\n switch (name) {\n case 'v':\n // v has shifted coords parity\n s[1] += y;\n return;\n\n case 'a':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] += x;\n s[7] += y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] += i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts segments from absolute to relative\n//\nSvgPath.prototype.rel = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameLC = name.toLowerCase(),\n i;\n\n // Skip relative commands\n if (name === nameLC) { return; }\n\n // Don't touch the first M to avoid potential confusions.\n if (index === 0 && name === 'M') { return; }\n\n s[0] = nameLC;\n\n switch (name) {\n case 'V':\n // V has shifted coords parity\n s[1] -= y;\n return;\n\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] -= x;\n s[7] -= y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] -= i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts arcs to cubic bézier curves\n//\nSvgPath.prototype.unarc = function () {\n this.iterate(function (s, index, x, y) {\n var new_segments, nextX, nextY, result = [], name = s[0];\n\n // Skip anything except arcs\n if (name !== 'A' && name !== 'a') { return null; }\n\n if (name === 'a') {\n // convert relative arc coordinates to absolute\n nextX = x + s[6];\n nextY = y + s[7];\n } else {\n nextX = s[6];\n nextY = s[7];\n }\n\n new_segments = a2c(x, y, nextX, nextY, s[4], s[5], s[1], s[2], s[3]);\n\n // Degenerated arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if (new_segments.length === 0) {\n return [ [ s[0] === 'a' ? 'l' : 'L', s[6], s[7] ] ];\n }\n\n new_segments.forEach(function (s) {\n result.push([ 'C', s[2], s[3], s[4], s[5], s[6], s[7] ]);\n });\n\n return result;\n });\n\n return this;\n};\n\n\n// Converts smooth curves (with missed control point) to generic curves\n//\nSvgPath.prototype.unshort = function () {\n var segments = this.segments;\n var prevControlX, prevControlY, prevSegment;\n var curControlX, curControlY;\n\n // TODO: add lazy evaluation flag when relative commands supported\n\n this.iterate(function (s, idx, x, y) {\n var name = s[0], nameUC = name.toUpperCase(), isRelative;\n\n // First command MUST be M|m, it's safe to skip.\n // Protect from access to [-1] for sure.\n if (!idx) { return; }\n\n if (nameUC === 'T') { // quadratic curve\n isRelative = (name === 't');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'Q') {\n prevControlX = prevSegment[1] - x;\n prevControlY = prevSegment[2] - y;\n } else if (prevSegment[0] === 'q') {\n prevControlX = prevSegment[1] - prevSegment[3];\n prevControlY = prevSegment[2] - prevSegment[4];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'q' : 'Q',\n curControlX, curControlY,\n s[1], s[2]\n ];\n\n } else if (nameUC === 'S') { // cubic curve\n isRelative = (name === 's');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'C') {\n prevControlX = prevSegment[3] - x;\n prevControlY = prevSegment[4] - y;\n } else if (prevSegment[0] === 'c') {\n prevControlX = prevSegment[3] - prevSegment[5];\n prevControlY = prevSegment[4] - prevSegment[6];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'c' : 'C',\n curControlX, curControlY,\n s[1], s[2], s[3], s[4]\n ];\n }\n });\n\n return this;\n};\n\n\nmodule.exports = SvgPath;\n","'use strict';\n\nmodule.exports = require('./lib/svgpath');\n","//Parses an SVG path into an object.\n//Taken from https://github.com/jkroso/parse-svg-path\n//Re-written so it can be used with rollup\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0};\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig;\n\nexport default function(path) {\n var data = [];\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase();\n\t\targs = parseValues(args);\n\n\t\t// overloaded moveTo\n\t\tif (type === 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)));\n\t\t\ttype = 'l';\n\t\t\tcommand = command === 'm' ? 'l' : 'L';\n\t\t}\n\n\t\twhile (args.length >= 0) {\n\t\t\tif (args.length === length[type]) {\n\t\t\t\targs.unshift(command);\n\t\t\t\treturn data.push(args);\n\t\t\t}\n\t\t\tif (args.length < length[type]) {\n throw new Error('malformed path data');\n }\n\t\t\tdata.push([command].concat(args.splice(0, length[type])));\n\t\t}\n\t});\n return data;\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig;\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number);\n\treturn numbers ? numbers.map(Number) : [];\n}\n","//Calculate Bezier curve length and positionAtLength\n//Algorithms taken from http://bl.ocks.org/hnakamur/e7efd0602bfc15f66fc5, https://gist.github.com/tunght13488/6744e77c242cc7a94859 and http://stackoverflow.com/questions/11854907/calculate-the-length-of-a-segment-of-a-quadratic-bezier\n\nexport default function(ax, ay, bx, by, cx, cy, dx, dy) {\n return new Bezier(ax, ay, bx, by, cx, cy, dx, dy);\n}\n\nfunction Bezier(ax, ay, bx, by, cx, cy, dx, dy) {\n this.a = {x:ax, y:ay};\n this.b = {x:bx, y:by};\n this.c = {x:cx, y:cy};\n this.d = {x:dx, y:dy};\n\n if(dx !== null && dx !== undefined && dy !== null && dy !== undefined){\n this.getArcLength = getCubicArcLength;\n this.getPoint = cubicPoint;\n this.getDerivative = cubicDerivative;\n } else {\n this.getArcLength = getQuadraticArcLength;\n this.getPoint = quadraticPoint;\n this.getDerivative = quadraticDerivative;\n }\n\n this.init();\n}\n\nBezier.prototype = {\n constructor: Bezier,\n init: function() {\n\n this.length = this.getArcLength([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n },\n\n getTotalLength: function() {\n return this.length;\n },\n getPointAtLength: function(length) {\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n return this.getPoint([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y],\n t);\n },\n getTangentAtLength: function(length){\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n var derivative = this.getDerivative([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y], t);\n var mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n var tangent;\n if (mdl > 0){\n tangent = {x: derivative.x/mdl, y: derivative.y/mdl};\n } else {\n tangent = {x: 0, y: 0};\n }\n return tangent;\n },\n getPropertiesAtLength: function(length){\n var t = t2length(length, this.length, this.getArcLength,\n [this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y]);\n\n var derivative = this.getDerivative([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y], t);\n var mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n var tangent;\n if (mdl > 0){\n tangent = {x: derivative.x/mdl, y: derivative.y/mdl};\n } else {\n tangent = {x: 0, y: 0};\n }\n var point = this.getPoint([this.a.x, this.b.x, this.c.x, this.d.x],\n [this.a.y, this.b.y, this.c.y, this.d.y],\n t);\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n }\n};\n\nfunction quadraticDerivative(xs, ys, t){\n return {x: (1 - t) * 2*(xs[1] - xs[0]) +t * 2*(xs[2] - xs[1]),\n y: (1 - t) * 2*(ys[1] - ys[0]) +t * 2*(ys[2] - ys[1])\n };\n}\n\nfunction cubicDerivative(xs, ys, t){\n var derivative = quadraticPoint(\n [3*(xs[1] - xs[0]), 3*(xs[2] - xs[1]), 3*(xs[3] - xs[2])],\n [3*(ys[1] - ys[0]), 3*(ys[2] - ys[1]), 3*(ys[3] - ys[2])],\n t);\n return derivative;\n}\n\nfunction t2length(length, total_length, func, xs, ys){\n var error = 1;\n var t = length/total_length;\n var step = (length - func(xs, ys, t))/total_length\n\n while (error > 0.001){\n var increasedTLength = func(xs, ys, t + step);\n var decreasedTLength = func(xs, ys, t - step);\n var increasedTError = Math.abs(length - increasedTLength)/total_length;\n var decreasedTError = Math.abs(length - decreasedTLength)/total_length;\n if (increasedTError < error) {\n error = increasedTError\n t += step\n } else if (decreasedTError < error) {\n error = decreasedTError\n t -= step\n } else {\n step /= 2\n }\n }\n\n return t;\n}\n\nfunction quadraticPoint(xs, ys, t){\n var x = (1 - t) * (1 - t) * xs[0] + 2 * (1 - t) * t * xs[1] + t * t * xs[2];\n var y = (1 - t) * (1 - t) * ys[0] + 2 * (1 - t) * t * ys[1] + t * t * ys[2];\n return {x: x, y: y};\n}\n\nfunction cubicPoint(xs, ys, t){\n var x = (1 - t) * (1 - t) * (1 - t) * xs[0] + 3 * (1 - t) * (1 - t) * t * xs[1] +\n 3 * (1 - t) * t * t * xs[2] + t * t * t * xs[3];\n var y = (1 - t) * (1 - t) * (1 - t) * ys[0] + 3 * (1 - t) * (1 - t) * t * ys[1] +\n 3 * (1 - t) * t * t * ys[2] + t * t * t * ys[3];\n\n return {x: x, y: y};\n}\n\nfunction getQuadraticArcLength(xs, ys, t) {\n if (t === undefined) {\n t = 1;\n }\n var ax = xs[0] - 2 * xs[1] + xs[2];\n var ay = ys[0] - 2 * ys[1] + ys[2];\n var bx = 2 * xs[1] - 2 * xs[0];\n var by = 2 * ys[1] - 2 * ys[0];\n\n var A = 4 * (ax * ax + ay * ay);\n var B = 4 * (ax * bx + ay * by);\n var C = bx * bx + by * by;\n\n if(A === 0){\n return t * Math.sqrt(Math.pow(xs[2] - xs[0], 2) + Math.pow(ys[2] - ys[0], 2));\n }\n var b = B/(2*A);\n var c = C/A;\n var u = t + b;\n var k = c - b*b;\n\n return (Math.sqrt(A)/2)*(\n u*Math.sqrt(u*u+k)-b*Math.sqrt(b*b+k)+\n k*Math.log(Math.abs(\n (u+Math.sqrt(u*u+k))/(b+Math.sqrt(b*b+k))\n ))\n );\n\n}\n\n// Legendre-Gauss abscissae (xi values, defined at i=n as the roots of the nth order Legendre polynomial Pn(x))\nvar tValues = [\n [],\n [],\n [-0.5773502691896257645091487805019574556476,0.5773502691896257645091487805019574556476],\n [0,-0.7745966692414833770358530799564799221665,0.7745966692414833770358530799564799221665],\n [-0.3399810435848562648026657591032446872005,0.3399810435848562648026657591032446872005,-0.8611363115940525752239464888928095050957,0.8611363115940525752239464888928095050957],\n [0,-0.5384693101056830910363144207002088049672,0.5384693101056830910363144207002088049672,-0.9061798459386639927976268782993929651256,0.9061798459386639927976268782993929651256],\n [0.6612093864662645136613995950199053470064,-0.6612093864662645136613995950199053470064,-0.2386191860831969086305017216807119354186,0.2386191860831969086305017216807119354186,-0.9324695142031520278123015544939946091347,0.9324695142031520278123015544939946091347],\n [0, 0.4058451513773971669066064120769614633473,-0.4058451513773971669066064120769614633473,-0.7415311855993944398638647732807884070741,0.7415311855993944398638647732807884070741,-0.9491079123427585245261896840478512624007,0.9491079123427585245261896840478512624007],\n [-0.1834346424956498049394761423601839806667,0.1834346424956498049394761423601839806667,-0.5255324099163289858177390491892463490419,0.5255324099163289858177390491892463490419,-0.7966664774136267395915539364758304368371,0.7966664774136267395915539364758304368371,-0.9602898564975362316835608685694729904282,0.9602898564975362316835608685694729904282],\n [0,-0.8360311073266357942994297880697348765441,0.8360311073266357942994297880697348765441,-0.9681602395076260898355762029036728700494,0.9681602395076260898355762029036728700494,-0.3242534234038089290385380146433366085719,0.3242534234038089290385380146433366085719,-0.6133714327005903973087020393414741847857,0.6133714327005903973087020393414741847857],\n [-0.1488743389816312108848260011297199846175,0.1488743389816312108848260011297199846175,-0.4333953941292471907992659431657841622000,0.4333953941292471907992659431657841622000,-0.6794095682990244062343273651148735757692,0.6794095682990244062343273651148735757692,-0.8650633666889845107320966884234930485275,0.8650633666889845107320966884234930485275,-0.9739065285171717200779640120844520534282,0.9739065285171717200779640120844520534282],\n [0,-0.2695431559523449723315319854008615246796,0.2695431559523449723315319854008615246796,-0.5190961292068118159257256694586095544802,0.5190961292068118159257256694586095544802,-0.7301520055740493240934162520311534580496,0.7301520055740493240934162520311534580496,-0.8870625997680952990751577693039272666316,0.8870625997680952990751577693039272666316,-0.9782286581460569928039380011228573907714,0.9782286581460569928039380011228573907714],\n [-0.1252334085114689154724413694638531299833,0.1252334085114689154724413694638531299833,-0.3678314989981801937526915366437175612563,0.3678314989981801937526915366437175612563,-0.5873179542866174472967024189405342803690,0.5873179542866174472967024189405342803690,-0.7699026741943046870368938332128180759849,0.7699026741943046870368938332128180759849,-0.9041172563704748566784658661190961925375,0.9041172563704748566784658661190961925375,-0.9815606342467192506905490901492808229601,0.9815606342467192506905490901492808229601],\n [0,-0.2304583159551347940655281210979888352115,0.2304583159551347940655281210979888352115,-0.4484927510364468528779128521276398678019,0.4484927510364468528779128521276398678019,-0.6423493394403402206439846069955156500716,0.6423493394403402206439846069955156500716,-0.8015780907333099127942064895828598903056,0.8015780907333099127942064895828598903056,-0.9175983992229779652065478365007195123904,0.9175983992229779652065478365007195123904,-0.9841830547185881494728294488071096110649,0.9841830547185881494728294488071096110649],\n [-0.1080549487073436620662446502198347476119,0.1080549487073436620662446502198347476119,-0.3191123689278897604356718241684754668342,0.3191123689278897604356718241684754668342,-0.5152486363581540919652907185511886623088,0.5152486363581540919652907185511886623088,-0.6872929048116854701480198030193341375384,0.6872929048116854701480198030193341375384,-0.8272013150697649931897947426503949610397,0.8272013150697649931897947426503949610397,-0.9284348836635735173363911393778742644770,0.9284348836635735173363911393778742644770,-0.9862838086968123388415972667040528016760,0.9862838086968123388415972667040528016760],\n [0,-0.2011940939974345223006283033945962078128,0.2011940939974345223006283033945962078128,-0.3941513470775633698972073709810454683627,0.3941513470775633698972073709810454683627,-0.5709721726085388475372267372539106412383,0.5709721726085388475372267372539106412383,-0.7244177313601700474161860546139380096308,0.7244177313601700474161860546139380096308,-0.8482065834104272162006483207742168513662,0.8482065834104272162006483207742168513662,-0.9372733924007059043077589477102094712439,0.9372733924007059043077589477102094712439,-0.9879925180204854284895657185866125811469,0.9879925180204854284895657185866125811469],\n [-0.0950125098376374401853193354249580631303,0.0950125098376374401853193354249580631303,-0.2816035507792589132304605014604961064860,0.2816035507792589132304605014604961064860,-0.4580167776572273863424194429835775735400,0.4580167776572273863424194429835775735400,-0.6178762444026437484466717640487910189918,0.6178762444026437484466717640487910189918,-0.7554044083550030338951011948474422683538,0.7554044083550030338951011948474422683538,-0.8656312023878317438804678977123931323873,0.8656312023878317438804678977123931323873,-0.9445750230732325760779884155346083450911,0.9445750230732325760779884155346083450911,-0.9894009349916499325961541734503326274262,0.9894009349916499325961541734503326274262],\n [0,-0.1784841814958478558506774936540655574754,0.1784841814958478558506774936540655574754,-0.3512317634538763152971855170953460050405,0.3512317634538763152971855170953460050405,-0.5126905370864769678862465686295518745829,0.5126905370864769678862465686295518745829,-0.6576711592166907658503022166430023351478,0.6576711592166907658503022166430023351478,-0.7815140038968014069252300555204760502239,0.7815140038968014069252300555204760502239,-0.8802391537269859021229556944881556926234,0.8802391537269859021229556944881556926234,-0.9506755217687677612227169578958030214433,0.9506755217687677612227169578958030214433,-0.9905754753144173356754340199406652765077,0.9905754753144173356754340199406652765077],\n [-0.0847750130417353012422618529357838117333,0.0847750130417353012422618529357838117333,-0.2518862256915055095889728548779112301628,0.2518862256915055095889728548779112301628,-0.4117511614628426460359317938330516370789,0.4117511614628426460359317938330516370789,-0.5597708310739475346078715485253291369276,0.5597708310739475346078715485253291369276,-0.6916870430603532078748910812888483894522,0.6916870430603532078748910812888483894522,-0.8037049589725231156824174550145907971032,0.8037049589725231156824174550145907971032,-0.8926024664975557392060605911271455154078,0.8926024664975557392060605911271455154078,-0.9558239495713977551811958929297763099728,0.9558239495713977551811958929297763099728,-0.9915651684209309467300160047061507702525,0.9915651684209309467300160047061507702525],\n [0,-0.1603586456402253758680961157407435495048,0.1603586456402253758680961157407435495048,-0.3165640999636298319901173288498449178922,0.3165640999636298319901173288498449178922,-0.4645707413759609457172671481041023679762,0.4645707413759609457172671481041023679762,-0.6005453046616810234696381649462392798683,0.6005453046616810234696381649462392798683,-0.7209661773352293786170958608237816296571,0.7209661773352293786170958608237816296571,-0.8227146565371428249789224867127139017745,0.8227146565371428249789224867127139017745,-0.9031559036148179016426609285323124878093,0.9031559036148179016426609285323124878093,-0.9602081521348300308527788406876515266150,0.9602081521348300308527788406876515266150,-0.9924068438435844031890176702532604935893,0.9924068438435844031890176702532604935893],\n [-0.0765265211334973337546404093988382110047,0.0765265211334973337546404093988382110047,-0.2277858511416450780804961953685746247430,0.2277858511416450780804961953685746247430,-0.3737060887154195606725481770249272373957,0.3737060887154195606725481770249272373957,-0.5108670019508270980043640509552509984254,0.5108670019508270980043640509552509984254,-0.6360536807265150254528366962262859367433,0.6360536807265150254528366962262859367433,-0.7463319064601507926143050703556415903107,0.7463319064601507926143050703556415903107,-0.8391169718222188233945290617015206853296,0.8391169718222188233945290617015206853296,-0.9122344282513259058677524412032981130491,0.9122344282513259058677524412032981130491,-0.9639719272779137912676661311972772219120,0.9639719272779137912676661311972772219120,-0.9931285991850949247861223884713202782226,0.9931285991850949247861223884713202782226],\n [0,-0.1455618541608950909370309823386863301163,0.1455618541608950909370309823386863301163,-0.2880213168024010966007925160646003199090,0.2880213168024010966007925160646003199090,-0.4243421202074387835736688885437880520964,0.4243421202074387835736688885437880520964,-0.5516188358872198070590187967243132866220,0.5516188358872198070590187967243132866220,-0.6671388041974123193059666699903391625970,0.6671388041974123193059666699903391625970,-0.7684399634756779086158778513062280348209,0.7684399634756779086158778513062280348209,-0.8533633645833172836472506385875676702761,0.8533633645833172836472506385875676702761,-0.9200993341504008287901871337149688941591,0.9200993341504008287901871337149688941591,-0.9672268385663062943166222149076951614246,0.9672268385663062943166222149076951614246,-0.9937521706203895002602420359379409291933,0.9937521706203895002602420359379409291933],\n [-0.0697392733197222212138417961186280818222,0.0697392733197222212138417961186280818222,-0.2078604266882212854788465339195457342156,0.2078604266882212854788465339195457342156,-0.3419358208920842251581474204273796195591,0.3419358208920842251581474204273796195591,-0.4693558379867570264063307109664063460953,0.4693558379867570264063307109664063460953,-0.5876404035069115929588769276386473488776,0.5876404035069115929588769276386473488776,-0.6944872631866827800506898357622567712673,0.6944872631866827800506898357622567712673,-0.7878168059792081620042779554083515213881,0.7878168059792081620042779554083515213881,-0.8658125777203001365364256370193787290847,0.8658125777203001365364256370193787290847,-0.9269567721871740005206929392590531966353,0.9269567721871740005206929392590531966353,-0.9700604978354287271239509867652687108059,0.9700604978354287271239509867652687108059,-0.9942945854823992920730314211612989803930,0.9942945854823992920730314211612989803930],\n [0,-0.1332568242984661109317426822417661370104,0.1332568242984661109317426822417661370104,-0.2641356809703449305338695382833096029790,0.2641356809703449305338695382833096029790,-0.3903010380302908314214888728806054585780,0.3903010380302908314214888728806054585780,-0.5095014778460075496897930478668464305448,0.5095014778460075496897930478668464305448,-0.6196098757636461563850973116495956533871,0.6196098757636461563850973116495956533871,-0.7186613631319501944616244837486188483299,0.7186613631319501944616244837486188483299,-0.8048884016188398921511184069967785579414,0.8048884016188398921511184069967785579414,-0.8767523582704416673781568859341456716389,0.8767523582704416673781568859341456716389,-0.9329710868260161023491969890384229782357,0.9329710868260161023491969890384229782357,-0.9725424712181152319560240768207773751816,0.9725424712181152319560240768207773751816,-0.9947693349975521235239257154455743605736,0.9947693349975521235239257154455743605736],\n [-0.0640568928626056260850430826247450385909,0.0640568928626056260850430826247450385909,-0.1911188674736163091586398207570696318404,0.1911188674736163091586398207570696318404,-0.3150426796961633743867932913198102407864,0.3150426796961633743867932913198102407864,-0.4337935076260451384870842319133497124524,0.4337935076260451384870842319133497124524,-0.5454214713888395356583756172183723700107,0.5454214713888395356583756172183723700107,-0.6480936519369755692524957869107476266696,0.6480936519369755692524957869107476266696,-0.7401241915785543642438281030999784255232,0.7401241915785543642438281030999784255232,-0.8200019859739029219539498726697452080761,0.8200019859739029219539498726697452080761,-0.8864155270044010342131543419821967550873,0.8864155270044010342131543419821967550873,-0.9382745520027327585236490017087214496548,0.9382745520027327585236490017087214496548,-0.9747285559713094981983919930081690617411,0.9747285559713094981983919930081690617411,-0.9951872199970213601799974097007368118745,0.9951872199970213601799974097007368118745]\n];\n\n// Legendre-Gauss weights (wi values, defined by a function linked to in the Bezier primer article)\nvar cValues = [\n [],[],\n [1.0,1.0],\n [0.8888888888888888888888888888888888888888,0.5555555555555555555555555555555555555555,0.5555555555555555555555555555555555555555],\n [0.6521451548625461426269360507780005927646,0.6521451548625461426269360507780005927646,0.3478548451374538573730639492219994072353,0.3478548451374538573730639492219994072353],\n [0.5688888888888888888888888888888888888888,0.4786286704993664680412915148356381929122,0.4786286704993664680412915148356381929122,0.2369268850561890875142640407199173626432,0.2369268850561890875142640407199173626432],\n [0.3607615730481386075698335138377161116615,0.3607615730481386075698335138377161116615,0.4679139345726910473898703439895509948116,0.4679139345726910473898703439895509948116,0.1713244923791703450402961421727328935268,0.1713244923791703450402961421727328935268],\n [0.4179591836734693877551020408163265306122,0.3818300505051189449503697754889751338783,0.3818300505051189449503697754889751338783,0.2797053914892766679014677714237795824869,0.2797053914892766679014677714237795824869,0.1294849661688696932706114326790820183285,0.1294849661688696932706114326790820183285],\n [0.3626837833783619829651504492771956121941,0.3626837833783619829651504492771956121941,0.3137066458778872873379622019866013132603,0.3137066458778872873379622019866013132603,0.2223810344533744705443559944262408844301,0.2223810344533744705443559944262408844301,0.1012285362903762591525313543099621901153,0.1012285362903762591525313543099621901153],\n [0.3302393550012597631645250692869740488788,0.1806481606948574040584720312429128095143,0.1806481606948574040584720312429128095143,0.0812743883615744119718921581105236506756,0.0812743883615744119718921581105236506756,0.3123470770400028400686304065844436655987,0.3123470770400028400686304065844436655987,0.2606106964029354623187428694186328497718,0.2606106964029354623187428694186328497718],\n [0.2955242247147528701738929946513383294210,0.2955242247147528701738929946513383294210,0.2692667193099963550912269215694693528597,0.2692667193099963550912269215694693528597,0.2190863625159820439955349342281631924587,0.2190863625159820439955349342281631924587,0.1494513491505805931457763396576973324025,0.1494513491505805931457763396576973324025,0.0666713443086881375935688098933317928578,0.0666713443086881375935688098933317928578],\n [0.2729250867779006307144835283363421891560,0.2628045445102466621806888698905091953727,0.2628045445102466621806888698905091953727,0.2331937645919904799185237048431751394317,0.2331937645919904799185237048431751394317,0.1862902109277342514260976414316558916912,0.1862902109277342514260976414316558916912,0.1255803694649046246346942992239401001976,0.1255803694649046246346942992239401001976,0.0556685671161736664827537204425485787285,0.0556685671161736664827537204425485787285],\n [0.2491470458134027850005624360429512108304,0.2491470458134027850005624360429512108304,0.2334925365383548087608498989248780562594,0.2334925365383548087608498989248780562594,0.2031674267230659217490644558097983765065,0.2031674267230659217490644558097983765065,0.1600783285433462263346525295433590718720,0.1600783285433462263346525295433590718720,0.1069393259953184309602547181939962242145,0.1069393259953184309602547181939962242145,0.0471753363865118271946159614850170603170,0.0471753363865118271946159614850170603170],\n [0.2325515532308739101945895152688359481566,0.2262831802628972384120901860397766184347,0.2262831802628972384120901860397766184347,0.2078160475368885023125232193060527633865,0.2078160475368885023125232193060527633865,0.1781459807619457382800466919960979955128,0.1781459807619457382800466919960979955128,0.1388735102197872384636017768688714676218,0.1388735102197872384636017768688714676218,0.0921214998377284479144217759537971209236,0.0921214998377284479144217759537971209236,0.0404840047653158795200215922009860600419,0.0404840047653158795200215922009860600419],\n [0.2152638534631577901958764433162600352749,0.2152638534631577901958764433162600352749,0.2051984637212956039659240656612180557103,0.2051984637212956039659240656612180557103,0.1855383974779378137417165901251570362489,0.1855383974779378137417165901251570362489,0.1572031671581935345696019386238421566056,0.1572031671581935345696019386238421566056,0.1215185706879031846894148090724766259566,0.1215185706879031846894148090724766259566,0.0801580871597602098056332770628543095836,0.0801580871597602098056332770628543095836,0.0351194603317518630318328761381917806197,0.0351194603317518630318328761381917806197],\n [0.2025782419255612728806201999675193148386,0.1984314853271115764561183264438393248186,0.1984314853271115764561183264438393248186,0.1861610000155622110268005618664228245062,0.1861610000155622110268005618664228245062,0.1662692058169939335532008604812088111309,0.1662692058169939335532008604812088111309,0.1395706779261543144478047945110283225208,0.1395706779261543144478047945110283225208,0.1071592204671719350118695466858693034155,0.1071592204671719350118695466858693034155,0.0703660474881081247092674164506673384667,0.0703660474881081247092674164506673384667,0.0307532419961172683546283935772044177217,0.0307532419961172683546283935772044177217],\n [0.1894506104550684962853967232082831051469,0.1894506104550684962853967232082831051469,0.1826034150449235888667636679692199393835,0.1826034150449235888667636679692199393835,0.1691565193950025381893120790303599622116,0.1691565193950025381893120790303599622116,0.1495959888165767320815017305474785489704,0.1495959888165767320815017305474785489704,0.1246289712555338720524762821920164201448,0.1246289712555338720524762821920164201448,0.0951585116824927848099251076022462263552,0.0951585116824927848099251076022462263552,0.0622535239386478928628438369943776942749,0.0622535239386478928628438369943776942749,0.0271524594117540948517805724560181035122,0.0271524594117540948517805724560181035122],\n [0.1794464703562065254582656442618856214487,0.1765627053669926463252709901131972391509,0.1765627053669926463252709901131972391509,0.1680041021564500445099706637883231550211,0.1680041021564500445099706637883231550211,0.1540457610768102880814315948019586119404,0.1540457610768102880814315948019586119404,0.1351363684685254732863199817023501973721,0.1351363684685254732863199817023501973721,0.1118838471934039710947883856263559267358,0.1118838471934039710947883856263559267358,0.0850361483171791808835353701910620738504,0.0850361483171791808835353701910620738504,0.0554595293739872011294401653582446605128,0.0554595293739872011294401653582446605128,0.0241483028685479319601100262875653246916,0.0241483028685479319601100262875653246916],\n [0.1691423829631435918406564701349866103341,0.1691423829631435918406564701349866103341,0.1642764837458327229860537764659275904123,0.1642764837458327229860537764659275904123,0.1546846751262652449254180038363747721932,0.1546846751262652449254180038363747721932,0.1406429146706506512047313037519472280955,0.1406429146706506512047313037519472280955,0.1225552067114784601845191268002015552281,0.1225552067114784601845191268002015552281,0.1009420441062871655628139849248346070628,0.1009420441062871655628139849248346070628,0.0764257302548890565291296776166365256053,0.0764257302548890565291296776166365256053,0.0497145488949697964533349462026386416808,0.0497145488949697964533349462026386416808,0.0216160135264833103133427102664524693876,0.0216160135264833103133427102664524693876],\n [0.1610544498487836959791636253209167350399,0.1589688433939543476499564394650472016787,0.1589688433939543476499564394650472016787,0.1527660420658596667788554008976629984610,0.1527660420658596667788554008976629984610,0.1426067021736066117757461094419029724756,0.1426067021736066117757461094419029724756,0.1287539625393362276755157848568771170558,0.1287539625393362276755157848568771170558,0.1115666455473339947160239016817659974813,0.1115666455473339947160239016817659974813,0.0914900216224499994644620941238396526609,0.0914900216224499994644620941238396526609,0.0690445427376412265807082580060130449618,0.0690445427376412265807082580060130449618,0.0448142267656996003328381574019942119517,0.0448142267656996003328381574019942119517,0.0194617882297264770363120414644384357529,0.0194617882297264770363120414644384357529],\n [0.1527533871307258506980843319550975934919,0.1527533871307258506980843319550975934919,0.1491729864726037467878287370019694366926,0.1491729864726037467878287370019694366926,0.1420961093183820513292983250671649330345,0.1420961093183820513292983250671649330345,0.1316886384491766268984944997481631349161,0.1316886384491766268984944997481631349161,0.1181945319615184173123773777113822870050,0.1181945319615184173123773777113822870050,0.1019301198172404350367501354803498761666,0.1019301198172404350367501354803498761666,0.0832767415767047487247581432220462061001,0.0832767415767047487247581432220462061001,0.0626720483341090635695065351870416063516,0.0626720483341090635695065351870416063516,0.0406014298003869413310399522749321098790,0.0406014298003869413310399522749321098790,0.0176140071391521183118619623518528163621,0.0176140071391521183118619623518528163621],\n [0.1460811336496904271919851476833711882448,0.1445244039899700590638271665537525436099,0.1445244039899700590638271665537525436099,0.1398873947910731547221334238675831108927,0.1398873947910731547221334238675831108927,0.1322689386333374617810525744967756043290,0.1322689386333374617810525744967756043290,0.1218314160537285341953671771257335983563,0.1218314160537285341953671771257335983563,0.1087972991671483776634745780701056420336,0.1087972991671483776634745780701056420336,0.0934444234560338615532897411139320884835,0.0934444234560338615532897411139320884835,0.0761001136283793020170516533001831792261,0.0761001136283793020170516533001831792261,0.0571344254268572082836358264724479574912,0.0571344254268572082836358264724479574912,0.0369537897708524937999506682993296661889,0.0369537897708524937999506682993296661889,0.0160172282577743333242246168584710152658,0.0160172282577743333242246168584710152658],\n [0.1392518728556319933754102483418099578739,0.1392518728556319933754102483418099578739,0.1365414983460151713525738312315173965863,0.1365414983460151713525738312315173965863,0.1311735047870623707329649925303074458757,0.1311735047870623707329649925303074458757,0.1232523768105124242855609861548144719594,0.1232523768105124242855609861548144719594,0.1129322960805392183934006074217843191142,0.1129322960805392183934006074217843191142,0.1004141444428809649320788378305362823508,0.1004141444428809649320788378305362823508,0.0859416062170677274144436813727028661891,0.0859416062170677274144436813727028661891,0.0697964684245204880949614189302176573987,0.0697964684245204880949614189302176573987,0.0522933351526832859403120512732112561121,0.0522933351526832859403120512732112561121,0.0337749015848141547933022468659129013491,0.0337749015848141547933022468659129013491,0.0146279952982722006849910980471854451902,0.0146279952982722006849910980471854451902],\n [0.1336545721861061753514571105458443385831,0.1324620394046966173716424647033169258050,0.1324620394046966173716424647033169258050,0.1289057221880821499785953393997936532597,0.1289057221880821499785953393997936532597,0.1230490843067295304675784006720096548158,0.1230490843067295304675784006720096548158,0.1149966402224113649416435129339613014914,0.1149966402224113649416435129339613014914,0.1048920914645414100740861850147438548584,0.1048920914645414100740861850147438548584,0.0929157660600351474770186173697646486034,0.0929157660600351474770186173697646486034,0.0792814117767189549228925247420432269137,0.0792814117767189549228925247420432269137,0.0642324214085258521271696151589109980391,0.0642324214085258521271696151589109980391,0.0480376717310846685716410716320339965612,0.0480376717310846685716410716320339965612,0.0309880058569794443106942196418845053837,0.0309880058569794443106942196418845053837,0.0134118594871417720813094934586150649766,0.0134118594871417720813094934586150649766],\n [0.1279381953467521569740561652246953718517,0.1279381953467521569740561652246953718517,0.1258374563468282961213753825111836887264,0.1258374563468282961213753825111836887264,0.1216704729278033912044631534762624256070,0.1216704729278033912044631534762624256070,0.1155056680537256013533444839067835598622,0.1155056680537256013533444839067835598622,0.1074442701159656347825773424466062227946,0.1074442701159656347825773424466062227946,0.0976186521041138882698806644642471544279,0.0976186521041138882698806644642471544279,0.0861901615319532759171852029837426671850,0.0861901615319532759171852029837426671850,0.0733464814110803057340336152531165181193,0.0733464814110803057340336152531165181193,0.0592985849154367807463677585001085845412,0.0592985849154367807463677585001085845412,0.0442774388174198061686027482113382288593,0.0442774388174198061686027482113382288593,0.0285313886289336631813078159518782864491,0.0285313886289336631813078159518782864491,0.0123412297999871995468056670700372915759,0.0123412297999871995468056670700372915759]\n];\n\n// LUT for binomial coefficient arrays per curve order 'n'\nvar binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];\n\n// Look up what the binomial coefficient is for pair {n,k}\nfunction binomials(n, k) {\n return binomialCoefficients[n][k];\n}\n\n/**\n * Compute the curve derivative (hodograph) at t.\n */\nfunction getDerivative(derivative, t, vs) {\n // the derivative of any 't'-less function is zero.\n var n = vs.length - 1,\n _vs,\n value,\n k;\n if (n === 0) {\n return 0;\n }\n\n // direct values? compute!\n if (derivative === 0) {\n value = 0;\n for (k = 0; k <= n; k++) {\n value += binomials(n, k) * Math.pow(1 - t, n - k) * Math.pow(t, k) * vs[k];\n }\n return value;\n } else {\n // Still some derivative? go down one order, then try\n // for the lower order curve's.\n _vs = new Array(n);\n for (k = 0; k < n; k++) {\n _vs[k] = n * (vs[k + 1] - vs[k]);\n }\n return getDerivative(derivative - 1, t, _vs);\n }\n}\n\nfunction B(xs, ys, t) {\n var xbase = getDerivative(1, t, xs);\n var ybase = getDerivative(1, t, ys);\n var combined = xbase * xbase + ybase * ybase;\n return Math.sqrt(combined);\n}\n\nfunction getCubicArcLength(xs, ys, t) {\n var z, sum, i, correctedT;\n\n /*if (xs.length >= tValues.length) {\n throw new Error('too high n bezier');\n }*/\n\n if (t === undefined) {\n t = 1;\n }\n var n = 20;\n\n z = t / 2;\n sum = 0;\n for (i = 0; i < n; i++) {\n correctedT = z * tValues[n][i] + z;\n sum += cValues[n][i] * B(xs, ys, correctedT);\n }\n return z * sum;\n}\n","//This file is taken from the following project: https://github.com/fontello/svgpath\n// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n\n // Add this to work with arbitrary vectors:\n // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n // rounding errors, e.g. -1.0000000000000002 can screw up this\n if (dot > 1.0) { dot = 1.0; }\n if (dot < -1.0) { dot = -1.0; }\n\n return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n // Step 1.\n //\n // Moving an ellipse so origin will be the middlepoint between our two\n // points. After that, rotate it to line up ellipse axes with coordinate\n // axes.\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n var rx_sq = rx * rx;\n var ry_sq = ry * ry;\n var x1p_sq = x1p * x1p;\n var y1p_sq = y1p * y1p;\n\n // Step 2.\n //\n // Compute coordinates of the centre of this ellipse (cx', cy')\n // in the new coordinate system.\n //\n var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n if (radicant < 0) {\n // due to rounding errors it might be e.g. -1.3877787807814457e-17\n radicant = 0;\n }\n\n radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n var cxp = radicant * rx/ry * y1p;\n var cyp = radicant * -ry/rx * x1p;\n\n // Step 3.\n //\n // Transform back to get centre coordinates (cx, cy) in the original\n // coordinate system.\n //\n var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n // Step 4.\n //\n // Compute angles (theta1, delta_theta).\n //\n var v1x = (x1p - cxp) / rx;\n var v1y = (y1p - cyp) / ry;\n var v2x = (-x1p - cxp) / rx;\n var v2y = (-y1p - cyp) / ry;\n\n var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n if (fs === 0 && delta_theta > 0) {\n delta_theta -= TAU;\n }\n if (fs === 1 && delta_theta < 0) {\n delta_theta += TAU;\n }\n\n return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n var alpha = 4/3 * Math.tan(delta_theta/4);\n\n var x1 = Math.cos(theta1);\n var y1 = Math.sin(theta1);\n var x2 = Math.cos(theta1 + delta_theta);\n var y2 = Math.sin(theta1 + delta_theta);\n\n return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nexport default function(x1, y1, rx, ry, phi, fa, fs, x2, y2) {\n var sin_phi = Math.sin(phi * TAU / 360);\n var cos_phi = Math.cos(phi * TAU / 360);\n\n // Make sure radii are valid\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n if (x1p === 0 && y1p === 0) {\n // we're asked to draw line to itself\n return [];\n }\n\n if (rx === 0 || ry === 0) {\n // one of the radii is zero\n return [];\n }\n\n\n // Compensate out-of-range radii\n //\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n\n // Get center parameters (cx, cy, theta1, delta_theta)\n //\n var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n var result = [];\n var theta1 = cc[2];\n var delta_theta = cc[3];\n\n // Split an arc to multiple segments, so each segment\n // will be less than τ/4 (= 90°)\n //\n var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n delta_theta /= segments;\n\n for (var i = 0; i < segments; i++) {\n result.push(approximate_unit_arc(theta1, delta_theta));\n theta1 += delta_theta;\n }\n\n // We have a bezier approximation of a unit circle,\n // now need to transform back to the original ellipse\n //\n return result.map(function (curve) {\n for (var i = 0; i < curve.length; i += 2) {\n var x = curve[i + 0];\n var y = curve[i + 1];\n\n // scale\n x *= rx;\n y *= ry;\n\n // rotate\n var xp = cos_phi*x - sin_phi*y;\n var yp = sin_phi*x + cos_phi*y;\n\n // translate\n curve[i + 0] = xp + cc[0];\n curve[i + 1] = yp + cc[1];\n }\n\n return curve;\n });\n}","//Calculate ans Arc curve length and positionAtLength\n//Definitions taken from https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths\nimport a2c from \"./a2c\";\nimport Bezier from \"./bezier\";\n\n\nexport default function(x0, y0, rx,ry, xAxisRotate, LargeArcFlag,SweepFlag, x,y) {\n return new Arc(x0, y0, rx,ry, xAxisRotate, LargeArcFlag,SweepFlag, x,y);\n}\n\nfunction Arc(x0, y0,rx,ry, xAxisRotate, LargeArcFlag,SweepFlag,x,y) {\n var length = 0;\n var partialLengths = [];\n var curves = [];\n var res = a2c(x0, y0,rx,ry, xAxisRotate, LargeArcFlag,SweepFlag,x,y);\n res.forEach(function(d){\n var curve = new Bezier(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]);\n var curveLength = curve.getTotalLength();\n length += curveLength;\n partialLengths.push(curveLength);\n curves.push(curve);\n });\n this.length = length;\n this.partialLengths = partialLengths;\n this.curves = curves;\n}\n\nArc.prototype = {\n constructor: Arc,\n init: function() {\n\n \n },\n\n getTotalLength: function() {\n return this.length;\n },\n getPointAtLength: function(fractionLength) {\n \n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > this.length){\n fractionLength = this.length;\n }\n var i = this.partialLengths.length - 1;\n\n while(this.partialLengths[i] >= fractionLength && this.partialLengths[i] > 0){\n i--;\n }\n if(i<this.partialLengths.length-1){\n i++;\n }\n\n var lengthOffset = 0;\n for(var j=0; j<i; j++){\n lengthOffset += this.partialLengths[j];\n }\n\n return this.curves[i].getPointAtLength(fractionLength - lengthOffset);\n },\n getTangentAtLength: function(fractionLength) {\n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > this.length){\n fractionLength = this.length;\n }\n var i = this.partialLengths.length - 1;\n\n while(this.partialLengths[i] >= fractionLength && this.partialLengths[i] > 0){\n i--;\n }\n if(i<this.partialLengths.length-1){\n i++;\n }\n\n var lengthOffset = 0;\n for(var j=0; j<i; j++){\n lengthOffset += this.partialLengths[j];\n }\n\n return this.curves[i].getTangentAtLength(fractionLength - lengthOffset);\n },\n getPropertiesAtLength: function(fractionLength){\n var tangent = this.getTangentAtLength(fractionLength);\n var point = this.getPointAtLength(fractionLength);\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n }\n};","export default function(x0, x1, y0, y1) {\n return new LinearPosition(x0, x1, y0, y1);\n\n}\n\nfunction LinearPosition(x0, x1, y0, y1){\n this.x0 = x0;\n this.x1 = x1;\n this.y0 = y0;\n this.y1 = y1;\n}\n\nLinearPosition.prototype.getTotalLength = function(){\n return Math.sqrt(Math.pow(this.x0 - this.x1, 2) +\n Math.pow(this.y0 - this.y1, 2));\n};\n\nLinearPosition.prototype.getPointAtLength = function(pos){\n var fraction = pos/ (Math.sqrt(Math.pow(this.x0 - this.x1, 2) +\n Math.pow(this.y0 - this.y1, 2)));\n\n var newDeltaX = (this.x1 - this.x0)*fraction;\n var newDeltaY = (this.y1 - this.y0)*fraction;\n return { x: this.x0 + newDeltaX, y: this.y0 + newDeltaY };\n};\nLinearPosition.prototype.getTangentAtLength = function(){\n var module = Math.sqrt((this.x1 - this.x0) * (this.x1 - this.x0) +\n (this.y1 - this.y0) * (this.y1 - this.y0));\n return { x: (this.x1 - this.x0)/module, y: (this.y1 - this.y0)/module };\n};\nLinearPosition.prototype.getPropertiesAtLength = function(pos){\n var point = this.getPointAtLength(pos);\n var tangent = this.getTangentAtLength();\n return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n};\n","import parse from \"./parse\";\nimport Bezier from \"./bezier\";\nimport Arc from \"./arc\";\nimport LinearPosition from \"./linear\";\n\nexport default function(svgString) {\n var length = 0;\n var partial_lengths = [];\n var functions = [];\n\n function svgProperties(string){\n if(!string){return null;}\n var parsed = parse(string);\n var cur = [0, 0];\n var prev_point = [0, 0];\n var curve;\n var ringStart;\n for (var i = 0; i < parsed.length; i++){\n //moveTo\n if(parsed[i][0] === \"M\"){\n cur = [parsed[i][1], parsed[i][2]];\n ringStart = [cur[0], cur[1]];\n functions.push(null);\n } else if(parsed[i][0] === \"m\"){\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];\n ringStart = [cur[0], cur[1]];\n functions.push(null);\n }\n //lineTo\n else if(parsed[i][0] === \"L\"){\n length = length + Math.sqrt(Math.pow(cur[0] - parsed[i][1], 2) + Math.pow(cur[1] - parsed[i][2], 2));\n functions.push(new LinearPosition(cur[0], parsed[i][1], cur[1], parsed[i][2]));\n cur = [parsed[i][1], parsed[i][2]];\n } else if(parsed[i][0] === \"l\"){\n length = length + Math.sqrt(Math.pow(parsed[i][1], 2) + Math.pow(parsed[i][2], 2));\n functions.push(new LinearPosition(cur[0], parsed[i][1] + cur[0], cur[1], parsed[i][2] + cur[1]));\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];\n } else if(parsed[i][0] === \"H\"){\n length = length + Math.abs(cur[0] - parsed[i][1]);\n functions.push(new LinearPosition(cur[0], parsed[i][1], cur[1], cur[1]));\n cur[0] = parsed[i][1];\n } else if(parsed[i][0] === \"h\"){\n length = length + Math.abs(parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0] + parsed[i][1], cur[1], cur[1]));\n cur[0] = parsed[i][1] + cur[0];\n } else if(parsed[i][0] === \"V\"){\n length = length + Math.abs(cur[1] - parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0], cur[1], parsed[i][1]));\n cur[1] = parsed[i][1];\n } else if(parsed[i][0] === \"v\"){\n length = length + Math.abs(parsed[i][1]);\n functions.push(new LinearPosition(cur[0], cur[0], cur[1], cur[1] + parsed[i][1]));\n cur[1] = parsed[i][1] + cur[1];\n //Close path\n } else if(parsed[i][0] === \"z\" || parsed[i][0] === \"Z\"){\n length = length + Math.sqrt(Math.pow(ringStart[0] - cur[0], 2) + Math.pow(ringStart[1] - cur[1], 2));\n functions.push(new LinearPosition(cur[0], ringStart[0], cur[1], ringStart[1]));\n cur = [ringStart[0], ringStart[1]];\n }\n //Cubic Bezier curves\n else if(parsed[i][0] === \"C\"){\n curve = new Bezier(cur[0], cur[1] , parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4] , parsed[i][5], parsed[i][6]);\n length = length + curve.getTotalLength();\n cur = [parsed[i][5], parsed[i][6]];\n functions.push(curve);\n } else if(parsed[i][0] === \"c\"){\n curve = new Bezier(cur[0], cur[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4] , cur[0] + parsed[i][5], cur[1] + parsed[i][6]);\n length = length + curve.getTotalLength();\n cur = [parsed[i][5] + cur[0], parsed[i][6] + cur[1]];\n functions.push(curve);\n } else if(parsed[i][0] === \"S\"){\n if(i>0 && [\"C\",\"c\",\"S\",\"s\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2*cur[0] - parsed[i-1][parsed[i-1].length - 4], 2*cur[1] - parsed[i-1][parsed[i-1].length - 3], parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n } else {\n curve = new Bezier(cur[0], cur[1] , cur[0], cur[1], parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n cur = [parsed[i][3], parsed[i][4]];\n functions.push(curve);\n } else if(parsed[i][0] === \"s\"){ //240 225\n if(i>0 && [\"C\",\"c\",\"S\",\"s\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , cur[0] + curve.d.x - curve.c.x, cur[1] + curve.d.y - curve.c.y, cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n } else {\n curve = new Bezier(cur[0], cur[1] , cur[0], cur[1], cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];\n functions.push(curve);\n }\n //Quadratic Bezier curves\n else if(parsed[i][0] === \"Q\"){\n if(cur[0] != parsed[i][1] && cur[1] != parsed[i][2]){\n curve = new Bezier(cur[0], cur[1] , parsed[i][1], parsed[i][2] , parsed[i][3], parsed[i][4]);\n } else {\n curve = new LinearPosition(parsed[i][1], parsed[i][3], parsed[i][2], parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n functions.push(curve);\n cur = [parsed[i][3], parsed[i][4]];\n prev_point = [parsed[i][1], parsed[i][2]];\n\n } else if(parsed[i][0] === \"q\"){\n if(!(parsed[i][1] == 0 && parsed[i][2] == 0)){\n curve = new Bezier(cur[0], cur[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2] , cur[0] + parsed[i][3], cur[1] + parsed[i][4]);\n } else {\n curve = new LinearPosition(cur[0] + parsed[i][1], cur[0] + parsed[i][3], cur[1] + parsed[i][2], cur[1] + parsed[i][4]);\n }\n length = length + curve.getTotalLength();\n prev_point = [cur[0] + parsed[i][1], cur[1] + parsed[i][2]];\n cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];\n functions.push(curve);\n } else if(parsed[i][0] === \"T\"){\n if(i>0 && [\"Q\",\"q\",\"T\",\"t\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1] , parsed[i][1], parsed[i][2]);\n } else {\n curve = new LinearPosition(cur[0], parsed[i][1], cur[1], parsed[i][2]);\n }\n functions.push(curve);\n length = length + curve.getTotalLength();\n prev_point = [2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1]];\n cur = [parsed[i][1], parsed[i][2]];\n\n } else if(parsed[i][0] === \"t\"){\n if(i>0 && [\"Q\",\"q\",\"T\",\"t\"].indexOf(parsed[i-1][0]) > -1){\n curve = new Bezier(cur[0], cur[1] , 2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1] , cur[0] + parsed[i][1], cur[1] + parsed[i][2]);\n } else {\n curve = new LinearPosition(cur[0], cur[0] + parsed[i][1], cur[1], cur[1] + parsed[i][2]);\n }\n length = length + curve.getTotalLength();\n prev_point = [2 * cur[0] - prev_point[0] , 2 * cur[1] - prev_point[1]];\n cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[0]];\n functions.push(curve);\n } else if(parsed[i][0] === \"A\"){\n curve = new Arc(cur[0], cur[1], parsed[i][1], parsed[i][2], parsed[i][3], parsed[i][4], parsed[i][5], parsed[i][6], parsed[i][7]);\n\n length = length + curve.getTotalLength();\n cur = [parsed[i][6], parsed[i][7]];\n functions.push(curve);\n } else if(parsed[i][0] === \"a\"){\n curve = new Arc(cur[0], cur[1], parsed[i][1], parsed[i][2], parsed[i][3], parsed[i][4], parsed[i][5], cur[0] + parsed[i][6], cur[1] + parsed[i][7]);\n\n length = length + curve.getTotalLength();\n cur = [cur[0] + parsed[i][6], cur[1] + parsed[i][7]];\n functions.push(curve);\n }\n partial_lengths.push(length);\n\n }\n return svgProperties;\n }\n\n svgProperties.getTotalLength = function(){\n return length;\n };\n\n svgProperties.getPointAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getPointAtLength(fractionPart.fraction);\n };\n\n svgProperties.getTangentAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getTangentAtLength(fractionPart.fraction);\n };\n\n svgProperties.getPropertiesAtLength = function(fractionLength){\n var fractionPart = getPartAtLength(fractionLength);\n return functions[fractionPart.i].getPropertiesAtLength(fractionPart.fraction);\n };\n\n var getPartAtLength = function(fractionLength){\n if(fractionLength < 0){\n fractionLength = 0;\n } else if(fractionLength > length){\n fractionLength = length;\n }\n\n var i = partial_lengths.length - 1;\n\n while(partial_lengths[i] >= fractionLength && partial_lengths[i] > 0){\n i--;\n }\n i++;\n return {fraction: fractionLength-partial_lengths[i-1], i: i};\n };\n\n return svgProperties(svgString);\n}\n","import { toPathString } from \"./svg.js\";\nimport { polygonCentroid as d3Centroid } from \"d3-polygon\";\n\nexport function distance(a, b) {\n return Math.sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));\n}\n\nexport function pointAlong(a, b, pct) {\n return [a[0] + (b[0] - a[0]) * pct, a[1] + (b[1] - a[1]) * pct];\n}\n\nexport function samePoint(a, b) {\n return distance(a, b) < 1e-9;\n}\n\nexport function interpolatePoints(a, b, string) {\n let interpolators = a.map((d, i) => interpolatePoint(d, b[i]));\n\n return function(t) {\n let values = interpolators.map(fn => fn(t));\n return string ? toPathString(values) : values;\n };\n}\n\nexport function interpolatePoint(a, b) {\n return function(t) {\n return a.map((d, i) => d + t * (b[i] - d));\n };\n}\n\nexport function isFiniteNumber(number) {\n return typeof number === \"number\" && isFinite(number);\n}\n\n// Use plain mean if it's a degenerate polygon (colinear points or single point)\nexport function polygonCentroid(polygon) {\n return nonZeroArea(polygon) ? d3Centroid(polygon) : [\n (polygon[0][0] + polygon[polygon.length - 1][0]) / 2,\n (polygon[0][1] + polygon[polygon.length - 1][1]) / 2\n ];\n}\n\nfunction nonZeroArea(polygon) {\n\n for (let i = 0; i < polygon.length - 2; i++) {\n\n let a = polygon[i],\n b = polygon[i + 1],\n c = polygon[i + 2];\n\n if (a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) {\n return true;\n }\n\n }\n\n return false;\n\n}\n","export const INVALID_INPUT = `All shapes must be supplied as arrays of [x, y] points or an SVG path string (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d).\nExample valid ways of supplying a shape would be:\n[[0, 0], [10, 0], [10, 10]]\n\"M0,0 L10,0 L10,10Z\"\n`;\n\nexport const INVALID_INPUT_ALL = `flubber.all() expects two arrays of equal length as arguments. Each element in both arrays should be an array of [x, y] points or an SVG path string (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d).`;\n\nexport const INVALID_PATH_STRING = `Invalid SVG path string supplied.\nPath string reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\n`;\n","import Path from \"svgpath\";\nimport { svgPathProperties } from \"svg-path-properties\";\nimport normalizeRing from \"./normalize.js\";\nimport { isFiniteNumber } from \"./math.js\";\nimport { INVALID_INPUT } from \"./errors.js\";\n\nfunction parse(str) {\n return new Path(str).abs();\n}\n\nfunction split(parsed) {\n return parsed\n .toString()\n .split(\"M\")\n .map((d, i) => {\n d = d.trim();\n return i && d ? \"M\" + d : d;\n })\n .filter(d => d);\n}\n\nexport function toPathString(ring) {\n return \"M\" + ring.join(\"L\") + \"Z\";\n}\n\nexport function splitPathString(str) {\n return split(parse(str));\n}\n\nexport function pathStringToRing(str, maxSegmentLength) {\n let parsed = parse(str);\n\n return exactRing(parsed) || approximateRing(parsed, maxSegmentLength);\n}\n\nfunction exactRing(parsed) {\n let segments = parsed.segments || [],\n ring = [];\n\n if (!segments.length || segments[0][0] !== \"M\") {\n return false;\n }\n\n for (let i = 0; i < segments.length; i++) {\n let [command, x, y] = segments[i];\n if ((command === \"M\" && i) || command === \"Z\") {\n break;\n } else if (command === \"M\" || command === \"L\") {\n ring.push([x, y]);\n } else if (command === \"H\") {\n ring.push([x, ring[ring.length - 1][1]]);\n } else if (command === \"V\") {\n ring.push([ring[ring.length - 1][0], x]);\n } else {\n return false;\n }\n }\n\n return ring.length ? { ring } : false;\n}\n\nfunction approximateRing(parsed, maxSegmentLength) {\n let ringPath = split(parsed)[0],\n ring = [],\n props,\n len,\n m,\n numPoints = 3;\n\n if (!ringPath) {\n throw new TypeError(INVALID_INPUT);\n }\n\n m = measure(ringPath);\n len = m.getTotalLength();\n\n if (maxSegmentLength && isFiniteNumber(maxSegmentLength) && maxSegmentLength > 0) {\n numPoints = Math.max(numPoints, Math.ceil(len / maxSegmentLength));\n }\n\n for (let i = 0; i < numPoints; i++) {\n let p = m.getPointAtLength(len * i / numPoints);\n ring.push([p.x, p.y]);\n }\n\n return {\n ring,\n skipBisect: true\n };\n}\n\nfunction measure(d) {\n // Use native browser measurement if running in browser\n if (typeof window !== \"undefined\" && window && window.document) {\n try {\n let path = window.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttributeNS(null, \"d\", d);\n return path;\n } catch (e) {}\n }\n // Fall back to svg-path-properties\n return svgPathProperties(d);\n}\n","import { polygonLength } from \"d3-polygon\";\nimport { distance, pointAlong } from \"./math.js\";\n\nexport function addPoints(ring, numPoints) {\n const desiredLength = ring.length + numPoints,\n step = polygonLength(ring) / numPoints;\n\n let i = 0,\n cursor = 0,\n insertAt = step / 2;\n\n while (ring.length < desiredLength) {\n let a = ring[i],\n b = ring[(i + 1) % ring.length],\n segment = distance(a, b);\n\n if (insertAt <= cursor + segment) {\n ring.splice(i + 1, 0, segment ? pointAlong(a, b, (insertAt - cursor) / segment) : a.slice(0));\n insertAt += step;\n continue;\n }\n\n cursor += segment;\n i++;\n }\n}\n\nexport function bisect(ring, maxSegmentLength = Infinity) {\n for (let i = 0; i < ring.length; i++) {\n let a = ring[i],\n b = i === ring.length - 1 ? ring[0] : ring[i + 1];\n\n // Could splice the whole set for a segment instead, but a bit messy\n while (distance(a, b) > maxSegmentLength) {\n b = pointAlong(a, b, 0.5);\n ring.splice(i + 1, 0, b);\n }\n }\n}\n","import { polygonArea } from \"d3-polygon\";\nimport { pathStringToRing } from \"./svg.js\";\nimport { samePoint, isFiniteNumber } from \"./math.js\";\nimport { bisect } from \"./add.js\";\nimport { INVALID_INPUT } from \"./errors.js\";\n\nexport default function normalizeRing(ring, maxSegmentLength) {\n let points, area, skipBisect;\n\n if (typeof ring === \"string\") {\n let converted = pathStringToRing(ring, maxSegmentLength);\n ring = converted.ring;\n skipBisect = converted.skipBisect;\n } else if (!Array.isArray(ring)) {\n throw new TypeError(INVALID_INPUT);\n }\n\n points = ring.slice(0);\n\n if (!validRing(points)) {\n throw new TypeError(INVALID_INPUT);\n }\n\n // TODO skip this test to avoid scale issues?\n // Chosen epsilon (1e-6) is problematic for small coordinate range\n if (points.length > 1 && samePoint(points[0], points[points.length - 1])) {\n points.pop();\n }\n\n area = polygonArea(points);\n\n // Make all rings clockwise\n if (area > 0) {\n points.reverse();\n }\n\n if (\n !skipBisect &&\n maxSegmentLength &&\n isFiniteNumber(maxSegmentLength) &&\n maxSegmentLength > 0\n ) {\n bisect(points, maxSegmentLength);\n }\n\n return points;\n}\n\nfunction validRing(ring) {\n return ring.every(function(point) {\n return (\n Array.isArray(point) &&\n point.length >= 2 &&\n isFiniteNumber(point[0]) &&\n isFiniteNumber(point[1])\n );\n });\n}\n","import { distance } from \"./math.js\";\n\nexport default function(ring, vs) {\n let len = ring.length,\n min = Infinity,\n bestOffset,\n sumOfSquares,\n spliced;\n\n for (let offset = 0; offset < len; offset++) {\n sumOfSquares = 0;\n\n vs.forEach(function(p, i){\n let d = distance(ring[(offset + i) % len], p);\n sumOfSquares += d * d;\n });\n\n if (sumOfSquares < min) {\n min = sumOfSquares;\n bestOffset = offset;\n }\n }\n\n if (bestOffset) {\n spliced = ring.splice(0, bestOffset);\n ring.splice(ring.length, 0, ...spliced);\n }\n}\n","import normalizeRing from \"./normalize.js\";\nimport { addPoints } from \"./add.js\";\nimport rotate from \"./rotate.js\";\nimport { interpolatePoints } from \"./math.js\";\n\nexport default function(fromShape, toShape, { maxSegmentLength = 10, string = true } = {}) {\n let fromRing = normalizeRing(fromShape, maxSegmentLength),\n toRing = normalizeRing(toShape, maxSegmentLength),\n interpolator = interpolateRing(fromRing, toRing, string);\n\n // Extra optimization for near either end with path strings\n if (!string || (typeof fromShape !== \"string\" && typeof toShape !== \"string\")) {\n return interpolator;\n }\n\n return t => {\n if (t < 1e-4 && typeof fromShape === \"string\") {\n return fromShape;\n }\n if (1 - t < 1e-4 && typeof toShape === \"string\") {\n return toShape;\n }\n return interpolator(t);\n };\n}\n\nexport function interpolateRing(fromRing, toRing, string) {\n let diff;\n\n diff = fromRing.length - toRing.length;\n\n // TODO bisect and add points in one step?\n addPoints(fromRing, diff < 0 ? diff * -1 : 0);\n addPoints(toRing, diff > 0 ? diff : 0);\n\n rotate(fromRing, toRing);\n\n return interpolatePoints(fromRing, toRing, string);\n}\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import { interpolate } from \"flubber\";\n\nimport { Interpolator } from \"../../types/Interpolator\";\n\nexport function getSmoothPathInterpolator(\n fromPath: string,\n toPath: string,\n maxSegmentLength: number = 3,\n): Interpolator<string> {\n const pathInterpolator = interpolate(fromPath, toPath, { maxSegmentLength });\n\n return {\n check: (value: unknown): value is string => {\n return typeof value === \"string\";\n },\n interpolate: (_fromPath: string, _toPath: string, proportion: number): string => {\n return pathInterpolator(proportion);\n },\n };\n}\n","import { Position } from \"../../types/Position\";\nimport { Size } from \"../../types/Size\";\n\ninterface Return {\n scaleX: (proportion: number) => number;\n scaleY: (proportion: number) => number;\n position: (xProportion: number, yProportion: number) => Position;\n}\n\n/** Returns sizing functions for calculating proportional sizes. */\nexport function getSizingFunctions(size: Size): Return {\n const scaleX = (proportion: number) => size.width * proportion;\n const scaleY = (proportion: number) => size.height * proportion;\n\n return {\n scaleX,\n scaleY,\n position: (xProportion: number, yProportion: number) =>\n Position({\n x: scaleX(xProportion),\n y: scaleY(yProportion),\n }),\n };\n}\n","import { Slide } from \"../../types/Slide\";\n\n/**\n * Slides can define which builds are considered \"key\", e.g. to indicate which builds should be included in exports.\n */\nexport function getKeySlideBuildIndices(slide: Slide): number[] {\n const buildIndices: number[] = [];\n\n // If every build is key, include all build indices\n if (slide.isAllKey) {\n for (let i = 0; i <= slide.animations.length; i++) {\n buildIndices.push(i);\n }\n return buildIndices;\n }\n\n // Slide can configure its own starting state to be key\n if (slide.isStartKey) {\n buildIndices.push(0);\n }\n\n // Check animations for key build indicators\n slide.animations.forEach((animation, animationIndex) => {\n if (Array.isArray(animation)) {\n if (animation.some((anim) => anim.isKey)) {\n buildIndices.push(animationIndex + 1);\n }\n } else {\n if (animation.isKey) {\n buildIndices.push(animationIndex + 1);\n }\n }\n });\n\n // Slide can configure its own ending state to be key\n if (slide.isEndKey && buildIndices[buildIndices.length - 1] !== slide.animations.length) {\n buildIndices.push(slide.animations.length);\n }\n\n return buildIndices;\n}\n"],"names":["AnimationType","cubicIn","t","cubicOut","cubicInOut","overshoot","custom","s","backIn","backOut","backInOut","Easing","easeCubic","easeCubicIn","easeCubicOut","easeBackInOut","DEFAULT_EASING","Animate","object","props","animationParams","FadeIn","FadeOut","Update","updateParams","Hide","Show","Anchor","DEFAULT_ANCHOR","Color","color","green","blue","alpha","hexString","hex","DEFAULT_COLOR","SlideWebExtra","getAlphaForColor","opacity","getHexStringForColor","red","alphaHex","IFrame","url","backgroundColor","borderColor","borderWidth","pointerEvents","scale","anchor","height","width","x","y","iframe","scaledSize","Alignment","DEFAULT_ALIGNMENT","assertNever","value","message","ScreenCapture","alignment","setup","foreignObject","video","displayMediaOptions","stream","videoTrack","error","track","ObjectType","SlideObject","Arrow","inputArrowheadSize","rest","arrowheadSize","DEFAULT_CIRCLE_RADIUS","Circle","Group","objects","Grid","cols","rows","gapX","gapY","groupProps","originX","originY","gridObjects","groupObjects","row","rowObjects","rowHeight","col","objectWidth","objectHeight","Image","Line","Mask","e","h","n","i","g","_a","a","__publicField","r","o","c","l","u","p","f","L","A","w","P","T","d","b","v","m","M","q","_","C","N","Transparent","Path","path","viewboxHeight","viewboxWidth","pathDescription","pathLength","svgPathProperties","Polygon","Rectangle","SVG","FontStyle","DEFAULT_FONT_STYLE","FontWeight","DEFAULT_FONT_WEIGHT","DEFAULT_TEXT_STYLE","getTextUnitsFromTextContent","text","line","unit","getTextContentLength","totalLength","lineLength","Text","navigatorWindow","openNavigator","presentation","onNavigateToSlide","navigatorElement","createNavigatorElement","event","slide","index","slideElement","createSlideElement","slideIndex","Size","DEFAULT_SIZE","Presentation","getSlideAnimationDuration","slideAnimation","animations","startTime","duration","animation","getRgbStringForColor","isFullBodyPresentation","element","createPresentationContainer","root","container","targetAspectRatio","updateContainerSize","interpolateColor","from","to","proportion","interpolateFallback","_value","_from","interpolateNumber","DEFAULT_INTERPOLATORS","interpolate","customInterpolators","interpolators","interpolatedProps","key","fromValue","toValue","interpolator","updateObjectStateWithAnimation","objectState","buildTime","elapsedTime","currentObject","timeIntoAnimation","getObjectChildren","getObjectState","buildIndex","addObjectToState","childObject","completedBuildCount","getSvgImageUrlById","svgStrings","walkSlideObject","svg","children","child","getPresentationShortcuts","slides","shortcuts","shortcut","addShortcut","animationIndex","anim","setupKeyEventListeners","shortcutState","onNext","onPrevious","onRenderSlide","onShowNavigator","command","shortcutConfig","LOCAL_STORAGE_KEY","loadPresentationState","ttlMinutes","state","data","title","timestamp","storePresentationState","BROWSER_CANVAS_RENDERER_DEFAULT_STATE","CanvasContextType","clearCanvas","canvas","ctx","createCanvasElement","size","Path2DType","createPath2D","pathData","getArrowPoints","arrow","drawn","startX","startY","endX","endY","isArrowheadFilled","isDrawnFromCenter","start","end","angle","midpoint","dx","dy","drawnLength","unitX","unitY","drawnStart","drawnEnd","arrowAngle","adjustedArrowheadSize","arrowheadBase1","arrowheadBase2","doubledArrowheadBase1","doubledArrowheadBase2","drawStroke","isRounded","fullPathLength","fillPath","getPathFromPositions","positions","createPath","firstPosition","length","position","prevPosition","renderArrow","targetOpacity","arrowPoints","arrowheadPoints","doubledArrowheadPoints","arrowPath","arrowheadPath","doubledArrowheadPath","getCircleInsetFillPath","circle","insetRadius","startAngle","getCirclePath","clipToPath","renderCircle","insetFillPath","Position","DEFAULT_POSITION","BoundingBox","getBoundingBox","renderGroup","group","renderObject","scaleX","scaleY","boundingBox","rotation","rotateOriginX","rotateOriginY","skewOriginX","skewOriginY","skewX","skewY","getRoundedRectanglePath","origin","rounding","ImageType","renderImage","imageById","image","imageData","roundedRectPath","getLinePath","renderLine","renderMask","mask","bbox","renderPath","path2D","getPolygonPath","polygon","points","firstPoint","previousPoint","point","segmentLength","closingSegmentLength","renderPolygon","getRectangleInsetFillPath","rectangle","inset","insetWidth","insetHeight","insetOrigin","insetSize","getRectanglePath","renderRectangle","renderSvg","getTextStyleFromText","getCombinedSizes2D","sizes","lineSpacing","previousLineHeight","lineHeight","getSizeFromTextMetrics","textMetrics","setContextWithTextStyle","textStyle","getTextUnitMeasurements","textUnits","style","lineSizes","unitStyle","combinedStyle","metrics","renderText","consumedLength","lineIndex","lineWidth","acc","curr","unitIndex","unitSize","unitText","truncatedUnitText","remainingLength","targetUnitText","DEFAULT_OBJECT_RENDERERS","createExtrasElement","extrasElement","mountWebExtra","extra","extraElement","cleanup","cleanupResult","loadPresentationImages","imagePathById","loadImage","src","resolve","reject","img","err","sanitized","svgBlob","loadPromises","id","BrowserCanvasRenderer","objectRenderers","getValidScale","extrasContainer","skipIntermediateBuilds","loadedState","didSlideIndexChange","context","objectRenderer","needsScaleTransformation","currentAnimationId","currentSlide","nextAnimation","animationDuration","animate","currentTime","elapsed","previousSlide","Pause","Slide","TextUnit","Opaque","polygonArea","area","polygonLength","xa","ya","xb","yb","perimeter","paramCounts","SPECIAL_SPACES","isSpace","ch","isCommand","code","isArc","isDigit","isDigitStart","State","skipSpaces","scanFlag","scanParam","max","zeroFirst","hasCeiling","hasDecimal","hasDot","finalizeSegment","cmd","cmdLC","params","scanSegment","cmdCode","is_arc","comma_found","need_params","path_parse","svgPath","combine","m1","m2","Matrix","tx","ty","sx","sy","rx","ry","rad","cos","sin","isRelative","matrix","require$$0","operations","CMD_SPLIT_RE","PARAMS_SPLIT_RE","transform_parse","transformString","item","TAU","unit_vector_angle","ux","uy","vx","vy","sign","dot","get_arc_center","x1","y1","x2","y2","fa","fs","sin_phi","cos_phi","x1p","y1p","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","cx","cy","v1x","v1y","v2x","v2y","theta1","delta_theta","approximate_unit_arc","a2c","phi","lambda","cc","result","segments","curve","xp","yp","epsilon","torad","Ellipse","ax","ma","J","K","D","JK","l1","l2","ellipse","pathParse","transformParse","require$$1","require$$2","require$$3","require$$4","SvgPath","pstate","sgm","self","name","prevCmd","cmdSkipped","len","segment","pos","val","degrees","contourStartDeltaX","contourStartDeltaY","deltaX","deltaY","iterator","keepLazyStack","replacements","needReplace","lastX","lastY","countourStartX","countourStartY","j","newSegments","res","nameUC","nameLC","new_segments","nextX","nextY","prevControlX","prevControlY","prevSegment","curControlX","curControlY","idx","svgpath","parse$1","args","type","parseValues","number","numbers","Bezier","ay","bx","by","getCubicArcLength","cubicPoint","cubicDerivative","getQuadraticArcLength","quadraticPoint","quadraticDerivative","t2length","derivative","mdl","tangent","xs","ys","total_length","func","step","increasedTLength","decreasedTLength","increasedTError","decreasedTError","B","k","tValues","cValues","binomialCoefficients","binomials","getDerivative","vs","_vs","xbase","ybase","combined","z","sum","correctedT","Arc","x0","y0","xAxisRotate","LargeArcFlag","SweepFlag","partialLengths","curves","curveLength","fractionLength","lengthOffset","LinearPosition","fraction","newDeltaX","newDeltaY","module","svgString","partial_lengths","functions","svgProperties","string","parsed","parse","cur","prev_point","ringStart","fractionPart","getPartAtLength","distance","pointAlong","pct","samePoint","interpolatePoints","interpolatePoint","values","fn","toPathString","isFiniteNumber","INVALID_INPUT","str","split","ring","pathStringToRing","maxSegmentLength","exactRing","approximateRing","ringPath","numPoints","measure","addPoints","desiredLength","cursor","insertAt","bisect","normalizeRing","skipBisect","converted","validRing","rotate","min","bestOffset","sumOfSquares","spliced","offset","fromShape","toShape","fromRing","toRing","interpolateRing","diff","earcutModule","earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","again","ear","pass","indexCurve","stop","prev","next","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minZ","zOrder","maxZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","list","getLeftmost","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","mx","my","tanMin","tan","sectorContainsSector","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","o1","o2","o3","o4","onSegment","num","inside","a2","Node","b2","an","bp","trianglesArea","holeIndex","ascending","bisector","compare","ascendingComparator","lo","hi","mid","getSmoothPathInterpolator","fromPath","toPath","pathInterpolator","_fromPath","_toPath","getSizingFunctions","xProportion","yProportion","getKeySlideBuildIndices","buildIndices"],"mappings":"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kB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,qBAAmB,oBAAkB,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,mBAAiB,kBAAgB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,sBAAoB,qBAAmB,sBAAoB,qBAAmB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,GAAE,qBAAmB,oBAAkB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,GAAE,CAAC,sBAAoB,qBAAmB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,oBAAkB,mBAAiB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,oBAAkB,qBAAmB,kBAAiB,CAAC,GAAEC,KAAE,CAAC,CAAA,GAAG,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,oBAAkB,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,oBAAkB,kBAAiB,GAAE,CAAC,mBAAiB,mBAAiB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,sBAAoB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,mBAAkB,GAAE,CAAC,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,kBAAgB,kBAAgB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,oBAAkB,oBAAkB,sBAAoB,sBAAoB,sBAAoB,sBAAoB,sBAAoB,oBAAmB,GAAE,CAAC,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,sBAAoB,sBAAoB,qBAAmB,qBAAmB,oBAAkB,kBAAiB,GAAE,CAAC,qBAAmB,oBAAkB,oBAAkB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAmB,qBAAm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","x_google_ignoreList":[1,2,28,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]}
|