@bug-on/m3-expressive 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +110 -0
  3. package/dist/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
  4. package/dist/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  5. package/dist/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  6. package/dist/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  7. package/dist/assets/loading-indicator.svg +19 -0
  8. package/dist/assets/material-symbols-cdn.css +65 -0
  9. package/dist/assets/material-symbols-self-hosted.css +94 -0
  10. package/dist/buttons.d.mts +180 -0
  11. package/dist/buttons.d.ts +180 -0
  12. package/dist/buttons.js +4282 -0
  13. package/dist/buttons.js.map +1 -0
  14. package/dist/buttons.mjs +4227 -0
  15. package/dist/buttons.mjs.map +1 -0
  16. package/dist/core.d.mts +422 -0
  17. package/dist/core.d.ts +422 -0
  18. package/dist/core.js +2581 -0
  19. package/dist/core.js.map +1 -0
  20. package/dist/core.mjs +2547 -0
  21. package/dist/core.mjs.map +1 -0
  22. package/dist/feedback.d.mts +600 -0
  23. package/dist/feedback.d.ts +600 -0
  24. package/dist/feedback.js +2357 -0
  25. package/dist/feedback.js.map +1 -0
  26. package/dist/feedback.mjs +2321 -0
  27. package/dist/feedback.mjs.map +1 -0
  28. package/dist/forms.d.mts +40 -0
  29. package/dist/forms.d.ts +40 -0
  30. package/dist/forms.js +4263 -0
  31. package/dist/forms.js.map +1 -0
  32. package/dist/forms.mjs +4228 -0
  33. package/dist/forms.mjs.map +1 -0
  34. package/dist/icon-button-D-gs0gfj.d.mts +136 -0
  35. package/dist/icon-button-D-gs0gfj.d.ts +136 -0
  36. package/dist/index.css +309 -0
  37. package/dist/index.css.d.ts +2 -0
  38. package/dist/index.d.mts +24 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.js +23972 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/index.mjs +23668 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/layout.d.mts +610 -0
  45. package/dist/layout.d.ts +610 -0
  46. package/dist/layout.js +5091 -0
  47. package/dist/layout.js.map +1 -0
  48. package/dist/layout.mjs +5042 -0
  49. package/dist/layout.mjs.map +1 -0
  50. package/dist/material-symbols-cdn.css +65 -0
  51. package/dist/material-symbols-cdn.css.d.ts +2 -0
  52. package/dist/material-symbols-self-hosted.css +94 -0
  53. package/dist/material-symbols-self-hosted.css.d.ts +2 -0
  54. package/dist/md3-DFhj-NZj.d.mts +17 -0
  55. package/dist/md3-DFhj-NZj.d.ts +17 -0
  56. package/dist/navigation.d.mts +2766 -0
  57. package/dist/navigation.d.ts +2766 -0
  58. package/dist/navigation.js +6684 -0
  59. package/dist/navigation.js.map +1 -0
  60. package/dist/navigation.mjs +6573 -0
  61. package/dist/navigation.mjs.map +1 -0
  62. package/dist/overlays.d.mts +161 -0
  63. package/dist/overlays.d.ts +161 -0
  64. package/dist/overlays.js +3298 -0
  65. package/dist/overlays.js.map +1 -0
  66. package/dist/overlays.mjs +3244 -0
  67. package/dist/overlays.mjs.map +1 -0
  68. package/dist/pickers.d.mts +1074 -0
  69. package/dist/pickers.d.ts +1074 -0
  70. package/dist/pickers.js +4240 -0
  71. package/dist/pickers.js.map +1 -0
  72. package/dist/pickers.mjs +4200 -0
  73. package/dist/pickers.mjs.map +1 -0
  74. package/dist/plugin.d.mts +1 -0
  75. package/dist/plugin.d.ts +1 -0
  76. package/dist/plugin.js +13 -0
  77. package/dist/plugin.js.map +1 -0
  78. package/dist/plugin.mjs +3 -0
  79. package/dist/plugin.mjs.map +1 -0
  80. package/dist/scroll-area-CVS6HyLl.d.mts +33 -0
  81. package/dist/scroll-area-CVS6HyLl.d.ts +33 -0
  82. package/dist/shapes.d.mts +1119 -0
  83. package/dist/shapes.d.ts +1119 -0
  84. package/dist/shapes.js +2941 -0
  85. package/dist/shapes.js.map +1 -0
  86. package/dist/shapes.mjs +2889 -0
  87. package/dist/shapes.mjs.map +1 -0
  88. package/dist/side-sheet-modal-BY6VCC8p.d.mts +553 -0
  89. package/dist/side-sheet-modal-CglP6KYA.d.ts +553 -0
  90. package/dist/split-button-trailing-uncheckable-C5CLCIKP.d.ts +731 -0
  91. package/dist/split-button-trailing-uncheckable-MXj_kyNt.d.mts +731 -0
  92. package/dist/text-field-eAIpz9z1.d.mts +1038 -0
  93. package/dist/text-field-eAIpz9z1.d.ts +1038 -0
  94. package/dist/typography-339RV6v7.d.mts +486 -0
  95. package/dist/typography-339RV6v7.d.ts +486 -0
  96. package/dist/typography.css +22 -0
  97. package/dist/typography.css.d.ts +2 -0
  98. package/package.json +207 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shapes/core/features.ts","../src/shapes/math/corner-rounding.ts","../src/shapes/utils/utils.ts","../src/shapes/math/point.ts","../src/shapes/math/cubic.ts","../src/shapes/core/rounded-polygon.ts","../src/shapes/catalog/md3-expressive-shapes.ts","../src/shapes/catalog/shape-tokens.ts","../src/shapes/catalog/shapes.ts","../src/shapes/morph/float-mapping.ts","../src/shapes/morph/feature-mapping.ts","../src/shapes/morph/polygon-measure.ts","../src/shapes/morph/morph.ts","../src/shapes/render/shape-rendering.ts","../src/ui/shape-media/useShapeMorph.ts","../src/ui/shape-media/shape-media.tsx","../src/ui/shape-media/shape-icon.tsx","../src/ui/shape-media/shape-media-server.tsx","../src/ui/shape-media/shape-svg.tsx"],"names":["convex","clockwise","useRef","useState","useEffect","jsx","useMemo"],"mappings":"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","file":"shapes.mjs","sourcesContent":["/**\n * Feature types for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Features.kt\n *\n * Features describe the outline segments of a RoundedPolygon:\n * - Corner: a (potentially rounded) vertex\n * - Edge: a straight or curved segment between two corners\n */\n\nimport type { Cubic } from \"../math/cubic\";\nimport type { PointTransformer } from \"../utils/utils\";\n\n/**\n * A discriminated union representing one outline segment of a polygon.\n *\n * @example\n * const corner: Feature = { type: \"corner\", cubics: [...], convex: true };\n * const edge: Feature = { type: \"edge\", cubics: [...] };\n */\nexport type Feature = CornerFeature | EdgeFeature;\n\n/** A (potentially rounded) corner vertex. */\nexport interface CornerFeature {\n\treadonly type: \"corner\";\n\t/**\n\t * Cubic curves making up this corner.\n\t * Unrounded corner = 1 zero-length cubic. Rounded = 1–3 cubics (flanking + arc + flanking).\n\t */\n\treadonly cubics: Cubic[];\n\t/** True if this corner is convex (pointing outward). */\n\treadonly convex: boolean;\n}\n\n/** A straight or curved edge segment between two corners. */\nexport interface EdgeFeature {\n\treadonly type: \"edge\";\n\t/** Cubic curves making up this edge (usually a single straight-line cubic). */\n\treadonly cubics: Cubic[];\n}\n\n/**\n * Creates a corner feature.\n * @param cubics - Cubic curves defining the corner shape\n * @param convex - Whether the corner is convex\n */\nexport function cornerFeature(cubics: Cubic[], convex: boolean): CornerFeature {\n\treturn { type: \"corner\", cubics, convex };\n}\n\n/**\n * Creates an edge feature.\n * @param cubics - Cubic curves defining the edge\n */\nexport function edgeFeature(cubics: Cubic[]): EdgeFeature {\n\treturn { type: \"edge\", cubics };\n}\n\n/**\n * Returns a transformed copy of a feature.\n * @param feature - The feature to transform\n * @param fn - Point transformer function\n */\nexport function transformFeature(\n\tfeature: Feature,\n\tfn: PointTransformer,\n): Feature {\n\tconst cubics = feature.cubics.map((c) => c.transformed(fn));\n\tif (feature.type === \"corner\") {\n\t\treturn cornerFeature(cubics, feature.convex);\n\t}\n\treturn edgeFeature(cubics);\n}\n","/**\n * Corner rounding parameters for polygon vertices.\n * Ported from androidx.graphics.shapes.CornerRounding.kt\n *\n * @see https://m3.material.io/styles/shape/corner-radius-scale\n */\n\n/**\n * Defines how a polygon corner is rounded.\n *\n * @example\n * // Fully rounded corner with radius 16\n * const rounding: CornerRounding = { radius: 16, smoothing: 0 };\n *\n * @example\n * // Rounded corner with iOS-style squircle smoothing\n * const smoothRounding: CornerRounding = { radius: 16, smoothing: 0.6 };\n */\nexport interface CornerRounding {\n\t/**\n\t * The radius of the rounding. A value of 0 means no rounding (sharp corner).\n\t * @default 0\n\t */\n\treadonly radius: number;\n\n\t/**\n\t * Smoothing factor in [0, 1]. Controls how the rounding curve transitions from\n\t * the straight edge to the circular arc (squircle-like effect).\n\t * 0 = pure circular arc, 1 = maximum smoothing.\n\t * @default 0\n\t */\n\treadonly smoothing: number;\n}\n\n/**\n * Creates a CornerRounding.\n * @param radius - Rounding radius (default: 0)\n * @param smoothing - Smoothing factor 0–1 (default: 0)\n */\nexport function cornerRounding(radius = 0, smoothing = 0): CornerRounding {\n\treturn { radius, smoothing };\n}\n\n/** No rounding: straight/sharp corners. */\nexport const UNROUNDED: CornerRounding = Object.freeze({\n\tradius: 0,\n\tsmoothing: 0,\n});\n","/**\n * Shared utility constants and functions for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Utils.kt\n *\n * @see https://m3.material.io/styles/shape/overview-principles\n */\n\n/** Epsilon for floating-point distance comparisons */\nexport const DISTANCE_EPSILON = 1e-4;\n\n/** Epsilon for angle comparisons */\nexport const ANGLE_EPSILON = 1e-4;\n\n/** Pi as a float constant */\nexport const FLOAT_PI = Math.PI;\n\n/**\n * Calculates the Euclidean distance between two coordinate offsets.\n * @param dx - Difference in x coordinates\n * @param dy - Difference in y coordinates\n * @returns The distance\n */\nexport function distance(dx: number, dy: number): number {\n\treturn Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Calculates the squared Euclidean distance (cheaper than distance).\n * @param dx - Difference in x coordinates\n * @param dy - Difference in y coordinates\n * @returns The squared distance\n */\nexport function distanceSquared(dx: number, dy: number): number {\n\treturn dx * dx + dy * dy;\n}\n\n/**\n * Converts polar coordinates to Cartesian (x, y).\n * @param radius - The radial distance\n * @param angle - The angle in radians\n * @returns A tuple [x, y]\n */\nexport function radialToCartesian(\n\tradius: number,\n\tangle: number,\n): [number, number] {\n\treturn [radius * Math.cos(angle), radius * Math.sin(angle)];\n}\n\n/**\n * Returns value modulo divisor, always positive.\n * @param value - The value\n * @param divisor - The divisor\n * @returns Positive modulo result\n */\nexport function positiveModulo(value: number, divisor: number): number {\n\treturn ((value % divisor) + divisor) % divisor;\n}\n\n/**\n * Linearly interpolates between start and stop.\n * @param start - Start value (at fraction=0)\n * @param stop - End value (at fraction=1)\n * @param fraction - Interpolation factor [0,1]\n * @returns Interpolated value\n */\nexport function interpolate(\n\tstart: number,\n\tstop: number,\n\tfraction: number,\n): number {\n\treturn start + (stop - start) * fraction;\n}\n\n/**\n * Returns the square of a value.\n * @param value - The value to square\n */\nexport function square(value: number): number {\n\treturn value * value;\n}\n\n/**\n * Returns a unit direction vector from (0,0) toward (dx, dy).\n * @param dx - X component\n * @param dy - Y component\n * @returns [nx, ny] normalized direction\n */\nexport function directionVector(dx: number, dy: number): [number, number] {\n\tconst d = distance(dx, dy);\n\tif (d < DISTANCE_EPSILON) return [0, 0];\n\treturn [dx / d, dy / d];\n}\n\n/**\n * Checks if the turn from prev→curr→next is convex (clockwise in screen coords).\n * @param prevX - Previous vertex x\n * @param prevY - Previous vertex y\n * @param currX - Current vertex x\n * @param currY - Current vertex y\n * @param nextX - Next vertex x\n * @param nextY - Next vertex y\n * @returns true if convex\n */\nexport function convex(\n\tprevX: number,\n\tprevY: number,\n\tcurrX: number,\n\tcurrY: number,\n\tnextX: number,\n\tnextY: number,\n): boolean {\n\t// Cross product of (curr-prev) × (next-curr)\n\tconst v1x = currX - prevX;\n\tconst v1y = currY - prevY;\n\tconst v2x = nextX - currX;\n\tconst v2y = nextY - currY;\n\treturn v1x * v2y - v1y * v2x > 0;\n}\n\n/**\n * Type for a function that transforms a point (x, y) → (x', y').\n */\nexport type PointTransformer = (x: number, y: number) => [number, number];\n","/**\n * Point type and operations for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Point.kt\n *\n * In Kotlin, Point is a type alias for FloatFloatPair. Here we use a plain object\n * for zero-overhead structural typing in TypeScript.\n */\n\nimport {\n\tDISTANCE_EPSILON,\n\tdirectionVector,\n\tdistance,\n\tinterpolate,\n\ttype PointTransformer,\n} from \"../utils/utils\";\n\n/** A 2D point or vector. */\nexport interface Point {\n\treadonly x: number;\n\treadonly y: number;\n}\n\n/**\n * Creates a new Point.\n * @param x - X coordinate\n * @param y - Y coordinate\n */\nexport function point(x: number, y: number): Point {\n\treturn { x, y };\n}\n\n/**\n * Returns the magnitude (distance from origin) of the point.\n * @param p - The point\n */\nexport function getDistance(p: Point): number {\n\treturn distance(p.x, p.y);\n}\n\n/**\n * Returns the squared magnitude of the point (cheaper than getDistance).\n * @param p - The point\n */\nexport function getDistanceSquared(p: Point): number {\n\treturn p.x * p.x + p.y * p.y;\n}\n\n/**\n * Dot product of two points (treated as vectors).\n * @param a - First point\n * @param b - Second point\n */\nexport function dotProduct(a: Point, b: Point): number {\n\treturn a.x * b.x + a.y * b.y;\n}\n\n/**\n * Rotates the point 90 degrees counter-clockwise.\n * @param p - The point\n * @returns New rotated point\n */\nexport function rotate90(p: Point): Point {\n\treturn { x: -p.y, y: p.x };\n}\n\n/**\n * Returns the unit vector in the direction of the point from (0,0).\n * @param p - The point\n * @throws Error if the point is at the origin\n */\nexport function getDirection(p: Point): Point {\n\tconst d = getDistance(p);\n\tif (d < DISTANCE_EPSILON)\n\t\tthrow new Error(\"Can't get direction of zero-length vector\");\n\treturn { x: p.x / d, y: p.y / d };\n}\n\n/**\n * Checks if p0→p1→p2 turn is clockwise (positive cross product in screen coords).\n * @param p0 - Previous point\n * @param p1 - Current point\n * @param p2 - Next point\n */\nexport function clockwise(p0: Point, p1: Point, p2: Point): boolean {\n\tconst v1x = p1.x - p0.x;\n\tconst v1y = p1.y - p0.y;\n\tconst v2x = p2.x - p1.x;\n\tconst v2y = p2.y - p1.y;\n\treturn v1x * v2y - v1y * v2x > 0;\n}\n\n/** Point addition. */\nexport function addPoints(a: Point, b: Point): Point {\n\treturn { x: a.x + b.x, y: a.y + b.y };\n}\n\n/** Point subtraction. */\nexport function subtractPoints(a: Point, b: Point): Point {\n\treturn { x: a.x - b.x, y: a.y - b.y };\n}\n\n/** Scalar multiplication. */\nexport function scalePoint(p: Point, scalar: number): Point {\n\treturn { x: p.x * scalar, y: p.y * scalar };\n}\n\n/** Scalar division. */\nexport function dividePoint(p: Point, scalar: number): Point {\n\treturn { x: p.x / scalar, y: p.y / scalar };\n}\n\n/**\n * Linearly interpolates between two points.\n * @param start - Start point (at fraction=0)\n * @param stop - End point (at fraction=1)\n * @param fraction - Interpolation factor [0,1]\n */\nexport function lerpPoint(start: Point, stop: Point, fraction: number): Point {\n\treturn {\n\t\tx: interpolate(start.x, stop.x, fraction),\n\t\ty: interpolate(start.y, stop.y, fraction),\n\t};\n}\n\n/**\n * Returns a direction unit vector from dx/dy components.\n * @param dx - X component\n * @param dy - Y component\n */\nexport function pointDirection(dx: number, dy: number): Point {\n\tconst [nx, ny] = directionVector(dx, dy);\n\treturn { x: nx, y: ny };\n}\n\n/**\n * Applies a PointTransformer to a point.\n * @param p - The original point\n * @param fn - The transform function\n */\nexport function transformPoint(p: Point, fn: PointTransformer): Point {\n\tconst [tx, ty] = fn(p.x, p.y);\n\treturn { x: tx, y: ty };\n}\n","/**\n * Cubic Bézier curve type for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Cubic.kt\n *\n * A cubic holds 8 floats: [anchor0X, anchor0Y, control0X, control0Y, control1X, control1Y, anchor1X, anchor1Y]\n */\n\nimport type { PointTransformer } from \"../utils/utils\";\nimport { DISTANCE_EPSILON, interpolate, square } from \"../utils/utils\";\nimport { type Point, point } from \"./point\";\n\n/**\n * A single cubic Bézier curve segment.\n *\n * The curve goes from anchor0 → (via control0, control1) → anchor1.\n *\n * @example\n * const line = Cubic.straightLine(0, 0, 1, 0);\n * const arc = Cubic.circularArc(0, 0, 1, 0, 0, 1);\n */\nexport class Cubic {\n\t/** Internal storage: [a0x, a0y, c0x, c0y, c1x, c1y, a1x, a1y] */\n\treadonly points: number[];\n\n\tconstructor(points: number[]) {\n\t\tif (points.length !== 8)\n\t\t\tthrow new Error(\"Cubic points array must have exactly 8 elements\");\n\t\tthis.points = points;\n\t}\n\n\t/** First anchor point X */\n\tget anchor0X(): number {\n\t\treturn this.points[0];\n\t}\n\t/** First anchor point Y */\n\tget anchor0Y(): number {\n\t\treturn this.points[1];\n\t}\n\t/** First control point X */\n\tget control0X(): number {\n\t\treturn this.points[2];\n\t}\n\t/** First control point Y */\n\tget control0Y(): number {\n\t\treturn this.points[3];\n\t}\n\t/** Second control point X */\n\tget control1X(): number {\n\t\treturn this.points[4];\n\t}\n\t/** Second control point Y */\n\tget control1Y(): number {\n\t\treturn this.points[5];\n\t}\n\t/** Second anchor point X */\n\tget anchor1X(): number {\n\t\treturn this.points[6];\n\t}\n\t/** Second anchor point Y */\n\tget anchor1Y(): number {\n\t\treturn this.points[7];\n\t}\n\n\t/**\n\t * Returns a point on the curve at parameter t (0=start, 1=end).\n\t * Uses the standard cubic Bézier formula.\n\t * @param t - Parameter in [0, 1]\n\t */\n\tpointOnCurve(t: number): Point {\n\t\tconst u = 1 - t;\n\t\treturn point(\n\t\t\tthis.anchor0X * (u * u * u) +\n\t\t\t\tthis.control0X * (3 * t * u * u) +\n\t\t\t\tthis.control1X * (3 * t * t * u) +\n\t\t\t\tthis.anchor1X * (t * t * t),\n\t\t\tthis.anchor0Y * (u * u * u) +\n\t\t\t\tthis.control0Y * (3 * t * u * u) +\n\t\t\t\tthis.control1Y * (3 * t * t * u) +\n\t\t\t\tthis.anchor1Y * (t * t * t),\n\t\t);\n\t}\n\n\t/**\n\t * Returns true if this curve has (near) zero length.\n\t */\n\tzeroLength(): boolean {\n\t\treturn (\n\t\t\tMath.abs(this.anchor0X - this.anchor1X) < DISTANCE_EPSILON &&\n\t\t\tMath.abs(this.anchor0Y - this.anchor1Y) < DISTANCE_EPSILON\n\t\t);\n\t}\n\n\t/**\n\t * Splits this cubic at parameter t, returning two cubics.\n\t * Uses De Casteljau's algorithm.\n\t * @param t - Split parameter in [0, 1]\n\t * @returns [left, right] pair\n\t */\n\tsplit(t: number): [Cubic, Cubic] {\n\t\tconst u = 1 - t;\n\t\tconst mid = this.pointOnCurve(t);\n\t\tconst left = new Cubic([\n\t\t\tthis.anchor0X,\n\t\t\tthis.anchor0Y,\n\t\t\tthis.anchor0X * u + this.control0X * t,\n\t\t\tthis.anchor0Y * u + this.control0Y * t,\n\t\t\tthis.anchor0X * (u * u) +\n\t\t\t\tthis.control0X * (2 * u * t) +\n\t\t\t\tthis.control1X * (t * t),\n\t\t\tthis.anchor0Y * (u * u) +\n\t\t\t\tthis.control0Y * (2 * u * t) +\n\t\t\t\tthis.control1Y * (t * t),\n\t\t\tmid.x,\n\t\t\tmid.y,\n\t\t]);\n\t\tconst right = new Cubic([\n\t\t\tmid.x,\n\t\t\tmid.y,\n\t\t\tthis.control0X * (u * u) +\n\t\t\t\tthis.control1X * (2 * u * t) +\n\t\t\t\tthis.anchor1X * (t * t),\n\t\t\tthis.control0Y * (u * u) +\n\t\t\t\tthis.control1Y * (2 * u * t) +\n\t\t\t\tthis.anchor1Y * (t * t),\n\t\t\tthis.control1X * u + this.anchor1X * t,\n\t\t\tthis.control1Y * u + this.anchor1Y * t,\n\t\t\tthis.anchor1X,\n\t\t\tthis.anchor1Y,\n\t\t]);\n\t\treturn [left, right];\n\t}\n\n\t/**\n\t * Returns a reversed copy of this cubic (anchor0 ↔ anchor1, controls swapped).\n\t */\n\treverse(): Cubic {\n\t\treturn new Cubic([\n\t\t\tthis.anchor1X,\n\t\t\tthis.anchor1Y,\n\t\t\tthis.control1X,\n\t\t\tthis.control1Y,\n\t\t\tthis.control0X,\n\t\t\tthis.control0Y,\n\t\t\tthis.anchor0X,\n\t\t\tthis.anchor0Y,\n\t\t]);\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box.\n\t * @param approximate - If true, uses control point hull (faster). Default: false.\n\t * @returns [minX, minY, maxX, maxY]\n\t */\n\tcalculateBounds(approximate = false): [number, number, number, number] {\n\t\tif (this.zeroLength()) {\n\t\t\treturn [this.anchor0X, this.anchor0Y, this.anchor0X, this.anchor0Y];\n\t\t}\n\n\t\tlet minX = Math.min(this.anchor0X, this.anchor1X);\n\t\tlet minY = Math.min(this.anchor0Y, this.anchor1Y);\n\t\tlet maxX = Math.max(this.anchor0X, this.anchor1X);\n\t\tlet maxY = Math.max(this.anchor0Y, this.anchor1Y);\n\n\t\tif (approximate) {\n\t\t\tminX = Math.min(minX, this.control0X, this.control1X);\n\t\t\tminY = Math.min(minY, this.control0Y, this.control1Y);\n\t\t\tmaxX = Math.max(maxX, this.control0X, this.control1X);\n\t\t\tmaxY = Math.max(maxY, this.control0Y, this.control1Y);\n\t\t\treturn [minX, minY, maxX, maxY];\n\t\t}\n\n\t\t// Find derivative roots (quadratic formula) for x\n\t\tconst xa =\n\t\t\t-this.anchor0X + 3 * this.control0X - 3 * this.control1X + this.anchor1X;\n\t\tconst xb = 2 * this.anchor0X - 4 * this.control0X + 2 * this.control1X;\n\t\tconst xc = -this.anchor0X + this.control0X;\n\n\t\tconst expandX = (t: number) => {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tconst v = this.pointOnCurve(t).x;\n\t\t\t\tif (v < minX) minX = v;\n\t\t\t\tif (v > maxX) maxX = v;\n\t\t\t}\n\t\t};\n\n\t\tif (Math.abs(xa) < DISTANCE_EPSILON) {\n\t\t\tif (xb !== 0) expandX((2 * xc) / (-2 * xb));\n\t\t} else {\n\t\t\tconst xs = xb * xb - 4 * xa * xc;\n\t\t\tif (xs >= 0) {\n\t\t\t\texpandX((-xb + Math.sqrt(xs)) / (2 * xa));\n\t\t\t\texpandX((-xb - Math.sqrt(xs)) / (2 * xa));\n\t\t\t}\n\t\t}\n\n\t\t// Same for y\n\t\tconst ya =\n\t\t\t-this.anchor0Y + 3 * this.control0Y - 3 * this.control1Y + this.anchor1Y;\n\t\tconst yb = 2 * this.anchor0Y - 4 * this.control0Y + 2 * this.control1Y;\n\t\tconst yc = -this.anchor0Y + this.control0Y;\n\n\t\tconst expandY = (t: number) => {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tconst v = this.pointOnCurve(t).y;\n\t\t\t\tif (v < minY) minY = v;\n\t\t\t\tif (v > maxY) maxY = v;\n\t\t\t}\n\t\t};\n\n\t\tif (Math.abs(ya) < DISTANCE_EPSILON) {\n\t\t\tif (yb !== 0) expandY((2 * yc) / (-2 * yb));\n\t\t} else {\n\t\t\tconst ys = yb * yb - 4 * ya * yc;\n\t\t\tif (ys >= 0) {\n\t\t\t\texpandY((-yb + Math.sqrt(ys)) / (2 * ya));\n\t\t\t\texpandY((-yb - Math.sqrt(ys)) / (2 * ya));\n\t\t\t}\n\t\t}\n\n\t\treturn [minX, minY, maxX, maxY];\n\t}\n\n\t/**\n\t * Interpolates between this cubic and another at fraction t.\n\t * @param other - Target cubic\n\t * @param t - Fraction [0, 1]\n\t */\n\tinterpolateTo(other: Cubic, t: number): Cubic {\n\t\treturn new Cubic(\n\t\t\tthis.points.map((v, i) => interpolate(v, other.points[i], t)),\n\t\t);\n\t}\n\n\t/**\n\t * Applies a PointTransformer to all anchor and control points.\n\t * @param fn - The transform function\n\t */\n\ttransformed(fn: PointTransformer): Cubic {\n\t\tconst p = this.points.slice();\n\t\tfor (let i = 0; i < 8; i += 2) {\n\t\t\tconst [tx, ty] = fn(p[i], p[i + 1]);\n\t\t\tp[i] = tx;\n\t\t\tp[i + 1] = ty;\n\t\t}\n\t\treturn new Cubic(p);\n\t}\n\n\ttoString(): string {\n\t\treturn `Cubic(a0=(${this.anchor0X},${this.anchor0Y}) c0=(${this.control0X},${this.control0Y}) c1=(${this.control1X},${this.control1Y}) a1=(${this.anchor1X},${this.anchor1Y}))`;\n\t}\n\n\t// ─── Static factories ─────────────────────────────────────────────────────\n\n\t/**\n\t * Creates a cubic representing a straight line.\n\t * Control points lie at 1/3 and 2/3 of the line.\n\t * @param x0 - Start anchor X\n\t * @param y0 - Start anchor Y\n\t * @param x1 - End anchor X\n\t * @param y1 - End anchor Y\n\t */\n\tstatic straightLine(x0: number, y0: number, x1: number, y1: number): Cubic {\n\t\treturn new Cubic([\n\t\t\tx0,\n\t\t\ty0,\n\t\t\tinterpolate(x0, x1, 1 / 3),\n\t\t\tinterpolate(y0, y1, 1 / 3),\n\t\t\tinterpolate(x0, x1, 2 / 3),\n\t\t\tinterpolate(y0, y1, 2 / 3),\n\t\t\tx1,\n\t\t\ty1,\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a cubic approximating a circular arc.\n\t * p0 and p1 must be equidistant from the center.\n\t * For arcs > 180°, use multiple cubics.\n\t *\n\t * @param centerX - Arc center X\n\t * @param centerY - Arc center Y\n\t * @param x0 - Start point X (on circle)\n\t * @param y0 - Start point Y (on circle)\n\t * @param x1 - End point X (on circle)\n\t * @param y1 - End point Y (on circle)\n\t */\n\tstatic circularArc(\n\t\tcenterX: number,\n\t\tcenterY: number,\n\t\tx0: number,\n\t\ty0: number,\n\t\tx1: number,\n\t\ty1: number,\n\t): Cubic {\n\t\tconst p0dx = x0 - centerX;\n\t\tconst p0dy = y0 - centerY;\n\t\tconst p1dx = x1 - centerX;\n\t\tconst p1dy = y1 - centerY;\n\t\tconst d0 = Math.sqrt(p0dx * p0dx + p0dy * p0dy);\n\t\tconst d1 = Math.sqrt(p1dx * p1dx + p1dy * p1dy);\n\t\tif (d0 < DISTANCE_EPSILON || d1 < DISTANCE_EPSILON) {\n\t\t\treturn Cubic.straightLine(x0, y0, x1, y1);\n\t\t}\n\t\t// Normalized direction vectors\n\t\tconst nx0 = p0dx / d0,\n\t\t\tny0 = p0dy / d0;\n\t\tconst nx1 = p1dx / d1,\n\t\t\tny1 = p1dy / d1;\n\t\t// 90-degree rotations (tangent directions)\n\t\tconst rx0 = -ny0,\n\t\t\try0 = nx0;\n\t\tconst rx1 = -ny1,\n\t\t\try1 = nx1;\n\t\t// cos of angle between vectors\n\t\tconst cosa = nx0 * nx1 + ny0 * ny1;\n\t\tif (cosa > 0.999) return Cubic.straightLine(x0, y0, x1, y1);\n\t\t// Is arc clockwise?\n\t\tconst clockwise = rx0 * p1dx + ry0 * p1dy >= 0;\n\t\tconst k =\n\t\t\t((d0 *\n\t\t\t\t(4 / 3) *\n\t\t\t\t(Math.sqrt(2 * (1 - cosa)) - Math.sqrt(1 - square(cosa)))) /\n\t\t\t\t(1 - cosa)) *\n\t\t\t(clockwise ? 1 : -1);\n\t\treturn new Cubic([\n\t\t\tx0,\n\t\t\ty0,\n\t\t\tx0 + rx0 * k,\n\t\t\ty0 + ry0 * k,\n\t\t\tx1 - rx1 * k,\n\t\t\ty1 - ry1 * k,\n\t\t\tx1,\n\t\t\ty1,\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a zero-length cubic at the given point.\n\t * @param x - X coordinate\n\t * @param y - Y coordinate\n\t */\n\tstatic empty(x: number, y: number): Cubic {\n\t\treturn new Cubic([x, y, x, y, x, y, x, y]);\n\t}\n}\n\n/**\n * A mutable version of Cubic used in performance-critical paths (Morph.forEachCubic).\n * Reuses the same instance to avoid allocations.\n */\nexport class MutableCubic extends Cubic {\n\tconstructor() {\n\t\tsuper([0, 0, 0, 0, 0, 0, 0, 0]);\n\t}\n\n\t/**\n\t * Mutably interpolates between c1 and c2 at the given progress.\n\t * @param c1 - Start cubic\n\t * @param c2 - End cubic\n\t * @param progress - Interpolation factor [0, 1]\n\t */\n\tinterpolate(c1: Cubic, c2: Cubic, progress: number): void {\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t(this.points as number[])[i] = interpolate(\n\t\t\t\tc1.points[i],\n\t\t\t\tc2.points[i],\n\t\t\t\tprogress,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Mutably applies a PointTransformer to all points.\n\t * @param fn - The transform function\n\t */\n\ttransform(fn: PointTransformer): void {\n\t\tconst p = this.points as number[];\n\t\tfor (let i = 0; i < 8; i += 2) {\n\t\t\tconst [tx, ty] = fn(p[i], p[i + 1]);\n\t\t\tp[i] = tx;\n\t\t\tp[i + 1] = ty;\n\t\t}\n\t}\n}\n","/**\n * RoundedPolygon — core shape class for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.RoundedPolygon.kt\n *\n * A RoundedPolygon is defined by a list of Feature (Corner + Edge) objects.\n * Its geometry is stored as a flat list of Cubic Bézier curves that form\n * a closed, contiguous outline.\n */\n\nimport { type CornerRounding, UNROUNDED } from \"../math/corner-rounding\";\nimport { Cubic } from \"../math/cubic\";\nimport { type Point, point } from \"../math/point\";\nimport {\n\tconvex,\n\tDISTANCE_EPSILON,\n\tdistance,\n\tdistanceSquared,\n\tFLOAT_PI,\n\tinterpolate,\n\ttype PointTransformer,\n\tradialToCartesian,\n\tsquare,\n} from \"../utils/utils\";\nimport {\n\tcornerFeature,\n\tedgeFeature,\n\ttype Feature,\n\ttransformFeature,\n} from \"./features\";\n\n// ─── Internal: RoundedCorner ─────────────────────────────────────────────────\n\n/**\n * Internal helper that computes the Bézier curves for a single rounded corner.\n * Ported from the private RoundedCorner class in RoundedPolygon.kt\n */\nclass RoundedCorner {\n\tprivate readonly d1: Point;\n\tprivate readonly d2: Point;\n\tprivate readonly cornerRadius: number;\n\tprivate readonly smoothing: number;\n\tprivate readonly sinAngle: number;\n\treadonly expectedRoundCut: number;\n\tprivate center: Point = point(0, 0);\n\n\tconstructor(\n\t\tprivate readonly p0: Point,\n\t\tprivate readonly p1: Point,\n\t\tprivate readonly p2: Point,\n\t\treadonly rounding: CornerRounding = UNROUNDED,\n\t) {\n\t\tconst v01x = p0.x - p1.x,\n\t\t\tv01y = p0.y - p1.y;\n\t\tconst v21x = p2.x - p1.x,\n\t\t\tv21y = p2.y - p1.y;\n\t\tconst d01 = distance(v01x, v01y);\n\t\tconst d21 = distance(v21x, v21y);\n\n\t\tif (d01 > 0 && d21 > 0) {\n\t\t\tthis.d1 = point(v01x / d01, v01y / d01);\n\t\t\tthis.d2 = point(v21x / d21, v21y / d21);\n\t\t\tthis.cornerRadius = rounding.radius;\n\t\t\tthis.smoothing = rounding.smoothing;\n\t\t\tconst cosA = this.d1.x * this.d2.x + this.d1.y * this.d2.y;\n\t\t\tthis.sinAngle = Math.sqrt(Math.max(0, 1 - square(cosA)));\n\t\t\tthis.expectedRoundCut =\n\t\t\t\tthis.sinAngle > 1e-3\n\t\t\t\t\t? (this.cornerRadius * (cosA + 1)) / this.sinAngle\n\t\t\t\t\t: 0;\n\t\t} else {\n\t\t\tthis.d1 = point(0, 0);\n\t\t\tthis.d2 = point(0, 0);\n\t\t\tthis.cornerRadius = 0;\n\t\t\tthis.smoothing = 0;\n\t\t\tthis.sinAngle = 0;\n\t\t\tthis.expectedRoundCut = 0;\n\t\t}\n\t}\n\n\tget expectedCut(): number {\n\t\treturn (1 + this.smoothing) * this.expectedRoundCut;\n\t}\n\n\tgetCubics(allowedCut0: number, allowedCut1 = allowedCut0): Cubic[] {\n\t\tconst allowedCut = Math.min(allowedCut0, allowedCut1);\n\t\tif (\n\t\t\tthis.expectedRoundCut < DISTANCE_EPSILON ||\n\t\t\tallowedCut < DISTANCE_EPSILON ||\n\t\t\tthis.cornerRadius < DISTANCE_EPSILON\n\t\t) {\n\t\t\tthis.center = this.p1;\n\t\t\treturn [Cubic.straightLine(this.p1.x, this.p1.y, this.p1.x, this.p1.y)];\n\t\t}\n\n\t\tconst actualRoundCut = Math.min(allowedCut, this.expectedRoundCut);\n\t\tconst actualSmoothing0 = this.calcSmoothingValue(allowedCut0);\n\t\tconst actualSmoothing1 = this.calcSmoothingValue(allowedCut1);\n\t\tconst actualR =\n\t\t\t(this.cornerRadius * actualRoundCut) / this.expectedRoundCut;\n\t\tconst centerDist = Math.sqrt(square(actualR) + square(actualRoundCut));\n\n\t\t// Center of rounding arc\n\t\tconst midDirX = (this.d1.x + this.d2.x) / 2;\n\t\tconst midDirY = (this.d1.y + this.d2.y) / 2;\n\t\tconst midDist = distance(midDirX, midDirY);\n\t\tthis.center = point(\n\t\t\tthis.p1.x + (midDirX / midDist) * centerDist,\n\t\t\tthis.p1.y + (midDirY / midDist) * centerDist,\n\t\t);\n\n\t\tconst ci0 = point(\n\t\t\tthis.p1.x + this.d1.x * actualRoundCut,\n\t\t\tthis.p1.y + this.d1.y * actualRoundCut,\n\t\t);\n\t\tconst ci2 = point(\n\t\t\tthis.p1.x + this.d2.x * actualRoundCut,\n\t\t\tthis.p1.y + this.d2.y * actualRoundCut,\n\t\t);\n\n\t\tconst flanking0 = this.computeFlankingCurve(\n\t\t\tactualRoundCut,\n\t\t\tactualSmoothing0,\n\t\t\tthis.p1,\n\t\t\tthis.p0,\n\t\t\tci0,\n\t\t\tci2,\n\t\t\tthis.center,\n\t\t\tactualR,\n\t\t);\n\t\tconst flanking2 = this.computeFlankingCurve(\n\t\t\tactualRoundCut,\n\t\t\tactualSmoothing1,\n\t\t\tthis.p1,\n\t\t\tthis.p2,\n\t\t\tci2,\n\t\t\tci0,\n\t\t\tthis.center,\n\t\t\tactualR,\n\t\t).reverse();\n\n\t\treturn [\n\t\t\tflanking0,\n\t\t\tCubic.circularArc(\n\t\t\t\tthis.center.x,\n\t\t\t\tthis.center.y,\n\t\t\t\tflanking0.anchor1X,\n\t\t\t\tflanking0.anchor1Y,\n\t\t\t\tflanking2.anchor0X,\n\t\t\t\tflanking2.anchor0Y,\n\t\t\t),\n\t\t\tflanking2,\n\t\t];\n\t}\n\n\tprivate calcSmoothingValue(allowedCut: number): number {\n\t\tif (allowedCut > this.expectedCut) return this.smoothing;\n\t\tif (allowedCut > this.expectedRoundCut) {\n\t\t\treturn (\n\t\t\t\t(this.smoothing * (allowedCut - this.expectedRoundCut)) /\n\t\t\t\t(this.expectedCut - this.expectedRoundCut)\n\t\t\t);\n\t\t}\n\t\treturn 0;\n\t}\n\n\tprivate computeFlankingCurve(\n\t\tactualRoundCut: number,\n\t\tactualSmoothing: number,\n\t\tcorner: Point,\n\t\tsideStart: Point,\n\t\tcircleIntersect: Point,\n\t\totherIntersect: Point,\n\t\tcircleCenter: Point,\n\t\tactualR: number,\n\t): Cubic {\n\t\tconst sdx = sideStart.x - corner.x,\n\t\t\tsdy = sideStart.y - corner.y;\n\t\tconst sd = distance(sdx, sdy);\n\t\tconst sideDir = point(sdx / sd, sdy / sd);\n\t\tconst curveStart = point(\n\t\t\tcorner.x + sideDir.x * actualRoundCut * (1 + actualSmoothing),\n\t\t\tcorner.y + sideDir.y * actualRoundCut * (1 + actualSmoothing),\n\t\t);\n\n\t\t// Interpolate on the circle arc for the end point\n\t\tconst px = interpolate(\n\t\t\tcircleIntersect.x,\n\t\t\t(circleIntersect.x + otherIntersect.x) / 2,\n\t\t\tactualSmoothing,\n\t\t);\n\t\tconst py = interpolate(\n\t\t\tcircleIntersect.y,\n\t\t\t(circleIntersect.y + otherIntersect.y) / 2,\n\t\t\tactualSmoothing,\n\t\t);\n\n\t\t// Project onto circle\n\t\tconst ptoCx = px - circleCenter.x,\n\t\t\tptoCy = py - circleCenter.y;\n\t\tconst ptoCd = distance(ptoCx, ptoCy);\n\t\tconst curveEnd = point(\n\t\t\tcircleCenter.x + (ptoCx / ptoCd) * actualR,\n\t\t\tcircleCenter.y + (ptoCy / ptoCd) * actualR,\n\t\t);\n\n\t\t// Tangent at curveEnd\n\t\tconst tangentX = -(curveEnd.y - circleCenter.y);\n\t\tconst tangentY = curveEnd.x - circleCenter.x;\n\n\t\t// Line intersection to find anchor end\n\t\tconst anchorEnd =\n\t\t\tlineIntersection(\n\t\t\t\tsideStart,\n\t\t\t\tsideDir,\n\t\t\t\tcurveEnd,\n\t\t\t\tpoint(tangentX, tangentY),\n\t\t\t) ?? circleIntersect;\n\t\tconst anchorStart = point(\n\t\t\t(curveStart.x + anchorEnd.x * 2) / 3,\n\t\t\t(curveStart.y + anchorEnd.y * 2) / 3,\n\t\t);\n\n\t\treturn new Cubic([\n\t\t\tcurveStart.x,\n\t\t\tcurveStart.y,\n\t\t\tanchorStart.x,\n\t\t\tanchorStart.y,\n\t\t\tanchorEnd.x,\n\t\t\tanchorEnd.y,\n\t\t\tcurveEnd.x,\n\t\t\tcurveEnd.y,\n\t\t]);\n\t}\n}\n\nfunction lineIntersection(\n\tp0: Point,\n\td0: Point,\n\tp1: Point,\n\td1: Point,\n): Point | null {\n\t// d1 rotated 90°\n\tconst rd1x = -d1.y,\n\t\trd1y = d1.x;\n\tconst den = d0.x * rd1x + d0.y * rd1y;\n\tif (Math.abs(den) < DISTANCE_EPSILON) return null;\n\tconst num = (p1.x - p0.x) * rd1x + (p1.y - p0.y) * rd1y;\n\tif (Math.abs(den) < DISTANCE_EPSILON * Math.abs(num)) return null;\n\tconst k = num / den;\n\treturn point(p0.x + d0.x * k, p0.y + d0.y * k);\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction calculateCenter(vertices: number[]): Point {\n\tlet cx = 0,\n\t\tcy = 0;\n\tfor (let i = 0; i < vertices.length; i += 2) {\n\t\tcx += vertices[i];\n\t\tcy += vertices[i + 1];\n\t}\n\tconst n = vertices.length / 2;\n\treturn point(cx / n, cy / n);\n}\n\nfunction verticesFromNumVerts(\n\tnumVertices: number,\n\tradius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tfor (let i = 0; i < numVertices; i++) {\n\t\tconst angle = (FLOAT_PI / numVertices) * 2 * i;\n\t\tconst [rx, ry] = radialToCartesian(radius, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\nfunction starVerticesFromNumVerts(\n\tnumVerticesPerRadius: number,\n\tradius: number,\n\tinnerRadius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\tfor (let i = 0; i < total; i++) {\n\t\tconst r = i % 2 === 0 ? radius : innerRadius;\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst [rx, ry] = radialToCartesian(r, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\n// ─── RoundedPolygon ──────────────────────────────────────────────────────────\n\n/**\n * The core shape class. Represents a closed polygon outline as a list of Cubic\n * Bézier curves, optionally rounded at the vertices.\n *\n * All shapes in MD3 Expressive are represented as RoundedPolygon instances.\n *\n * @example\n * // Create a circle (8-vertex polygon, fully rounded)\n * const circle = RoundedPolygon.circle();\n *\n * @example\n * // Create a rounded rectangle\n * const rect = RoundedPolygon.rectangle(2, 1, { radius: 0.25, smoothing: 0 });\n */\nexport class RoundedPolygon {\n\t/** Flat list of cubic Bézier curves forming the closed outline. */\n\treadonly cubics: Cubic[];\n\t/** Feature list (corners + edges). */\n\treadonly features: Feature[];\n\t/** Center point of the polygon. */\n\treadonly center: Point;\n\n\t/** @internal Use static factory methods instead */\n\tprivate constructor(features: Feature[], center: Point) {\n\t\tthis.features = features;\n\t\tthis.center = center;\n\t\tthis.cubics = buildCubicsList(features);\n\t\tvalidateContiguity(this.cubics);\n\t}\n\n\tget centerX(): number {\n\t\treturn this.center.x;\n\t}\n\tget centerY(): number {\n\t\treturn this.center.y;\n\t}\n\n\t// ─── Static factories ────────────────────────────────────────────────\n\n\t/**\n\t * Creates a polygon from a vertex count (regular polygon).\n\t * @param numVertices - Number of vertices (≥ 3)\n\t * @param radius - Circumradius (default: 1)\n\t * @param centerX - Center X (default: 0)\n\t * @param centerY - Center Y (default: 0)\n\t * @param rounding - Corner rounding for all vertices\n\t * @param perVertexRounding - Per-vertex rounding overrides\n\t */\n\tstatic fromNumVertices(\n\t\tnumVertices: number,\n\t\tradius = 1,\n\t\tcenterX = 0,\n\t\tcenterY = 0,\n\t\trounding: CornerRounding = UNROUNDED,\n\t\tperVertexRounding?: CornerRounding[],\n\t): RoundedPolygon {\n\t\tif (numVertices < 3)\n\t\t\tthrow new Error(\"Polygon must have at least 3 vertices\");\n\t\tconst vertices = verticesFromNumVerts(\n\t\t\tnumVertices,\n\t\t\tradius,\n\t\t\tcenterX,\n\t\t\tcenterY,\n\t\t);\n\t\treturn RoundedPolygon.fromVertices(\n\t\t\tvertices,\n\t\t\trounding,\n\t\t\tperVertexRounding,\n\t\t\tcenterX,\n\t\t\tcenterY,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a polygon from a flat vertex array [x0, y0, x1, y1, ...].\n\t * @param vertices - Flat array of x,y pairs (length must be even and ≥ 6)\n\t * @param rounding - Corner rounding for all vertices\n\t * @param perVertexRounding - Per-vertex rounding overrides\n\t * @param centerX - Center X (auto-calculated if not provided)\n\t * @param centerY - Center Y (auto-calculated if not provided)\n\t */\n\tstatic fromVertices(\n\t\tvertices: number[],\n\t\trounding: CornerRounding = UNROUNDED,\n\t\tperVertexRounding?: CornerRounding[],\n\t\tcenterX?: number,\n\t\tcenterY?: number,\n\t): RoundedPolygon {\n\t\tif (vertices.length < 6)\n\t\t\tthrow new Error(\"Polygon must have at least 3 vertices\");\n\t\tif (vertices.length % 2 !== 0)\n\t\t\tthrow new Error(\"Vertices array must have even length\");\n\t\tif (perVertexRounding && perVertexRounding.length * 2 !== vertices.length) {\n\t\t\tthrow new Error(\"perVertexRounding must match vertex count\");\n\t\t}\n\n\t\tconst n = vertices.length / 2;\n\n\t\t// Build rounded corners\n\t\tconst roundedCorners: RoundedCorner[] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst vtxRounding = perVertexRounding ? perVertexRounding[i] : rounding;\n\t\t\tconst prevIdx = ((i + n - 1) % n) * 2;\n\t\t\tconst nextIdx = ((i + 1) % n) * 2;\n\t\t\troundedCorners.push(\n\t\t\t\tnew RoundedCorner(\n\t\t\t\t\tpoint(vertices[prevIdx], vertices[prevIdx + 1]),\n\t\t\t\t\tpoint(vertices[i * 2], vertices[i * 2 + 1]),\n\t\t\t\t\tpoint(vertices[nextIdx], vertices[nextIdx + 1]),\n\t\t\t\t\tvtxRounding,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Calculate how much each side can accommodate rounding cuts\n\t\tconst cutAdjusts: [number, number][] = [];\n\t\tfor (let ix = 0; ix < n; ix++) {\n\t\t\tconst expectedRoundCut =\n\t\t\t\troundedCorners[ix].expectedRoundCut +\n\t\t\t\troundedCorners[(ix + 1) % n].expectedRoundCut;\n\t\t\tconst expectedCut =\n\t\t\t\troundedCorners[ix].expectedCut +\n\t\t\t\troundedCorners[(ix + 1) % n].expectedCut;\n\t\t\tconst vx = vertices[ix * 2],\n\t\t\t\tvy = vertices[ix * 2 + 1];\n\t\t\tconst nx = vertices[((ix + 1) % n) * 2],\n\t\t\t\tny = vertices[((ix + 1) % n) * 2 + 1];\n\t\t\tconst sideSize = distance(vx - nx, vy - ny);\n\n\t\t\tif (expectedRoundCut > sideSize) {\n\t\t\t\tcutAdjusts.push([sideSize / expectedRoundCut, 0]);\n\t\t\t} else if (expectedCut > sideSize) {\n\t\t\t\tcutAdjusts.push([\n\t\t\t\t\t1,\n\t\t\t\t\t(sideSize - expectedRoundCut) / (expectedCut - expectedRoundCut),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tcutAdjusts.push([1, 1]);\n\t\t\t}\n\t\t}\n\n\t\t// Generate cubics per corner\n\t\tconst corners: Cubic[][] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst allowedCuts: number[] = [];\n\t\t\tfor (const delta of [0, 1]) {\n\t\t\t\tconst [roundCutRatio, cutRatio] = cutAdjusts[(i + n - 1 + delta) % n];\n\t\t\t\tallowedCuts.push(\n\t\t\t\t\troundedCorners[i].expectedRoundCut * roundCutRatio +\n\t\t\t\t\t\t(roundedCorners[i].expectedCut -\n\t\t\t\t\t\t\troundedCorners[i].expectedRoundCut) *\n\t\t\t\t\t\t\tcutRatio,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcorners.push(roundedCorners[i].getCubics(allowedCuts[0], allowedCuts[1]));\n\t\t}\n\n\t\t// Build feature list\n\t\tconst tempFeatures: Feature[] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst prevIdx = (i + n - 1) % n;\n\t\t\tconst nextIdx = (i + 1) % n;\n\t\t\tconst currV = point(vertices[i * 2], vertices[i * 2 + 1]);\n\t\t\tconst prevV = point(vertices[prevIdx * 2], vertices[prevIdx * 2 + 1]);\n\t\t\tconst nextV = point(vertices[nextIdx * 2], vertices[nextIdx * 2 + 1]);\n\t\t\tconst isConvex = convex(\n\t\t\t\tprevV.x,\n\t\t\t\tprevV.y,\n\t\t\t\tcurrV.x,\n\t\t\t\tcurrV.y,\n\t\t\t\tnextV.x,\n\t\t\t\tnextV.y,\n\t\t\t);\n\t\t\ttempFeatures.push(cornerFeature(corners[i], isConvex));\n\t\t\tconst lastCornerA1 = corners[i][corners[i].length - 1];\n\t\t\tconst nextCornerA0 = corners[(i + 1) % n][0];\n\t\t\ttempFeatures.push(\n\t\t\t\tedgeFeature([\n\t\t\t\t\tCubic.straightLine(\n\t\t\t\t\t\tlastCornerA1.anchor1X,\n\t\t\t\t\t\tlastCornerA1.anchor1Y,\n\t\t\t\t\t\tnextCornerA0.anchor0X,\n\t\t\t\t\t\tnextCornerA0.anchor0Y,\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tconst cx = centerX ?? calculateCenter(vertices).x;\n\t\tconst cy = centerY ?? calculateCenter(vertices).y;\n\t\treturn new RoundedPolygon(tempFeatures, point(cx, cy));\n\t}\n\n\t/**\n\t * Creates a polygon from a pre-built Feature list.\n\t * @param features - Feature list (≥ 2 features)\n\t * @param centerX - Center X (auto-calculated if NaN)\n\t * @param centerY - Center Y (auto-calculated if NaN)\n\t */\n\tstatic fromFeatures(\n\t\tfeatures: Feature[],\n\t\tcenterX = Number.NaN,\n\t\tcenterY = Number.NaN,\n\t): RoundedPolygon {\n\t\tif (features.length < 2)\n\t\t\tthrow new Error(\"Polygon must have at least 2 features\");\n\t\tconst allVertices: number[] = [];\n\t\tfor (const f of features) {\n\t\t\tfor (const c of f.cubics) {\n\t\t\t\tallVertices.push(c.anchor0X, c.anchor0Y);\n\t\t\t}\n\t\t}\n\t\tconst cx = Number.isNaN(centerX) ? calculateCenter(allVertices).x : centerX;\n\t\tconst cy = Number.isNaN(centerY) ? calculateCenter(allVertices).y : centerY;\n\t\treturn new RoundedPolygon(features, point(cx, cy));\n\t}\n\n\t// ─── Instance methods ────────────────────────────────────────────────\n\n\t/**\n\t * Returns a new RoundedPolygon with all points transformed.\n\t * @param fn - Transform function: (x, y) => [x', y']\n\t */\n\ttransformed(fn: PointTransformer): RoundedPolygon {\n\t\tconst [cx, cy] = fn(this.center.x, this.center.y);\n\t\treturn new RoundedPolygon(\n\t\t\tthis.features.map((f) => transformFeature(f, fn)),\n\t\t\tpoint(cx, cy),\n\t\t);\n\t}\n\n\t/**\n\t * Returns a normalized copy: scaled and centered to fit in [0,1] × [0,1].\n\t * Maintains aspect ratio by using the larger dimension.\n\t */\n\tnormalized(): RoundedPolygon {\n\t\tconst [minX, minY, maxX, maxY] = this.calculateBounds(false);\n\t\tconst width = maxX - minX;\n\t\tconst height = maxY - minY;\n\t\tconst side = Math.max(width, height);\n\t\tconst offsetX = (side - width) / 2 - minX;\n\t\tconst offsetY = (side - height) / 2 - minY;\n\t\treturn this.transformed((x, y) => [\n\t\t\t(x + offsetX) / side,\n\t\t\t(y + offsetY) / side,\n\t\t]);\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box.\n\t * @param approximate - If true, uses control point hull (faster). Default: true.\n\t * @returns [minX, minY, maxX, maxY]\n\t */\n\tcalculateBounds(approximate = true): [number, number, number, number] {\n\t\tlet minX = Number.MAX_VALUE,\n\t\t\tminY = Number.MAX_VALUE;\n\t\tlet maxX = -Number.MAX_VALUE,\n\t\t\tmaxY = -Number.MAX_VALUE;\n\t\tfor (const c of this.cubics) {\n\t\t\tconst [cx0, cy0, cx1, cy1] = c.calculateBounds(approximate);\n\t\t\tif (cx0 < minX) minX = cx0;\n\t\t\tif (cy0 < minY) minY = cy0;\n\t\t\tif (cx1 > maxX) maxX = cx1;\n\t\t\tif (cy1 > maxY) maxY = cy1;\n\t\t}\n\t\treturn [minX, minY, maxX, maxY];\n\t}\n\n\t/**\n\t * Calculates the maximum bounding square (useful for shapes that rotate).\n\t * @returns [minX, minY, maxX, maxY] of the max-bounds square\n\t */\n\tcalculateMaxBounds(): [number, number, number, number] {\n\t\tlet maxDistSq = 0;\n\t\tfor (const c of this.cubics) {\n\t\t\tconst ad = distanceSquared(\n\t\t\t\tc.anchor0X - this.centerX,\n\t\t\t\tc.anchor0Y - this.centerY,\n\t\t\t);\n\t\t\tconst mid = c.pointOnCurve(0.5);\n\t\t\tconst md = distanceSquared(mid.x - this.centerX, mid.y - this.centerY);\n\t\t\tconst m = Math.max(ad, md);\n\t\t\tif (m > maxDistSq) maxDistSq = m;\n\t\t}\n\t\tconst d = Math.sqrt(maxDistSq);\n\t\treturn [\n\t\t\tthis.centerX - d,\n\t\t\tthis.centerY - d,\n\t\t\tthis.centerX + d,\n\t\t\tthis.centerY + d,\n\t\t];\n\t}\n}\n\n// ─── Internal: build cubics list from features ─────────────────────────────\n\nfunction buildCubicsList(features: Feature[]): Cubic[] {\n\tconst result: Cubic[] = [];\n\tlet firstCubic: Cubic | null = null;\n\tlet lastCubic: Cubic | null = null;\n\tlet firstFeatureSplitStart: Cubic[] | null = null;\n\tlet firstFeatureSplitEnd: Cubic[] | null = null;\n\n\tif (features.length > 0 && features[0].cubics.length === 3) {\n\t\tconst center = features[0].cubics[1];\n\t\tconst [start, end] = center.split(0.5);\n\t\tfirstFeatureSplitStart = [features[0].cubics[0], start];\n\t\tfirstFeatureSplitEnd = [end, features[0].cubics[2]];\n\t}\n\n\tfor (let i = 0; i <= features.length; i++) {\n\t\tlet featureCubics: Cubic[];\n\t\tif (i === 0 && firstFeatureSplitEnd) {\n\t\t\tfeatureCubics = firstFeatureSplitEnd;\n\t\t} else if (i === features.length) {\n\t\t\tif (firstFeatureSplitStart) featureCubics = firstFeatureSplitStart;\n\t\t\telse break;\n\t\t} else {\n\t\t\tfeatureCubics = features[i].cubics;\n\t\t}\n\n\t\tfor (const cubic of featureCubics) {\n\t\t\tif (!cubic.zeroLength()) {\n\t\t\t\tif (lastCubic) result.push(lastCubic);\n\t\t\t\tlastCubic = cubic;\n\t\t\t\tif (!firstCubic) firstCubic = cubic;\n\t\t\t} else if (lastCubic) {\n\t\t\t\t// Update last anchor to maintain contiguity\n\t\t\t\tconst p: number[] = lastCubic.points.slice();\n\t\t\t\tp[6] = cubic.anchor1X;\n\t\t\t\tp[7] = cubic.anchor1Y;\n\t\t\t\tlastCubic = new Cubic(p);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (lastCubic && firstCubic) {\n\t\tresult.push(\n\t\t\tnew Cubic([\n\t\t\t\tlastCubic.anchor0X,\n\t\t\t\tlastCubic.anchor0Y,\n\t\t\t\tlastCubic.control0X,\n\t\t\t\tlastCubic.control0Y,\n\t\t\t\tlastCubic.control1X,\n\t\t\t\tlastCubic.control1Y,\n\t\t\t\tfirstCubic.anchor0X,\n\t\t\t\tfirstCubic.anchor0Y,\n\t\t\t]),\n\t\t);\n\t} else {\n\t\tresult.push(Cubic.empty(0, 0));\n\t}\n\n\treturn result;\n}\n\nfunction validateContiguity(cubics: Cubic[]): void {\n\tlet prev = cubics[cubics.length - 1];\n\tfor (const cubic of cubics) {\n\t\tif (\n\t\t\tMath.abs(cubic.anchor0X - prev.anchor1X) > DISTANCE_EPSILON ||\n\t\t\tMath.abs(cubic.anchor0Y - prev.anchor1Y) > DISTANCE_EPSILON\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`RoundedPolygon must be contiguous: gap between (${cubic.anchor0X},${cubic.anchor0Y}) and (${prev.anchor1X},${prev.anchor1Y})`,\n\t\t\t);\n\t\t}\n\t\tprev = cubic;\n\t}\n}\n\n// ─── Star vertex helper (used by Shapes.ts) ─────────────────────────────────\n\nexport { starVerticesFromNumVerts };\n","/**\n * MD3 Expressive Shape Catalog — auto-generated from SVGs.\n *\n * Each shape is a pre-normalized RoundedPolygon (fits in [0,1]×[0,1], centered at (0.5, 0.5)).\n * Regenerated via scratch/generate-shapes.ts.\n */\n\nimport { cornerFeature, edgeFeature, type Feature } from \"../core/features\";\nimport { RoundedPolygon } from \"../core/rounded-polygon\";\nimport { Cubic } from \"../math/cubic\";\n\nfunction createShape(pts: number[][]): RoundedPolygon {\n\tconst cubics = pts.map((p) => new Cubic(p));\n\treturn RoundedPolygon.fromFeatures(\n\t\tcubics.map((c) => cornerFeature([c], false)),\n\t);\n}\n\n// ─── SVG Shapes ─────────────────────────────────────────────────────────────\n\nconst archShape = createShape([\n\t[1, 0.83461, 1, 0.8547, 1, 0.86477, 0.99898, 0.87322],\n\t[0.99898, 0.87322, 0.99115, 0.93918, 0.93918, 0.99115, 0.87322, 0.99898],\n\t[0.87322, 0.99898, 0.86477, 1, 0.8547, 1, 0.83461, 1],\n\t[0.83461, 1, 0.61154, 1, 0.38847, 1, 0.1654, 1],\n\t[0.1654, 1, 0.14529, 1, 0.13524, 1, 0.12679, 0.99898],\n\t[0.12679, 0.99898, 0.06084, 0.99115, 0.00884, 0.93918, 0.001, 0.87322],\n\t[0.001, 0.87322, 0, 0.86477, 0, 0.8547, 0, 0.83461],\n\t[0, 0.83461, 0, 0.72307, 0, 0.61154, 0, 0.5],\n\t[0, 0.5, 0, 0.22385, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77615, 0, 1, 0.22385, 1, 0.5],\n\t[1, 0.5, 1, 0.61154, 1, 0.72307, 1, 0.83461],\n]);\n\nconst arrowShape = createShape([\n\t[0.8594, 0.44684, 0.81504, 0.37855, 0.77068, 0.31016, 0.72632, 0.24187],\n\t[0.72632, 0.24187, 0.69754, 0.19753, 0.66825, 0.1526, 0.62934, 0.11738],\n\t[0.62934, 0.11738, 0.59043, 0.08209, 0.54003, 0.05716, 0.48834, 0.06041],\n\t[0.48834, 0.06041, 0.44296, 0.06333, 0.4009, 0.08773, 0.36769, 0.11959],\n\t[0.36769, 0.11959, 0.33449, 0.15146, 0.30869, 0.1907, 0.28332, 0.22956],\n\t[0.28332, 0.22956, 0.21469, 0.33456, 0.14598, 0.43956, 0.07736, 0.54462],\n\t[0.07736, 0.54462, 0.04474, 0.5945, 0.01128, 0.64655, 0.00226, 0.70598],\n\t[0.00226, 0.70598, -0.00864, 0.77779, 0.02074, 0.85092, 0.07284, 0.89867],\n\t[0.07284, 0.89867, 0.12733, 0.94861, 0.21563, 0.94456, 0.28196, 0.93089],\n\t[0.28196, 0.93089, 0.35467, 0.91586, 0.42576, 0.8876, 0.49992, 0.88769],\n\t[0.49992, 0.88769, 0.56344, 0.88769, 0.62483, 0.90858, 0.68664, 0.92377],\n\t[0.68664, 0.92377, 0.74837, 0.93886, 0.8147, 0.94817, 0.8743, 0.9257],\n\t[0.8743, 0.9257, 0.94829, 0.89788, 1.00142, 0.81877, 0.99997, 0.73757],\n\t[0.99997, 0.73757, 0.99861, 0.66348, 0.95714, 0.59731, 0.91721, 0.53567],\n\t[0.91721, 0.53567, 0.89797, 0.50608, 0.87873, 0.47643, 0.85948, 0.44684],\n\t[0.85948, 0.44684, 0.85946, 0.44684, 0.85943, 0.44684, 0.8594, 0.44684],\n]);\n\nconst boomShape = createShape([\n\t[0.49006, 0.03176, 0.49241, 0.01294, 0.49359, 0.00354, 0.49537, 0.00185],\n\t[0.49537, 0.00185, 0.49796, -0.00062, 0.50203, -0.00062, 0.50462, 0.00185],\n\t[0.50462, 0.00185, 0.50641, 0.00354, 0.50759, 0.01294, 0.50994, 0.03176],\n\t[0.50994, 0.03176, 0.51992, 0.11153, 0.5299, 0.1913, 0.53987, 0.27107],\n\t[0.53987, 0.27107, 0.54082, 0.27866, 0.5413, 0.28244, 0.54266, 0.28403],\n\t[0.54266, 0.28403, 0.54464, 0.28628, 0.54787, 0.287, 0.5506, 0.28572],\n\t[0.5506, 0.28572, 0.55248, 0.28485, 0.55445, 0.28157, 0.55839, 0.275],\n\t[0.55839, 0.275, 0.59978, 0.20621, 0.64116, 0.13742, 0.68254, 0.06863],\n\t[0.68254, 0.06863, 0.69231, 0.05241, 0.69719, 0.04429, 0.6995, 0.04348],\n\t[0.6995, 0.04348, 0.70287, 0.04232, 0.70657, 0.04398, 0.70795, 0.04729],\n\t[0.70795, 0.04729, 0.70891, 0.04954, 0.70617, 0.05863, 0.70071, 0.07679],\n\t[0.70071, 0.07679, 0.67756, 0.15373, 0.6544, 0.23068, 0.63124, 0.30763],\n\t[0.63124, 0.30763, 0.62904, 0.31497, 0.62794, 0.31863, 0.62855, 0.3206],\n\t[0.62855, 0.3206, 0.62942, 0.32348, 0.6321, 0.32544, 0.63512, 0.32541],\n\t[0.63512, 0.32541, 0.63719, 0.32538, 0.64031, 0.32319, 0.64656, 0.31882],\n\t[0.64656, 0.31882, 0.7122, 0.2729, 0.77783, 0.22698, 0.84347, 0.18107],\n\t[0.84347, 0.18107, 0.85895, 0.17022, 0.86669, 0.16482, 0.86913, 0.16501],\n\t[0.86913, 0.16501, 0.87269, 0.16533, 0.87539, 0.16834, 0.87532, 0.17191],\n\t[0.87532, 0.17191, 0.87528, 0.17438, 0.86911, 0.18157, 0.85678, 0.19591],\n\t[0.85678, 0.19591, 0.80449, 0.25674, 0.75221, 0.31758, 0.69992, 0.37841],\n\t[0.69992, 0.37841, 0.69494, 0.38419, 0.69246, 0.3871, 0.69221, 0.38916],\n\t[0.69221, 0.38916, 0.69185, 0.39216, 0.6935, 0.39503, 0.69627, 0.39622],\n\t[0.69627, 0.39622, 0.69817, 0.39706, 0.70191, 0.39631, 0.70939, 0.39488],\n\t[0.70939, 0.39488, 0.78793, 0.37977, 0.86646, 0.36467, 0.945, 0.34957],\n\t[0.945, 0.34957, 0.96353, 0.346, 0.9728, 0.34422, 0.97494, 0.34541],\n\t[0.97494, 0.34541, 0.97806, 0.34713, 0.97931, 0.351, 0.9778, 0.35425],\n\t[0.9778, 0.35425, 0.97676, 0.35647, 0.96822, 0.3605, 0.95115, 0.36856],\n\t[0.95115, 0.36856, 0.87878, 0.40276, 0.80641, 0.43696, 0.73403, 0.47116],\n\t[0.73403, 0.47116, 0.72714, 0.47441, 0.7237, 0.47603, 0.72263, 0.47781],\n\t[0.72263, 0.47781, 0.72109, 0.48041, 0.72144, 0.48372, 0.72348, 0.48594],\n\t[0.72348, 0.48594, 0.72489, 0.48747, 0.7286, 0.48834, 0.73601, 0.49006],\n\t[0.73601, 0.49006, 0.81387, 0.50839, 0.89173, 0.52671, 0.96959, 0.54503],\n\t[0.96959, 0.54503, 0.98796, 0.54934, 0.99715, 0.5515, 0.99862, 0.55347],\n\t[0.99862, 0.55347, 1.00077, 0.55631, 1.00035, 0.56037, 0.99766, 0.56272],\n\t[0.99766, 0.56272, 0.9958, 0.56431, 0.98638, 0.56453, 0.96751, 0.56491],\n\t[0.96751, 0.56491, 0.88757, 0.56654, 0.80762, 0.56818, 0.72767, 0.56981],\n\t[0.72767, 0.56981, 0.72006, 0.56997, 0.71626, 0.57006, 0.71456, 0.57125],\n\t[0.71456, 0.57125, 0.7121, 0.573, 0.71108, 0.57617, 0.71206, 0.57903],\n\t[0.71206, 0.57903, 0.71272, 0.581, 0.71576, 0.58331, 0.72182, 0.58794],\n\t[0.72182, 0.58794, 0.78555, 0.6365, 0.84927, 0.68506, 0.91299, 0.73362],\n\t[0.91299, 0.73362, 0.92802, 0.74509, 0.93554, 0.75084, 0.93609, 0.75322],\n\t[0.93609, 0.75322, 0.93691, 0.7567, 0.93489, 0.76022, 0.93147, 0.76128],\n\t[0.93147, 0.76128, 0.92912, 0.762, 0.92043, 0.75831, 0.90304, 0.75097],\n\t[0.90304, 0.75097, 0.82934, 0.71977, 0.75565, 0.68857, 0.68195, 0.65737],\n\t[0.68195, 0.65737, 0.67493, 0.6544, 0.67142, 0.6529, 0.66939, 0.65331],\n\t[0.66939, 0.65331, 0.66644, 0.65391, 0.66423, 0.65637, 0.66396, 0.65937],\n\t[0.66396, 0.65937, 0.66378, 0.66144, 0.66561, 0.66481, 0.66928, 0.6715],\n\t[0.66928, 0.6715, 0.70784, 0.74193, 0.74641, 0.81237, 0.78497, 0.88281],\n\t[0.78497, 0.88281, 0.79407, 0.8994, 0.79862, 0.90771, 0.79815, 0.91015],\n\t[0.79815, 0.91015, 0.79748, 0.91366, 0.79421, 0.91604, 0.79067, 0.91562],\n\t[0.79067, 0.91562, 0.78824, 0.91531, 0.78179, 0.9084, 0.76888, 0.89456],\n\t[0.76888, 0.89456, 0.71418, 0.83591, 0.65947, 0.77727, 0.60477, 0.71862],\n\t[0.60477, 0.71862, 0.59956, 0.71306, 0.59695, 0.71025, 0.59494, 0.70981],\n\t[0.59494, 0.70981, 0.592, 0.70912, 0.58897, 0.71048, 0.58752, 0.71312],\n\t[0.58752, 0.71312, 0.58651, 0.71493, 0.58683, 0.71875, 0.58747, 0.72637],\n\t[0.58747, 0.72637, 0.59421, 0.80649, 0.60094, 0.8866, 0.60768, 0.96671],\n\t[0.60768, 0.96671, 0.60927, 0.98562, 0.61006, 0.99506, 0.60866, 0.99709],\n\t[0.60866, 0.99709, 0.60663, 1.00002, 0.60267, 1.00087, 0.59962, 0.99902],\n\t[0.59962, 0.99902, 0.59752, 0.99774, 0.59442, 0.98877, 0.58823, 0.97087],\n\t[0.58823, 0.97087, 0.56197, 0.89493, 0.53572, 0.819, 0.50946, 0.74306],\n\t[0.50946, 0.74306, 0.50696, 0.73581, 0.50571, 0.73222, 0.50406, 0.73097],\n\t[0.50406, 0.73097, 0.50165, 0.72916, 0.49834, 0.72916, 0.49594, 0.73097],\n\t[0.49594, 0.73097, 0.49428, 0.73222, 0.49303, 0.73581, 0.49053, 0.74306],\n\t[0.49053, 0.74306, 0.46428, 0.819, 0.43803, 0.89493, 0.41177, 0.97087],\n\t[0.41177, 0.97087, 0.40558, 0.98877, 0.40248, 0.99774, 0.40038, 0.99902],\n\t[0.40038, 0.99902, 0.39733, 1.00087, 0.39338, 1.00002, 0.39134, 0.99709],\n\t[0.39134, 0.99709, 0.38994, 0.99506, 0.39073, 0.98562, 0.39232, 0.96671],\n\t[0.39232, 0.96671, 0.39906, 0.8866, 0.40579, 0.80649, 0.41253, 0.72637],\n\t[0.41253, 0.72637, 0.41317, 0.71875, 0.41349, 0.71493, 0.41248, 0.71312],\n\t[0.41248, 0.71312, 0.41104, 0.71048, 0.408, 0.70912, 0.40507, 0.70981],\n\t[0.40507, 0.70981, 0.40305, 0.71025, 0.40044, 0.71306, 0.39523, 0.71862],\n\t[0.39523, 0.71862, 0.34053, 0.77727, 0.28582, 0.83591, 0.23112, 0.89456],\n\t[0.23112, 0.89456, 0.21821, 0.9084, 0.21176, 0.91531, 0.20933, 0.91562],\n\t[0.20933, 0.91562, 0.20578, 0.91604, 0.20252, 0.91366, 0.20184, 0.91015],\n\t[0.20184, 0.91015, 0.20138, 0.90771, 0.20593, 0.8994, 0.21503, 0.88281],\n\t[0.21503, 0.88281, 0.25359, 0.81237, 0.29215, 0.74193, 0.33072, 0.6715],\n\t[0.33072, 0.6715, 0.33439, 0.66481, 0.33622, 0.66144, 0.33604, 0.65937],\n\t[0.33604, 0.65937, 0.33577, 0.65637, 0.33356, 0.65391, 0.3306, 0.65331],\n\t[0.3306, 0.65331, 0.32857, 0.6529, 0.32506, 0.6544, 0.31805, 0.65737],\n\t[0.31805, 0.65737, 0.24435, 0.68857, 0.17065, 0.71977, 0.09695, 0.75097],\n\t[0.09695, 0.75097, 0.07957, 0.75831, 0.07087, 0.762, 0.06853, 0.76128],\n\t[0.06853, 0.76128, 0.06511, 0.76022, 0.06309, 0.7567, 0.06391, 0.75322],\n\t[0.06391, 0.75322, 0.06446, 0.75084, 0.07198, 0.74509, 0.08701, 0.73362],\n\t[0.08701, 0.73362, 0.15073, 0.68506, 0.21445, 0.6365, 0.27817, 0.58794],\n\t[0.27817, 0.58794, 0.28424, 0.58331, 0.28727, 0.581, 0.28794, 0.57903],\n\t[0.28794, 0.57903, 0.28892, 0.57617, 0.2879, 0.573, 0.28543, 0.57125],\n\t[0.28543, 0.57125, 0.28374, 0.57006, 0.27993, 0.56997, 0.27232, 0.56981],\n\t[0.27232, 0.56981, 0.19238, 0.56818, 0.11243, 0.56654, 0.03248, 0.56491],\n\t[0.03248, 0.56491, 0.01362, 0.56453, 0.00419, 0.56431, 0.00234, 0.56272],\n\t[0.00234, 0.56272, -0.00035, 0.56036, -0.00077, 0.55633, 0.00138, 0.55347],\n\t[0.00138, 0.55347, 0.00285, 0.5515, 0.01204, 0.54934, 0.03041, 0.54503],\n\t[0.03041, 0.54503, 0.10827, 0.52671, 0.18613, 0.50839, 0.26399, 0.49006],\n\t[0.26399, 0.49006, 0.2714, 0.48834, 0.27511, 0.48747, 0.27652, 0.48594],\n\t[0.27652, 0.48594, 0.27856, 0.48372, 0.27891, 0.48041, 0.27736, 0.47781],\n\t[0.27736, 0.47781, 0.2763, 0.47603, 0.27286, 0.47441, 0.26597, 0.47116],\n\t[0.26597, 0.47116, 0.19359, 0.43696, 0.12122, 0.40276, 0.04885, 0.36856],\n\t[0.04885, 0.36856, 0.03177, 0.3605, 0.02324, 0.35647, 0.0222, 0.35425],\n\t[0.0222, 0.35425, 0.02068, 0.35101, 0.02193, 0.34715, 0.02506, 0.34541],\n\t[0.02506, 0.34541, 0.0272, 0.34422, 0.03647, 0.346, 0.055, 0.34957],\n\t[0.055, 0.34957, 0.13353, 0.36467, 0.21207, 0.37977, 0.29061, 0.39488],\n\t[0.29061, 0.39488, 0.29809, 0.39631, 0.30183, 0.39706, 0.30373, 0.39622],\n\t[0.30373, 0.39622, 0.3065, 0.39502, 0.30815, 0.39215, 0.30779, 0.38916],\n\t[0.30779, 0.38916, 0.30755, 0.3871, 0.30506, 0.38419, 0.30008, 0.37841],\n\t[0.30008, 0.37841, 0.24779, 0.31758, 0.19551, 0.25674, 0.14322, 0.19591],\n\t[0.14322, 0.19591, 0.13089, 0.18157, 0.12472, 0.17438, 0.12468, 0.17191],\n\t[0.12468, 0.17191, 0.12461, 0.16834, 0.12731, 0.16533, 0.13086, 0.16501],\n\t[0.13086, 0.16501, 0.1333, 0.16482, 0.14104, 0.17022, 0.15653, 0.18107],\n\t[0.15653, 0.18107, 0.22217, 0.22698, 0.2878, 0.2729, 0.35344, 0.31882],\n\t[0.35344, 0.31882, 0.35969, 0.32319, 0.36281, 0.32538, 0.36488, 0.32541],\n\t[0.36488, 0.32541, 0.3679, 0.32544, 0.37058, 0.32348, 0.37145, 0.3206],\n\t[0.37145, 0.3206, 0.37206, 0.31863, 0.37096, 0.31497, 0.36875, 0.30763],\n\t[0.36875, 0.30763, 0.3456, 0.23068, 0.32244, 0.15373, 0.29929, 0.07679],\n\t[0.29929, 0.07679, 0.29382, 0.05863, 0.29109, 0.04954, 0.29205, 0.04729],\n\t[0.29205, 0.04729, 0.29342, 0.04399, 0.29711, 0.04232, 0.3005, 0.04348],\n\t[0.3005, 0.04348, 0.30281, 0.04429, 0.30769, 0.05241, 0.31745, 0.06863],\n\t[0.31745, 0.06863, 0.35884, 0.13742, 0.40022, 0.20621, 0.44161, 0.275],\n\t[0.44161, 0.275, 0.44555, 0.28157, 0.44752, 0.28485, 0.4494, 0.28572],\n\t[0.4494, 0.28572, 0.45212, 0.287, 0.45536, 0.28628, 0.45734, 0.28403],\n\t[0.45734, 0.28403, 0.4587, 0.28244, 0.45917, 0.27866, 0.46012, 0.27107],\n\t[0.46012, 0.27107, 0.4701, 0.1913, 0.48008, 0.11153, 0.49006, 0.03176],\n]);\n\nconst bunShape = createShape([\n\t[0.01546, 0.25425, 0.01545, 0.18682, 0.04224, 0.12214, 0.08992, 0.07446],\n\t[0.08992, 0.07446, 0.1376, 0.02678, 0.20228, -0.00001, 0.26971, 0],\n\t[0.26971, 0, 0.42313, 0, 0.57654, 0, 0.72996, 0],\n\t[0.72996, 0, 0.85665, -0.00017, 0.96413, 0.09297, 0.98198, 0.2184],\n\t[0.98198, 0.2184, 0.99983, 0.34383, 0.92261, 0.46325, 0.8009, 0.49844],\n\t[0.8009, 0.49844, 0.8002, 0.49863, 0.79972, 0.49927, 0.79974, 0.5],\n\t[0.79974, 0.5, 0.79974, 0.50072, 0.80021, 0.50134, 0.8009, 0.50156],\n\t[0.8009, 0.50156, 0.92232, 0.537, 0.99924, 0.65629, 0.98142, 0.78152],\n\t[0.98142, 0.78152, 0.96359, 0.90675, 0.85645, 0.99984, 0.72996, 1],\n\t[0.72996, 1, 0.57654, 1, 0.42313, 1, 0.26971, 1],\n\t[0.26971, 1, 0.20228, 1.00001, 0.1376, 0.97322, 0.08992, 0.92554],\n\t[0.08992, 0.92554, 0.04224, 0.87786, 0.01545, 0.81318, 0.01546, 0.74575],\n\t[0.01546, 0.74575, 0.01548, 0.63344, 0.08915, 0.53444, 0.19671, 0.50216],\n\t[0.19671, 0.50216, 0.19766, 0.50187, 0.19832, 0.501, 0.19832, 0.5],\n\t[0.19832, 0.5, 0.19832, 0.49901, 0.19766, 0.49813, 0.19671, 0.49784],\n\t[0.19671, 0.49784, 0.08915, 0.46556, 0.01548, 0.36656, 0.01546, 0.25425],\n]);\n\nconst burstShape = createShape([\n\t[0.49184, 0.00797, 0.49416, 0.00384, 0.49528, 0.00181, 0.49669, 0.00094],\n\t[0.49669, 0.00094, 0.49872, -0.00031, 0.50128, -0.00031, 0.50331, 0.00094],\n\t[0.50331, 0.00094, 0.50472, 0.00181, 0.50584, 0.00384, 0.50816, 0.00797],\n\t[0.50816, 0.00797, 0.53447, 0.055, 0.56078, 0.10203, 0.58709, 0.14906],\n\t[0.58709, 0.14906, 0.5885, 0.15159, 0.58922, 0.15287, 0.59019, 0.15362],\n\t[0.59019, 0.15362, 0.59156, 0.15475, 0.59334, 0.15522, 0.59509, 0.15494],\n\t[0.59509, 0.15494, 0.59631, 0.15475, 0.59756, 0.15403, 0.60003, 0.15253],\n\t[0.60003, 0.15253, 0.64634, 0.12496, 0.69266, 0.09739, 0.73897, 0.06981],\n\t[0.73897, 0.06981, 0.743, 0.06741, 0.74503, 0.06619, 0.74666, 0.06616],\n\t[0.74666, 0.06616, 0.74906, 0.06606, 0.75125, 0.06734, 0.75241, 0.06944],\n\t[0.75241, 0.06944, 0.75319, 0.07091, 0.75316, 0.07325, 0.75309, 0.07797],\n\t[0.75309, 0.07797, 0.75236, 0.13185, 0.75164, 0.18574, 0.75091, 0.23962],\n\t[0.75091, 0.23962, 0.75084, 0.24253, 0.75084, 0.24397, 0.75128, 0.24512],\n\t[0.75128, 0.24512, 0.75191, 0.24678, 0.75322, 0.24809, 0.75488, 0.24872],\n\t[0.75488, 0.24872, 0.75603, 0.24916, 0.75747, 0.24916, 0.76038, 0.24909],\n\t[0.76038, 0.24909, 0.81426, 0.24836, 0.86815, 0.24764, 0.92203, 0.24691],\n\t[0.92203, 0.24691, 0.92675, 0.24684, 0.92909, 0.24681, 0.93056, 0.24759],\n\t[0.93056, 0.24759, 0.93266, 0.24875, 0.93394, 0.25094, 0.93384, 0.25334],\n\t[0.93384, 0.25334, 0.93381, 0.25497, 0.93259, 0.257, 0.93019, 0.26103],\n\t[0.93019, 0.26103, 0.90261, 0.30734, 0.87504, 0.35366, 0.84747, 0.39997],\n\t[0.84747, 0.39997, 0.84597, 0.40244, 0.84525, 0.40369, 0.84506, 0.40491],\n\t[0.84506, 0.40491, 0.84478, 0.40666, 0.84525, 0.40844, 0.84638, 0.40981],\n\t[0.84638, 0.40981, 0.84713, 0.41078, 0.84841, 0.4115, 0.85094, 0.41291],\n\t[0.85094, 0.41291, 0.89797, 0.43922, 0.945, 0.46553, 0.99203, 0.49184],\n\t[0.99203, 0.49184, 0.99616, 0.49416, 0.99819, 0.49528, 0.99906, 0.49669],\n\t[0.99906, 0.49669, 1.00031, 0.49872, 1.00031, 0.50128, 0.99906, 0.50331],\n\t[0.99906, 0.50331, 0.99819, 0.50472, 0.99616, 0.50584, 0.99203, 0.50816],\n\t[0.99203, 0.50816, 0.945, 0.53447, 0.89797, 0.56078, 0.85094, 0.58709],\n\t[0.85094, 0.58709, 0.84841, 0.5885, 0.84713, 0.58922, 0.84638, 0.59019],\n\t[0.84638, 0.59019, 0.84525, 0.59156, 0.84478, 0.59334, 0.84506, 0.59509],\n\t[0.84506, 0.59509, 0.84525, 0.59631, 0.84597, 0.59756, 0.84747, 0.60003],\n\t[0.84747, 0.60003, 0.87504, 0.64634, 0.90261, 0.69266, 0.93019, 0.73897],\n\t[0.93019, 0.73897, 0.93259, 0.743, 0.93381, 0.74503, 0.93384, 0.74666],\n\t[0.93384, 0.74666, 0.93394, 0.74906, 0.93266, 0.75125, 0.93056, 0.75241],\n\t[0.93056, 0.75241, 0.92909, 0.75319, 0.92675, 0.75316, 0.92203, 0.75309],\n\t[0.92203, 0.75309, 0.86815, 0.75236, 0.81426, 0.75164, 0.76038, 0.75091],\n\t[0.76038, 0.75091, 0.75747, 0.75084, 0.75603, 0.75084, 0.75488, 0.75128],\n\t[0.75488, 0.75128, 0.75322, 0.75191, 0.75191, 0.75322, 0.75128, 0.75488],\n\t[0.75128, 0.75488, 0.75084, 0.75603, 0.75084, 0.75747, 0.75091, 0.76038],\n\t[0.75091, 0.76038, 0.75164, 0.81426, 0.75236, 0.86815, 0.75309, 0.92203],\n\t[0.75309, 0.92203, 0.75316, 0.92675, 0.75319, 0.92909, 0.75241, 0.93056],\n\t[0.75241, 0.93056, 0.75125, 0.93266, 0.74906, 0.93394, 0.74666, 0.93384],\n\t[0.74666, 0.93384, 0.74503, 0.93381, 0.743, 0.93259, 0.73897, 0.93019],\n\t[0.73897, 0.93019, 0.69266, 0.90261, 0.64634, 0.87504, 0.60003, 0.84747],\n\t[0.60003, 0.84747, 0.59756, 0.84597, 0.59631, 0.84525, 0.59509, 0.84506],\n\t[0.59509, 0.84506, 0.59334, 0.84478, 0.59156, 0.84525, 0.59019, 0.84638],\n\t[0.59019, 0.84638, 0.58922, 0.84713, 0.5885, 0.84841, 0.58709, 0.85094],\n\t[0.58709, 0.85094, 0.56078, 0.89797, 0.53447, 0.945, 0.50816, 0.99203],\n\t[0.50816, 0.99203, 0.50584, 0.99616, 0.50472, 0.99819, 0.50331, 0.99906],\n\t[0.50331, 0.99906, 0.50128, 1.00031, 0.49872, 1.00031, 0.49669, 0.99906],\n\t[0.49669, 0.99906, 0.49528, 0.99819, 0.49416, 0.99616, 0.49184, 0.99203],\n\t[0.49184, 0.99203, 0.46553, 0.945, 0.43922, 0.89797, 0.41291, 0.85094],\n\t[0.41291, 0.85094, 0.4115, 0.84841, 0.41078, 0.84713, 0.40981, 0.84638],\n\t[0.40981, 0.84638, 0.40844, 0.84525, 0.40666, 0.84478, 0.40491, 0.84506],\n\t[0.40491, 0.84506, 0.40369, 0.84525, 0.40244, 0.84597, 0.39997, 0.84747],\n\t[0.39997, 0.84747, 0.35366, 0.87504, 0.30734, 0.90261, 0.26103, 0.93019],\n\t[0.26103, 0.93019, 0.257, 0.93259, 0.25497, 0.93381, 0.25334, 0.93384],\n\t[0.25334, 0.93384, 0.25094, 0.93394, 0.24875, 0.93266, 0.24759, 0.93056],\n\t[0.24759, 0.93056, 0.24681, 0.92909, 0.24684, 0.92675, 0.24691, 0.92203],\n\t[0.24691, 0.92203, 0.24764, 0.86815, 0.24836, 0.81426, 0.24909, 0.76038],\n\t[0.24909, 0.76038, 0.24916, 0.75747, 0.24916, 0.75603, 0.24872, 0.75488],\n\t[0.24872, 0.75488, 0.24809, 0.75322, 0.24678, 0.75191, 0.24513, 0.75128],\n\t[0.24513, 0.75128, 0.24397, 0.75084, 0.24253, 0.75084, 0.23963, 0.75091],\n\t[0.23963, 0.75091, 0.18574, 0.75164, 0.13185, 0.75236, 0.07797, 0.75309],\n\t[0.07797, 0.75309, 0.07325, 0.75316, 0.07091, 0.75319, 0.06944, 0.75241],\n\t[0.06944, 0.75241, 0.06734, 0.75127, 0.06607, 0.74904, 0.06616, 0.74666],\n\t[0.06616, 0.74666, 0.06619, 0.74503, 0.06741, 0.743, 0.06981, 0.73897],\n\t[0.06981, 0.73897, 0.09739, 0.69266, 0.12496, 0.64634, 0.15253, 0.60003],\n\t[0.15253, 0.60003, 0.15403, 0.59756, 0.15475, 0.59631, 0.15494, 0.59509],\n\t[0.15494, 0.59509, 0.15522, 0.59334, 0.15475, 0.59156, 0.15363, 0.59019],\n\t[0.15363, 0.59019, 0.15288, 0.58922, 0.15159, 0.5885, 0.14906, 0.58709],\n\t[0.14906, 0.58709, 0.10203, 0.56078, 0.055, 0.53447, 0.00797, 0.50816],\n\t[0.00797, 0.50816, 0.00384, 0.50584, 0.00181, 0.50472, 0.00094, 0.50331],\n\t[0.00094, 0.50331, -0.00031, 0.50128, -0.00031, 0.49872, 0.00094, 0.49669],\n\t[0.00094, 0.49669, 0.00181, 0.49528, 0.00384, 0.49416, 0.00797, 0.49184],\n\t[0.00797, 0.49184, 0.055, 0.46553, 0.10203, 0.43922, 0.14906, 0.41291],\n\t[0.14906, 0.41291, 0.15159, 0.4115, 0.15287, 0.41078, 0.15362, 0.40981],\n\t[0.15362, 0.40981, 0.15475, 0.40844, 0.15522, 0.40666, 0.15494, 0.40491],\n\t[0.15494, 0.40491, 0.15475, 0.40369, 0.15403, 0.40244, 0.15253, 0.39997],\n\t[0.15253, 0.39997, 0.12496, 0.35366, 0.09739, 0.30734, 0.06981, 0.26103],\n\t[0.06981, 0.26103, 0.06741, 0.257, 0.06619, 0.25497, 0.06616, 0.25334],\n\t[0.06616, 0.25334, 0.06606, 0.25094, 0.06734, 0.24875, 0.06944, 0.24759],\n\t[0.06944, 0.24759, 0.07091, 0.24681, 0.07325, 0.24684, 0.07797, 0.24691],\n\t[0.07797, 0.24691, 0.13185, 0.24764, 0.18574, 0.24836, 0.23963, 0.24909],\n\t[0.23963, 0.24909, 0.24253, 0.24916, 0.24397, 0.24916, 0.24513, 0.24872],\n\t[0.24513, 0.24872, 0.24678, 0.24809, 0.24809, 0.24678, 0.24872, 0.24512],\n\t[0.24872, 0.24512, 0.24916, 0.24397, 0.24916, 0.24253, 0.24909, 0.23962],\n\t[0.24909, 0.23962, 0.24836, 0.18574, 0.24764, 0.13185, 0.24691, 0.07797],\n\t[0.24691, 0.07797, 0.24684, 0.07325, 0.24681, 0.07091, 0.24759, 0.06944],\n\t[0.24759, 0.06944, 0.24875, 0.06734, 0.25094, 0.06606, 0.25334, 0.06616],\n\t[0.25334, 0.06616, 0.25497, 0.06619, 0.257, 0.06741, 0.26103, 0.06981],\n\t[0.26103, 0.06981, 0.30734, 0.09739, 0.35366, 0.12496, 0.39997, 0.15253],\n\t[0.39997, 0.15253, 0.40244, 0.15403, 0.40369, 0.15475, 0.40491, 0.15494],\n\t[0.40491, 0.15494, 0.40666, 0.15522, 0.40844, 0.15475, 0.40981, 0.15362],\n\t[0.40981, 0.15362, 0.41078, 0.15287, 0.4115, 0.15159, 0.41291, 0.14906],\n\t[0.41291, 0.14906, 0.43922, 0.10203, 0.46553, 0.055, 0.49184, 0.00797],\n]);\n\nconst circleShape = createShape([\n\t[1, 0.5, 1, 0.77614, 0.77614, 1, 0.5, 1],\n\t[0.5, 1, 0.22386, 1, 0, 0.77614, 0, 0.5],\n\t[0, 0.5, 0, 0.22386, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77614, 0, 1, 0.22386, 1, 0.5],\n]);\n\nconst clamshellShape = createShape([\n\t[0.95752, 0.36588, 0.97848, 0.4081, 0.98896, 0.42921, 0.99426, 0.45126],\n\t[0.99426, 0.45126, 1.00191, 0.4833, 1.00191, 0.5167, 0.99426, 0.54874],\n\t[0.99426, 0.54874, 0.98896, 0.57079, 0.97848, 0.5919, 0.95752, 0.63412],\n\t[0.95752, 0.63412, 0.93623, 0.677, 0.91494, 0.71987, 0.89365, 0.76275],\n\t[0.89365, 0.76275, 0.87268, 0.80497, 0.8622, 0.82608, 0.84842, 0.84244],\n\t[0.84842, 0.84244, 0.8285, 0.86609, 0.80339, 0.88295, 0.77581, 0.89118],\n\t[0.77581, 0.89118, 0.75673, 0.89688, 0.73577, 0.89688, 0.69384, 0.89688],\n\t[0.69384, 0.89688, 0.56461, 0.89688, 0.43539, 0.89688, 0.30616, 0.89688],\n\t[0.30616, 0.89688, 0.26423, 0.89688, 0.24327, 0.89688, 0.22419, 0.89118],\n\t[0.22419, 0.89118, 0.19661, 0.88295, 0.1715, 0.86609, 0.15158, 0.84244],\n\t[0.15158, 0.84244, 0.1378, 0.82608, 0.12732, 0.80497, 0.10635, 0.76275],\n\t[0.10635, 0.76275, 0.08506, 0.71987, 0.06377, 0.677, 0.04248, 0.63412],\n\t[0.04248, 0.63412, 0.02152, 0.5919, 0.01104, 0.57079, 0.00574, 0.54874],\n\t[0.00574, 0.54874, -0.00191, 0.5167, -0.00191, 0.4833, 0.00574, 0.45126],\n\t[0.00574, 0.45126, 0.01104, 0.42921, 0.02152, 0.4081, 0.04248, 0.36588],\n\t[0.04248, 0.36588, 0.06377, 0.323, 0.08506, 0.28013, 0.10635, 0.23725],\n\t[0.10635, 0.23725, 0.12732, 0.19503, 0.1378, 0.17392, 0.15158, 0.15756],\n\t[0.15158, 0.15756, 0.1715, 0.13391, 0.19661, 0.11705, 0.22419, 0.10882],\n\t[0.22419, 0.10882, 0.24327, 0.10312, 0.26423, 0.10312, 0.30616, 0.10312],\n\t[0.30616, 0.10312, 0.43539, 0.10312, 0.56461, 0.10312, 0.69384, 0.10312],\n\t[0.69384, 0.10312, 0.73577, 0.10312, 0.75673, 0.10312, 0.77581, 0.10882],\n\t[0.77581, 0.10882, 0.80339, 0.11705, 0.8285, 0.13391, 0.84842, 0.15756],\n\t[0.84842, 0.15756, 0.8622, 0.17392, 0.87268, 0.19503, 0.89365, 0.23725],\n\t[0.89365, 0.23725, 0.91494, 0.28013, 0.93623, 0.323, 0.95752, 0.36588],\n]);\n\nconst diamondShape = createShape([\n\t[0.67951, 0.864, 0.62689, 0.93286, 0.60059, 0.96728, 0.57021, 0.98296],\n\t[0.57021, 0.98296, 0.52616, 1.00568, 0.47384, 1.00568, 0.42979, 0.98296],\n\t[0.42979, 0.98296, 0.39941, 0.96728, 0.37311, 0.93286, 0.32049, 0.864],\n\t[0.32049, 0.864, 0.26225, 0.78778, 0.20401, 0.71156, 0.14577, 0.63534],\n\t[0.14577, 0.63534, 0.11377, 0.59346, 0.09777, 0.57252, 0.08984, 0.5501],\n\t[0.08984, 0.5501, 0.07838, 0.51768, 0.07838, 0.48232, 0.08984, 0.4499],\n\t[0.08984, 0.4499, 0.09777, 0.42748, 0.11377, 0.40654, 0.14577, 0.36466],\n\t[0.14577, 0.36466, 0.20401, 0.28844, 0.26225, 0.21222, 0.32049, 0.136],\n\t[0.32049, 0.136, 0.37311, 0.06714, 0.39941, 0.03271, 0.42979, 0.01704],\n\t[0.42979, 0.01704, 0.47384, -0.00568, 0.52616, -0.00568, 0.57021, 0.01704],\n\t[0.57021, 0.01704, 0.60059, 0.03272, 0.62689, 0.06714, 0.67951, 0.136],\n\t[0.67951, 0.136, 0.73775, 0.21222, 0.79599, 0.28844, 0.85423, 0.36466],\n\t[0.85423, 0.36466, 0.88623, 0.40654, 0.90223, 0.42748, 0.91016, 0.4499],\n\t[0.91016, 0.4499, 0.92162, 0.48232, 0.92162, 0.51768, 0.91016, 0.5501],\n\t[0.91016, 0.5501, 0.90223, 0.57252, 0.88623, 0.59346, 0.85423, 0.63534],\n\t[0.85423, 0.63534, 0.79599, 0.71156, 0.73775, 0.78778, 0.67951, 0.864],\n]);\n\nconst fanShape = createShape([\n\t[0, 0.15789, 0, 0.15232, 0, 0.14954, 0.00007, 0.14718],\n\t[0.00007, 0.14718, 0.00256, 0.06699, 0.06699, 0.00256, 0.14718, 0.00008],\n\t[0.14718, 0.00008, 0.14954, 0, 0.15232, 0, 0.1579, 0],\n\t[0.1579, 0, 0.18761, 0, 0.20246, 0, 0.21503, 0.00039],\n\t[0.21503, 0.00039, 0.64271, 0.01366, 0.98632, 0.35728, 0.99961, 0.78497],\n\t[0.99961, 0.78497, 1, 0.79753, 1, 0.81239, 1, 0.8421],\n\t[1, 0.8421, 1, 0.84767, 1, 0.85046, 0.99993, 0.85282],\n\t[0.99993, 0.85282, 0.99743, 0.93301, 0.933, 0.99744, 0.85282, 0.99993],\n\t[0.85282, 0.99993, 0.85046, 1, 0.84768, 1, 0.84211, 1],\n\t[0.84211, 1, 0.63634, 1, 0.43057, 1, 0.2248, 1],\n\t[0.2248, 1, 0.15688, 1, 0.12292, 1, 0.09598, 0.98933],\n\t[0.09598, 0.98933, 0.05698, 0.97389, 0.02611, 0.94301, 0.01067, 0.90402],\n\t[0.01067, 0.90402, 0, 0.87708, 0, 0.84312, 0, 0.7752],\n\t[0, 0.7752, 0, 0.56943, 0, 0.36366, 0, 0.15789],\n]);\n\nconst flowerShape = createShape([\n\t[0.85353, 0.14645, 0.81641, 0.10934, 0.73184, 0.12769, 0.62984, 0.1865],\n\t[0.62984, 0.1865, 0.59928, 0.07277, 0.55247, 0, 0.5, 0],\n\t[0.5, 0, 0.4475, 0, 0.40069, 0.07276, 0.37016, 0.18649],\n\t[0.37016, 0.18649, 0.26813, 0.12768, 0.18359, 0.10934, 0.14647, 0.14644],\n\t[0.14647, 0.14644, 0.10938, 0.18355, 0.12772, 0.26811, 0.18653, 0.37014],\n\t[0.18653, 0.37014, 0.07278, 0.40069, 0, 0.44751, 0, 0.5],\n\t[0, 0.5, 0, 0.55248, 0.07275, 0.59929, 0.1865, 0.62984],\n\t[0.1865, 0.62984, 0.12766, 0.73188, 0.10931, 0.81644, 0.14641, 0.85355],\n\t[0.14641, 0.85355, 0.18353, 0.89067, 0.26809, 0.87231, 0.37012, 0.81347],\n\t[0.37012, 0.81347, 0.40069, 0.92722, 0.4475, 1, 0.5, 1],\n\t[0.5, 1, 0.55247, 1, 0.59928, 0.92722, 0.62984, 0.81346],\n\t[0.62984, 0.81346, 0.73191, 0.8723, 0.81647, 0.89066, 0.85359, 0.85355],\n\t[0.85359, 0.85355, 0.89069, 0.81644, 0.87234, 0.73188, 0.8135, 0.62984],\n\t[0.8135, 0.62984, 0.92725, 0.59929, 1, 0.55248, 1, 0.5],\n\t[1, 0.5, 1, 0.44751, 0.92722, 0.40069, 0.81344, 0.37014],\n\t[0.81344, 0.37014, 0.87228, 0.26811, 0.89063, 0.18356, 0.85353, 0.14645],\n]);\n\nconst gemShape = createShape([\n\t[0.31244, 0.08536, 0.37064, 0.04306, 0.39978, 0.02191, 0.4308, 0.0114],\n\t[0.4308, 0.0114, 0.47568, -0.0038, 0.52432, -0.0038, 0.5692, 0.0114],\n\t[0.5692, 0.0114, 0.60022, 0.02191, 0.62936, 0.04306, 0.68756, 0.08536],\n\t[0.68756, 0.08536, 0.73121, 0.11706, 0.77485, 0.14876, 0.81849, 0.18046],\n\t[0.81849, 0.18046, 0.85308, 0.20558, 0.87038, 0.21814, 0.88446, 0.23321],\n\t[0.88446, 0.23321, 0.90483, 0.25499, 0.92046, 0.28077, 0.93035, 0.30891],\n\t[0.93035, 0.30891, 0.93721, 0.32838, 0.94032, 0.34951, 0.9466, 0.39178],\n\t[0.9466, 0.39178, 0.95468, 0.44627, 0.96276, 0.50076, 0.97083, 0.55524],\n\t[0.97083, 0.55524, 0.98183, 0.6294, 0.98734, 0.66648, 0.9818, 0.69989],\n\t[0.9818, 0.69989, 0.97375, 0.74823, 0.9495, 0.79239, 0.91301, 0.8251],\n\t[0.91301, 0.8251, 0.88779, 0.84771, 0.85353, 0.86296, 0.78503, 0.89347],\n\t[0.78503, 0.89347, 0.73331, 0.91651, 0.68159, 0.93954, 0.62987, 0.96258],\n\t[0.62987, 0.96258, 0.58853, 0.98099, 0.56785, 0.99019, 0.54663, 0.9949],\n\t[0.54663, 0.9949, 0.51592, 1.0017, 0.48408, 1.0017, 0.45337, 0.9949],\n\t[0.45337, 0.9949, 0.43215, 0.99019, 0.41147, 0.98099, 0.37013, 0.96258],\n\t[0.37013, 0.96258, 0.31841, 0.93954, 0.26669, 0.91651, 0.21497, 0.89347],\n\t[0.21497, 0.89347, 0.14647, 0.86296, 0.11221, 0.84771, 0.08699, 0.8251],\n\t[0.08699, 0.8251, 0.0505, 0.79239, 0.02625, 0.74823, 0.0182, 0.69989],\n\t[0.0182, 0.69989, 0.01266, 0.66648, 0.01817, 0.6294, 0.02917, 0.55524],\n\t[0.02917, 0.55524, 0.03724, 0.50076, 0.04532, 0.44627, 0.0534, 0.39178],\n\t[0.0534, 0.39178, 0.05968, 0.34951, 0.06279, 0.32838, 0.06965, 0.30891],\n\t[0.06965, 0.30891, 0.07954, 0.28077, 0.09517, 0.25499, 0.11554, 0.23321],\n\t[0.11554, 0.23321, 0.12962, 0.21814, 0.14692, 0.20558, 0.18151, 0.18046],\n\t[0.18151, 0.18046, 0.22515, 0.14876, 0.26879, 0.11706, 0.31244, 0.08536],\n]);\n\nconst ghostishShape = createShape([\n\t[0, 0.47619, 0, 0.2132, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77614, 0, 1, 0.2132, 1, 0.47619],\n\t[1, 0.47619, 1, 0.5873, 1, 0.69841, 1, 0.80952],\n\t[1, 0.80952, 1, 0.91472, 0.91046, 1, 0.8, 1],\n\t[0.8, 1, 0.76726, 1, 0.73636, 0.99251, 0.70908, 0.97923],\n\t[0.70908, 0.97923, 0.69518, 0.97246, 0.68131, 0.96504, 0.66738, 0.95759],\n\t[0.66738, 0.95759, 0.61838, 0.93137, 0.56864, 0.90476, 0.51423, 0.90476],\n\t[0.51423, 0.90476, 0.50474, 0.90476, 0.49526, 0.90476, 0.48577, 0.90476],\n\t[0.48577, 0.90476, 0.43136, 0.90476, 0.38163, 0.93137, 0.33262, 0.95759],\n\t[0.33262, 0.95759, 0.31869, 0.96504, 0.30482, 0.97246, 0.29092, 0.97923],\n\t[0.29092, 0.97923, 0.26364, 0.99251, 0.23274, 1, 0.2, 1],\n\t[0.2, 1, 0.08954, 1, 0, 0.91472, 0, 0.80952],\n\t[0, 0.80952, 0, 0.69841, 0, 0.5873, 0, 0.47619],\n]);\n\nconst heartShape = createShape([\n\t[0.78469, 0.05353, 0.717, 0.05353, 0.6566, 0.08531, 0.61713, 0.135],\n\t[0.61713, 0.135, 0.57809, 0.17803, 0.53904, 0.22106, 0.5, 0.26409],\n\t[0.5, 0.26409, 0.5, 0.26396, 0.5, 0.26382, 0.5, 0.26369],\n\t[0.5, 0.26369, 0.46096, 0.22065, 0.42191, 0.1776, 0.38287, 0.13456],\n\t[0.38287, 0.13456, 0.3434, 0.08491, 0.283, 0.05312, 0.21531, 0.05312],\n\t[0.21531, 0.05312, 0.0964, 0.05312, 0, 0.15116, 0, 0.27206],\n\t[0, 0.27206, 0, 0.37831, 0.08867, 0.45772, 0.15287, 0.534],\n\t[0.15287, 0.534, 0.21684, 0.61003, 0.2808, 0.686, 0.34476, 0.762],\n\t[0.34476, 0.762, 0.39262, 0.81887, 0.44049, 0.87575, 0.48835, 0.93263],\n\t[0.48835, 0.93263, 0.49224, 0.93722, 0.49611, 0.94184, 0.5, 0.94647],\n\t[0.5, 0.94647, 0.5, 0.9466, 0.5, 0.94674, 0.5, 0.94688],\n\t[0.5, 0.94688, 0.50389, 0.94225, 0.50776, 0.93766, 0.51165, 0.93303],\n\t[0.51165, 0.93303, 0.55951, 0.87616, 0.60737, 0.81931, 0.65524, 0.76244],\n\t[0.65524, 0.76244, 0.7192, 0.68644, 0.78317, 0.61044, 0.84713, 0.53444],\n\t[0.84713, 0.53444, 0.91133, 0.45816, 1, 0.37875, 1, 0.27247],\n\t[1, 0.27247, 1, 0.15156, 0.9036, 0.05353, 0.78469, 0.05353],\n]);\n\nconst clover4LeafShape = createShape([\n\t[0.07095, 0.5, 0.02669, 0.44709, 0, 0.37882, 0, 0.30426],\n\t[0, 0.30426, 0, 0.13622, 0.13551, 0, 0.3027, 0],\n\t[0.3027, 0, 0.37834, 0, 0.44753, 0.02791, 0.50057, 0.07402],\n\t[0.50057, 0.07402, 0.55351, 0.02791, 0.62253, 0, 0.69801, 0],\n\t[0.69801, 0, 0.8648, 0, 1, 0.13622, 1, 0.30426],\n\t[1, 0.30426, 1, 0.37882, 0.97338, 0.44709, 0.92922, 0.5],\n\t[0.92922, 0.5, 0.97338, 0.55291, 1, 0.62118, 1, 0.69574],\n\t[1, 0.69574, 1, 0.86378, 0.8648, 1, 0.69801, 1],\n\t[0.69801, 1, 0.62253, 1, 0.55351, 0.97209, 0.50057, 0.92598],\n\t[0.50057, 0.92598, 0.44753, 0.97209, 0.37834, 1, 0.3027, 1],\n\t[0.3027, 1, 0.13551, 1, 0, 0.86378, 0, 0.69574],\n\t[0, 0.69574, 0, 0.62118, 0.02669, 0.55291, 0.07095, 0.5],\n]);\n\nconst clover8LeafShape = createShape([\n\t[0.96431, 0.5, 1.0451, 0.6505, 0.98406, 0.78678, 0.82834, 0.82831],\n\t[0.82834, 0.82831, 0.78678, 0.98406, 0.6505, 1.04506, 0.5, 0.96431],\n\t[0.5, 0.96431, 0.34947, 1.0451, 0.21319, 0.98406, 0.17166, 0.82834],\n\t[0.17166, 0.82834, 0.01594, 0.78678, -0.0451, 0.6505, 0.03569, 0.5],\n\t[0.03569, 0.5, -0.0451, 0.34947, 0.01594, 0.21319, 0.17166, 0.17166],\n\t[0.17166, 0.17166, 0.21319, 0.01594, 0.34947, -0.0451, 0.5, 0.03569],\n\t[0.5, 0.03569, 0.6505, -0.0451, 0.78678, 0.01594, 0.82831, 0.17166],\n\t[0.82831, 0.17166, 0.98406, 0.21319, 1.04506, 0.34947, 0.96431, 0.5],\n]);\n\nconst ovalShape = createShape([\n\t[0.77103, 0.77103, 0.53902, 1.00303, 0.22959, 1.06979, 0.07991, 0.9201],\n\t[0.07991, 0.9201, -0.06978, 0.7704, -0.00304, 0.46097, 0.22897, 0.22897],\n\t[0.22897, 0.22897, 0.46098, -0.00303, 0.77041, -0.06979, 0.92009, 0.0799],\n\t[0.92009, 0.0799, 1.06978, 0.2296, 1.00304, 0.53903, 0.77103, 0.77103],\n]);\n\nconst pentagonShape = createShape([\n\t[0.3426, 0.07617, 0.39138, 0.03842, 0.41575, 0.01954, 0.44181, 0.01017],\n\t[0.44181, 0.01017, 0.47942, -0.00336, 0.52058, -0.00336, 0.55819, 0.01017],\n\t[0.55819, 0.01017, 0.58425, 0.01954, 0.60862, 0.03842, 0.6574, 0.07617],\n\t[0.6574, 0.07617, 0.69296, 0.1037, 0.72853, 0.13123, 0.76409, 0.15876],\n\t[0.76409, 0.15876, 0.79963, 0.18455, 0.83517, 0.21034, 0.87071, 0.23613],\n\t[0.87071, 0.23613, 0.9213, 0.27285, 0.94662, 0.29123, 0.96352, 0.31429],\n\t[0.96352, 0.31429, 0.98796, 0.34769, 1.00083, 0.38872, 0.99996, 0.43069],\n\t[0.99996, 0.43069, 0.99933, 0.45972, 0.9893, 0.49006, 0.96918, 0.55072],\n\t[0.96918, 0.55072, 0.95522, 0.59283, 0.94126, 0.63495, 0.9273, 0.67706],\n\t[0.9273, 0.67706, 0.91443, 0.72021, 0.90155, 0.76335, 0.88868, 0.8065],\n\t[0.88868, 0.8065, 0.87052, 0.86724, 0.86146, 0.89762, 0.84562, 0.92124],\n\t[0.84562, 0.92124, 0.82268, 0.95543, 0.78934, 0.98055, 0.75099, 0.99259],\n\t[0.75099, 0.99259, 0.7245, 1.00093, 0.69393, 1.00043, 0.63281, 0.99946],\n\t[0.63281, 0.99946, 0.58854, 0.99876, 0.54427, 0.99806, 0.5, 0.99737],\n\t[0.5, 0.99737, 0.45573, 0.99806, 0.41146, 0.99876, 0.36719, 0.99946],\n\t[0.36719, 0.99946, 0.30607, 1.00043, 0.2755, 1.00093, 0.24901, 0.99259],\n\t[0.24901, 0.99259, 0.21066, 0.98055, 0.17732, 0.95543, 0.15438, 0.92124],\n\t[0.15438, 0.92124, 0.13854, 0.89762, 0.12948, 0.86724, 0.11132, 0.8065],\n\t[0.11132, 0.8065, 0.09845, 0.76335, 0.08557, 0.72021, 0.0727, 0.67706],\n\t[0.0727, 0.67706, 0.05874, 0.63495, 0.04478, 0.59283, 0.03082, 0.55072],\n\t[0.03082, 0.55072, 0.0107, 0.49006, 0.00067, 0.45972, 0.00004, 0.43069],\n\t[0.00004, 0.43069, -0.00083, 0.38872, 0.01204, 0.34769, 0.03648, 0.31429],\n\t[0.03648, 0.31429, 0.05338, 0.29123, 0.0787, 0.27285, 0.12929, 0.23613],\n\t[0.12929, 0.23613, 0.16483, 0.21034, 0.20037, 0.18455, 0.23591, 0.15876],\n\t[0.23591, 0.15876, 0.27147, 0.13123, 0.30704, 0.1037, 0.3426, 0.07617],\n]);\n\nconst pillShape = createShape([\n\t[0.2662, 0.1259, 0.43407, -0.04197, 0.70623, -0.04197, 0.8741, 0.1259],\n\t[0.8741, 0.1259, 1.04197, 0.29377, 1.04197, 0.56593, 0.8741, 0.7338],\n\t[0.8741, 0.7338, 0.82733, 0.78057, 0.78057, 0.82733, 0.7338, 0.8741],\n\t[0.7338, 0.8741, 0.56593, 1.04197, 0.29377, 1.04197, 0.1259, 0.8741],\n\t[0.1259, 0.8741, -0.04197, 0.70623, -0.04197, 0.43407, 0.1259, 0.2662],\n\t[0.1259, 0.2662, 0.17267, 0.21943, 0.21943, 0.17267, 0.2662, 0.1259],\n]);\n\nconst pixelCircleShape = createShape([\n\t[0.70372, 0, 0.56791, 0, 0.43209, 0, 0.29628, 0],\n\t[0.29628, 0, 0.29628, 0.0216, 0.29628, 0.04321, 0.29628, 0.06481],\n\t[0.29628, 0.06481, 0.24999, 0.06481, 0.2037, 0.06481, 0.15741, 0.06481],\n\t[0.15741, 0.06481, 0.15741, 0.09259, 0.15741, 0.12037, 0.15741, 0.14816],\n\t[0.15741, 0.14816, 0.12963, 0.14816, 0.10185, 0.14816, 0.07408, 0.14816],\n\t[0.07408, 0.14816, 0.07408, 0.19753, 0.07408, 0.24691, 0.07408, 0.29628],\n\t[0.07408, 0.29628, 0.04938, 0.29628, 0.02469, 0.29628, 0, 0.29628],\n\t[0, 0.29628, 0, 0.43209, 0, 0.56791, 0, 0.70372],\n\t[0, 0.70372, 0.02469, 0.70372, 0.04938, 0.70372, 0.07408, 0.70372],\n\t[0.07408, 0.70372, 0.07408, 0.75309, 0.07408, 0.80247, 0.07408, 0.85184],\n\t[0.07408, 0.85184, 0.10185, 0.85184, 0.12963, 0.85184, 0.15741, 0.85184],\n\t[0.15741, 0.85184, 0.15741, 0.87962, 0.15741, 0.90741, 0.15741, 0.93519],\n\t[0.15741, 0.93519, 0.2037, 0.93519, 0.24999, 0.93519, 0.29628, 0.93519],\n\t[0.29628, 0.93519, 0.29628, 0.95679, 0.29628, 0.9784, 0.29628, 1],\n\t[0.29628, 1, 0.43209, 1, 0.56791, 1, 0.70372, 1],\n\t[0.70372, 1, 0.70372, 0.9784, 0.70372, 0.95679, 0.70372, 0.93519],\n\t[0.70372, 0.93519, 0.75001, 0.93519, 0.7963, 0.93519, 0.84259, 0.93519],\n\t[0.84259, 0.93519, 0.84259, 0.90741, 0.84259, 0.87962, 0.84259, 0.85184],\n\t[0.84259, 0.85184, 0.87037, 0.85184, 0.89816, 0.85184, 0.92594, 0.85184],\n\t[0.92594, 0.85184, 0.92594, 0.80247, 0.92594, 0.75309, 0.92594, 0.70372],\n\t[0.92594, 0.70372, 0.95062, 0.70372, 0.97531, 0.70372, 1, 0.70372],\n\t[1, 0.70372, 1, 0.56791, 1, 0.43209, 1, 0.29628],\n\t[1, 0.29628, 0.97531, 0.29628, 0.95062, 0.29628, 0.92594, 0.29628],\n\t[0.92594, 0.29628, 0.92594, 0.24691, 0.92594, 0.19753, 0.92594, 0.14816],\n\t[0.92594, 0.14816, 0.89816, 0.14816, 0.87037, 0.14816, 0.84259, 0.14816],\n\t[0.84259, 0.14816, 0.84259, 0.12038, 0.84259, 0.09259, 0.84259, 0.06481],\n\t[0.84259, 0.06481, 0.7963, 0.06481, 0.75001, 0.06481, 0.70372, 0.06481],\n\t[0.70372, 0.06481, 0.70372, 0.04321, 0.70372, 0.0216, 0.70372, 0],\n]);\n\nconst pixelTriangleShape = createShape([\n\t[0.28637, 0, 0.22842, 0, 0.17046, 0, 0.1125, 0],\n\t[0.1125, 0, 0.1125, 0.33333, 0.1125, 0.66667, 0.1125, 1],\n\t[0.1125, 1, 0.17046, 1, 0.22842, 1, 0.28637, 1],\n\t[0.28637, 1, 0.28637, 0.97101, 0.28637, 0.94203, 0.28637, 0.91304],\n\t[0.28637, 0.91304, 0.33108, 0.91304, 0.37579, 0.91304, 0.4205, 0.91304],\n\t[0.4205, 0.91304, 0.4205, 0.88551, 0.4205, 0.85797, 0.4205, 0.83043],\n\t[0.4205, 0.83043, 0.46688, 0.83043, 0.51325, 0.83043, 0.55963, 0.83043],\n\t[0.55963, 0.83043, 0.55963, 0.79855, 0.55963, 0.76667, 0.55963, 0.73478],\n\t[0.55963, 0.73478, 0.59771, 0.73478, 0.63579, 0.73478, 0.67388, 0.73478],\n\t[0.67388, 0.73478, 0.67388, 0.70869, 0.67388, 0.68261, 0.67388, 0.65652],\n\t[0.67388, 0.65652, 0.71197, 0.65652, 0.75006, 0.65652, 0.78816, 0.65652],\n\t[0.78816, 0.65652, 0.78816, 0.62464, 0.78816, 0.59275, 0.78816, 0.56087],\n\t[0.78816, 0.56087, 0.82127, 0.56087, 0.85439, 0.56087, 0.8875, 0.56087],\n\t[0.8875, 0.56087, 0.8875, 0.52029, 0.8875, 0.47971, 0.8875, 0.43913],\n\t[0.8875, 0.43913, 0.85439, 0.43913, 0.82127, 0.43913, 0.78816, 0.43913],\n\t[0.78816, 0.43913, 0.78816, 0.40725, 0.78816, 0.37536, 0.78816, 0.34347],\n\t[0.78816, 0.34347, 0.75006, 0.34347, 0.71197, 0.34347, 0.67388, 0.34347],\n\t[0.67388, 0.34347, 0.67388, 0.31739, 0.67388, 0.2913, 0.67388, 0.26522],\n\t[0.67388, 0.26522, 0.63579, 0.26522, 0.59771, 0.26522, 0.55963, 0.26522],\n\t[0.55963, 0.26522, 0.55963, 0.23333, 0.55963, 0.20145, 0.55963, 0.16957],\n\t[0.55963, 0.16957, 0.51325, 0.16957, 0.46688, 0.16957, 0.4205, 0.16957],\n\t[0.4205, 0.16957, 0.4205, 0.14203, 0.4205, 0.11449, 0.4205, 0.08696],\n\t[0.4205, 0.08696, 0.37579, 0.08696, 0.33108, 0.08696, 0.28637, 0.08696],\n\t[0.28637, 0.08696, 0.28637, 0.05797, 0.28637, 0.02899, 0.28637, 0],\n]);\n\nconst puffyDiamondShape = createShape([\n\t[0.77937, 0.78048, 0.81712, 0.7427, 0.8299, 0.6894, 0.81768, 0.64111],\n\t[0.81768, 0.64111, 0.86599, 0.65339, 0.91937, 0.64063, 0.95718, 0.60282],\n\t[0.95718, 0.60282, 1.01427, 0.54574, 1.01427, 0.45319, 0.95718, 0.39611],\n\t[0.95718, 0.39611, 0.91959, 0.35852, 0.86662, 0.34569, 0.81856, 0.3576],\n\t[0.81856, 0.3576, 0.82928, 0.31027, 0.81621, 0.25865, 0.77937, 0.2218],\n\t[0.77937, 0.2218, 0.7415, 0.18394, 0.68803, 0.17119, 0.63969, 0.18355],\n\t[0.63969, 0.18355, 0.6525, 0.13492, 0.63984, 0.08095, 0.60169, 0.04282],\n\t[0.60169, 0.04282, 0.54462, -0.01426, 0.45206, -0.01426, 0.395, 0.04282],\n\t[0.395, 0.04282, 0.3571, 0.08073, 0.34435, 0.13427, 0.35678, 0.18269],\n\t[0.35678, 0.18269, 0.30938, 0.17184, 0.2576, 0.18487, 0.22069, 0.2218],\n\t[0.22069, 0.2218, 0.18385, 0.25865, 0.17079, 0.31028, 0.1815, 0.35761],\n\t[0.1815, 0.35761, 0.13341, 0.34568, 0.08041, 0.35851, 0.04282, 0.39611],\n\t[0.04282, 0.39611, -0.01427, 0.45319, -0.01427, 0.54574, 0.04282, 0.60282],\n\t[0.04282, 0.60282, 0.08063, 0.64064, 0.13404, 0.6534, 0.18235, 0.6411],\n\t[0.18235, 0.6411, 0.17013, 0.68939, 0.18291, 0.7427, 0.22069, 0.78048],\n\t[0.22069, 0.78048, 0.25744, 0.81725, 0.30894, 0.83033, 0.35619, 0.81973],\n\t[0.35619, 0.81973, 0.34478, 0.8675, 0.35772, 0.9199, 0.395, 0.95718],\n\t[0.395, 0.95718, 0.45206, 1.01426, 0.54462, 1.01426, 0.60169, 0.95718],\n\t[0.60169, 0.95718, 0.63919, 0.91968, 0.65206, 0.86688, 0.64028, 0.81888],\n\t[0.64028, 0.81888, 0.6885, 0.83098, 0.74165, 0.81817, 0.77937, 0.78048],\n]);\n\nconst puffyShape = createShape([\n\t[0.99994, 0.49408, 0.99912, 0.42679, 0.94916, 0.37292, 0.88825, 0.37382],\n\t[0.88825, 0.37382, 0.88491, 0.37382, 0.88159, 0.3741, 0.87831, 0.37449],\n\t[0.87831, 0.37449, 0.88087, 0.37218, 0.88337, 0.36982, 0.88575, 0.36722],\n\t[0.88575, 0.36722, 0.92937, 0.32028, 0.93028, 0.24307, 0.88784, 0.19483],\n\t[0.88784, 0.19483, 0.88534, 0.19201, 0.88287, 0.18919, 0.88031, 0.18648],\n\t[0.88031, 0.18648, 0.83669, 0.13954, 0.76694, 0.14055, 0.72444, 0.1888],\n\t[0.72444, 0.1888, 0.72209, 0.19144, 0.71997, 0.19421, 0.71787, 0.19703],\n\t[0.71787, 0.19703, 0.71822, 0.19342, 0.71844, 0.18975, 0.7185, 0.18603],\n\t[0.7185, 0.18603, 0.71934, 0.11874, 0.67066, 0.06346, 0.60981, 0.0625],\n\t[0.60981, 0.0625, 0.60682, 0.0625, 0.60383, 0.0625, 0.60084, 0.0625],\n\t[0.60084, 0.0625, 0.55575, 0.0625, 0.51706, 0.09248, 0.5, 0.13537],\n\t[0.5, 0.13537, 0.48294, 0.09248, 0.44422, 0.0625, 0.39916, 0.0625],\n\t[0.39916, 0.0625, 0.39617, 0.0625, 0.39318, 0.0625, 0.39019, 0.0625],\n\t[0.39019, 0.0625, 0.32934, 0.0634, 0.28066, 0.11869, 0.28147, 0.18603],\n\t[0.28147, 0.18603, 0.28147, 0.18975, 0.28172, 0.19342, 0.28206, 0.19703],\n\t[0.28206, 0.19703, 0.28, 0.19418, 0.27781, 0.19144, 0.2755, 0.1888],\n\t[0.2755, 0.1888, 0.23306, 0.14055, 0.16325, 0.13954, 0.11962, 0.18648],\n\t[0.11962, 0.18648, 0.11709, 0.18925, 0.11453, 0.19201, 0.11209, 0.19483],\n\t[0.11209, 0.19483, 0.06966, 0.24307, 0.07056, 0.32022, 0.11419, 0.36722],\n\t[0.11419, 0.36722, 0.11659, 0.36982, 0.11906, 0.37218, 0.12162, 0.37449],\n\t[0.12162, 0.37449, 0.11833, 0.37409, 0.11501, 0.37387, 0.11169, 0.37382],\n\t[0.11169, 0.37382, 0.05084, 0.37292, 0.00087, 0.42679, 0, 0.49408],\n\t[0, 0.49408, 0, 0.49803, 0, 0.50197, 0, 0.50592],\n\t[0, 0.50592, 0.00081, 0.57321, 0.05081, 0.62708, 0.11169, 0.62618],\n\t[0.11169, 0.62618, 0.11506, 0.62618, 0.11837, 0.6259, 0.12162, 0.62551],\n\t[0.12162, 0.62551, 0.11906, 0.62782, 0.11659, 0.63018, 0.11419, 0.63278],\n\t[0.11419, 0.63278, 0.07056, 0.67972, 0.06966, 0.75693, 0.11209, 0.80518],\n\t[0.11209, 0.80518, 0.11459, 0.80799, 0.11709, 0.81081, 0.11962, 0.81352],\n\t[0.11962, 0.81352, 0.16325, 0.86046, 0.233, 0.85945, 0.2755, 0.8112],\n\t[0.2755, 0.8112, 0.27784, 0.80856, 0.28, 0.80579, 0.28206, 0.80297],\n\t[0.28206, 0.80298, 0.28171, 0.80663, 0.28151, 0.8103, 0.28147, 0.81397],\n\t[0.28147, 0.81397, 0.28066, 0.88126, 0.32931, 0.9366, 0.39019, 0.9375],\n\t[0.39019, 0.9375, 0.39318, 0.9375, 0.39617, 0.9375, 0.39916, 0.9375],\n\t[0.39916, 0.9375, 0.44425, 0.9375, 0.48294, 0.90752, 0.5, 0.86463],\n\t[0.5, 0.86463, 0.51706, 0.90752, 0.55578, 0.9375, 0.60084, 0.9375],\n\t[0.60084, 0.9375, 0.60383, 0.9375, 0.60682, 0.9375, 0.60981, 0.9375],\n\t[0.60981, 0.9375, 0.67066, 0.9366, 0.71934, 0.88131, 0.71853, 0.81397],\n\t[0.71853, 0.81397, 0.71853, 0.81025, 0.71828, 0.80658, 0.71794, 0.80297],\n\t[0.71794, 0.80297, 0.72, 0.80579, 0.72216, 0.80856, 0.7245, 0.8112],\n\t[0.7245, 0.8112, 0.76694, 0.85945, 0.83675, 0.86046, 0.88037, 0.81352],\n\t[0.88037, 0.81352, 0.88291, 0.81075, 0.88547, 0.80799, 0.88791, 0.80518],\n\t[0.88791, 0.80518, 0.93034, 0.75693, 0.92944, 0.67978, 0.88581, 0.63278],\n\t[0.88581, 0.63278, 0.88341, 0.63018, 0.88094, 0.62782, 0.87838, 0.62551],\n\t[0.87838, 0.62551, 0.88167, 0.62591, 0.88499, 0.62613, 0.88831, 0.62618],\n\t[0.88831, 0.62618, 0.94916, 0.62708, 0.99919, 0.57327, 1, 0.50592],\n\t[1, 0.50592, 1, 0.50197, 1, 0.49803, 1, 0.49408],\n\t[1, 0.49408, 0.99998, 0.49408, 0.99996, 0.49408, 0.99994, 0.49408],\n]);\n\nconst semiCircleShape = createShape([\n\t[1, 0.70913, 1, 0.76622, 0.95372, 0.8125, 0.89663, 0.8125],\n\t[0.89663, 0.8125, 0.63221, 0.8125, 0.36779, 0.8125, 0.10337, 0.8125],\n\t[0.10337, 0.8125, 0.04628, 0.8125, 0, 0.76622, 0, 0.70913],\n\t[0, 0.70913, 0, 0.70192, 0, 0.69471, 0, 0.6875],\n\t[0, 0.6875, 0, 0.41134, 0.22386, 0.1875, 0.5, 0.1875],\n\t[0.5, 0.1875, 0.77614, 0.1875, 1, 0.41134, 1, 0.6875],\n\t[1, 0.6875, 1, 0.69471, 1, 0.70192, 1, 0.70913],\n]);\n\nconst cookie12SidedShape = createShape([\n\t[0.42719, 0.03077, 0.42887, 0.02912, 0.42972, 0.02827, 0.43044, 0.02759],\n\t[0.43044, 0.02759, 0.46953, -0.0092, 0.53047, -0.0092, 0.56956, 0.02759],\n\t[0.56956, 0.02759, 0.57028, 0.02827, 0.57113, 0.02912, 0.57281, 0.03077],\n\t[0.57281, 0.03077, 0.57384, 0.03174, 0.57434, 0.03224, 0.57481, 0.03271],\n\t[0.57481, 0.03271, 0.59982, 0.05657, 0.63526, 0.06606, 0.66885, 0.0579],\n\t[0.66885, 0.0579, 0.6695, 0.05774, 0.67019, 0.05756, 0.67157, 0.05721],\n\t[0.67157, 0.05721, 0.67385, 0.05662, 0.675, 0.05634, 0.67597, 0.05609],\n\t[0.67597, 0.05609, 0.72819, 0.04377, 0.781, 0.07424, 0.79644, 0.12565],\n\t[0.79644, 0.12565, 0.79672, 0.12662, 0.79704, 0.12774, 0.79769, 0.13003],\n\t[0.79769, 0.13003, 0.79807, 0.1314, 0.79825, 0.13209, 0.79844, 0.13274],\n\t[0.79844, 0.13274, 0.80817, 0.1659, 0.8341, 0.19183, 0.86726, 0.20156],\n\t[0.86726, 0.20156, 0.86791, 0.20175, 0.8686, 0.20193, 0.86997, 0.20231],\n\t[0.86997, 0.20231, 0.87226, 0.20296, 0.87338, 0.20328, 0.87435, 0.20356],\n\t[0.87435, 0.20356, 0.92576, 0.219, 0.95623, 0.27181, 0.94391, 0.32403],\n\t[0.94391, 0.32403, 0.94366, 0.325, 0.94338, 0.32615, 0.94279, 0.32843],\n\t[0.94279, 0.32843, 0.94244, 0.32981, 0.94226, 0.3305, 0.9421, 0.33115],\n\t[0.9421, 0.33115, 0.93394, 0.36474, 0.94343, 0.40018, 0.96729, 0.42519],\n\t[0.96729, 0.42519, 0.96776, 0.42566, 0.96826, 0.42616, 0.96923, 0.42719],\n\t[0.96923, 0.42719, 0.97088, 0.42887, 0.97173, 0.42972, 0.97241, 0.43044],\n\t[0.97241, 0.43044, 1.0092, 0.46953, 1.0092, 0.53047, 0.97241, 0.56956],\n\t[0.97241, 0.56956, 0.97173, 0.57028, 0.97088, 0.57113, 0.96923, 0.57281],\n\t[0.96923, 0.57281, 0.96826, 0.57384, 0.96776, 0.57434, 0.96729, 0.57481],\n\t[0.96729, 0.57481, 0.94343, 0.59982, 0.93394, 0.63526, 0.9421, 0.66885],\n\t[0.9421, 0.66885, 0.94226, 0.6695, 0.94244, 0.67019, 0.94279, 0.67157],\n\t[0.94279, 0.67157, 0.94338, 0.67385, 0.94366, 0.675, 0.94391, 0.67597],\n\t[0.94391, 0.67597, 0.95623, 0.72819, 0.92576, 0.781, 0.87435, 0.79644],\n\t[0.87435, 0.79644, 0.87338, 0.79672, 0.87226, 0.79704, 0.86997, 0.79769],\n\t[0.86997, 0.79769, 0.8686, 0.79807, 0.86791, 0.79825, 0.86726, 0.79844],\n\t[0.86726, 0.79844, 0.8341, 0.80817, 0.80817, 0.8341, 0.79844, 0.86726],\n\t[0.79844, 0.86726, 0.79825, 0.86791, 0.79807, 0.8686, 0.79769, 0.86997],\n\t[0.79769, 0.86997, 0.79704, 0.87226, 0.79672, 0.87338, 0.79644, 0.87435],\n\t[0.79644, 0.87435, 0.781, 0.92576, 0.72819, 0.95623, 0.67597, 0.94391],\n\t[0.67597, 0.94391, 0.675, 0.94366, 0.67385, 0.94338, 0.67157, 0.94279],\n\t[0.67157, 0.94279, 0.67019, 0.94244, 0.6695, 0.94226, 0.66885, 0.9421],\n\t[0.66885, 0.9421, 0.63526, 0.93394, 0.59982, 0.94343, 0.57481, 0.96729],\n\t[0.57481, 0.96729, 0.57434, 0.96776, 0.57384, 0.96826, 0.57281, 0.96923],\n\t[0.57281, 0.96923, 0.57113, 0.97088, 0.57028, 0.97173, 0.56956, 0.97241],\n\t[0.56956, 0.97241, 0.53047, 1.0092, 0.46953, 1.0092, 0.43044, 0.97241],\n\t[0.43044, 0.97241, 0.42972, 0.97173, 0.42887, 0.97088, 0.42719, 0.96923],\n\t[0.42719, 0.96923, 0.42616, 0.96826, 0.42566, 0.96776, 0.42519, 0.96729],\n\t[0.42519, 0.96729, 0.40018, 0.94343, 0.36474, 0.93394, 0.33115, 0.9421],\n\t[0.33115, 0.9421, 0.3305, 0.94226, 0.32981, 0.94244, 0.32843, 0.94279],\n\t[0.32843, 0.94279, 0.32615, 0.94338, 0.325, 0.94366, 0.32403, 0.94391],\n\t[0.32403, 0.94391, 0.27181, 0.95623, 0.219, 0.92576, 0.20356, 0.87435],\n\t[0.20356, 0.87435, 0.20328, 0.87338, 0.20296, 0.87226, 0.20231, 0.86997],\n\t[0.20231, 0.86997, 0.20193, 0.8686, 0.20175, 0.86791, 0.20156, 0.86726],\n\t[0.20156, 0.86726, 0.19183, 0.8341, 0.1659, 0.80817, 0.13274, 0.79844],\n\t[0.13274, 0.79844, 0.13209, 0.79825, 0.1314, 0.79807, 0.13003, 0.79769],\n\t[0.13003, 0.79769, 0.12774, 0.79704, 0.12662, 0.79672, 0.12565, 0.79644],\n\t[0.12565, 0.79644, 0.07424, 0.781, 0.04377, 0.72819, 0.05609, 0.67597],\n\t[0.05609, 0.67597, 0.05634, 0.675, 0.05662, 0.67385, 0.05721, 0.67157],\n\t[0.05721, 0.67157, 0.05756, 0.67019, 0.05774, 0.6695, 0.0579, 0.66885],\n\t[0.0579, 0.66885, 0.06606, 0.63526, 0.05657, 0.59982, 0.03271, 0.57481],\n\t[0.03271, 0.57481, 0.03224, 0.57434, 0.03174, 0.57384, 0.03077, 0.57281],\n\t[0.03077, 0.57281, 0.02912, 0.57113, 0.02827, 0.57028, 0.02759, 0.56956],\n\t[0.02759, 0.56956, -0.0092, 0.53047, -0.0092, 0.46953, 0.02759, 0.43044],\n\t[0.02759, 0.43044, 0.02827, 0.42972, 0.02912, 0.42887, 0.03077, 0.42719],\n\t[0.03077, 0.42719, 0.03174, 0.42616, 0.03224, 0.42566, 0.03271, 0.42519],\n\t[0.03271, 0.42519, 0.05657, 0.40018, 0.06606, 0.36474, 0.0579, 0.33115],\n\t[0.0579, 0.33115, 0.05774, 0.3305, 0.05756, 0.32981, 0.05721, 0.32843],\n\t[0.05721, 0.32843, 0.05662, 0.32615, 0.05634, 0.325, 0.05609, 0.32403],\n\t[0.05609, 0.32403, 0.04377, 0.27181, 0.07424, 0.219, 0.12565, 0.20356],\n\t[0.12565, 0.20356, 0.12662, 0.20328, 0.12774, 0.20296, 0.13003, 0.20231],\n\t[0.13003, 0.20231, 0.1314, 0.20193, 0.13209, 0.20175, 0.13274, 0.20156],\n\t[0.13274, 0.20156, 0.1659, 0.19183, 0.19183, 0.1659, 0.20156, 0.13274],\n\t[0.20156, 0.13274, 0.20175, 0.13209, 0.20193, 0.1314, 0.20231, 0.13003],\n\t[0.20231, 0.13003, 0.20296, 0.12774, 0.20328, 0.12662, 0.20356, 0.12565],\n\t[0.20356, 0.12565, 0.219, 0.07424, 0.27181, 0.04377, 0.32403, 0.05609],\n\t[0.32403, 0.05609, 0.325, 0.05634, 0.32615, 0.05662, 0.32843, 0.05721],\n\t[0.32843, 0.05721, 0.32981, 0.05756, 0.3305, 0.05774, 0.33115, 0.0579],\n\t[0.33115, 0.0579, 0.36474, 0.06606, 0.40018, 0.05657, 0.42519, 0.03271],\n\t[0.42519, 0.03271, 0.42566, 0.03224, 0.42616, 0.03174, 0.42719, 0.03077],\n]);\n\nconst cookie4SidedShape = createShape([\n\t[0.63833, 0.02217, 0.85312, -0.07111, 1.07112, 0.14689, 0.97783, 0.36168],\n\t[0.97783, 0.36168, 0.97269, 0.37351, 0.96755, 0.38534, 0.9624, 0.39718],\n\t[0.9624, 0.39718, 0.93394, 0.46277, 0.93394, 0.53723, 0.9624, 0.60282],\n\t[0.9624, 0.60282, 0.96755, 0.61466, 0.97269, 0.62649, 0.97783, 0.63832],\n\t[0.97783, 0.63832, 1.07112, 0.85311, 0.85312, 1.07111, 0.63833, 0.97783],\n\t[0.63833, 0.97783, 0.6265, 0.97268, 0.61466, 0.96754, 0.60283, 0.9624],\n\t[0.60283, 0.9624, 0.53724, 0.93393, 0.46278, 0.93393, 0.39718, 0.9624],\n\t[0.39718, 0.9624, 0.38535, 0.96754, 0.37352, 0.97268, 0.36168, 0.97783],\n\t[0.36168, 0.97783, 0.14689, 1.07111, -0.07112, 0.85311, 0.02217, 0.63832],\n\t[0.02217, 0.63832, 0.02731, 0.62649, 0.03245, 0.61466, 0.03759, 0.60282],\n\t[0.03759, 0.60282, 0.06608, 0.53723, 0.06608, 0.46277, 0.03759, 0.39718],\n\t[0.03759, 0.39718, 0.03245, 0.38534, 0.02731, 0.37351, 0.02217, 0.36168],\n\t[0.02217, 0.36168, -0.07112, 0.14689, 0.14689, -0.07111, 0.36168, 0.02217],\n\t[0.36168, 0.02217, 0.37352, 0.02732, 0.38535, 0.03246, 0.39718, 0.0376],\n\t[0.39718, 0.0376, 0.46278, 0.06607, 0.53724, 0.06607, 0.60283, 0.0376],\n\t[0.60283, 0.0376, 0.61466, 0.03246, 0.6265, 0.02732, 0.63833, 0.02217],\n]);\n\nconst cookie6SidedShape = createShape([\n\t[0.32337, 0.07142, 0.42176, -0.02381, 0.57824, -0.02381, 0.67663, 0.07142],\n\t[0.67663, 0.07142, 0.70677, 0.10055, 0.74365, 0.12178, 0.78399, 0.13319],\n\t[0.78399, 0.13319, 0.91589, 0.17053, 0.99413, 0.30566, 0.96061, 0.4382],\n\t[0.96061, 0.4382, 0.95036, 0.47876, 0.95036, 0.52124, 0.96061, 0.5618],\n\t[0.96061, 0.5618, 0.99413, 0.69434, 0.91589, 0.82947, 0.78399, 0.86681],\n\t[0.78399, 0.86681, 0.74365, 0.87822, 0.70677, 0.89945, 0.67663, 0.92858],\n\t[0.67663, 0.92858, 0.57824, 1.02381, 0.42176, 1.02381, 0.32337, 0.92858],\n\t[0.32337, 0.92858, 0.29323, 0.89945, 0.25635, 0.87822, 0.21601, 0.86681],\n\t[0.21601, 0.86681, 0.08411, 0.82947, 0.00587, 0.69434, 0.03939, 0.5618],\n\t[0.03939, 0.5618, 0.04964, 0.52124, 0.04964, 0.47876, 0.03939, 0.4382],\n\t[0.03939, 0.4382, 0.00587, 0.30566, 0.08411, 0.17053, 0.21601, 0.13319],\n\t[0.21601, 0.13319, 0.25635, 0.12178, 0.29323, 0.10055, 0.32337, 0.07142],\n]);\n\nconst cookie7SidedShape = createShape([\n\t[0.35209, 0.06806, 0.36326, 0.05824, 0.36884, 0.05334, 0.37397, 0.04937],\n\t[0.37397, 0.04937, 0.4482, -0.00813, 0.5518, -0.00813, 0.62603, 0.04937],\n\t[0.62603, 0.04937, 0.63116, 0.05334, 0.63674, 0.05824, 0.64791, 0.06806],\n\t[0.64791, 0.06806, 0.65164, 0.07137, 0.65351, 0.07299, 0.65539, 0.07459],\n\t[0.65539, 0.07459, 0.68167, 0.09662, 0.71303, 0.11176, 0.74663, 0.11862],\n\t[0.74663, 0.11862, 0.74903, 0.11912, 0.75147, 0.11956, 0.75637, 0.12043],\n\t[0.75637, 0.12043, 0.771, 0.12306, 0.77831, 0.12434, 0.78461, 0.1259],\n\t[0.78461, 0.1259, 0.87573, 0.14821, 0.94032, 0.2294, 0.94176, 0.3234],\n\t[0.94176, 0.3234, 0.94186, 0.3299, 0.94151, 0.33734, 0.9408, 0.35221],\n\t[0.9408, 0.35221, 0.94057, 0.35721, 0.94045, 0.35968, 0.94039, 0.36215],\n\t[0.94039, 0.36215, 0.93958, 0.39649, 0.94732, 0.43049, 0.96293, 0.46109],\n\t[0.96293, 0.46109, 0.96404, 0.46328, 0.96523, 0.46546, 0.96759, 0.46987],\n\t[0.96759, 0.46987, 0.97467, 0.48296, 0.97821, 0.4895, 0.98093, 0.4954],\n\t[0.98093, 0.4954, 1.02032, 0.58071, 0.99727, 0.68196, 0.92484, 0.74168],\n\t[0.92484, 0.74168, 0.91984, 0.74584, 0.91381, 0.75018, 0.90177, 0.7589],\n\t[0.90177, 0.7589, 0.89774, 0.76184, 0.89572, 0.76328, 0.89377, 0.76478],\n\t[0.89377, 0.76478, 0.86646, 0.78557, 0.84476, 0.81284, 0.83064, 0.84412],\n\t[0.83064, 0.84412, 0.82963, 0.84637, 0.82865, 0.84865, 0.82671, 0.85325],\n\t[0.82671, 0.85325, 0.82091, 0.86696, 0.818, 0.87381, 0.8151, 0.87962],\n\t[0.8151, 0.87962, 0.7731, 0.96368, 0.67977, 1.00875, 0.58801, 0.98925],\n\t[0.58801, 0.98925, 0.58166, 0.98787, 0.57451, 0.98587, 0.56019, 0.98187],\n\t[0.56019, 0.98187, 0.5554, 0.98056, 0.55301, 0.97987, 0.55063, 0.97928],\n\t[0.55063, 0.97928, 0.51741, 0.97084, 0.48259, 0.97084, 0.44937, 0.97928],\n\t[0.44937, 0.97928, 0.44699, 0.97987, 0.4446, 0.98056, 0.43981, 0.98187],\n\t[0.43981, 0.98187, 0.42549, 0.98587, 0.41834, 0.98787, 0.41199, 0.98925],\n\t[0.41199, 0.98925, 0.32023, 1.00875, 0.2269, 0.96368, 0.1849, 0.87962],\n\t[0.1849, 0.87962, 0.18199, 0.87381, 0.17909, 0.86696, 0.17329, 0.85325],\n\t[0.17329, 0.85325, 0.17135, 0.84865, 0.17037, 0.84637, 0.16936, 0.84412],\n\t[0.16936, 0.84412, 0.15523, 0.81284, 0.13353, 0.78557, 0.10623, 0.76478],\n\t[0.10623, 0.76478, 0.10428, 0.76328, 0.10226, 0.76184, 0.09823, 0.7589],\n\t[0.09823, 0.7589, 0.08619, 0.75018, 0.08017, 0.74584, 0.07516, 0.74168],\n\t[0.07516, 0.74168, 0.00273, 0.68196, -0.02032, 0.58071, 0.01907, 0.4954],\n\t[0.01907, 0.4954, 0.02179, 0.4895, 0.02533, 0.48296, 0.03241, 0.46987],\n\t[0.03241, 0.46987, 0.03477, 0.46546, 0.03596, 0.46328, 0.03707, 0.46109],\n\t[0.03707, 0.46109, 0.05268, 0.43049, 0.06042, 0.39649, 0.05961, 0.36215],\n\t[0.05961, 0.36215, 0.05955, 0.35968, 0.05943, 0.35721, 0.0592, 0.35221],\n\t[0.0592, 0.35221, 0.05849, 0.33734, 0.05813, 0.3299, 0.05824, 0.3234],\n\t[0.05824, 0.3234, 0.05968, 0.2294, 0.12427, 0.14821, 0.21539, 0.1259],\n\t[0.21539, 0.1259, 0.22169, 0.12434, 0.229, 0.12306, 0.24363, 0.12043],\n\t[0.24363, 0.12043, 0.24853, 0.11956, 0.25097, 0.11912, 0.25337, 0.11862],\n\t[0.25337, 0.11862, 0.28697, 0.11176, 0.31833, 0.09662, 0.34461, 0.07459],\n\t[0.34461, 0.07459, 0.34649, 0.07299, 0.34836, 0.07137, 0.35209, 0.06806],\n]);\n\nconst cookie9SidedShape = createShape([\n\t[0.39144, 0.04182, 0.39684, 0.03735, 0.39953, 0.03513, 0.402, 0.03326],\n\t[0.402, 0.03326, 0.45981, -0.01109, 0.54019, -0.01109, 0.598, 0.03326],\n\t[0.598, 0.03326, 0.60047, 0.03513, 0.60316, 0.03735, 0.60856, 0.04182],\n\t[0.60856, 0.04182, 0.61097, 0.04379, 0.61216, 0.04479, 0.61334, 0.04576],\n\t[0.61334, 0.04576, 0.64056, 0.06743, 0.67404, 0.07974, 0.70881, 0.08085],\n\t[0.70881, 0.08085, 0.71031, 0.08088, 0.71187, 0.08091, 0.71497, 0.08094],\n\t[0.71497, 0.08094, 0.72194, 0.08104, 0.72544, 0.08107, 0.7285, 0.08123],\n\t[0.7285, 0.08123, 0.80112, 0.08494, 0.86243, 0.13694, 0.87865, 0.20854],\n\t[0.87865, 0.20854, 0.87934, 0.21157, 0.88, 0.21504, 0.88131, 0.22194],\n\t[0.88131, 0.22194, 0.88187, 0.22504, 0.88215, 0.22657, 0.88247, 0.22807],\n\t[0.88247, 0.22807, 0.88956, 0.26244, 0.90737, 0.29357, 0.93325, 0.31694],\n\t[0.93325, 0.31694, 0.9344, 0.31797, 0.93556, 0.319, 0.93793, 0.32104],\n\t[0.93793, 0.32104, 0.94321, 0.32563, 0.94584, 0.32794, 0.94809, 0.33007],\n\t[0.94809, 0.33007, 1.00137, 0.38004, 1.01528, 0.45972, 0.98215, 0.5251],\n\t[0.98215, 0.5251, 0.98075, 0.52788, 0.97903, 0.53094, 0.97562, 0.53707],\n\t[0.97562, 0.53707, 0.97409, 0.53982, 0.97334, 0.54119, 0.97262, 0.54253],\n\t[0.97262, 0.54253, 0.9562, 0.57351, 0.95003, 0.60889, 0.955, 0.6436],\n\t[0.955, 0.6436, 0.95521, 0.64513, 0.95546, 0.64666, 0.95596, 0.64975],\n\t[0.95596, 0.64975, 0.95709, 0.65672, 0.95765, 0.66019, 0.95803, 0.66328],\n\t[0.95803, 0.66328, 0.96703, 0.73616, 0.927, 0.80622, 0.86003, 0.83478],\n\t[0.86003, 0.83478, 0.85718, 0.836, 0.8539, 0.83725, 0.8474, 0.83975],\n\t[0.8474, 0.83975, 0.8445, 0.84084, 0.84303, 0.84141, 0.84162, 0.84197],\n\t[0.84162, 0.84197, 0.80937, 0.855, 0.78212, 0.87812, 0.76381, 0.90794],\n\t[0.76381, 0.90794, 0.76303, 0.90925, 0.76225, 0.91059, 0.76065, 0.91328],\n\t[0.76065, 0.91328, 0.75709, 0.91934, 0.75531, 0.92237, 0.75362, 0.925],\n\t[0.75362, 0.925, 0.71415, 0.98665, 0.63894, 1.01434, 0.56944, 0.99272],\n\t[0.56944, 0.99272, 0.5665, 0.99181, 0.56319, 0.99065, 0.55662, 0.98831],\n\t[0.55662, 0.98831, 0.55369, 0.98728, 0.55222, 0.98675, 0.55078, 0.98628],\n\t[0.55078, 0.98628, 0.51782, 0.97531, 0.48218, 0.97531, 0.44922, 0.98628],\n\t[0.44922, 0.98628, 0.44778, 0.98675, 0.44631, 0.98728, 0.44338, 0.98831],\n\t[0.44338, 0.98831, 0.43681, 0.99065, 0.4335, 0.99181, 0.43056, 0.99272],\n\t[0.43056, 0.99272, 0.36106, 1.01434, 0.28585, 0.98665, 0.24638, 0.925],\n\t[0.24638, 0.925, 0.24469, 0.92237, 0.24291, 0.91934, 0.23935, 0.91328],\n\t[0.23935, 0.91328, 0.23775, 0.91059, 0.23697, 0.90925, 0.23619, 0.90794],\n\t[0.23619, 0.90794, 0.21788, 0.87812, 0.19063, 0.855, 0.15838, 0.84197],\n\t[0.15838, 0.84197, 0.15697, 0.84141, 0.1555, 0.84084, 0.1526, 0.83975],\n\t[0.1526, 0.83975, 0.1461, 0.83725, 0.14282, 0.836, 0.13997, 0.83478],\n\t[0.13997, 0.83478, 0.073, 0.80622, 0.03297, 0.73616, 0.04197, 0.66328],\n\t[0.04197, 0.66328, 0.04235, 0.66019, 0.04291, 0.65672, 0.04404, 0.64975],\n\t[0.04404, 0.64975, 0.04454, 0.64666, 0.04479, 0.64513, 0.045, 0.6436],\n\t[0.045, 0.6436, 0.04997, 0.60889, 0.0438, 0.57351, 0.02738, 0.54253],\n\t[0.02738, 0.54253, 0.02666, 0.54119, 0.02591, 0.53982, 0.02438, 0.53707],\n\t[0.02438, 0.53707, 0.02097, 0.53094, 0.01925, 0.52788, 0.01785, 0.5251],\n\t[0.01785, 0.5251, -0.01528, 0.45972, -0.00137, 0.38004, 0.05191, 0.33007],\n\t[0.05191, 0.33007, 0.05416, 0.32794, 0.05679, 0.32563, 0.06207, 0.32104],\n\t[0.06207, 0.32104, 0.06444, 0.319, 0.0656, 0.31797, 0.06675, 0.31694],\n\t[0.06675, 0.31694, 0.0927, 0.29347, 0.11049, 0.26234, 0.11753, 0.22807],\n\t[0.11753, 0.22807, 0.11785, 0.22657, 0.11813, 0.22504, 0.11869, 0.22194],\n\t[0.11869, 0.22194, 0.12, 0.21504, 0.12066, 0.21157, 0.12135, 0.20854],\n\t[0.12135, 0.20854, 0.13757, 0.13694, 0.19888, 0.08494, 0.2715, 0.08123],\n\t[0.2715, 0.08123, 0.27456, 0.08107, 0.27806, 0.08104, 0.28503, 0.08094],\n\t[0.28503, 0.08094, 0.28813, 0.08091, 0.28969, 0.08088, 0.29119, 0.08085],\n\t[0.29119, 0.08085, 0.32596, 0.07974, 0.35944, 0.06743, 0.38666, 0.04576],\n\t[0.38666, 0.04576, 0.38784, 0.04479, 0.38903, 0.04379, 0.39144, 0.04182],\n]);\n\nconst slantedShape = createShape([\n\t[0.04911, 0.28294, 0.05715, 0.20613, 0.06118, 0.16772, 0.07595, 0.13743],\n\t[0.07595, 0.13743, 0.09732, 0.09358, 0.13462, 0.05972, 0.18009, 0.04288],\n\t[0.18009, 0.04288, 0.21151, 0.03125, 0.24979, 0.03125, 0.32635, 0.03125],\n\t[0.32635, 0.03125, 0.45521, 0.03125, 0.58407, 0.03125, 0.71293, 0.03125],\n\t[0.71293, 0.03125, 0.80551, 0.03125, 0.85181, 0.03125, 0.88715, 0.04642],\n\t[0.88715, 0.04642, 0.93832, 0.06838, 0.97725, 0.11203, 0.99352, 0.16569],\n\t[0.99352, 0.16569, 1.00476, 0.20272, 0.9999, 0.24916, 0.99017, 0.34206],\n\t[0.99017, 0.34206, 0.97708, 0.46706, 0.96398, 0.59206, 0.95089, 0.71706],\n\t[0.95089, 0.71706, 0.94285, 0.79387, 0.93883, 0.83228, 0.92405, 0.86256],\n\t[0.92405, 0.86256, 0.90268, 0.90641, 0.86538, 0.94028, 0.81991, 0.95712],\n\t[0.81991, 0.95712, 0.78849, 0.96875, 0.75021, 0.96875, 0.67365, 0.96875],\n\t[0.67365, 0.96875, 0.54479, 0.96875, 0.41593, 0.96875, 0.28707, 0.96875],\n\t[0.28707, 0.96875, 0.19449, 0.96875, 0.14819, 0.96875, 0.11285, 0.95359],\n\t[0.11285, 0.95359, 0.06169, 0.93162, 0.02275, 0.88797, 0.00648, 0.83431],\n\t[0.00648, 0.83431, -0.00476, 0.79728, 0.0001, 0.75084, 0.00983, 0.65794],\n\t[0.00983, 0.65794, 0.02292, 0.53294, 0.03602, 0.40794, 0.04911, 0.28294],\n]);\n\nconst softBoomShape = createShape([\n\t[0.54668, 0.26546, 0.61712, -0.08849, 0.38296, -0.08849, 0.45337, 0.26546],\n\t[0.45337, 0.26546, 0.38296, -0.08849, 0.16664, 0.0011, 0.36715, 0.30118],\n\t[0.36715, 0.30118, 0.16664, 0.0011, 0.0011, 0.16665, 0.30118, 0.36715],\n\t[0.30118, 0.36715, 0.0011, 0.16665, -0.08849, 0.38296, 0.26546, 0.45334],\n\t[0.26546, 0.45334, -0.08849, 0.38293, -0.08849, 0.61706, 0.26546, 0.54665],\n\t[0.26546, 0.54665, -0.08849, 0.61706, 0.00114, 0.83334, 0.30118, 0.63284],\n\t[0.30118, 0.63284, 0.00114, 0.83334, 0.16668, 0.9989, 0.36715, 0.69881],\n\t[0.36715, 0.69881, 0.16664, 0.99884, 0.38296, 1.08843, 0.45334, 0.73452],\n\t[0.45334, 0.73452, 0.38293, 1.08849, 0.61706, 1.08849, 0.54665, 0.73452],\n\t[0.54665, 0.73452, 0.61706, 1.08849, 0.83334, 0.99884, 0.63284, 0.69881],\n\t[0.63284, 0.69881, 0.83334, 0.99884, 0.9989, 0.83331, 0.69881, 0.63284],\n\t[0.69881, 0.63284, 0.99884, 0.83334, 1.08843, 0.61702, 0.73452, 0.54665],\n\t[0.73452, 0.54665, 1.08849, 0.61706, 1.08849, 0.38293, 0.73452, 0.45334],\n\t[0.73452, 0.45334, 1.08849, 0.38293, 0.99884, 0.16665, 0.69881, 0.36715],\n\t[0.69881, 0.36715, 0.99884, 0.16665, 0.83331, 0.0011, 0.63284, 0.30118],\n\t[0.63284, 0.30118, 0.83334, 0.00114, 0.61702, -0.08845, 0.54665, 0.26546],\n\t[0.54665, 0.26546, 0.54666, 0.26546, 0.54667, 0.26546, 0.54668, 0.26546],\n]);\n\nconst softBurstShape = createShape([\n\t[0.45359, 0.0247, 0.47494, -0.00823, 0.52506, -0.00823, 0.54641, 0.0247],\n\t[0.54641, 0.0247, 0.56348, 0.05101, 0.58055, 0.07733, 0.59763, 0.10364],\n\t[0.59763, 0.10364, 0.61166, 0.12529, 0.64, 0.1341, 0.66466, 0.12447],\n\t[0.66466, 0.12447, 0.69464, 0.11278, 0.72462, 0.10108, 0.7546, 0.08939],\n\t[0.7546, 0.08939, 0.79213, 0.07475, 0.83266, 0.10291, 0.82972, 0.14156],\n\t[0.82972, 0.14156, 0.82736, 0.17245, 0.82499, 0.20334, 0.82263, 0.23422],\n\t[0.82263, 0.23422, 0.82066, 0.25963, 0.83816, 0.28266, 0.86403, 0.28875],\n\t[0.86403, 0.28875, 0.89548, 0.29614, 0.92693, 0.30352, 0.95838, 0.31091],\n\t[0.95838, 0.31091, 0.99772, 0.32016, 1.01322, 0.36572, 0.98707, 0.39535],\n\t[0.98707, 0.39535, 0.96617, 0.41899, 0.94527, 0.44264, 0.92438, 0.46629],\n\t[0.92438, 0.46629, 0.90719, 0.48575, 0.90719, 0.51425, 0.92438, 0.53372],\n\t[0.92438, 0.53372, 0.94527, 0.55737, 0.96617, 0.58102, 0.98707, 0.60466],\n\t[0.98707, 0.60466, 1.01322, 0.63429, 0.99772, 0.67985, 0.95838, 0.6891],\n\t[0.95838, 0.6891, 0.92693, 0.69648, 0.89548, 0.70387, 0.86403, 0.71126],\n\t[0.86403, 0.71126, 0.83816, 0.71735, 0.82066, 0.74038, 0.82263, 0.76579],\n\t[0.82263, 0.76579, 0.82499, 0.79667, 0.82736, 0.82756, 0.82972, 0.85844],\n\t[0.82972, 0.85844, 0.83266, 0.8971, 0.79213, 0.92526, 0.7546, 0.91063],\n\t[0.7546, 0.91063, 0.72462, 0.89893, 0.69464, 0.88724, 0.66466, 0.87554],\n\t[0.66466, 0.87554, 0.64, 0.86591, 0.61166, 0.87473, 0.59763, 0.89638],\n\t[0.59763, 0.89638, 0.58055, 0.92269, 0.56348, 0.94901, 0.54641, 0.97532],\n\t[0.54641, 0.97532, 0.52506, 1.00823, 0.47494, 1.00823, 0.45359, 0.97532],\n\t[0.45359, 0.97532, 0.43652, 0.94901, 0.41945, 0.92269, 0.40237, 0.89638],\n\t[0.40237, 0.89638, 0.38834, 0.87473, 0.36, 0.86591, 0.33534, 0.87554],\n\t[0.33534, 0.87554, 0.30536, 0.88724, 0.27538, 0.89893, 0.2454, 0.91063],\n\t[0.2454, 0.91063, 0.20787, 0.92526, 0.16734, 0.8971, 0.17028, 0.85844],\n\t[0.17028, 0.85844, 0.17264, 0.82756, 0.17501, 0.79667, 0.17737, 0.76579],\n\t[0.17737, 0.76579, 0.17934, 0.74038, 0.16184, 0.71735, 0.13597, 0.71126],\n\t[0.13597, 0.71126, 0.10452, 0.70387, 0.07307, 0.69648, 0.04162, 0.6891],\n\t[0.04162, 0.6891, 0.00228, 0.67985, -0.01322, 0.63429, 0.01293, 0.60466],\n\t[0.01293, 0.60466, 0.03383, 0.58102, 0.05473, 0.55737, 0.07562, 0.53372],\n\t[0.07562, 0.53372, 0.09281, 0.51425, 0.09281, 0.48575, 0.07562, 0.46629],\n\t[0.07562, 0.46629, 0.05473, 0.44264, 0.03383, 0.41899, 0.01293, 0.39535],\n\t[0.01293, 0.39535, -0.01322, 0.36572, 0.00228, 0.32016, 0.04162, 0.31091],\n\t[0.04162, 0.31091, 0.07307, 0.30352, 0.10452, 0.29614, 0.13597, 0.28875],\n\t[0.13597, 0.28875, 0.16184, 0.28266, 0.17934, 0.25963, 0.17737, 0.23422],\n\t[0.17737, 0.23422, 0.17501, 0.20334, 0.17264, 0.17245, 0.17028, 0.14156],\n\t[0.17028, 0.14156, 0.16734, 0.10291, 0.20787, 0.07475, 0.2454, 0.08939],\n\t[0.2454, 0.08939, 0.27538, 0.10108, 0.30536, 0.11278, 0.33534, 0.12447],\n\t[0.33534, 0.12447, 0.36, 0.1341, 0.38834, 0.12529, 0.40237, 0.10364],\n\t[0.40237, 0.10364, 0.41945, 0.07733, 0.43652, 0.05101, 0.45359, 0.0247],\n]);\n\nconst squareShape = createShape([\n\t[1, 0.5375, 1, 0.67725, 1, 0.74712, 0.97806, 0.80253],\n\t[0.97806, 0.80253, 0.94628, 0.88278, 0.88278, 0.94628, 0.80253, 0.97806],\n\t[0.80253, 0.97806, 0.74713, 1, 0.67725, 1, 0.5375, 1],\n\t[0.5375, 1, 0.5125, 1, 0.4875, 1, 0.4625, 1],\n\t[0.4625, 1, 0.32275, 1, 0.25288, 1, 0.19747, 0.97806],\n\t[0.19747, 0.97806, 0.11722, 0.94628, 0.05372, 0.88278, 0.02194, 0.80253],\n\t[0.02194, 0.80253, 0, 0.74713, 0, 0.67725, 0, 0.5375],\n\t[0, 0.5375, 0, 0.5125, 0, 0.4875, 0, 0.4625],\n\t[0, 0.4625, 0, 0.32275, 0, 0.25288, 0.02194, 0.19747],\n\t[0.02194, 0.19747, 0.0537, 0.11723, 0.11723, 0.05371, 0.19747, 0.02194],\n\t[0.19747, 0.02194, 0.25288, 0, 0.32275, 0, 0.4625, 0],\n\t[0.4625, 0, 0.4875, 0, 0.5125, 0, 0.5375, 0],\n\t[0.5375, 0, 0.67725, 0, 0.74712, 0, 0.80253, 0.02194],\n\t[0.80253, 0.02194, 0.88277, 0.05371, 0.9463, 0.11723, 0.97806, 0.19747],\n\t[0.97806, 0.19747, 1, 0.25288, 1, 0.32275, 1, 0.4625],\n\t[1, 0.4625, 1, 0.4875, 1, 0.5125, 1, 0.5375],\n]);\n\nconst sunnyShape = createShape([\n\t[0.77016, 0.1213, 0.80126, 0.12342, 0.81681, 0.12448, 0.82938, 0.12995],\n\t[0.82938, 0.12995, 0.84756, 0.13791, 0.86208, 0.15244, 0.87004, 0.17062],\n\t[0.87004, 0.17062, 0.87554, 0.18318, 0.8766, 0.19874, 0.87871, 0.22983],\n\t[0.87871, 0.22983, 0.88031, 0.25348, 0.88192, 0.27714, 0.88353, 0.3008],\n\t[0.88353, 0.3008, 0.88439, 0.31338, 0.88481, 0.31968, 0.88618, 0.32568],\n\t[0.88618, 0.32568, 0.88816, 0.33436, 0.89159, 0.34264, 0.89633, 0.35018],\n\t[0.89633, 0.35018, 0.89961, 0.35541, 0.90376, 0.36015, 0.91204, 0.36965],\n\t[0.91204, 0.36965, 0.92764, 0.38751, 0.94323, 0.40537, 0.95882, 0.42324],\n\t[0.95882, 0.42324, 0.97932, 0.44674, 0.98957, 0.45847, 0.99457, 0.47124],\n\t[0.99457, 0.47124, 1.0018, 0.48973, 1.0018, 0.51027, 0.99457, 0.52876],\n\t[0.99457, 0.52876, 0.98957, 0.54153, 0.97932, 0.55326, 0.95882, 0.57676],\n\t[0.95882, 0.57676, 0.94323, 0.59463, 0.92764, 0.61249, 0.91204, 0.63035],\n\t[0.91204, 0.63035, 0.90376, 0.63985, 0.89961, 0.64459, 0.89633, 0.64982],\n\t[0.89633, 0.64982, 0.89159, 0.65736, 0.88816, 0.66564, 0.88618, 0.67432],\n\t[0.88618, 0.67432, 0.88481, 0.68032, 0.88439, 0.68662, 0.88353, 0.6992],\n\t[0.88353, 0.6992, 0.88192, 0.72286, 0.88031, 0.74652, 0.87871, 0.77017],\n\t[0.87871, 0.77017, 0.8766, 0.80126, 0.87554, 0.81682, 0.87004, 0.82938],\n\t[0.87004, 0.82938, 0.86208, 0.84756, 0.84756, 0.86209, 0.82938, 0.87005],\n\t[0.82938, 0.87005, 0.81681, 0.87552, 0.80126, 0.87658, 0.77016, 0.8787],\n\t[0.77016, 0.8787, 0.7465, 0.88031, 0.72285, 0.88192, 0.69919, 0.88352],\n\t[0.69919, 0.88352, 0.68661, 0.88438, 0.68032, 0.88482, 0.67431, 0.88617],\n\t[0.67431, 0.88617, 0.66563, 0.88815, 0.65735, 0.89158, 0.64981, 0.89632],\n\t[0.64981, 0.89632, 0.6446, 0.89961, 0.63985, 0.90376, 0.63035, 0.91205],\n\t[0.63035, 0.91205, 0.61248, 0.92764, 0.59462, 0.94323, 0.57675, 0.95882],\n\t[0.57675, 0.95882, 0.55327, 0.97932, 0.54153, 0.98955, 0.52875, 0.99455],\n\t[0.52875, 0.99455, 0.51027, 1.00182, 0.48973, 1.00182, 0.47125, 0.99455],\n\t[0.47125, 0.99455, 0.45847, 0.98955, 0.44673, 0.97932, 0.42325, 0.95882],\n\t[0.42325, 0.95882, 0.40538, 0.94323, 0.38752, 0.92764, 0.36965, 0.91205],\n\t[0.36965, 0.91205, 0.36015, 0.90376, 0.3554, 0.89961, 0.35019, 0.89632],\n\t[0.35019, 0.89632, 0.34265, 0.89158, 0.33437, 0.88815, 0.32569, 0.88617],\n\t[0.32569, 0.88617, 0.31968, 0.88482, 0.31339, 0.88438, 0.30081, 0.88352],\n\t[0.30081, 0.88352, 0.27715, 0.88192, 0.2535, 0.88031, 0.22984, 0.8787],\n\t[0.22984, 0.8787, 0.19874, 0.87658, 0.18319, 0.87552, 0.17062, 0.87005],\n\t[0.17062, 0.87005, 0.15244, 0.86209, 0.13792, 0.84756, 0.12996, 0.82938],\n\t[0.12996, 0.82938, 0.12446, 0.81682, 0.1234, 0.80126, 0.12129, 0.77017],\n\t[0.12129, 0.77017, 0.11968, 0.74652, 0.11807, 0.72286, 0.11647, 0.6992],\n\t[0.11647, 0.6992, 0.11561, 0.68662, 0.11519, 0.68032, 0.11382, 0.67432],\n\t[0.11382, 0.67432, 0.11185, 0.66564, 0.10841, 0.65736, 0.10367, 0.64982],\n\t[0.10367, 0.64982, 0.10039, 0.64459, 0.09624, 0.63985, 0.08796, 0.63035],\n\t[0.08796, 0.63035, 0.07236, 0.61249, 0.05677, 0.59463, 0.04118, 0.57676],\n\t[0.04118, 0.57676, 0.02068, 0.55326, 0.01043, 0.54153, 0.00543, 0.52876],\n\t[0.00543, 0.52876, -0.0018, 0.51027, -0.0018, 0.48973, 0.00543, 0.47124],\n\t[0.00543, 0.47124, 0.01043, 0.45847, 0.02068, 0.44674, 0.04118, 0.42324],\n\t[0.04118, 0.42324, 0.05677, 0.40537, 0.07236, 0.38751, 0.08796, 0.36965],\n\t[0.08796, 0.36965, 0.09624, 0.36015, 0.10039, 0.35541, 0.10367, 0.35018],\n\t[0.10367, 0.35018, 0.10841, 0.34264, 0.11184, 0.33436, 0.11382, 0.32568],\n\t[0.11382, 0.32568, 0.11519, 0.31968, 0.11561, 0.31338, 0.11647, 0.3008],\n\t[0.11647, 0.3008, 0.11808, 0.27714, 0.11969, 0.25348, 0.12129, 0.22983],\n\t[0.12129, 0.22983, 0.1234, 0.19874, 0.12446, 0.18318, 0.12996, 0.17062],\n\t[0.12996, 0.17062, 0.13792, 0.15244, 0.15244, 0.13791, 0.17062, 0.12995],\n\t[0.17062, 0.12995, 0.18319, 0.12448, 0.19874, 0.12342, 0.22984, 0.1213],\n\t[0.22984, 0.1213, 0.2535, 0.11969, 0.27716, 0.11808, 0.30081, 0.11648],\n\t[0.30081, 0.11648, 0.31339, 0.11562, 0.31968, 0.11518, 0.32569, 0.11383],\n\t[0.32569, 0.11383, 0.33437, 0.11185, 0.34266, 0.10842, 0.35019, 0.10368],\n\t[0.35019, 0.10368, 0.3554, 0.10039, 0.36015, 0.09624, 0.36965, 0.08795],\n\t[0.36965, 0.08795, 0.38752, 0.07236, 0.40538, 0.05677, 0.42325, 0.04118],\n\t[0.42325, 0.04118, 0.44673, 0.02068, 0.45847, 0.01045, 0.47125, 0.00545],\n\t[0.47125, 0.00545, 0.48973, -0.00182, 0.51027, -0.00182, 0.52875, 0.00545],\n\t[0.52875, 0.00545, 0.54153, 0.01045, 0.55327, 0.02068, 0.57675, 0.04118],\n\t[0.57675, 0.04118, 0.59462, 0.05677, 0.61248, 0.07236, 0.63035, 0.08795],\n\t[0.63035, 0.08795, 0.63985, 0.09624, 0.6446, 0.10039, 0.64981, 0.10368],\n\t[0.64981, 0.10368, 0.65735, 0.10842, 0.66563, 0.11185, 0.67431, 0.11383],\n\t[0.67431, 0.11383, 0.68032, 0.11518, 0.68661, 0.11562, 0.69919, 0.11648],\n\t[0.69919, 0.11648, 0.72285, 0.11808, 0.7465, 0.11969, 0.77016, 0.1213],\n]);\n\nconst triangleShape = createShape([\n\t[0.33058, 0.2095, 0.37847, 0.12601, 0.40242, 0.08427, 0.43146, 0.06665],\n\t[0.43146, 0.06665, 0.47358, 0.04108, 0.52643, 0.04108, 0.56854, 0.06665],\n\t[0.56854, 0.06665, 0.59758, 0.08427, 0.62153, 0.12601, 0.66943, 0.2095],\n\t[0.66943, 0.2095, 0.75568, 0.35983, 0.84194, 0.51017, 0.92819, 0.66051],\n\t[0.92819, 0.66051, 0.97563, 0.7432, 0.99935, 0.78452, 0.99998, 0.81829],\n\t[0.99998, 0.81829, 1.00088, 0.86728, 0.97451, 0.91273, 0.93153, 0.93626],\n\t[0.93153, 0.93626, 0.90188, 0.95253, 0.85417, 0.95253, 0.75877, 0.95253],\n\t[0.75877, 0.95253, 0.58626, 0.95253, 0.41375, 0.95253, 0.24124, 0.95253],\n\t[0.24124, 0.95253, 0.14583, 0.95253, 0.09812, 0.95253, 0.06847, 0.93626],\n\t[0.06847, 0.93626, 0.02548, 0.91274, -0.00089, 0.86729, 0.00002, 0.81829],\n\t[0.00002, 0.81829, 0.00065, 0.78452, 0.02437, 0.7432, 0.07181, 0.66051],\n\t[0.07181, 0.66051, 0.15807, 0.51017, 0.24432, 0.35983, 0.33058, 0.2095],\n]);\n\nconst verySunnyShape = createShape([\n\t[0.42725, 0.04123, 0.46018, -0.01374, 0.53981, -0.01374, 0.57275, 0.04123],\n\t[0.57275, 0.04123, 0.58508, 0.06182, 0.59741, 0.08241, 0.60974, 0.10301],\n\t[0.60974, 0.10301, 0.62896, 0.13504, 0.66687, 0.15076, 0.70309, 0.14166],\n\t[0.70309, 0.14166, 0.72638, 0.13583, 0.74967, 0.13, 0.77296, 0.12416],\n\t[0.77296, 0.12416, 0.83512, 0.1086, 0.8914, 0.16488, 0.87583, 0.22704],\n\t[0.87583, 0.22704, 0.87, 0.25033, 0.86417, 0.27362, 0.85833, 0.29691],\n\t[0.85833, 0.29691, 0.84924, 0.33313, 0.86496, 0.37103, 0.89699, 0.39025],\n\t[0.89699, 0.39025, 0.91758, 0.40258, 0.93818, 0.41492, 0.95877, 0.42725],\n\t[0.95877, 0.42725, 1.01374, 0.46019, 1.01374, 0.53981, 0.95877, 0.57275],\n\t[0.95877, 0.57275, 0.93818, 0.58508, 0.91758, 0.59742, 0.89699, 0.60975],\n\t[0.89699, 0.60975, 0.86496, 0.62897, 0.84924, 0.66687, 0.85833, 0.70309],\n\t[0.85833, 0.70309, 0.86417, 0.72638, 0.87, 0.74967, 0.87583, 0.77296],\n\t[0.87583, 0.77296, 0.8914, 0.83512, 0.83512, 0.8914, 0.77296, 0.87584],\n\t[0.77296, 0.87584, 0.74967, 0.87, 0.72638, 0.86417, 0.70309, 0.85834],\n\t[0.70309, 0.85834, 0.66687, 0.84924, 0.62896, 0.86496, 0.60974, 0.89699],\n\t[0.60974, 0.89699, 0.59741, 0.91759, 0.58508, 0.93818, 0.57275, 0.95877],\n\t[0.57275, 0.95877, 0.53981, 1.01374, 0.46018, 1.01374, 0.42725, 0.95877],\n\t[0.42725, 0.95877, 0.41491, 0.93818, 0.40258, 0.91759, 0.39025, 0.89699],\n\t[0.39025, 0.89699, 0.37103, 0.86496, 0.33312, 0.84924, 0.29691, 0.85834],\n\t[0.29691, 0.85834, 0.27361, 0.86417, 0.25031, 0.87, 0.22702, 0.87584],\n\t[0.22702, 0.87584, 0.16489, 0.8914, 0.10859, 0.83512, 0.12416, 0.77296],\n\t[0.12416, 0.77296, 0.12999, 0.74967, 0.13583, 0.72638, 0.14167, 0.70309],\n\t[0.14167, 0.70309, 0.15075, 0.66687, 0.13505, 0.62897, 0.103, 0.60975],\n\t[0.103, 0.60975, 0.08241, 0.59742, 0.06181, 0.58508, 0.04121, 0.57275],\n\t[0.04121, 0.57275, -0.01373, 0.53981, -0.01373, 0.46019, 0.04121, 0.42725],\n\t[0.04121, 0.42725, 0.06181, 0.41492, 0.08241, 0.40258, 0.103, 0.39025],\n\t[0.103, 0.39025, 0.13505, 0.37103, 0.15075, 0.33313, 0.14167, 0.29691],\n\t[0.14167, 0.29691, 0.13583, 0.27362, 0.12999, 0.25033, 0.12416, 0.22704],\n\t[0.12416, 0.22704, 0.10859, 0.16488, 0.16489, 0.1086, 0.22702, 0.12416],\n\t[0.22702, 0.12416, 0.25031, 0.13, 0.27361, 0.13583, 0.29691, 0.14166],\n\t[0.29691, 0.14166, 0.33312, 0.15076, 0.37103, 0.13504, 0.39025, 0.10301],\n\t[0.39025, 0.10301, 0.40258, 0.08241, 0.41491, 0.06182, 0.42725, 0.04123],\n]);\n\nfunction reversePolygon(polygon: RoundedPolygon): RoundedPolygon {\n\tconst reversedFeatures: Feature[] = polygon.features\n\t\t.map((f) => {\n\t\t\tconst reversedCubics = f.cubics.map((c) => c.reverse()).reverse();\n\t\t\tif (f.type === \"corner\") {\n\t\t\t\treturn cornerFeature(reversedCubics, f.convex);\n\t\t\t} else {\n\t\t\t\treturn edgeFeature(reversedCubics);\n\t\t\t}\n\t\t})\n\t\t.reverse();\n\treturn RoundedPolygon.fromFeatures(\n\t\treversedFeatures,\n\t\tpolygon.centerX,\n\t\tpolygon.centerY,\n\t);\n}\n\nfunction rotate180(polygon: RoundedPolygon): RoundedPolygon {\n\treturn polygon.transformed((x, y) => [1 - x, 1 - y]);\n}\n\nfunction flipV(polygon: RoundedPolygon): RoundedPolygon {\n\tconst flipped = polygon.transformed((x, y) => [x, 1 - y]);\n\treturn reversePolygon(flipped);\n}\n\nfunction _flipH(polygon: RoundedPolygon): RoundedPolygon {\n\tconst flipped = polygon.transformed((x, y) => [1 - x, y]);\n\treturn reversePolygon(flipped);\n}\n\n// ─── MD3Shapes Catalog ────────────────────────────────────────────────────────\n\nexport const MD3Shapes = {\n\tarch: flipV(archShape),\n\tarrow: flipV(arrowShape),\n\tboom: boomShape,\n\tbun: bunShape,\n\tburst: burstShape,\n\tcircle: circleShape,\n\tclamshell: clamshellShape,\n\tdiamond: diamondShape,\n\tfan: rotate180(fanShape),\n\tflower: flowerShape,\n\tgem: flipV(gemShape),\n\tghostish: flipV(ghostishShape),\n\theart: flipV(heartShape),\n\tclover4Leaf: clover4LeafShape,\n\tclover8Leaf: clover8LeafShape,\n\toval: flipV(ovalShape),\n\tpentagon: flipV(pentagonShape),\n\tpill: flipV(pillShape),\n\tpixelCircle: pixelCircleShape,\n\tpixelTriangle: pixelTriangleShape,\n\tpuffyDiamond: puffyDiamondShape,\n\tpuffy: puffyShape,\n\tsemiCircle: flipV(semiCircleShape),\n\tcookie12Sided: cookie12SidedShape,\n\tcookie4Sided: cookie4SidedShape,\n\tcookie6Sided: cookie6SidedShape,\n\tcookie7Sided: cookie7SidedShape,\n\tcookie9Sided: cookie9SidedShape,\n\tslanted: flipV(slantedShape),\n\tsoftBoom: softBoomShape,\n\tsoftBurst: softBurstShape,\n\tsquare: squareShape,\n\tsunny: sunnyShape,\n\ttriangle: flipV(triangleShape),\n\tverySunny: verySunnyShape,\n} as const;\n\nexport type MD3ShapeName = keyof typeof MD3Shapes;\n\n/**\n * Resolves a ShapeRef (either a named MD3 shape or a RoundedPolygon instance) to a RoundedPolygon.\n * @param ref - The shape name or RoundedPolygon instance\n * @returns The resolved RoundedPolygon\n */\nexport function resolveShape(\n\tref: MD3ShapeName | RoundedPolygon,\n): RoundedPolygon {\n\tif (ref instanceof RoundedPolygon) return ref;\n\tconst shape = MD3Shapes[ref];\n\tif (!shape) throw new Error(`Unknown shape: \"${ref}\"`);\n\treturn shape;\n}\n","/**\n * MD3 Corner Radius Token Scale.\n * Ported from MD3 spec: https://m3.material.io/styles/shape/corner-radius-scale\n *\n * The Material 3 shape system uses a 10-step size-based scale.\n * All values are in density-independent pixels (dp).\n *\n * @example\n * import { MD3CornerRadius } from \"@bug-on/m3-expressive\";\n *\n * // Use a token name\n * const rounding = { radius: MD3CornerRadius.large, smoothing: 0 };\n *\n * // Use with ShapeMedia\n * <ShapeMedia shape=\"pill\" cornerRadius=\"extraLarge\" ... />\n */\nexport const MD3CornerRadius = {\n\t/** 0dp — Sharp corners */\n\tnone: 0,\n\t/** 4dp */\n\textraSmall: 4,\n\t/** 8dp */\n\tsmall: 8,\n\t/** 12dp */\n\tmedium: 12,\n\t/** 16dp */\n\tlarge: 16,\n\t/** 20dp (new in M3 Expressive) */\n\tlargeIncreased: 20,\n\t/** 28dp */\n\textraLarge: 28,\n\t/** 32dp (new in M3 Expressive) */\n\textraLargeIncreased: 32,\n\t/** 48dp (new in M3 Expressive) */\n\textraExtraLarge: 48,\n\t/** 9999dp — Fully rounded (pill/circle) */\n\tfull: 9999,\n} as const;\n\n/** Token name for MD3 corner radius scale. */\nexport type MD3CornerRadiusToken = keyof typeof MD3CornerRadius;\n","/**\n * Shape factory functions for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Shapes.kt\n *\n * These functions create basic geometric shapes as RoundedPolygon instances.\n * All shapes default to being centered at (0,0) with radius 1.\n */\n\nimport { RoundedPolygon } from \"../core/rounded-polygon\";\nimport {\n\ttype CornerRounding,\n\tcornerRounding,\n\tUNROUNDED,\n} from \"../math/corner-rounding\";\nimport { distance, FLOAT_PI, radialToCartesian } from \"../utils/utils\";\n\n/**\n * Creates a circular shape approximated by a rounded polygon.\n *\n * @param numVertices - Number of polygon vertices (≥ 3, default: 8)\n * @param radius - Circle radius (default: 1)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n * @returns A RoundedPolygon approximating a circle\n *\n * @example\n * const myCircle = circle(8, 100, 0, 0);\n */\nexport function circle(\n\tnumVertices = 8,\n\tradius = 1,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (numVertices < 3) throw new Error(\"Circle must have at least 3 vertices\");\n\t// The polygon radius must be larger so that after rounding, the result matches desired radius\n\tconst theta = FLOAT_PI / numVertices;\n\tconst polygonRadius = radius / Math.cos(theta);\n\treturn RoundedPolygon.fromNumVertices(\n\t\tnumVertices,\n\t\tpolygonRadius,\n\t\tcenterX,\n\t\tcenterY,\n\t\tcornerRounding(radius),\n\t);\n}\n\n/**\n * Creates a rectangular shape with optional rounding.\n *\n * @param width - Rectangle width (default: 2)\n * @param height - Rectangle height (default: 2)\n * @param rounding - Corner rounding for all corners (default: none)\n * @param perVertexRounding - Per-corner rounding overrides (length must be 4)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * // Rounded rectangle\n * const roundedRect = rectangle(2, 1, { radius: 0.25, smoothing: 0 });\n */\nexport function rectangle(\n\twidth = 2,\n\theight = 2,\n\trounding: CornerRounding = UNROUNDED,\n\tperVertexRounding?: CornerRounding[],\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tconst left = centerX - width / 2;\n\tconst top = centerY - height / 2;\n\tconst right = centerX + width / 2;\n\tconst bottom = centerY + height / 2;\n\t// Vertices in clockwise order: bottom-right, bottom-left, top-left, top-right\n\treturn RoundedPolygon.fromVertices(\n\t\t[right, bottom, left, bottom, left, top, right, top],\n\t\trounding,\n\t\tperVertexRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a star-shaped polygon with inner and outer radii.\n *\n * If innerRadius equals radius, the result is a regular polygon with\n * 2 × numVerticesPerRadius vertices.\n *\n * @param numVerticesPerRadius - Vertices per radius (outer + inner)\n * @param radius - Outer radius (default: 1)\n * @param innerRadius - Inner radius (default: 0.5)\n * @param rounding - Corner rounding for outer vertices (default: none)\n * @param innerRounding - Corner rounding for inner vertices (default: uses rounding)\n * @param perVertexRounding - Full per-vertex rounding list\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * // 8-pointed star\n * const star8 = star(8, 1, 0.4);\n *\n * @example\n * // Rounded sunny shape\n * const sunny = star(8, 1, 0.75, { radius: 0.15, smoothing: 0 }, { radius: 0.05, smoothing: 0 });\n */\nexport function star(\n\tnumVerticesPerRadius: number,\n\tradius = 1,\n\tinnerRadius = 0.5,\n\trounding: CornerRounding = UNROUNDED,\n\tinnerRounding?: CornerRounding,\n\tperVertexRounding?: CornerRounding[],\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (radius <= 0 || innerRadius <= 0)\n\t\tthrow new Error(\"Star radii must be greater than 0\");\n\tif (innerRadius >= radius)\n\t\tthrow new Error(\"innerRadius must be less than radius\");\n\n\tlet pvRounding = perVertexRounding;\n\tif (!pvRounding && innerRounding) {\n\t\tconst resolvedInnerRounding = innerRounding;\n\t\tpvRounding = Array.from({ length: numVerticesPerRadius }, (_, i) =>\n\t\t\ti % 2 === 0 ? rounding : resolvedInnerRounding,\n\t\t);\n\t\t// Flatten: alternating outer/inner for 2*n vertices\n\t\tpvRounding = [];\n\t\tfor (let i = 0; i < numVerticesPerRadius; i++) {\n\t\t\tpvRounding.push(rounding, resolvedInnerRounding);\n\t\t}\n\t}\n\n\tconst vertices = starVertices(\n\t\tnumVerticesPerRadius,\n\t\tradius,\n\t\tinnerRadius,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n\treturn RoundedPolygon.fromVertices(\n\t\tvertices,\n\t\trounding,\n\t\tpvRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a pill shape: rectangle with fully-rounded short ends.\n *\n * @param width - Width of the pill (default: 2)\n * @param height - Height of the pill (default: 1)\n * @param smoothing - Corner smoothing factor [0,1] (default: 0)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * const pillShape = pill(3, 1);\n */\nexport function pill(\n\twidth = 2,\n\theight = 1,\n\tsmoothing = 0,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (width <= 0 || height <= 0)\n\t\tthrow new Error(\"Pill must have positive width and height\");\n\tconst wHalf = width / 2;\n\tconst hHalf = height / 2;\n\tconst r = Math.min(wHalf, hHalf);\n\treturn RoundedPolygon.fromVertices(\n\t\t[\n\t\t\twHalf + centerX,\n\t\t\thHalf + centerY,\n\t\t\t-wHalf + centerX,\n\t\t\thHalf + centerY,\n\t\t\t-wHalf + centerX,\n\t\t\t-hHalf + centerY,\n\t\t\twHalf + centerX,\n\t\t\t-hHalf + centerY,\n\t\t],\n\t\tcornerRounding(r, smoothing),\n\t\tundefined,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a pill-star shape: like a pill but with star-like inner/outer vertices.\n *\n * @param width - Width (default: 2)\n * @param height - Height (default: 1)\n * @param numVerticesPerRadius - Number of point pairs per radius\n * @param innerRadiusRatio - Inner radius as fraction of outer (default: 0.5)\n * @param rounding - Outer vertex rounding (default: none)\n * @param innerRounding - Inner vertex rounding (default: uses rounding)\n * @param perVertexRounding - Full per-vertex rounding list\n * @param vertexSpacing - Spacing factor [0,1] (default: 0.5)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n */\nexport function pillStar(\n\twidth = 2,\n\theight = 1,\n\tnumVerticesPerRadius = 8,\n\tinnerRadiusRatio = 0.5,\n\trounding: CornerRounding = UNROUNDED,\n\tinnerRounding?: CornerRounding,\n\tperVertexRounding?: CornerRounding[],\n\tvertexSpacing = 0.5,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (innerRadiusRatio <= 0 || innerRadiusRatio >= 1) {\n\t\tthrow new Error(\"innerRadiusRatio must be between 0 and 1 (exclusive)\");\n\t}\n\n\t// Generate pill-star vertices by arranging inner/outer points on a pill outline\n\tconst vertices = pillStarVertices(\n\t\twidth,\n\t\theight,\n\t\tnumVerticesPerRadius,\n\t\tinnerRadiusRatio,\n\t\tvertexSpacing,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n\n\tlet pvRounding = perVertexRounding;\n\tif (!pvRounding && innerRounding) {\n\t\tconst resolvedInnerRounding = innerRounding;\n\t\tpvRounding = [];\n\t\tfor (let i = 0; i < numVerticesPerRadius * 2; i++) {\n\t\t\tpvRounding.push(i % 2 === 0 ? rounding : resolvedInnerRounding);\n\t\t}\n\t}\n\n\treturn RoundedPolygon.fromVertices(\n\t\tvertices,\n\t\trounding,\n\t\tpvRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction starVertices(\n\tnumVerticesPerRadius: number,\n\tradius: number,\n\tinnerRadius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\tfor (let i = 0; i < total; i++) {\n\t\tconst r = i % 2 === 0 ? radius : innerRadius;\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst [rx, ry] = radialToCartesian(r, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\nfunction pillStarVertices(\n\twidth: number,\n\theight: number,\n\tnumVerticesPerRadius: number,\n\tinnerRadiusRatio: number,\n\tvertexSpacing: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst wHalf = width / 2;\n\tconst hHalf = height / 2;\n\tconst r = Math.min(wHalf, hHalf);\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\n\tfor (let i = 0; i < total; i++) {\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst isOuter = i % 2 === 0;\n\t\tconst _radiusScale = isOuter ? 1 : innerRadiusRatio;\n\n\t\t// Project angle onto pill outline\n\t\tconst cos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle);\n\t\tconst baseR = isOuter ? r : r * innerRadiusRatio;\n\n\t\t// Interpolate between circle and rectangle based on aspect ratio\n\t\tconst rx = cos * wHalf;\n\t\tconst ry = sin * hHalf;\n\t\tconst pillR = distance(rx, ry);\n\t\tconst finalR = baseR * vertexSpacing + pillR * (1 - vertexSpacing);\n\n\t\tresult.push(cx + cos * finalR, cy + sin * finalR);\n\t}\n\treturn result;\n}\n","/**\n * Bidirectional float mapping utilities for the Morph engine.\n * Ported from androidx.graphics.shapes.FloatMapping.kt\n *\n * Used to map outline progress values between two shapes that have\n * different feature distributions.\n */\n\nimport { interpolate, positiveModulo } from \"../utils/utils\";\n\n/**\n * A segment in a piecewise-linear mapping.\n * Maps [fromStart, fromEnd] → [toStart, toEnd].\n */\nexport interface Segment {\n\treadonly fromStart: number;\n\treadonly fromEnd: number;\n\treadonly toStart: number;\n\treadonly toEnd: number;\n}\n\n/**\n * Maps a value from the \"from\" domain to the \"to\" domain using a segment list.\n * @param value - Input value in the from domain\n * @param segments - Sorted segment list\n * @returns Mapped value in the to domain\n */\nexport function mapSegments(value: number, segments: Segment[]): number {\n\tfor (const seg of segments) {\n\t\tif (value <= seg.fromEnd) {\n\t\t\tif (seg.fromEnd === seg.fromStart) return seg.toStart;\n\t\t\tconst t = (value - seg.fromStart) / (seg.fromEnd - seg.fromStart);\n\t\t\treturn interpolate(seg.toStart, seg.toEnd, t);\n\t\t}\n\t}\n\t// Past the end — use last segment\n\tconst last = segments[segments.length - 1];\n\treturn last.toEnd;\n}\n\n/**\n * DoubleMapper: bidirectional mapper used in the Morph matching algorithm.\n * Maps progress values from polygon1 space → polygon2 space and vice versa.\n */\nexport interface DoubleMapper {\n\t/** Maps a progress value from the start polygon to the end polygon. */\n\tmap(progress: number): number;\n\t/** Maps a progress value from the end polygon back to the start polygon. */\n\tmapBack(progress: number): number;\n}\n\n/**\n * Creates a DoubleMapper from two parallel arrays of mapped progress values.\n * Used internally by featureMapper.\n *\n * @param fromValues - Progress values in polygon1 space [0..1]\n * @param toValues - Corresponding progress values in polygon2 space [0..1]\n */\nexport function createDoubleMapper(\n\tfromValues: number[],\n\ttoValues: number[],\n): DoubleMapper {\n\tif (fromValues.length !== toValues.length || fromValues.length === 0) {\n\t\t// Identity mapper for degenerate cases\n\t\treturn { map: (v) => v, mapBack: (v) => v };\n\t}\n\n\tconst n = fromValues.length;\n\n\t// Build forward segments: from1 → to2\n\tconst forwardSegs: Segment[] = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst next = (i + 1) % n;\n\t\tconst fromStart = fromValues[i];\n\t\tlet fromEnd = fromValues[next];\n\t\tconst toStart = toValues[i];\n\t\tlet toEnd = toValues[next];\n\t\t// Handle wrap-around\n\t\tif (fromEnd < fromStart) fromEnd += 1;\n\t\tif (toEnd < toStart) toEnd += 1;\n\t\tforwardSegs.push({ fromStart, fromEnd, toStart, toEnd });\n\t}\n\n\t// Build reverse segments: to2 → from1\n\tconst reverseSegs: Segment[] = [];\n\tfor (const seg of forwardSegs) {\n\t\treverseSegs.push({\n\t\t\tfromStart: seg.toStart,\n\t\t\tfromEnd: seg.toEnd,\n\t\t\ttoStart: seg.fromStart,\n\t\t\ttoEnd: seg.fromEnd,\n\t\t});\n\t}\n\treverseSegs.sort((a, b) => a.fromStart - b.fromStart);\n\n\treturn {\n\t\tmap: (v) =>\n\t\t\tpositiveModulo(mapSegments(positiveModulo(v, 1), forwardSegs), 1),\n\t\tmapBack: (v) =>\n\t\t\tpositiveModulo(mapSegments(positiveModulo(v, 1), reverseSegs), 1),\n\t};\n}\n","/**\n * Feature mapping for the Morph engine.\n * Ported from androidx.graphics.shapes.FeatureMapping.kt\n *\n * Maps corners between two polygons by proximity, enabling the Morph engine\n * to create smooth transitions between shapes with different vertex counts.\n */\n\nimport { createDoubleMapper, type DoubleMapper } from \"./float-mapping\";\nimport type { MeasuredFeature } from \"./polygon-measure\";\n\n/**\n * Creates a DoubleMapper that maps progress values between two polygons\n * based on matching their convex corners by proximity.\n *\n * The algorithm:\n * 1. Extract convex corner progress values from both polygons\n * 2. Match each corner in polygon1 to the closest corner of the same type in polygon2\n * 3. Build a piecewise-linear bidirectional mapper\n *\n * @param features1 - Measured features from polygon 1\n * @param features2 - Measured features from polygon 2\n * @returns A DoubleMapper for bidirectional progress mapping\n */\nexport function featureMapper(\n\tfeatures1: MeasuredFeature[],\n\tfeatures2: MeasuredFeature[],\n): DoubleMapper {\n\tconst convex1 = features1.filter((f) => f.convex);\n\tconst convex2 = features2.filter((f) => f.convex);\n\n\tif (convex1.length === 0 || convex2.length === 0) {\n\t\t// No convex corners to match — use identity mapping\n\t\treturn createDoubleMapper([], []);\n\t}\n\n\t// Map each convex corner in polygon1 to the closest in polygon2\n\tconst fromValues: number[] = [];\n\tconst toValues: number[] = [];\n\n\tfor (const f1 of convex1) {\n\t\tlet bestDist = Number.MAX_VALUE;\n\t\tlet bestProgress = 0;\n\t\tfor (const f2 of convex2) {\n\t\t\tconst diff = Math.abs(f1.progress - f2.progress);\n\t\t\tconst dist = Math.min(diff, 1 - diff); // circular distance\n\t\t\tif (dist < bestDist) {\n\t\t\t\tbestDist = dist;\n\t\t\t\tbestProgress = f2.progress;\n\t\t\t}\n\t\t}\n\t\tfromValues.push(f1.progress);\n\t\ttoValues.push(bestProgress);\n\t}\n\n\treturn createDoubleMapper(fromValues, toValues);\n}\n","/**\n * Polygon measurement utilities for the Morph engine.\n * Ported from androidx.graphics.shapes.PolygonMeasure.kt\n *\n * Measures the outline of a RoundedPolygon by arc length, normalizing\n * progress values to [0, 1]. Used by Morph to match curves between polygons.\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport type { Cubic } from \"../math/cubic\";\nimport { distance } from \"../utils/utils\";\n\n/** A Cubic with its start/end outline progress values normalized to [0, 1]. */\nexport interface MeasuredCubic {\n\treadonly cubic: Cubic;\n\treadonly startOutlineProgress: number;\n\treadonly endOutlineProgress: number;\n}\n\n/** Feature info extracted from a measured polygon (for featureMapper). */\nexport interface MeasuredFeature {\n\t/** Progress at the midpoint of this feature's central arc */\n\treadonly progress: number;\n\t/** Whether this corner is convex */\n\treadonly convex: boolean;\n}\n\n/**\n * A list of MeasuredCubics covering the full outline of a polygon.\n * Provides methods to cut and shift the polygon at a given progress point.\n */\nexport class MeasuredPolygon {\n\tprivate constructor(\n\t\treadonly measuredCubics: MeasuredCubic[],\n\t\treadonly features: MeasuredFeature[],\n\t) {}\n\n\tget size(): number {\n\t\treturn this.measuredCubics.length;\n\t}\n\n\tgetOrNull(index: number): MeasuredCubic | null {\n\t\treturn index >= 0 && index < this.measuredCubics.length\n\t\t\t? this.measuredCubics[index]\n\t\t\t: null;\n\t}\n\n\t/**\n\t * Cuts the polygon at cutPoint and rotates so that cutPoint becomes progress=0.\n\t * Returns a new MeasuredPolygon with adjusted progress values.\n\t * @param cutPoint - Progress value [0, 1] at which to cut\n\t */\n\tcutAndShift(cutPoint: number): MeasuredPolygon {\n\t\tif (cutPoint <= 0 || cutPoint >= 1) return this;\n\n\t\tconst result: MeasuredCubic[] = [];\n\n\t\t// Find which cubic contains the cut point\n\t\tlet cutCubicIdx = -1;\n\t\tfor (let i = 0; i < this.measuredCubics.length; i++) {\n\t\t\tif (this.measuredCubics[i].endOutlineProgress >= cutPoint) {\n\t\t\t\tcutCubicIdx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (cutCubicIdx === -1) cutCubicIdx = this.measuredCubics.length - 1;\n\n\t\tconst cutCubic = this.measuredCubics[cutCubicIdx];\n\t\tconst segLen = cutCubic.endOutlineProgress - cutCubic.startOutlineProgress;\n\t\tconst t =\n\t\t\tsegLen > 0 ? (cutPoint - cutCubic.startOutlineProgress) / segLen : 0;\n\n\t\t// Split the cut cubic\n\t\tconst [left, right] = cutCubic.cubic.split(t);\n\n\t\t// Build shifted list starting from the right part of the cut cubic\n\t\tconst shift = (p: number) => {\n\t\t\tlet s = p - cutPoint;\n\t\t\tif (s < 0) s += 1;\n\t\t\treturn s;\n\t\t};\n\n\t\t// Right part of cut cubic\n\t\tif (!right.zeroLength()) {\n\t\t\tresult.push({\n\t\t\t\tcubic: right,\n\t\t\t\tstartOutlineProgress: 0,\n\t\t\t\tendOutlineProgress: shift(cutCubic.endOutlineProgress),\n\t\t\t});\n\t\t}\n\n\t\t// Remaining cubics after cut point (wrapping around)\n\t\tfor (let i = 1; i < this.measuredCubics.length; i++) {\n\t\t\tconst idx = (cutCubicIdx + i) % this.measuredCubics.length;\n\t\t\tconst mc = this.measuredCubics[idx];\n\t\t\tif (!mc.cubic.zeroLength()) {\n\t\t\t\tresult.push({\n\t\t\t\t\tcubic: mc.cubic,\n\t\t\t\t\tstartOutlineProgress: shift(mc.startOutlineProgress),\n\t\t\t\t\tendOutlineProgress: shift(mc.endOutlineProgress),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Left part of cut cubic\n\t\tif (!left.zeroLength()) {\n\t\t\tresult.push({\n\t\t\t\tcubic: left,\n\t\t\t\tstartOutlineProgress: shift(cutCubic.startOutlineProgress),\n\t\t\t\tendOutlineProgress: 1,\n\t\t\t});\n\t\t}\n\n\t\treturn new MeasuredPolygon(result, this.features);\n\t}\n\n\t/**\n\t * Cuts a MeasuredCubic at a given outline progress, returning [segment, rest].\n\t */\n\tcutAtProgress(\n\t\tmeasuredCubic: MeasuredCubic,\n\t\tprogress: number,\n\t): [MeasuredCubic, MeasuredCubic] {\n\t\tconst segLen =\n\t\t\tmeasuredCubic.endOutlineProgress - measuredCubic.startOutlineProgress;\n\t\tconst t =\n\t\t\tsegLen > 0 ? (progress - measuredCubic.startOutlineProgress) / segLen : 0;\n\t\tconst [left, right] = measuredCubic.cubic.split(\n\t\t\tMath.max(0, Math.min(1, t)),\n\t\t);\n\t\treturn [\n\t\t\t{\n\t\t\t\tcubic: left,\n\t\t\t\tstartOutlineProgress: measuredCubic.startOutlineProgress,\n\t\t\t\tendOutlineProgress: progress,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcubic: right,\n\t\t\t\tstartOutlineProgress: progress,\n\t\t\t\tendOutlineProgress: measuredCubic.endOutlineProgress,\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Measures a RoundedPolygon's outline by arc length.\n\t * Returns a MeasuredPolygon with normalized progress in [0, 1].\n\t */\n\tstatic measurePolygon(polygon: RoundedPolygon): MeasuredPolygon {\n\t\tconst cubics = polygon.cubics;\n\n\t\t// Calculate total arc length (approximate by chord lengths)\n\t\tlet totalLength = 0;\n\t\tconst lengths: number[] = cubics.map((c) => {\n\t\t\tconst len = approximateLength(c);\n\t\t\ttotalLength += len;\n\t\t\treturn len;\n\t\t});\n\n\t\tif (totalLength === 0) {\n\t\t\treturn new MeasuredPolygon(\n\t\t\t\tcubics.map((c) => ({\n\t\t\t\t\tcubic: c,\n\t\t\t\t\tstartOutlineProgress: 0,\n\t\t\t\t\tendOutlineProgress: 0,\n\t\t\t\t})),\n\t\t\t\t[],\n\t\t\t);\n\t\t}\n\n\t\t// Assign normalized progress values\n\t\tconst measured: MeasuredCubic[] = [];\n\t\tlet accumulated = 0;\n\t\tfor (let i = 0; i < cubics.length; i++) {\n\t\t\tconst startP = accumulated / totalLength;\n\t\t\taccumulated += lengths[i];\n\t\t\tconst endP = accumulated / totalLength;\n\t\t\tmeasured.push({\n\t\t\t\tcubic: cubics[i],\n\t\t\t\tstartOutlineProgress: startP,\n\t\t\t\tendOutlineProgress: endP,\n\t\t\t});\n\t\t}\n\n\t\t// Extract feature progress values (midpoint of each corner's central arc)\n\t\tconst featureList: MeasuredFeature[] = [];\n\t\tlet cubicIdx = 0;\n\t\tfor (const feature of polygon.features) {\n\t\t\tif (feature.type === \"corner\" && feature.cubics.length > 0) {\n\t\t\t\t// For rounded corners with 3 cubics, the arc is the middle one\n\t\t\t\t// Find progress at midpoint of corner\n\t\t\t\tconst middleCubicIdx = feature.cubics.length > 1 ? 1 : 0;\n\t\t\t\t// Map feature cubic back to global cubic index\n\t\t\t\tconst mc =\n\t\t\t\t\tmeasured[Math.min(cubicIdx + middleCubicIdx, measured.length - 1)];\n\t\t\t\tif (mc) {\n\t\t\t\t\tconst midProgress =\n\t\t\t\t\t\t(mc.startOutlineProgress + mc.endOutlineProgress) / 2;\n\t\t\t\t\tfeatureList.push({ progress: midProgress, convex: feature.convex });\n\t\t\t\t}\n\t\t\t}\n\t\t\tcubicIdx += feature.cubics.length;\n\t\t}\n\n\t\treturn new MeasuredPolygon(measured, featureList);\n\t}\n}\n\n/** Approximate cubic length using the chord from anchor0 to anchor1. */\nfunction approximateLength(cubic: Cubic): number {\n\t// More accurate: sample a few points\n\tlet len = 0;\n\tlet prevX = cubic.anchor0X,\n\t\tprevY = cubic.anchor0Y;\n\tconst steps = 4;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst p = cubic.pointOnCurve(i / steps);\n\t\tlen += distance(p.x - prevX, p.y - prevY);\n\t\tprevX = p.x;\n\t\tprevY = p.y;\n\t}\n\treturn len;\n}\n","/**\n * Morph — animates between two RoundedPolygon shapes.\n * Ported from androidx.graphics.shapes.Morph.kt\n *\n * The Morph class pre-computes a list of matched cubic pairs at construction time.\n * Animating between shapes is then a simple per-pair linear interpolation.\n *\n * @example\n * const morph = new Morph(MD3Shapes.circle, MD3Shapes.flower);\n * const cubics = morph.asCubics(0.5); // halfway between circle and flower\n *\n * @example\n * // Zero-allocation iteration (for animation loops)\n * morph.forEachCubic(progress, (c) => {\n * ctx.bezierCurveTo(c.control0X, c.control0Y, c.control1X, c.control1Y, c.anchor1X, c.anchor1Y);\n * });\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport { Cubic, MutableCubic } from \"../math/cubic\";\nimport { ANGLE_EPSILON, interpolate, positiveModulo } from \"../utils/utils\";\nimport { featureMapper } from \"./feature-mapping\";\nimport { MeasuredPolygon } from \"./polygon-measure\";\n\n/** A matched pair of cubics (start shape, end shape). */\nexport type CubicPair = readonly [Cubic, Cubic];\n\n/**\n * Animates between two RoundedPolygon shapes.\n *\n * At construction time, Morph matches the cubic curves of both shapes using\n * the featureMapper algorithm. This produces a list of CubicPairs, which can\n * then be interpolated at any progress value.\n */\nexport class Morph {\n\t/** Pre-computed list of matched cubic pairs. @internal */\n\tprivate readonly morphMatch: CubicPair[];\n\n\t/**\n\t * Creates a Morph between two shapes.\n\t * @param start - Starting shape\n\t * @param end - Ending shape\n\t */\n\tconstructor(\n\t\tprivate readonly start: RoundedPolygon,\n\t\tprivate readonly end: RoundedPolygon,\n\t) {\n\t\tthis.morphMatch = Morph.match(start, end);\n\t}\n\n\t/**\n\t * Returns the interpolated shape at the given progress as a list of Cubics.\n\t *\n\t * Note: This allocates a new list. For performance-critical animation loops,\n\t * use {@link forEachCubic} instead.\n\t *\n\t * @param progress - Value in [0, 1]. 0 = start shape, 1 = end shape.\n\t * Values outside [0, 1] produce exaggerated shapes (useful for bounce/overshoot).\n\t * @returns List of interpolated Cubic curves forming the morphed shape\n\t */\n\tasCubics(progress: number): Cubic[] {\n\t\tconst result: Cubic[] = [];\n\n\t\tfor (const [c1, c2] of this.morphMatch) {\n\t\t\tresult.push(\n\t\t\t\tnew Cubic(\n\t\t\t\t\tc1.points.map((v, i) => interpolate(v, c2.points[i], progress)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Iterates over the morphed cubics without allocating new Cubic instances.\n\t * Reuses a single MutableCubic for each callback invocation.\n\t *\n\t * @param progress - Value in [0, 1]\n\t * @param callback - Called for each interpolated cubic\n\t *\n\t * @example\n\t * const mutable = new MutableCubic();\n\t * morph.forEachCubic(progress, mutable, (c) => {\n\t * path.bezierCurveTo(c.control0X, c.control0Y, c.control1X, c.control1Y, c.anchor1X, c.anchor1Y);\n\t * });\n\t */\n\tforEachCubic(\n\t\tprogress: number,\n\t\tmutableOrCallback: MutableCubic | ((c: MutableCubic) => void),\n\t\tcallback?: (c: MutableCubic) => void,\n\t): void {\n\t\tlet mutable: MutableCubic;\n\t\tlet cb: (c: MutableCubic) => void;\n\n\t\tif (typeof mutableOrCallback === \"function\") {\n\t\t\tmutable = new MutableCubic();\n\t\t\tcb = mutableOrCallback;\n\t\t} else {\n\t\t\tmutable = mutableOrCallback;\n\t\t\tif (!callback) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Callback must be provided when passing a mutable cubic\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcb = callback;\n\t\t}\n\n\t\tfor (const [c1, c2] of this.morphMatch) {\n\t\t\tmutable.interpolate(c1, c2, progress);\n\t\t\tcb(mutable);\n\t\t}\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box of the morph (union of start + end bounds).\n\t * @param approximate - Use faster approximate bounds (default: true)\n\t */\n\tcalculateBounds(approximate = true): [number, number, number, number] {\n\t\tconst [s0, s1, s2, s3] = this.start.calculateBounds(approximate);\n\t\tconst [e0, e1, e2, e3] = this.end.calculateBounds(approximate);\n\t\treturn [\n\t\t\tMath.min(s0, e0),\n\t\t\tMath.min(s1, e1),\n\t\t\tMath.max(s2, e2),\n\t\t\tMath.max(s3, e3),\n\t\t];\n\t}\n\n\t/**\n\t * Calculates the max bounding square (union of start + end max bounds).\n\t */\n\tcalculateMaxBounds(): [number, number, number, number] {\n\t\tconst [s0, s1, s2, s3] = this.start.calculateMaxBounds();\n\t\tconst [e0, e1, e2, e3] = this.end.calculateMaxBounds();\n\t\treturn [\n\t\t\tMath.min(s0, e0),\n\t\t\tMath.min(s1, e1),\n\t\t\tMath.max(s2, e2),\n\t\t\tMath.max(s3, e3),\n\t\t];\n\t}\n\n\t// ─── Internal: matching algorithm ──────────────────────────────────────\n\n\t/**\n\t * Matches cubic curves between two polygons.\n\t *\n\t * Algorithm:\n\t * 1. Measure both polygons (arc-length normalized progress)\n\t * 2. Use featureMapper to determine correspondence between features\n\t * 3. Cut and shift polygon2 so both start at the same logical point\n\t * 4. Walk both lists together, splitting curves when one extends past the other\n\t *\n\t * @internal\n\t */\n\tprivate static match(p1: RoundedPolygon, p2: RoundedPolygon): CubicPair[] {\n\t\tconst measured1 = MeasuredPolygon.measurePolygon(p1);\n\t\tconst measured2 = MeasuredPolygon.measurePolygon(p2);\n\n\t\tconst doubleMapper = featureMapper(measured1.features, measured2.features);\n\t\tconst polygon2CutPoint = doubleMapper.map(0);\n\n\t\tconst bs1 = measured1;\n\t\tconst bs2 = measured2.cutAndShift(polygon2CutPoint);\n\n\t\tconst result: CubicPair[] = [];\n\t\tlet i1 = 0,\n\t\t\ti2 = 0;\n\t\tlet b1 = bs1.getOrNull(i1++);\n\t\tlet b2 = bs2.getOrNull(i2++);\n\n\t\twhile (b1 !== null && b2 !== null) {\n\t\t\tconst b1a = i1 >= bs1.size ? 1 : b1.endOutlineProgress;\n\t\t\tconst b2aRaw =\n\t\t\t\ti2 >= bs2.size\n\t\t\t\t\t? 1\n\t\t\t\t\t: positiveModulo(b2.endOutlineProgress + polygon2CutPoint, 1);\n\t\t\tconst b2a = doubleMapper.mapBack(b2aRaw);\n\n\t\t\tconst minb = Math.min(b1a, b2a);\n\n\t\t\tlet seg1 = b1,\n\t\t\t\tnewb1 = bs1.getOrNull(i1);\n\t\t\tlet seg2 = b2,\n\t\t\t\tnewb2 = bs2.getOrNull(i2);\n\n\t\t\tif (b1a > minb + ANGLE_EPSILON) {\n\t\t\t\tconst [cut, rest] = bs1.cutAtProgress(b1, minb);\n\t\t\t\tseg1 = cut;\n\t\t\t\tnewb1 = rest;\n\t\t\t} else {\n\t\t\t\ti1++;\n\t\t\t}\n\n\t\t\tif (b2a > minb + ANGLE_EPSILON) {\n\t\t\t\tconst targetProgress = positiveModulo(\n\t\t\t\t\tdoubleMapper.map(minb) - polygon2CutPoint,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst [cut, rest] = bs2.cutAtProgress(b2, targetProgress);\n\t\t\t\tseg2 = cut;\n\t\t\t\tnewb2 = rest;\n\t\t\t} else {\n\t\t\t\ti2++;\n\t\t\t}\n\n\t\t\tresult.push([seg1.cubic, seg2.cubic]);\n\t\t\tb1 = newb1;\n\t\t\tb2 = newb2;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","/**\n * Rendering utilities: convert RoundedPolygon / Cubic[] to SVG paths and CSS clip-paths.\n *\n * All output paths use absolute coordinates relative to the shape's natural\n * normalized space ([0,1]×[0,1]) or scaled to pixel dimensions.\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport type { Cubic } from \"../math/cubic\";\nimport type { Morph } from \"../morph/morph\";\n\n// ─── toSvgPath ─────────────────────────────────────────────────────────────\n\n/**\n * Converts a list of Cubic Bézier curves to an SVG path string.\n *\n * @param cubics - Array of Cubic curves (must be contiguous, closed)\n * @param width - Width in pixels to scale x coordinates (default: 1 = normalized)\n * @param height - Height in pixels to scale y coordinates (default: 1 = normalized)\n * @returns SVG path data string, e.g. \"M 0.5 0 C 1 0 1 1 0.5 1 Z\"\n *\n * @example\n * const path = toSvgPath(MD3Shapes.circle.cubics, 200, 200);\n * // Use in <path d={path} />\n */\nexport function toSvgPath(cubics: Cubic[], width = 1, height = 1): string {\n\tif (cubics.length === 0) return \"\";\n\n\t// Add 1.5% padding on all sides to prevent browser clip-path boundary cutoff\n\tconst paddingX = width * 0.015;\n\tconst paddingY = height * 0.015;\n\tconst sx = width - 2 * paddingX;\n\tconst sy = height - 2 * paddingY;\n\n\tconst flipY = (y: number) => paddingY + sy * (1 - y);\n\n\tconst parts: string[] = [\n\t\t`M ${fmt(paddingX + cubics[0].anchor0X * sx)} ${fmt(flipY(cubics[0].anchor0Y))}`,\n\t];\n\n\tfor (const c of cubics) {\n\t\tparts.push(\n\t\t\t`C ${fmt(paddingX + c.control0X * sx)} ${fmt(flipY(c.control0Y))},${fmt(paddingX + c.control1X * sx)} ${fmt(flipY(c.control1Y))},${fmt(paddingX + c.anchor1X * sx)} ${fmt(flipY(c.anchor1Y))}`,\n\t\t);\n\t}\n\n\tparts.push(\"Z\");\n\treturn parts.join(\" \");\n}\n\n// ─── toClipPath ────────────────────────────────────────────────────────────\n\n/**\n * Converts a RoundedPolygon to a CSS `clip-path: path(...)` value.\n *\n * @param polygon - Normalized RoundedPolygon (values in [0,1])\n * @param width - Element width in pixels\n * @param height - Element height in pixels\n * @returns CSS clip-path value, e.g. \"path('M ...')\"\n *\n * @example\n * const clipPath = toClipPath(MD3Shapes.sunny, 200, 200);\n * element.style.clipPath = clipPath;\n */\nexport function toClipPath(\n\tpolygon: RoundedPolygon,\n\twidth: number,\n\theight: number,\n): string {\n\tconst pathData = toSvgPath(polygon.cubics, width, height);\n\treturn `path('${pathData}')`;\n}\n\n// ─── interpolatePath ───────────────────────────────────────────────────────\n\n/**\n * Returns a CSS clip-path for a morphed shape at the given progress.\n *\n * @param morph - A pre-constructed Morph instance\n * @param progress - Interpolation factor in [0, 1]\n * @param width - Element width in pixels\n * @param height - Element height in pixels\n * @returns CSS clip-path value\n *\n * @example\n * const morph = new Morph(MD3Shapes.circle, MD3Shapes.flower);\n * element.style.clipPath = interpolatePath(morph, 0.5, 200, 200);\n */\nexport function interpolatePath(\n\tmorph: Morph,\n\tprogress: number,\n\twidth: number,\n\theight: number,\n): string {\n\tconst cubics = morph.asCubics(progress);\n\treturn toClipPath({ cubics } as RoundedPolygon, width, height);\n}\n\n// ─── Internal formatting ───────────────────────────────────────────────────\n\n/** Format a float to at most 4 decimal places. */\nfunction fmt(v: number): string {\n\t// toFixed(4) then strip trailing zeros\n\treturn Number(v.toFixed(4)).toString();\n}\n","/**\n * useShapeMorph — React hook for shape morphing animations.\n *\n * Manages the Morph instance and animated progress value, returning a\n * CSS clip-path string that updates with every animation frame.\n *\n * @example\n * const { clipPath, handlers } = useShapeMorph({\n * shape: \"circle\",\n * morphTo: \"flower\",\n * morphOn: \"hover\",\n * width: 200,\n * height: 200,\n * });\n *\n * return <div style={{ clipPath }} {...handlers}>{children}</div>;\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { Morph } from \"../../shapes/morph/morph\";\nimport {\n\tinterpolatePath,\n\ttoClipPath,\n} from \"../../shapes/render/shape-rendering\";\nimport type {\n\tMorphTrigger,\n\tShapeMorphOptions,\n\tShapeRef,\n\tUseShapeMorphResult,\n} from \"./types\";\n\ninterface UseShapeMorphOptions {\n\tshape: ShapeRef;\n\tmorphTo?: ShapeRef;\n\tmorphOn?: MorphTrigger;\n\tmorphOptions?: ShapeMorphOptions;\n\tscrollProgress?: number;\n\twidth: number;\n\theight: number;\n\tdisabled?: boolean;\n}\n\n/** Returns true if the user prefers reduced motion. */\nfunction prefersReducedMotion(): boolean {\n\tif (typeof window === \"undefined\") return false;\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/**\n * Hook for shape morphing with animated clip-path output.\n */\nexport function useShapeMorph({\n\tshape,\n\tmorphTo,\n\tmorphOn = \"hover\",\n\tmorphOptions,\n\tscrollProgress,\n\twidth,\n\theight,\n\tdisabled = false,\n}: UseShapeMorphOptions): UseShapeMorphResult {\n\tconst duration = morphOptions?.duration ?? 0.3;\n\tconst easing = morphOptions?.easing ?? \"ease-in-out\";\n\tconst easingFunction = useMemo(() => getEasingFunction(easing), [easing]);\n\n\t// ─── Memoize shape instances ─────────────────────────────────────────\n\tconst startShape = useMemo(() => resolveShape(shape), [shape]);\n\tconst endShape = useMemo(\n\t\t() => (morphTo ? resolveShape(morphTo) : null),\n\t\t[morphTo],\n\t);\n\n\t// ─── Memoize Morph instance ──────────────────────────────────────────\n\tconst morph = useMemo(\n\t\t() => (endShape ? new Morph(startShape, endShape) : null),\n\t\t[startShape, endShape],\n\t);\n\n\t// ─── Animation state ─────────────────────────────────────────────────\n\tconst [isActive, setIsActive] = useState(false);\n\tconst [clipPath, setClipPath] = useState<string>(() =>\n\t\ttoClipPath(startShape, width, height),\n\t);\n\n\t// Animation tracking\n\tconst animRef = useRef<number | null>(null);\n\tconst startTimeRef = useRef<number>(0);\n\tconst startProgressRef = useRef<number>(0);\n\tconst targetProgressRef = useRef<number>(0);\n\tconst currentProgressRef = useRef<number>(0);\n\n\t// ─── Update clip-path when dimensions change ──────────────────────────\n\tuseEffect(() => {\n\t\tif (morph) {\n\t\t\tsetClipPath(\n\t\t\t\tinterpolatePath(morph, currentProgressRef.current, width, height),\n\t\t\t);\n\t\t} else {\n\t\t\tsetClipPath(toClipPath(startShape, width, height));\n\t\t}\n\t}, [width, height, startShape, morph]);\n\n\t// ─── Scroll-driven mode ──────────────────────────────────────────────\n\tuseEffect(() => {\n\t\tif (morphOn !== \"scroll\" || !morph || scrollProgress === undefined) return;\n\t\tconst p = Math.max(0, Math.min(1, scrollProgress));\n\t\tcurrentProgressRef.current = p;\n\t\tsetClipPath(interpolatePath(morph, p, width, height));\n\t}, [scrollProgress, morphOn, morph, width, height]);\n\n\t// ─── Animation loop ──────────────────────────────────────────────────\n\tconst animate = useCallback(\n\t\t(timestamp: number) => {\n\t\t\tif (!morph) return;\n\t\t\tconst elapsed = timestamp - startTimeRef.current;\n\t\t\tconst durationMs = duration * 1000;\n\t\t\tconst rawT = Math.min(elapsed / durationMs, 1);\n\t\t\tconst ease = easingFunction(rawT);\n\t\t\tconst progress =\n\t\t\t\tstartProgressRef.current +\n\t\t\t\t(targetProgressRef.current - startProgressRef.current) * ease;\n\t\t\tcurrentProgressRef.current = progress;\n\t\t\tsetClipPath(interpolatePath(morph, progress, width, height));\n\n\t\t\tif (rawT < 1) {\n\t\t\t\tanimRef.current = requestAnimationFrame(animate);\n\t\t\t} else {\n\t\t\t\tanimRef.current = null;\n\t\t\t}\n\t\t},\n\t\t[morph, duration, easingFunction, width, height],\n\t);\n\n\tconst startAnimation = useCallback(\n\t\t(toProgress: number) => {\n\t\t\tif (!morph) return;\n\t\t\tif (prefersReducedMotion()) {\n\t\t\t\tcurrentProgressRef.current = toProgress;\n\t\t\t\tsetClipPath(interpolatePath(morph, toProgress, width, height));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (animRef.current !== null) cancelAnimationFrame(animRef.current);\n\t\t\tstartProgressRef.current = currentProgressRef.current;\n\t\t\ttargetProgressRef.current = toProgress;\n\t\t\tstartTimeRef.current = performance.now();\n\t\t\tanimRef.current = requestAnimationFrame(animate);\n\t\t},\n\t\t[morph, animate, width, height],\n\t);\n\n\t// Cleanup on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (animRef.current !== null) cancelAnimationFrame(animRef.current);\n\t\t};\n\t}, []);\n\n\t// ─── Actions ─────────────────────────────────────────────────────────\n\tconst activate = useCallback(() => {\n\t\tif (disabled || !morph) return;\n\t\tsetIsActive(true);\n\t\tstartAnimation(1);\n\t}, [disabled, morph, startAnimation]);\n\n\tconst deactivate = useCallback(() => {\n\t\tif (disabled || !morph) return;\n\t\tsetIsActive(false);\n\t\tstartAnimation(0);\n\t}, [disabled, morph, startAnimation]);\n\n\tconst setProgress = useCallback(\n\t\t(progress: number) => {\n\t\t\tif (!morph) return;\n\t\t\tconst p = Math.max(0, Math.min(1, progress));\n\t\t\tcurrentProgressRef.current = p;\n\t\t\tsetIsActive(p >= 0.5);\n\t\t\tsetClipPath(interpolatePath(morph, p, width, height));\n\t\t},\n\t\t[morph, width, height],\n\t);\n\n\t// ─── Event handlers ──────────────────────────────────────────────────\n\tconst handlers = useMemo(() => {\n\t\tif (!morphTo || disabled) return {};\n\t\tif (morphOn === \"hover\") {\n\t\t\treturn { onMouseEnter: activate, onMouseLeave: deactivate };\n\t\t}\n\t\tif (morphOn === \"click\") {\n\t\t\treturn {\n\t\t\t\tonClick: () => {\n\t\t\t\t\tif (isActive) deactivate();\n\t\t\t\t\telse activate();\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (morphOn === \"focus\") {\n\t\t\treturn { onFocus: activate, onBlur: deactivate };\n\t\t}\n\t\treturn {};\n\t}, [morphTo, disabled, morphOn, activate, deactivate, isActive]);\n\n\treturn { clipPath, isActive, activate, deactivate, setProgress, handlers };\n}\n\n// ─── Easing ──────────────────────────────────────────────────────────────────\n\nfunction easeCubicInOut(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2;\n}\n\nfunction cubicBezier(\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): (t: number) => number {\n\treturn (t: number) => {\n\t\tif (t === 0 || t === 1) return t;\n\n\t\t// Newton-Raphson method for solving x(t_param) = t\n\t\tlet tParam = t;\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tconst x =\n\t\t\t\t3 * (1 - tParam) ** 2 * tParam * x1 +\n\t\t\t\t3 * (1 - tParam) * tParam ** 2 * x2 +\n\t\t\t\ttParam ** 3;\n\t\t\tconst dx =\n\t\t\t\t3 * (1 - tParam) ** 2 * x1 +\n\t\t\t\t6 * (1 - tParam) * tParam * (x2 - x1) +\n\t\t\t\t3 * tParam ** 2 * (1 - x2);\n\t\t\tif (Math.abs(dx) < 1e-6) break;\n\t\t\ttParam -= (x - t) / dx;\n\t\t}\n\n\t\t// Calculate y(t_param)\n\t\treturn (\n\t\t\t3 * (1 - tParam) ** 2 * tParam * y1 +\n\t\t\t3 * (1 - tParam) * tParam ** 2 * y2 +\n\t\t\ttParam ** 3\n\t\t);\n\t};\n}\n\nfunction getEasingFunction(easing: string | number[]): (t: number) => number {\n\tif (Array.isArray(easing)) {\n\t\tif (easing.length === 4) {\n\t\t\tconst [x1, y1, x2, y2] = easing;\n\t\t\treturn cubicBezier(x1, y1, x2, y2);\n\t\t}\n\t\treturn easeCubicInOut;\n\t}\n\n\tswitch (easing) {\n\t\tcase \"linear\":\n\t\t\treturn (t) => t;\n\t\tcase \"ease-in\":\n\t\t\treturn (t) => t * t * t;\n\t\tcase \"ease-out\":\n\t\t\treturn (t) => 1 - (1 - t) ** 3;\n\t\tdefault:\n\t\t\treturn easeCubicInOut;\n\t}\n}\n","/**\n * ShapeMedia — wraps any UI element (image, video, button, div) with an MD3\n * Expressive shape clip-path, with optional shape morphing animation.\n *\n * @example\n * // Static shape\n * <ShapeMedia shape=\"sunny\" width={200} height={200}>\n * <img src=\"/photo.jpg\" alt=\"A sunny photo\" />\n * </ShapeMedia>\n *\n * @example\n * // Shape morph on hover\n * <ShapeMedia shape=\"circle\" morphTo=\"flower\" morphOn=\"hover\" width={200} height={200}>\n * <img src=\"/avatar.jpg\" alt=\"Avatar\" />\n * </ShapeMedia>\n */\n\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport type { ShapeMediaProps } from \"./types\";\nimport { useShapeMorph } from \"./useShapeMorph\";\n\n/**\n * ShapeMedia wraps children in a shape clip-path with optional morphing animation.\n *\n * @remarks\n * - Requires \"use client\" (uses ResizeObserver, animation APIs).\n * - Use ShapeMediaServer for SSR-only static rendering.\n * - Automatically handles `prefers-reduced-motion`.\n *\n * @param props - {@link ShapeMediaProps}\n */\nexport function ShapeMedia({\n\tshape,\n\tmorphTo,\n\tmorphOn = \"hover\",\n\tmorphOptions,\n\tscrollProgress,\n\twidth: widthProp,\n\theight: heightProp,\n\tchildren,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n\trole,\n\tdisabled,\n}: ShapeMediaProps): React.JSX.Element {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst [measuredWidth, setMeasuredWidth] = useState(widthProp ?? 0);\n\tconst [measuredHeight, setMeasuredHeight] = useState(heightProp ?? 0);\n\n\tconst width = widthProp ?? measuredWidth;\n\tconst height = heightProp ?? measuredHeight;\n\n\t// ─── ResizeObserver: auto-measure if no explicit dimensions ──────────\n\tuseEffect(() => {\n\t\tif (widthProp !== undefined && heightProp !== undefined) return;\n\t\tconst el = containerRef.current;\n\t\tif (!el) return;\n\t\tconst observer = new ResizeObserver(([entry]) => {\n\t\t\tconst { width: w, height: h } = entry.contentRect;\n\t\t\tsetMeasuredWidth(Math.round(w));\n\t\t\tsetMeasuredHeight(Math.round(h));\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [widthProp, heightProp]);\n\n\t// ─── Shape morph ──────────────────────────────────────────────────────\n\tconst { clipPath, handlers } = useShapeMorph({\n\t\tshape,\n\t\tmorphTo,\n\t\tmorphOn,\n\t\tmorphOptions,\n\t\tscrollProgress,\n\t\twidth: Math.max(width, 1),\n\t\theight: Math.max(height, 1),\n\t\tdisabled,\n\t});\n\n\t// ─── Accessibility ────────────────────────────────────────────────────\n\tconst resolvedRole = role ?? (ariaLabel ? \"img\" : \"presentation\");\n\tconst accessibilityProps = ariaLabel\n\t\t? { role: resolvedRole, \"aria-label\": ariaLabel }\n\t\t: { role: resolvedRole };\n\n\tconst computedStyle: CSSProperties = {\n\t\t...style,\n\t\tclipPath,\n\t\toverflow: \"hidden\",\n\t\tposition: \"relative\",\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={className}\n\t\t\tstyle={computedStyle}\n\t\t\t{...accessibilityProps}\n\t\t\t{...handlers}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * ShapeIcon — simplified fixed-size shape wrapper for icons and small elements.\n * Morphs to a circle on hover by default.\n *\n * @example\n * <ShapeIcon shape=\"sunny\" size={48}>\n * <StarIcon />\n * </ShapeIcon>\n */\n\nimport type { CSSProperties } from \"react\";\nimport { ShapeMedia } from \"./shape-media\";\nimport type { ShapeIconProps } from \"./types\";\n\n/**\n * ShapeIcon renders a fixed-size shape with icon content inside.\n */\nexport function ShapeIcon({\n\tshape,\n\tmorphTo,\n\tsize = 48,\n\tchildren,\n\tclassName,\n\tstyle,\n\tcolor,\n\t\"aria-label\": ariaLabel,\n}: ShapeIconProps): React.JSX.Element {\n\tconst computedStyle: CSSProperties = {\n\t\twidth: size,\n\t\theight: size,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tbackgroundColor: color,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<ShapeMedia\n\t\t\tshape={shape}\n\t\t\tmorphTo={morphTo}\n\t\t\tmorphOn={morphTo ? \"hover\" : \"none\"}\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tclassName={className}\n\t\t\tstyle={computedStyle}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t{children}\n\t\t</ShapeMedia>\n\t);\n}\n","/**\n * ShapeMediaServer — SSR-safe static variant of ShapeMedia.\n *\n * Renders a static clip-path without any client-side JavaScript or hydration.\n * Use this in Next.js Server Components or any SSR context where you don't\n * need morphing animation.\n *\n * @example\n * // In a Next.js Server Component\n * import { ShapeMediaServer } from \"@bug-on/m3-expressive\";\n *\n * export default function ProfileCard() {\n * return (\n * <ShapeMediaServer shape=\"sunny\" width={200} height={200}>\n * <img src=\"/avatar.jpg\" alt=\"Profile\" />\n * </ShapeMediaServer>\n * );\n * }\n */\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { toClipPath } from \"../../shapes/render/shape-rendering\";\nimport type { ShapeRef } from \"./types\";\n\ninterface ShapeMediaServerProps {\n\t/** The shape to render. */\n\tshape: ShapeRef;\n\t/** Width in pixels. */\n\twidth: number;\n\t/** Height in pixels. */\n\theight: number;\n\t/** Children to render inside the clipped area. */\n\tchildren?: ReactNode;\n\t/** Additional CSS class names. */\n\tclassName?: string;\n\t/** Inline styles. */\n\tstyle?: CSSProperties;\n\t/** ARIA label. */\n\t\"aria-label\"?: string;\n\t/** ARIA role. */\n\trole?: string;\n}\n\n/**\n * SSR-safe shape clip-path wrapper. No animations, no JS required.\n */\nexport function ShapeMediaServer({\n\tshape,\n\twidth,\n\theight,\n\tchildren,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n\trole,\n}: ShapeMediaServerProps): React.JSX.Element {\n\tconst polygon = resolveShape(shape);\n\tconst clipPath = toClipPath(polygon, width, height);\n\tconst resolvedRole = role ?? (ariaLabel ? \"img\" : \"presentation\");\n\tconst accessibilityProps = ariaLabel\n\t\t? { role: resolvedRole, \"aria-label\": ariaLabel }\n\t\t: { role: resolvedRole };\n\n\tconst computedStyle: CSSProperties = {\n\t\t...style,\n\t\tclipPath,\n\t\toverflow: \"hidden\",\n\t\tposition: \"relative\",\n\t};\n\n\treturn (\n\t\t<div className={className} style={computedStyle} {...accessibilityProps}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * ShapeSvg — renders a shape as an inline SVG path element.\n * Useful for decorative shapes, loading skeletons, and outlines.\n * Supports morphed rendering via a `progress` prop.\n *\n * @example\n * // Static shape\n * <ShapeSvg shape=\"sunny\" width={200} height={200} fill=\"#6750A4\" />\n *\n * @example\n * // Morphed shape (controlled externally)\n * <ShapeSvg shape=\"circle\" morphTo=\"flower\" progress={0.5} width={200} height={200} />\n */\n\nimport { useMemo } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { Morph } from \"../../shapes/morph/morph\";\nimport { toSvgPath } from \"../../shapes/render/shape-rendering\";\nimport type { ShapeSvgProps } from \"./types\";\n\n/**\n * ShapeSvg renders a shape or morphed shape as a plain SVG path.\n */\nexport function ShapeSvg({\n\tshape,\n\tmorphTo,\n\tprogress = 0,\n\twidth = 100,\n\theight = 100,\n\tfill = \"currentColor\",\n\tstroke = \"none\",\n\tstrokeWidth = 0,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n}: ShapeSvgProps): React.JSX.Element {\n\tconst startPolygon = useMemo(() => resolveShape(shape), [shape]);\n\tconst endPolygon = useMemo(\n\t\t() => (morphTo ? resolveShape(morphTo) : null),\n\t\t[morphTo],\n\t);\n\tconst morph = useMemo(\n\t\t() => (endPolygon ? new Morph(startPolygon, endPolygon) : null),\n\t\t[startPolygon, endPolygon],\n\t);\n\n\tconst pathData = useMemo(() => {\n\t\tconst cubics = morph ? morph.asCubics(progress) : startPolygon.cubics;\n\t\treturn toSvgPath(cubics, width, height);\n\t}, [morph, progress, startPolygon, width, height]);\n\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\taria-label={ariaLabel}\n\t\t\trole={ariaLabel ? \"img\" : \"presentation\"}\n\t\t\taria-hidden={!ariaLabel}\n\t\t>\n\t\t\t<path\n\t\t\t\td={pathData}\n\t\t\t\tfill={fill}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n"]}