@bug-on/m3-expressive 1.2.3 → 1.2.4

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.
@@ -2626,6 +2626,1922 @@ function TouchTarget() {
2626
2626
  }
2627
2627
  );
2628
2628
  }
2629
+
2630
+ // src/shapes/core/features.ts
2631
+ function cornerFeature(cubics, convex2) {
2632
+ return { type: "corner", cubics, convex: convex2 };
2633
+ }
2634
+ function edgeFeature(cubics) {
2635
+ return { type: "edge", cubics };
2636
+ }
2637
+ function transformFeature(feature, fn) {
2638
+ const cubics = feature.cubics.map((c) => c.transformed(fn));
2639
+ if (feature.type === "corner") {
2640
+ return cornerFeature(cubics, feature.convex);
2641
+ }
2642
+ return edgeFeature(cubics);
2643
+ }
2644
+
2645
+ // src/shapes/math/corner-rounding.ts
2646
+ var UNROUNDED = Object.freeze({
2647
+ radius: 0,
2648
+ smoothing: 0
2649
+ });
2650
+
2651
+ // src/shapes/utils/utils.ts
2652
+ var DISTANCE_EPSILON = 1e-4;
2653
+ var FLOAT_PI = Math.PI;
2654
+ function distance(dx, dy) {
2655
+ return Math.sqrt(dx * dx + dy * dy);
2656
+ }
2657
+ function distanceSquared(dx, dy) {
2658
+ return dx * dx + dy * dy;
2659
+ }
2660
+ function radialToCartesian(radius, angle) {
2661
+ return [radius * Math.cos(angle), radius * Math.sin(angle)];
2662
+ }
2663
+ function interpolate(start, stop, fraction) {
2664
+ return start + (stop - start) * fraction;
2665
+ }
2666
+ function square(value) {
2667
+ return value * value;
2668
+ }
2669
+ function convex(prevX, prevY, currX, currY, nextX, nextY) {
2670
+ const v1x = currX - prevX;
2671
+ const v1y = currY - prevY;
2672
+ const v2x = nextX - currX;
2673
+ const v2y = nextY - currY;
2674
+ return v1x * v2y - v1y * v2x > 0;
2675
+ }
2676
+
2677
+ // src/shapes/math/point.ts
2678
+ function point(x, y) {
2679
+ return { x, y };
2680
+ }
2681
+
2682
+ // src/shapes/math/cubic.ts
2683
+ var Cubic = class _Cubic {
2684
+ constructor(points) {
2685
+ if (points.length !== 8)
2686
+ throw new Error("Cubic points array must have exactly 8 elements");
2687
+ this.points = points;
2688
+ }
2689
+ /** First anchor point X */
2690
+ get anchor0X() {
2691
+ return this.points[0];
2692
+ }
2693
+ /** First anchor point Y */
2694
+ get anchor0Y() {
2695
+ return this.points[1];
2696
+ }
2697
+ /** First control point X */
2698
+ get control0X() {
2699
+ return this.points[2];
2700
+ }
2701
+ /** First control point Y */
2702
+ get control0Y() {
2703
+ return this.points[3];
2704
+ }
2705
+ /** Second control point X */
2706
+ get control1X() {
2707
+ return this.points[4];
2708
+ }
2709
+ /** Second control point Y */
2710
+ get control1Y() {
2711
+ return this.points[5];
2712
+ }
2713
+ /** Second anchor point X */
2714
+ get anchor1X() {
2715
+ return this.points[6];
2716
+ }
2717
+ /** Second anchor point Y */
2718
+ get anchor1Y() {
2719
+ return this.points[7];
2720
+ }
2721
+ /**
2722
+ * Returns a point on the curve at parameter t (0=start, 1=end).
2723
+ * Uses the standard cubic Bézier formula.
2724
+ * @param t - Parameter in [0, 1]
2725
+ */
2726
+ pointOnCurve(t) {
2727
+ const u = 1 - t;
2728
+ return point(
2729
+ this.anchor0X * (u * u * u) + this.control0X * (3 * t * u * u) + this.control1X * (3 * t * t * u) + this.anchor1X * (t * t * t),
2730
+ this.anchor0Y * (u * u * u) + this.control0Y * (3 * t * u * u) + this.control1Y * (3 * t * t * u) + this.anchor1Y * (t * t * t)
2731
+ );
2732
+ }
2733
+ /**
2734
+ * Returns true if this curve has (near) zero length.
2735
+ */
2736
+ zeroLength() {
2737
+ return Math.abs(this.anchor0X - this.anchor1X) < DISTANCE_EPSILON && Math.abs(this.anchor0Y - this.anchor1Y) < DISTANCE_EPSILON;
2738
+ }
2739
+ /**
2740
+ * Splits this cubic at parameter t, returning two cubics.
2741
+ * Uses De Casteljau's algorithm.
2742
+ * @param t - Split parameter in [0, 1]
2743
+ * @returns [left, right] pair
2744
+ */
2745
+ split(t) {
2746
+ const u = 1 - t;
2747
+ const mid = this.pointOnCurve(t);
2748
+ const left = new _Cubic([
2749
+ this.anchor0X,
2750
+ this.anchor0Y,
2751
+ this.anchor0X * u + this.control0X * t,
2752
+ this.anchor0Y * u + this.control0Y * t,
2753
+ this.anchor0X * (u * u) + this.control0X * (2 * u * t) + this.control1X * (t * t),
2754
+ this.anchor0Y * (u * u) + this.control0Y * (2 * u * t) + this.control1Y * (t * t),
2755
+ mid.x,
2756
+ mid.y
2757
+ ]);
2758
+ const right = new _Cubic([
2759
+ mid.x,
2760
+ mid.y,
2761
+ this.control0X * (u * u) + this.control1X * (2 * u * t) + this.anchor1X * (t * t),
2762
+ this.control0Y * (u * u) + this.control1Y * (2 * u * t) + this.anchor1Y * (t * t),
2763
+ this.control1X * u + this.anchor1X * t,
2764
+ this.control1Y * u + this.anchor1Y * t,
2765
+ this.anchor1X,
2766
+ this.anchor1Y
2767
+ ]);
2768
+ return [left, right];
2769
+ }
2770
+ /**
2771
+ * Returns a reversed copy of this cubic (anchor0 ↔ anchor1, controls swapped).
2772
+ */
2773
+ reverse() {
2774
+ return new _Cubic([
2775
+ this.anchor1X,
2776
+ this.anchor1Y,
2777
+ this.control1X,
2778
+ this.control1Y,
2779
+ this.control0X,
2780
+ this.control0Y,
2781
+ this.anchor0X,
2782
+ this.anchor0Y
2783
+ ]);
2784
+ }
2785
+ /**
2786
+ * Calculates the axis-aligned bounding box.
2787
+ * @param approximate - If true, uses control point hull (faster). Default: false.
2788
+ * @returns [minX, minY, maxX, maxY]
2789
+ */
2790
+ calculateBounds(approximate = false) {
2791
+ if (this.zeroLength()) {
2792
+ return [this.anchor0X, this.anchor0Y, this.anchor0X, this.anchor0Y];
2793
+ }
2794
+ let minX = Math.min(this.anchor0X, this.anchor1X);
2795
+ let minY = Math.min(this.anchor0Y, this.anchor1Y);
2796
+ let maxX = Math.max(this.anchor0X, this.anchor1X);
2797
+ let maxY = Math.max(this.anchor0Y, this.anchor1Y);
2798
+ if (approximate) {
2799
+ minX = Math.min(minX, this.control0X, this.control1X);
2800
+ minY = Math.min(minY, this.control0Y, this.control1Y);
2801
+ maxX = Math.max(maxX, this.control0X, this.control1X);
2802
+ maxY = Math.max(maxY, this.control0Y, this.control1Y);
2803
+ return [minX, minY, maxX, maxY];
2804
+ }
2805
+ const xa = -this.anchor0X + 3 * this.control0X - 3 * this.control1X + this.anchor1X;
2806
+ const xb = 2 * this.anchor0X - 4 * this.control0X + 2 * this.control1X;
2807
+ const xc = -this.anchor0X + this.control0X;
2808
+ const expandX = (t) => {
2809
+ if (t >= 0 && t <= 1) {
2810
+ const v = this.pointOnCurve(t).x;
2811
+ if (v < minX) minX = v;
2812
+ if (v > maxX) maxX = v;
2813
+ }
2814
+ };
2815
+ if (Math.abs(xa) < DISTANCE_EPSILON) {
2816
+ if (xb !== 0) expandX(2 * xc / (-2 * xb));
2817
+ } else {
2818
+ const xs = xb * xb - 4 * xa * xc;
2819
+ if (xs >= 0) {
2820
+ expandX((-xb + Math.sqrt(xs)) / (2 * xa));
2821
+ expandX((-xb - Math.sqrt(xs)) / (2 * xa));
2822
+ }
2823
+ }
2824
+ const ya = -this.anchor0Y + 3 * this.control0Y - 3 * this.control1Y + this.anchor1Y;
2825
+ const yb = 2 * this.anchor0Y - 4 * this.control0Y + 2 * this.control1Y;
2826
+ const yc = -this.anchor0Y + this.control0Y;
2827
+ const expandY = (t) => {
2828
+ if (t >= 0 && t <= 1) {
2829
+ const v = this.pointOnCurve(t).y;
2830
+ if (v < minY) minY = v;
2831
+ if (v > maxY) maxY = v;
2832
+ }
2833
+ };
2834
+ if (Math.abs(ya) < DISTANCE_EPSILON) {
2835
+ if (yb !== 0) expandY(2 * yc / (-2 * yb));
2836
+ } else {
2837
+ const ys = yb * yb - 4 * ya * yc;
2838
+ if (ys >= 0) {
2839
+ expandY((-yb + Math.sqrt(ys)) / (2 * ya));
2840
+ expandY((-yb - Math.sqrt(ys)) / (2 * ya));
2841
+ }
2842
+ }
2843
+ return [minX, minY, maxX, maxY];
2844
+ }
2845
+ /**
2846
+ * Interpolates between this cubic and another at fraction t.
2847
+ * @param other - Target cubic
2848
+ * @param t - Fraction [0, 1]
2849
+ */
2850
+ interpolateTo(other, t) {
2851
+ return new _Cubic(
2852
+ this.points.map((v, i) => interpolate(v, other.points[i], t))
2853
+ );
2854
+ }
2855
+ /**
2856
+ * Applies a PointTransformer to all anchor and control points.
2857
+ * @param fn - The transform function
2858
+ */
2859
+ transformed(fn) {
2860
+ const p = this.points.slice();
2861
+ for (let i = 0; i < 8; i += 2) {
2862
+ const [tx, ty] = fn(p[i], p[i + 1]);
2863
+ p[i] = tx;
2864
+ p[i + 1] = ty;
2865
+ }
2866
+ return new _Cubic(p);
2867
+ }
2868
+ toString() {
2869
+ return `Cubic(a0=(${this.anchor0X},${this.anchor0Y}) c0=(${this.control0X},${this.control0Y}) c1=(${this.control1X},${this.control1Y}) a1=(${this.anchor1X},${this.anchor1Y}))`;
2870
+ }
2871
+ // ─── Static factories ─────────────────────────────────────────────────────
2872
+ /**
2873
+ * Creates a cubic representing a straight line.
2874
+ * Control points lie at 1/3 and 2/3 of the line.
2875
+ * @param x0 - Start anchor X
2876
+ * @param y0 - Start anchor Y
2877
+ * @param x1 - End anchor X
2878
+ * @param y1 - End anchor Y
2879
+ */
2880
+ static straightLine(x0, y0, x1, y1) {
2881
+ return new _Cubic([
2882
+ x0,
2883
+ y0,
2884
+ interpolate(x0, x1, 1 / 3),
2885
+ interpolate(y0, y1, 1 / 3),
2886
+ interpolate(x0, x1, 2 / 3),
2887
+ interpolate(y0, y1, 2 / 3),
2888
+ x1,
2889
+ y1
2890
+ ]);
2891
+ }
2892
+ /**
2893
+ * Creates a cubic approximating a circular arc.
2894
+ * p0 and p1 must be equidistant from the center.
2895
+ * For arcs > 180°, use multiple cubics.
2896
+ *
2897
+ * @param centerX - Arc center X
2898
+ * @param centerY - Arc center Y
2899
+ * @param x0 - Start point X (on circle)
2900
+ * @param y0 - Start point Y (on circle)
2901
+ * @param x1 - End point X (on circle)
2902
+ * @param y1 - End point Y (on circle)
2903
+ */
2904
+ static circularArc(centerX, centerY, x0, y0, x1, y1) {
2905
+ const p0dx = x0 - centerX;
2906
+ const p0dy = y0 - centerY;
2907
+ const p1dx = x1 - centerX;
2908
+ const p1dy = y1 - centerY;
2909
+ const d0 = Math.sqrt(p0dx * p0dx + p0dy * p0dy);
2910
+ const d1 = Math.sqrt(p1dx * p1dx + p1dy * p1dy);
2911
+ if (d0 < DISTANCE_EPSILON || d1 < DISTANCE_EPSILON) {
2912
+ return _Cubic.straightLine(x0, y0, x1, y1);
2913
+ }
2914
+ const nx0 = p0dx / d0, ny0 = p0dy / d0;
2915
+ const nx1 = p1dx / d1, ny1 = p1dy / d1;
2916
+ const rx0 = -ny0, ry0 = nx0;
2917
+ const rx1 = -ny1, ry1 = nx1;
2918
+ const cosa = nx0 * nx1 + ny0 * ny1;
2919
+ if (cosa > 0.999) return _Cubic.straightLine(x0, y0, x1, y1);
2920
+ const clockwise = rx0 * p1dx + ry0 * p1dy >= 0;
2921
+ const k = d0 * (4 / 3) * (Math.sqrt(2 * (1 - cosa)) - Math.sqrt(1 - square(cosa))) / (1 - cosa) * (clockwise ? 1 : -1);
2922
+ return new _Cubic([
2923
+ x0,
2924
+ y0,
2925
+ x0 + rx0 * k,
2926
+ y0 + ry0 * k,
2927
+ x1 - rx1 * k,
2928
+ y1 - ry1 * k,
2929
+ x1,
2930
+ y1
2931
+ ]);
2932
+ }
2933
+ /**
2934
+ * Creates a zero-length cubic at the given point.
2935
+ * @param x - X coordinate
2936
+ * @param y - Y coordinate
2937
+ */
2938
+ static empty(x, y) {
2939
+ return new _Cubic([x, y, x, y, x, y, x, y]);
2940
+ }
2941
+ };
2942
+
2943
+ // src/shapes/core/rounded-polygon.ts
2944
+ var RoundedCorner = class {
2945
+ constructor(p0, p1, p2, rounding = UNROUNDED) {
2946
+ this.p0 = p0;
2947
+ this.p1 = p1;
2948
+ this.p2 = p2;
2949
+ this.rounding = rounding;
2950
+ this.center = point(0, 0);
2951
+ const v01x = p0.x - p1.x, v01y = p0.y - p1.y;
2952
+ const v21x = p2.x - p1.x, v21y = p2.y - p1.y;
2953
+ const d01 = distance(v01x, v01y);
2954
+ const d21 = distance(v21x, v21y);
2955
+ if (d01 > 0 && d21 > 0) {
2956
+ this.d1 = point(v01x / d01, v01y / d01);
2957
+ this.d2 = point(v21x / d21, v21y / d21);
2958
+ this.cornerRadius = rounding.radius;
2959
+ this.smoothing = rounding.smoothing;
2960
+ const cosA = this.d1.x * this.d2.x + this.d1.y * this.d2.y;
2961
+ this.sinAngle = Math.sqrt(Math.max(0, 1 - square(cosA)));
2962
+ this.expectedRoundCut = this.sinAngle > 1e-3 ? this.cornerRadius * (cosA + 1) / this.sinAngle : 0;
2963
+ } else {
2964
+ this.d1 = point(0, 0);
2965
+ this.d2 = point(0, 0);
2966
+ this.cornerRadius = 0;
2967
+ this.smoothing = 0;
2968
+ this.sinAngle = 0;
2969
+ this.expectedRoundCut = 0;
2970
+ }
2971
+ }
2972
+ get expectedCut() {
2973
+ return (1 + this.smoothing) * this.expectedRoundCut;
2974
+ }
2975
+ getCubics(allowedCut0, allowedCut1 = allowedCut0) {
2976
+ const allowedCut = Math.min(allowedCut0, allowedCut1);
2977
+ if (this.expectedRoundCut < DISTANCE_EPSILON || allowedCut < DISTANCE_EPSILON || this.cornerRadius < DISTANCE_EPSILON) {
2978
+ this.center = this.p1;
2979
+ return [Cubic.straightLine(this.p1.x, this.p1.y, this.p1.x, this.p1.y)];
2980
+ }
2981
+ const actualRoundCut = Math.min(allowedCut, this.expectedRoundCut);
2982
+ const actualSmoothing0 = this.calcSmoothingValue(allowedCut0);
2983
+ const actualSmoothing1 = this.calcSmoothingValue(allowedCut1);
2984
+ const actualR = this.cornerRadius * actualRoundCut / this.expectedRoundCut;
2985
+ const centerDist = Math.sqrt(square(actualR) + square(actualRoundCut));
2986
+ const midDirX = (this.d1.x + this.d2.x) / 2;
2987
+ const midDirY = (this.d1.y + this.d2.y) / 2;
2988
+ const midDist = distance(midDirX, midDirY);
2989
+ this.center = point(
2990
+ this.p1.x + midDirX / midDist * centerDist,
2991
+ this.p1.y + midDirY / midDist * centerDist
2992
+ );
2993
+ const ci0 = point(
2994
+ this.p1.x + this.d1.x * actualRoundCut,
2995
+ this.p1.y + this.d1.y * actualRoundCut
2996
+ );
2997
+ const ci2 = point(
2998
+ this.p1.x + this.d2.x * actualRoundCut,
2999
+ this.p1.y + this.d2.y * actualRoundCut
3000
+ );
3001
+ const flanking0 = this.computeFlankingCurve(
3002
+ actualRoundCut,
3003
+ actualSmoothing0,
3004
+ this.p1,
3005
+ this.p0,
3006
+ ci0,
3007
+ ci2,
3008
+ this.center,
3009
+ actualR
3010
+ );
3011
+ const flanking2 = this.computeFlankingCurve(
3012
+ actualRoundCut,
3013
+ actualSmoothing1,
3014
+ this.p1,
3015
+ this.p2,
3016
+ ci2,
3017
+ ci0,
3018
+ this.center,
3019
+ actualR
3020
+ ).reverse();
3021
+ return [
3022
+ flanking0,
3023
+ Cubic.circularArc(
3024
+ this.center.x,
3025
+ this.center.y,
3026
+ flanking0.anchor1X,
3027
+ flanking0.anchor1Y,
3028
+ flanking2.anchor0X,
3029
+ flanking2.anchor0Y
3030
+ ),
3031
+ flanking2
3032
+ ];
3033
+ }
3034
+ calcSmoothingValue(allowedCut) {
3035
+ if (allowedCut > this.expectedCut) return this.smoothing;
3036
+ if (allowedCut > this.expectedRoundCut) {
3037
+ return this.smoothing * (allowedCut - this.expectedRoundCut) / (this.expectedCut - this.expectedRoundCut);
3038
+ }
3039
+ return 0;
3040
+ }
3041
+ computeFlankingCurve(actualRoundCut, actualSmoothing, corner, sideStart, circleIntersect, otherIntersect, circleCenter, actualR) {
3042
+ var _a;
3043
+ const sdx = sideStart.x - corner.x, sdy = sideStart.y - corner.y;
3044
+ const sd = distance(sdx, sdy);
3045
+ const sideDir = point(sdx / sd, sdy / sd);
3046
+ const curveStart = point(
3047
+ corner.x + sideDir.x * actualRoundCut * (1 + actualSmoothing),
3048
+ corner.y + sideDir.y * actualRoundCut * (1 + actualSmoothing)
3049
+ );
3050
+ const px = interpolate(
3051
+ circleIntersect.x,
3052
+ (circleIntersect.x + otherIntersect.x) / 2,
3053
+ actualSmoothing
3054
+ );
3055
+ const py = interpolate(
3056
+ circleIntersect.y,
3057
+ (circleIntersect.y + otherIntersect.y) / 2,
3058
+ actualSmoothing
3059
+ );
3060
+ const ptoCx = px - circleCenter.x, ptoCy = py - circleCenter.y;
3061
+ const ptoCd = distance(ptoCx, ptoCy);
3062
+ const curveEnd = point(
3063
+ circleCenter.x + ptoCx / ptoCd * actualR,
3064
+ circleCenter.y + ptoCy / ptoCd * actualR
3065
+ );
3066
+ const tangentX = -(curveEnd.y - circleCenter.y);
3067
+ const tangentY = curveEnd.x - circleCenter.x;
3068
+ const anchorEnd = (_a = lineIntersection(
3069
+ sideStart,
3070
+ sideDir,
3071
+ curveEnd,
3072
+ point(tangentX, tangentY)
3073
+ )) != null ? _a : circleIntersect;
3074
+ const anchorStart = point(
3075
+ (curveStart.x + anchorEnd.x * 2) / 3,
3076
+ (curveStart.y + anchorEnd.y * 2) / 3
3077
+ );
3078
+ return new Cubic([
3079
+ curveStart.x,
3080
+ curveStart.y,
3081
+ anchorStart.x,
3082
+ anchorStart.y,
3083
+ anchorEnd.x,
3084
+ anchorEnd.y,
3085
+ curveEnd.x,
3086
+ curveEnd.y
3087
+ ]);
3088
+ }
3089
+ };
3090
+ function lineIntersection(p0, d0, p1, d1) {
3091
+ const rd1x = -d1.y, rd1y = d1.x;
3092
+ const den = d0.x * rd1x + d0.y * rd1y;
3093
+ if (Math.abs(den) < DISTANCE_EPSILON) return null;
3094
+ const num = (p1.x - p0.x) * rd1x + (p1.y - p0.y) * rd1y;
3095
+ if (Math.abs(den) < DISTANCE_EPSILON * Math.abs(num)) return null;
3096
+ const k = num / den;
3097
+ return point(p0.x + d0.x * k, p0.y + d0.y * k);
3098
+ }
3099
+ function calculateCenter(vertices) {
3100
+ let cx = 0, cy = 0;
3101
+ for (let i = 0; i < vertices.length; i += 2) {
3102
+ cx += vertices[i];
3103
+ cy += vertices[i + 1];
3104
+ }
3105
+ const n = vertices.length / 2;
3106
+ return point(cx / n, cy / n);
3107
+ }
3108
+ function verticesFromNumVerts(numVertices, radius, cx, cy) {
3109
+ const result = [];
3110
+ for (let i = 0; i < numVertices; i++) {
3111
+ const angle = FLOAT_PI / numVertices * 2 * i;
3112
+ const [rx, ry] = radialToCartesian(radius, angle);
3113
+ result.push(cx + rx, cy + ry);
3114
+ }
3115
+ return result;
3116
+ }
3117
+ var RoundedPolygon = class _RoundedPolygon {
3118
+ /** @internal Use static factory methods instead */
3119
+ constructor(features, center) {
3120
+ this.features = features;
3121
+ this.center = center;
3122
+ this.cubics = buildCubicsList(features);
3123
+ validateContiguity(this.cubics);
3124
+ }
3125
+ get centerX() {
3126
+ return this.center.x;
3127
+ }
3128
+ get centerY() {
3129
+ return this.center.y;
3130
+ }
3131
+ // ─── Static factories ────────────────────────────────────────────────
3132
+ /**
3133
+ * Creates a polygon from a vertex count (regular polygon).
3134
+ * @param numVertices - Number of vertices (≥ 3)
3135
+ * @param radius - Circumradius (default: 1)
3136
+ * @param centerX - Center X (default: 0)
3137
+ * @param centerY - Center Y (default: 0)
3138
+ * @param rounding - Corner rounding for all vertices
3139
+ * @param perVertexRounding - Per-vertex rounding overrides
3140
+ */
3141
+ static fromNumVertices(numVertices, radius = 1, centerX = 0, centerY = 0, rounding = UNROUNDED, perVertexRounding) {
3142
+ if (numVertices < 3)
3143
+ throw new Error("Polygon must have at least 3 vertices");
3144
+ const vertices = verticesFromNumVerts(
3145
+ numVertices,
3146
+ radius,
3147
+ centerX,
3148
+ centerY
3149
+ );
3150
+ return _RoundedPolygon.fromVertices(
3151
+ vertices,
3152
+ rounding,
3153
+ perVertexRounding,
3154
+ centerX,
3155
+ centerY
3156
+ );
3157
+ }
3158
+ /**
3159
+ * Creates a polygon from a flat vertex array [x0, y0, x1, y1, ...].
3160
+ * @param vertices - Flat array of x,y pairs (length must be even and ≥ 6)
3161
+ * @param rounding - Corner rounding for all vertices
3162
+ * @param perVertexRounding - Per-vertex rounding overrides
3163
+ * @param centerX - Center X (auto-calculated if not provided)
3164
+ * @param centerY - Center Y (auto-calculated if not provided)
3165
+ */
3166
+ static fromVertices(vertices, rounding = UNROUNDED, perVertexRounding, centerX, centerY) {
3167
+ if (vertices.length < 6)
3168
+ throw new Error("Polygon must have at least 3 vertices");
3169
+ if (vertices.length % 2 !== 0)
3170
+ throw new Error("Vertices array must have even length");
3171
+ if (perVertexRounding && perVertexRounding.length * 2 !== vertices.length) {
3172
+ throw new Error("perVertexRounding must match vertex count");
3173
+ }
3174
+ const n = vertices.length / 2;
3175
+ const roundedCorners = [];
3176
+ for (let i = 0; i < n; i++) {
3177
+ const vtxRounding = perVertexRounding ? perVertexRounding[i] : rounding;
3178
+ const prevIdx = (i + n - 1) % n * 2;
3179
+ const nextIdx = (i + 1) % n * 2;
3180
+ roundedCorners.push(
3181
+ new RoundedCorner(
3182
+ point(vertices[prevIdx], vertices[prevIdx + 1]),
3183
+ point(vertices[i * 2], vertices[i * 2 + 1]),
3184
+ point(vertices[nextIdx], vertices[nextIdx + 1]),
3185
+ vtxRounding
3186
+ )
3187
+ );
3188
+ }
3189
+ const cutAdjusts = [];
3190
+ for (let ix = 0; ix < n; ix++) {
3191
+ const expectedRoundCut = roundedCorners[ix].expectedRoundCut + roundedCorners[(ix + 1) % n].expectedRoundCut;
3192
+ const expectedCut = roundedCorners[ix].expectedCut + roundedCorners[(ix + 1) % n].expectedCut;
3193
+ const vx = vertices[ix * 2], vy = vertices[ix * 2 + 1];
3194
+ const nx = vertices[(ix + 1) % n * 2], ny = vertices[(ix + 1) % n * 2 + 1];
3195
+ const sideSize = distance(vx - nx, vy - ny);
3196
+ if (expectedRoundCut > sideSize) {
3197
+ cutAdjusts.push([sideSize / expectedRoundCut, 0]);
3198
+ } else if (expectedCut > sideSize) {
3199
+ cutAdjusts.push([
3200
+ 1,
3201
+ (sideSize - expectedRoundCut) / (expectedCut - expectedRoundCut)
3202
+ ]);
3203
+ } else {
3204
+ cutAdjusts.push([1, 1]);
3205
+ }
3206
+ }
3207
+ const corners = [];
3208
+ for (let i = 0; i < n; i++) {
3209
+ const allowedCuts = [];
3210
+ for (const delta of [0, 1]) {
3211
+ const [roundCutRatio, cutRatio] = cutAdjusts[(i + n - 1 + delta) % n];
3212
+ allowedCuts.push(
3213
+ roundedCorners[i].expectedRoundCut * roundCutRatio + (roundedCorners[i].expectedCut - roundedCorners[i].expectedRoundCut) * cutRatio
3214
+ );
3215
+ }
3216
+ corners.push(roundedCorners[i].getCubics(allowedCuts[0], allowedCuts[1]));
3217
+ }
3218
+ const tempFeatures = [];
3219
+ for (let i = 0; i < n; i++) {
3220
+ const prevIdx = (i + n - 1) % n;
3221
+ const nextIdx = (i + 1) % n;
3222
+ const currV = point(vertices[i * 2], vertices[i * 2 + 1]);
3223
+ const prevV = point(vertices[prevIdx * 2], vertices[prevIdx * 2 + 1]);
3224
+ const nextV = point(vertices[nextIdx * 2], vertices[nextIdx * 2 + 1]);
3225
+ const isConvex = convex(
3226
+ prevV.x,
3227
+ prevV.y,
3228
+ currV.x,
3229
+ currV.y,
3230
+ nextV.x,
3231
+ nextV.y
3232
+ );
3233
+ tempFeatures.push(cornerFeature(corners[i], isConvex));
3234
+ const lastCornerA1 = corners[i][corners[i].length - 1];
3235
+ const nextCornerA0 = corners[(i + 1) % n][0];
3236
+ tempFeatures.push(
3237
+ edgeFeature([
3238
+ Cubic.straightLine(
3239
+ lastCornerA1.anchor1X,
3240
+ lastCornerA1.anchor1Y,
3241
+ nextCornerA0.anchor0X,
3242
+ nextCornerA0.anchor0Y
3243
+ )
3244
+ ])
3245
+ );
3246
+ }
3247
+ const cx = centerX != null ? centerX : calculateCenter(vertices).x;
3248
+ const cy = centerY != null ? centerY : calculateCenter(vertices).y;
3249
+ return new _RoundedPolygon(tempFeatures, point(cx, cy));
3250
+ }
3251
+ /**
3252
+ * Creates a polygon from a pre-built Feature list.
3253
+ * @param features - Feature list (≥ 2 features)
3254
+ * @param centerX - Center X (auto-calculated if NaN)
3255
+ * @param centerY - Center Y (auto-calculated if NaN)
3256
+ */
3257
+ static fromFeatures(features, centerX = Number.NaN, centerY = Number.NaN) {
3258
+ if (features.length < 2)
3259
+ throw new Error("Polygon must have at least 2 features");
3260
+ const allVertices = [];
3261
+ for (const f of features) {
3262
+ for (const c of f.cubics) {
3263
+ allVertices.push(c.anchor0X, c.anchor0Y);
3264
+ }
3265
+ }
3266
+ const cx = Number.isNaN(centerX) ? calculateCenter(allVertices).x : centerX;
3267
+ const cy = Number.isNaN(centerY) ? calculateCenter(allVertices).y : centerY;
3268
+ return new _RoundedPolygon(features, point(cx, cy));
3269
+ }
3270
+ // ─── Instance methods ────────────────────────────────────────────────
3271
+ /**
3272
+ * Returns a new RoundedPolygon with all points transformed.
3273
+ * @param fn - Transform function: (x, y) => [x', y']
3274
+ */
3275
+ transformed(fn) {
3276
+ const [cx, cy] = fn(this.center.x, this.center.y);
3277
+ return new _RoundedPolygon(
3278
+ this.features.map((f) => transformFeature(f, fn)),
3279
+ point(cx, cy)
3280
+ );
3281
+ }
3282
+ /**
3283
+ * Returns a normalized copy: scaled and centered to fit in [0,1] × [0,1].
3284
+ * Maintains aspect ratio by using the larger dimension.
3285
+ */
3286
+ normalized() {
3287
+ const [minX, minY, maxX, maxY] = this.calculateBounds(false);
3288
+ const width = maxX - minX;
3289
+ const height = maxY - minY;
3290
+ const side = Math.max(width, height);
3291
+ const offsetX = (side - width) / 2 - minX;
3292
+ const offsetY = (side - height) / 2 - minY;
3293
+ return this.transformed((x, y) => [
3294
+ (x + offsetX) / side,
3295
+ (y + offsetY) / side
3296
+ ]);
3297
+ }
3298
+ /**
3299
+ * Calculates the axis-aligned bounding box.
3300
+ * @param approximate - If true, uses control point hull (faster). Default: true.
3301
+ * @returns [minX, minY, maxX, maxY]
3302
+ */
3303
+ calculateBounds(approximate = true) {
3304
+ let minX = Number.MAX_VALUE, minY = Number.MAX_VALUE;
3305
+ let maxX = -Number.MAX_VALUE, maxY = -Number.MAX_VALUE;
3306
+ for (const c of this.cubics) {
3307
+ const [cx0, cy0, cx1, cy1] = c.calculateBounds(approximate);
3308
+ if (cx0 < minX) minX = cx0;
3309
+ if (cy0 < minY) minY = cy0;
3310
+ if (cx1 > maxX) maxX = cx1;
3311
+ if (cy1 > maxY) maxY = cy1;
3312
+ }
3313
+ return [minX, minY, maxX, maxY];
3314
+ }
3315
+ /**
3316
+ * Calculates the maximum bounding square (useful for shapes that rotate).
3317
+ * @returns [minX, minY, maxX, maxY] of the max-bounds square
3318
+ */
3319
+ calculateMaxBounds() {
3320
+ let maxDistSq = 0;
3321
+ for (const c of this.cubics) {
3322
+ const ad = distanceSquared(
3323
+ c.anchor0X - this.centerX,
3324
+ c.anchor0Y - this.centerY
3325
+ );
3326
+ const mid = c.pointOnCurve(0.5);
3327
+ const md = distanceSquared(mid.x - this.centerX, mid.y - this.centerY);
3328
+ const m31 = Math.max(ad, md);
3329
+ if (m31 > maxDistSq) maxDistSq = m31;
3330
+ }
3331
+ const d = Math.sqrt(maxDistSq);
3332
+ return [
3333
+ this.centerX - d,
3334
+ this.centerY - d,
3335
+ this.centerX + d,
3336
+ this.centerY + d
3337
+ ];
3338
+ }
3339
+ };
3340
+ function buildCubicsList(features) {
3341
+ const result = [];
3342
+ let firstCubic = null;
3343
+ let lastCubic = null;
3344
+ let firstFeatureSplitStart = null;
3345
+ let firstFeatureSplitEnd = null;
3346
+ if (features.length > 0 && features[0].cubics.length === 3) {
3347
+ const center = features[0].cubics[1];
3348
+ const [start, end] = center.split(0.5);
3349
+ firstFeatureSplitStart = [features[0].cubics[0], start];
3350
+ firstFeatureSplitEnd = [end, features[0].cubics[2]];
3351
+ }
3352
+ for (let i = 0; i <= features.length; i++) {
3353
+ let featureCubics;
3354
+ if (i === 0 && firstFeatureSplitEnd) {
3355
+ featureCubics = firstFeatureSplitEnd;
3356
+ } else if (i === features.length) {
3357
+ if (firstFeatureSplitStart) featureCubics = firstFeatureSplitStart;
3358
+ else break;
3359
+ } else {
3360
+ featureCubics = features[i].cubics;
3361
+ }
3362
+ for (const cubic of featureCubics) {
3363
+ if (!cubic.zeroLength()) {
3364
+ if (lastCubic) result.push(lastCubic);
3365
+ lastCubic = cubic;
3366
+ if (!firstCubic) firstCubic = cubic;
3367
+ } else if (lastCubic) {
3368
+ const p = lastCubic.points.slice();
3369
+ p[6] = cubic.anchor1X;
3370
+ p[7] = cubic.anchor1Y;
3371
+ lastCubic = new Cubic(p);
3372
+ }
3373
+ }
3374
+ }
3375
+ if (lastCubic && firstCubic) {
3376
+ result.push(
3377
+ new Cubic([
3378
+ lastCubic.anchor0X,
3379
+ lastCubic.anchor0Y,
3380
+ lastCubic.control0X,
3381
+ lastCubic.control0Y,
3382
+ lastCubic.control1X,
3383
+ lastCubic.control1Y,
3384
+ firstCubic.anchor0X,
3385
+ firstCubic.anchor0Y
3386
+ ])
3387
+ );
3388
+ } else {
3389
+ result.push(Cubic.empty(0, 0));
3390
+ }
3391
+ return result;
3392
+ }
3393
+ function validateContiguity(cubics) {
3394
+ let prev = cubics[cubics.length - 1];
3395
+ for (const cubic of cubics) {
3396
+ if (Math.abs(cubic.anchor0X - prev.anchor1X) > DISTANCE_EPSILON || Math.abs(cubic.anchor0Y - prev.anchor1Y) > DISTANCE_EPSILON) {
3397
+ throw new Error(
3398
+ `RoundedPolygon must be contiguous: gap between (${cubic.anchor0X},${cubic.anchor0Y}) and (${prev.anchor1X},${prev.anchor1Y})`
3399
+ );
3400
+ }
3401
+ prev = cubic;
3402
+ }
3403
+ }
3404
+
3405
+ // src/shapes/catalog/md3-expressive-shapes.ts
3406
+ function createShape(pts) {
3407
+ const cubics = pts.map((p) => new Cubic(p));
3408
+ return RoundedPolygon.fromFeatures(
3409
+ cubics.map((c) => cornerFeature([c], false))
3410
+ );
3411
+ }
3412
+ var archShape = createShape([
3413
+ [1, 0.83461, 1, 0.8547, 1, 0.86477, 0.99898, 0.87322],
3414
+ [0.99898, 0.87322, 0.99115, 0.93918, 0.93918, 0.99115, 0.87322, 0.99898],
3415
+ [0.87322, 0.99898, 0.86477, 1, 0.8547, 1, 0.83461, 1],
3416
+ [0.83461, 1, 0.61154, 1, 0.38847, 1, 0.1654, 1],
3417
+ [0.1654, 1, 0.14529, 1, 0.13524, 1, 0.12679, 0.99898],
3418
+ [0.12679, 0.99898, 0.06084, 0.99115, 884e-5, 0.93918, 1e-3, 0.87322],
3419
+ [1e-3, 0.87322, 0, 0.86477, 0, 0.8547, 0, 0.83461],
3420
+ [0, 0.83461, 0, 0.72307, 0, 0.61154, 0, 0.5],
3421
+ [0, 0.5, 0, 0.22385, 0.22386, 0, 0.5, 0],
3422
+ [0.5, 0, 0.77615, 0, 1, 0.22385, 1, 0.5],
3423
+ [1, 0.5, 1, 0.61154, 1, 0.72307, 1, 0.83461]
3424
+ ]);
3425
+ var arrowShape = createShape([
3426
+ [0.8594, 0.44684, 0.81504, 0.37855, 0.77068, 0.31016, 0.72632, 0.24187],
3427
+ [0.72632, 0.24187, 0.69754, 0.19753, 0.66825, 0.1526, 0.62934, 0.11738],
3428
+ [0.62934, 0.11738, 0.59043, 0.08209, 0.54003, 0.05716, 0.48834, 0.06041],
3429
+ [0.48834, 0.06041, 0.44296, 0.06333, 0.4009, 0.08773, 0.36769, 0.11959],
3430
+ [0.36769, 0.11959, 0.33449, 0.15146, 0.30869, 0.1907, 0.28332, 0.22956],
3431
+ [0.28332, 0.22956, 0.21469, 0.33456, 0.14598, 0.43956, 0.07736, 0.54462],
3432
+ [0.07736, 0.54462, 0.04474, 0.5945, 0.01128, 0.64655, 226e-5, 0.70598],
3433
+ [226e-5, 0.70598, -864e-5, 0.77779, 0.02074, 0.85092, 0.07284, 0.89867],
3434
+ [0.07284, 0.89867, 0.12733, 0.94861, 0.21563, 0.94456, 0.28196, 0.93089],
3435
+ [0.28196, 0.93089, 0.35467, 0.91586, 0.42576, 0.8876, 0.49992, 0.88769],
3436
+ [0.49992, 0.88769, 0.56344, 0.88769, 0.62483, 0.90858, 0.68664, 0.92377],
3437
+ [0.68664, 0.92377, 0.74837, 0.93886, 0.8147, 0.94817, 0.8743, 0.9257],
3438
+ [0.8743, 0.9257, 0.94829, 0.89788, 1.00142, 0.81877, 0.99997, 0.73757],
3439
+ [0.99997, 0.73757, 0.99861, 0.66348, 0.95714, 0.59731, 0.91721, 0.53567],
3440
+ [0.91721, 0.53567, 0.89797, 0.50608, 0.87873, 0.47643, 0.85948, 0.44684],
3441
+ [0.85948, 0.44684, 0.85946, 0.44684, 0.85943, 0.44684, 0.8594, 0.44684]
3442
+ ]);
3443
+ var boomShape = createShape([
3444
+ [0.49006, 0.03176, 0.49241, 0.01294, 0.49359, 354e-5, 0.49537, 185e-5],
3445
+ [0.49537, 185e-5, 0.49796, -62e-5, 0.50203, -62e-5, 0.50462, 185e-5],
3446
+ [0.50462, 185e-5, 0.50641, 354e-5, 0.50759, 0.01294, 0.50994, 0.03176],
3447
+ [0.50994, 0.03176, 0.51992, 0.11153, 0.5299, 0.1913, 0.53987, 0.27107],
3448
+ [0.53987, 0.27107, 0.54082, 0.27866, 0.5413, 0.28244, 0.54266, 0.28403],
3449
+ [0.54266, 0.28403, 0.54464, 0.28628, 0.54787, 0.287, 0.5506, 0.28572],
3450
+ [0.5506, 0.28572, 0.55248, 0.28485, 0.55445, 0.28157, 0.55839, 0.275],
3451
+ [0.55839, 0.275, 0.59978, 0.20621, 0.64116, 0.13742, 0.68254, 0.06863],
3452
+ [0.68254, 0.06863, 0.69231, 0.05241, 0.69719, 0.04429, 0.6995, 0.04348],
3453
+ [0.6995, 0.04348, 0.70287, 0.04232, 0.70657, 0.04398, 0.70795, 0.04729],
3454
+ [0.70795, 0.04729, 0.70891, 0.04954, 0.70617, 0.05863, 0.70071, 0.07679],
3455
+ [0.70071, 0.07679, 0.67756, 0.15373, 0.6544, 0.23068, 0.63124, 0.30763],
3456
+ [0.63124, 0.30763, 0.62904, 0.31497, 0.62794, 0.31863, 0.62855, 0.3206],
3457
+ [0.62855, 0.3206, 0.62942, 0.32348, 0.6321, 0.32544, 0.63512, 0.32541],
3458
+ [0.63512, 0.32541, 0.63719, 0.32538, 0.64031, 0.32319, 0.64656, 0.31882],
3459
+ [0.64656, 0.31882, 0.7122, 0.2729, 0.77783, 0.22698, 0.84347, 0.18107],
3460
+ [0.84347, 0.18107, 0.85895, 0.17022, 0.86669, 0.16482, 0.86913, 0.16501],
3461
+ [0.86913, 0.16501, 0.87269, 0.16533, 0.87539, 0.16834, 0.87532, 0.17191],
3462
+ [0.87532, 0.17191, 0.87528, 0.17438, 0.86911, 0.18157, 0.85678, 0.19591],
3463
+ [0.85678, 0.19591, 0.80449, 0.25674, 0.75221, 0.31758, 0.69992, 0.37841],
3464
+ [0.69992, 0.37841, 0.69494, 0.38419, 0.69246, 0.3871, 0.69221, 0.38916],
3465
+ [0.69221, 0.38916, 0.69185, 0.39216, 0.6935, 0.39503, 0.69627, 0.39622],
3466
+ [0.69627, 0.39622, 0.69817, 0.39706, 0.70191, 0.39631, 0.70939, 0.39488],
3467
+ [0.70939, 0.39488, 0.78793, 0.37977, 0.86646, 0.36467, 0.945, 0.34957],
3468
+ [0.945, 0.34957, 0.96353, 0.346, 0.9728, 0.34422, 0.97494, 0.34541],
3469
+ [0.97494, 0.34541, 0.97806, 0.34713, 0.97931, 0.351, 0.9778, 0.35425],
3470
+ [0.9778, 0.35425, 0.97676, 0.35647, 0.96822, 0.3605, 0.95115, 0.36856],
3471
+ [0.95115, 0.36856, 0.87878, 0.40276, 0.80641, 0.43696, 0.73403, 0.47116],
3472
+ [0.73403, 0.47116, 0.72714, 0.47441, 0.7237, 0.47603, 0.72263, 0.47781],
3473
+ [0.72263, 0.47781, 0.72109, 0.48041, 0.72144, 0.48372, 0.72348, 0.48594],
3474
+ [0.72348, 0.48594, 0.72489, 0.48747, 0.7286, 0.48834, 0.73601, 0.49006],
3475
+ [0.73601, 0.49006, 0.81387, 0.50839, 0.89173, 0.52671, 0.96959, 0.54503],
3476
+ [0.96959, 0.54503, 0.98796, 0.54934, 0.99715, 0.5515, 0.99862, 0.55347],
3477
+ [0.99862, 0.55347, 1.00077, 0.55631, 1.00035, 0.56037, 0.99766, 0.56272],
3478
+ [0.99766, 0.56272, 0.9958, 0.56431, 0.98638, 0.56453, 0.96751, 0.56491],
3479
+ [0.96751, 0.56491, 0.88757, 0.56654, 0.80762, 0.56818, 0.72767, 0.56981],
3480
+ [0.72767, 0.56981, 0.72006, 0.56997, 0.71626, 0.57006, 0.71456, 0.57125],
3481
+ [0.71456, 0.57125, 0.7121, 0.573, 0.71108, 0.57617, 0.71206, 0.57903],
3482
+ [0.71206, 0.57903, 0.71272, 0.581, 0.71576, 0.58331, 0.72182, 0.58794],
3483
+ [0.72182, 0.58794, 0.78555, 0.6365, 0.84927, 0.68506, 0.91299, 0.73362],
3484
+ [0.91299, 0.73362, 0.92802, 0.74509, 0.93554, 0.75084, 0.93609, 0.75322],
3485
+ [0.93609, 0.75322, 0.93691, 0.7567, 0.93489, 0.76022, 0.93147, 0.76128],
3486
+ [0.93147, 0.76128, 0.92912, 0.762, 0.92043, 0.75831, 0.90304, 0.75097],
3487
+ [0.90304, 0.75097, 0.82934, 0.71977, 0.75565, 0.68857, 0.68195, 0.65737],
3488
+ [0.68195, 0.65737, 0.67493, 0.6544, 0.67142, 0.6529, 0.66939, 0.65331],
3489
+ [0.66939, 0.65331, 0.66644, 0.65391, 0.66423, 0.65637, 0.66396, 0.65937],
3490
+ [0.66396, 0.65937, 0.66378, 0.66144, 0.66561, 0.66481, 0.66928, 0.6715],
3491
+ [0.66928, 0.6715, 0.70784, 0.74193, 0.74641, 0.81237, 0.78497, 0.88281],
3492
+ [0.78497, 0.88281, 0.79407, 0.8994, 0.79862, 0.90771, 0.79815, 0.91015],
3493
+ [0.79815, 0.91015, 0.79748, 0.91366, 0.79421, 0.91604, 0.79067, 0.91562],
3494
+ [0.79067, 0.91562, 0.78824, 0.91531, 0.78179, 0.9084, 0.76888, 0.89456],
3495
+ [0.76888, 0.89456, 0.71418, 0.83591, 0.65947, 0.77727, 0.60477, 0.71862],
3496
+ [0.60477, 0.71862, 0.59956, 0.71306, 0.59695, 0.71025, 0.59494, 0.70981],
3497
+ [0.59494, 0.70981, 0.592, 0.70912, 0.58897, 0.71048, 0.58752, 0.71312],
3498
+ [0.58752, 0.71312, 0.58651, 0.71493, 0.58683, 0.71875, 0.58747, 0.72637],
3499
+ [0.58747, 0.72637, 0.59421, 0.80649, 0.60094, 0.8866, 0.60768, 0.96671],
3500
+ [0.60768, 0.96671, 0.60927, 0.98562, 0.61006, 0.99506, 0.60866, 0.99709],
3501
+ [0.60866, 0.99709, 0.60663, 1.00002, 0.60267, 1.00087, 0.59962, 0.99902],
3502
+ [0.59962, 0.99902, 0.59752, 0.99774, 0.59442, 0.98877, 0.58823, 0.97087],
3503
+ [0.58823, 0.97087, 0.56197, 0.89493, 0.53572, 0.819, 0.50946, 0.74306],
3504
+ [0.50946, 0.74306, 0.50696, 0.73581, 0.50571, 0.73222, 0.50406, 0.73097],
3505
+ [0.50406, 0.73097, 0.50165, 0.72916, 0.49834, 0.72916, 0.49594, 0.73097],
3506
+ [0.49594, 0.73097, 0.49428, 0.73222, 0.49303, 0.73581, 0.49053, 0.74306],
3507
+ [0.49053, 0.74306, 0.46428, 0.819, 0.43803, 0.89493, 0.41177, 0.97087],
3508
+ [0.41177, 0.97087, 0.40558, 0.98877, 0.40248, 0.99774, 0.40038, 0.99902],
3509
+ [0.40038, 0.99902, 0.39733, 1.00087, 0.39338, 1.00002, 0.39134, 0.99709],
3510
+ [0.39134, 0.99709, 0.38994, 0.99506, 0.39073, 0.98562, 0.39232, 0.96671],
3511
+ [0.39232, 0.96671, 0.39906, 0.8866, 0.40579, 0.80649, 0.41253, 0.72637],
3512
+ [0.41253, 0.72637, 0.41317, 0.71875, 0.41349, 0.71493, 0.41248, 0.71312],
3513
+ [0.41248, 0.71312, 0.41104, 0.71048, 0.408, 0.70912, 0.40507, 0.70981],
3514
+ [0.40507, 0.70981, 0.40305, 0.71025, 0.40044, 0.71306, 0.39523, 0.71862],
3515
+ [0.39523, 0.71862, 0.34053, 0.77727, 0.28582, 0.83591, 0.23112, 0.89456],
3516
+ [0.23112, 0.89456, 0.21821, 0.9084, 0.21176, 0.91531, 0.20933, 0.91562],
3517
+ [0.20933, 0.91562, 0.20578, 0.91604, 0.20252, 0.91366, 0.20184, 0.91015],
3518
+ [0.20184, 0.91015, 0.20138, 0.90771, 0.20593, 0.8994, 0.21503, 0.88281],
3519
+ [0.21503, 0.88281, 0.25359, 0.81237, 0.29215, 0.74193, 0.33072, 0.6715],
3520
+ [0.33072, 0.6715, 0.33439, 0.66481, 0.33622, 0.66144, 0.33604, 0.65937],
3521
+ [0.33604, 0.65937, 0.33577, 0.65637, 0.33356, 0.65391, 0.3306, 0.65331],
3522
+ [0.3306, 0.65331, 0.32857, 0.6529, 0.32506, 0.6544, 0.31805, 0.65737],
3523
+ [0.31805, 0.65737, 0.24435, 0.68857, 0.17065, 0.71977, 0.09695, 0.75097],
3524
+ [0.09695, 0.75097, 0.07957, 0.75831, 0.07087, 0.762, 0.06853, 0.76128],
3525
+ [0.06853, 0.76128, 0.06511, 0.76022, 0.06309, 0.7567, 0.06391, 0.75322],
3526
+ [0.06391, 0.75322, 0.06446, 0.75084, 0.07198, 0.74509, 0.08701, 0.73362],
3527
+ [0.08701, 0.73362, 0.15073, 0.68506, 0.21445, 0.6365, 0.27817, 0.58794],
3528
+ [0.27817, 0.58794, 0.28424, 0.58331, 0.28727, 0.581, 0.28794, 0.57903],
3529
+ [0.28794, 0.57903, 0.28892, 0.57617, 0.2879, 0.573, 0.28543, 0.57125],
3530
+ [0.28543, 0.57125, 0.28374, 0.57006, 0.27993, 0.56997, 0.27232, 0.56981],
3531
+ [0.27232, 0.56981, 0.19238, 0.56818, 0.11243, 0.56654, 0.03248, 0.56491],
3532
+ [0.03248, 0.56491, 0.01362, 0.56453, 419e-5, 0.56431, 234e-5, 0.56272],
3533
+ [234e-5, 0.56272, -35e-5, 0.56036, -77e-5, 0.55633, 138e-5, 0.55347],
3534
+ [138e-5, 0.55347, 285e-5, 0.5515, 0.01204, 0.54934, 0.03041, 0.54503],
3535
+ [0.03041, 0.54503, 0.10827, 0.52671, 0.18613, 0.50839, 0.26399, 0.49006],
3536
+ [0.26399, 0.49006, 0.2714, 0.48834, 0.27511, 0.48747, 0.27652, 0.48594],
3537
+ [0.27652, 0.48594, 0.27856, 0.48372, 0.27891, 0.48041, 0.27736, 0.47781],
3538
+ [0.27736, 0.47781, 0.2763, 0.47603, 0.27286, 0.47441, 0.26597, 0.47116],
3539
+ [0.26597, 0.47116, 0.19359, 0.43696, 0.12122, 0.40276, 0.04885, 0.36856],
3540
+ [0.04885, 0.36856, 0.03177, 0.3605, 0.02324, 0.35647, 0.0222, 0.35425],
3541
+ [0.0222, 0.35425, 0.02068, 0.35101, 0.02193, 0.34715, 0.02506, 0.34541],
3542
+ [0.02506, 0.34541, 0.0272, 0.34422, 0.03647, 0.346, 0.055, 0.34957],
3543
+ [0.055, 0.34957, 0.13353, 0.36467, 0.21207, 0.37977, 0.29061, 0.39488],
3544
+ [0.29061, 0.39488, 0.29809, 0.39631, 0.30183, 0.39706, 0.30373, 0.39622],
3545
+ [0.30373, 0.39622, 0.3065, 0.39502, 0.30815, 0.39215, 0.30779, 0.38916],
3546
+ [0.30779, 0.38916, 0.30755, 0.3871, 0.30506, 0.38419, 0.30008, 0.37841],
3547
+ [0.30008, 0.37841, 0.24779, 0.31758, 0.19551, 0.25674, 0.14322, 0.19591],
3548
+ [0.14322, 0.19591, 0.13089, 0.18157, 0.12472, 0.17438, 0.12468, 0.17191],
3549
+ [0.12468, 0.17191, 0.12461, 0.16834, 0.12731, 0.16533, 0.13086, 0.16501],
3550
+ [0.13086, 0.16501, 0.1333, 0.16482, 0.14104, 0.17022, 0.15653, 0.18107],
3551
+ [0.15653, 0.18107, 0.22217, 0.22698, 0.2878, 0.2729, 0.35344, 0.31882],
3552
+ [0.35344, 0.31882, 0.35969, 0.32319, 0.36281, 0.32538, 0.36488, 0.32541],
3553
+ [0.36488, 0.32541, 0.3679, 0.32544, 0.37058, 0.32348, 0.37145, 0.3206],
3554
+ [0.37145, 0.3206, 0.37206, 0.31863, 0.37096, 0.31497, 0.36875, 0.30763],
3555
+ [0.36875, 0.30763, 0.3456, 0.23068, 0.32244, 0.15373, 0.29929, 0.07679],
3556
+ [0.29929, 0.07679, 0.29382, 0.05863, 0.29109, 0.04954, 0.29205, 0.04729],
3557
+ [0.29205, 0.04729, 0.29342, 0.04399, 0.29711, 0.04232, 0.3005, 0.04348],
3558
+ [0.3005, 0.04348, 0.30281, 0.04429, 0.30769, 0.05241, 0.31745, 0.06863],
3559
+ [0.31745, 0.06863, 0.35884, 0.13742, 0.40022, 0.20621, 0.44161, 0.275],
3560
+ [0.44161, 0.275, 0.44555, 0.28157, 0.44752, 0.28485, 0.4494, 0.28572],
3561
+ [0.4494, 0.28572, 0.45212, 0.287, 0.45536, 0.28628, 0.45734, 0.28403],
3562
+ [0.45734, 0.28403, 0.4587, 0.28244, 0.45917, 0.27866, 0.46012, 0.27107],
3563
+ [0.46012, 0.27107, 0.4701, 0.1913, 0.48008, 0.11153, 0.49006, 0.03176]
3564
+ ]);
3565
+ var bunShape = createShape([
3566
+ [0.01546, 0.25425, 0.01545, 0.18682, 0.04224, 0.12214, 0.08992, 0.07446],
3567
+ [0.08992, 0.07446, 0.1376, 0.02678, 0.20228, -1e-5, 0.26971, 0],
3568
+ [0.26971, 0, 0.42313, 0, 0.57654, 0, 0.72996, 0],
3569
+ [0.72996, 0, 0.85665, -17e-5, 0.96413, 0.09297, 0.98198, 0.2184],
3570
+ [0.98198, 0.2184, 0.99983, 0.34383, 0.92261, 0.46325, 0.8009, 0.49844],
3571
+ [0.8009, 0.49844, 0.8002, 0.49863, 0.79972, 0.49927, 0.79974, 0.5],
3572
+ [0.79974, 0.5, 0.79974, 0.50072, 0.80021, 0.50134, 0.8009, 0.50156],
3573
+ [0.8009, 0.50156, 0.92232, 0.537, 0.99924, 0.65629, 0.98142, 0.78152],
3574
+ [0.98142, 0.78152, 0.96359, 0.90675, 0.85645, 0.99984, 0.72996, 1],
3575
+ [0.72996, 1, 0.57654, 1, 0.42313, 1, 0.26971, 1],
3576
+ [0.26971, 1, 0.20228, 1.00001, 0.1376, 0.97322, 0.08992, 0.92554],
3577
+ [0.08992, 0.92554, 0.04224, 0.87786, 0.01545, 0.81318, 0.01546, 0.74575],
3578
+ [0.01546, 0.74575, 0.01548, 0.63344, 0.08915, 0.53444, 0.19671, 0.50216],
3579
+ [0.19671, 0.50216, 0.19766, 0.50187, 0.19832, 0.501, 0.19832, 0.5],
3580
+ [0.19832, 0.5, 0.19832, 0.49901, 0.19766, 0.49813, 0.19671, 0.49784],
3581
+ [0.19671, 0.49784, 0.08915, 0.46556, 0.01548, 0.36656, 0.01546, 0.25425]
3582
+ ]);
3583
+ var burstShape = createShape([
3584
+ [0.49184, 797e-5, 0.49416, 384e-5, 0.49528, 181e-5, 0.49669, 94e-5],
3585
+ [0.49669, 94e-5, 0.49872, -31e-5, 0.50128, -31e-5, 0.50331, 94e-5],
3586
+ [0.50331, 94e-5, 0.50472, 181e-5, 0.50584, 384e-5, 0.50816, 797e-5],
3587
+ [0.50816, 797e-5, 0.53447, 0.055, 0.56078, 0.10203, 0.58709, 0.14906],
3588
+ [0.58709, 0.14906, 0.5885, 0.15159, 0.58922, 0.15287, 0.59019, 0.15362],
3589
+ [0.59019, 0.15362, 0.59156, 0.15475, 0.59334, 0.15522, 0.59509, 0.15494],
3590
+ [0.59509, 0.15494, 0.59631, 0.15475, 0.59756, 0.15403, 0.60003, 0.15253],
3591
+ [0.60003, 0.15253, 0.64634, 0.12496, 0.69266, 0.09739, 0.73897, 0.06981],
3592
+ [0.73897, 0.06981, 0.743, 0.06741, 0.74503, 0.06619, 0.74666, 0.06616],
3593
+ [0.74666, 0.06616, 0.74906, 0.06606, 0.75125, 0.06734, 0.75241, 0.06944],
3594
+ [0.75241, 0.06944, 0.75319, 0.07091, 0.75316, 0.07325, 0.75309, 0.07797],
3595
+ [0.75309, 0.07797, 0.75236, 0.13185, 0.75164, 0.18574, 0.75091, 0.23962],
3596
+ [0.75091, 0.23962, 0.75084, 0.24253, 0.75084, 0.24397, 0.75128, 0.24512],
3597
+ [0.75128, 0.24512, 0.75191, 0.24678, 0.75322, 0.24809, 0.75488, 0.24872],
3598
+ [0.75488, 0.24872, 0.75603, 0.24916, 0.75747, 0.24916, 0.76038, 0.24909],
3599
+ [0.76038, 0.24909, 0.81426, 0.24836, 0.86815, 0.24764, 0.92203, 0.24691],
3600
+ [0.92203, 0.24691, 0.92675, 0.24684, 0.92909, 0.24681, 0.93056, 0.24759],
3601
+ [0.93056, 0.24759, 0.93266, 0.24875, 0.93394, 0.25094, 0.93384, 0.25334],
3602
+ [0.93384, 0.25334, 0.93381, 0.25497, 0.93259, 0.257, 0.93019, 0.26103],
3603
+ [0.93019, 0.26103, 0.90261, 0.30734, 0.87504, 0.35366, 0.84747, 0.39997],
3604
+ [0.84747, 0.39997, 0.84597, 0.40244, 0.84525, 0.40369, 0.84506, 0.40491],
3605
+ [0.84506, 0.40491, 0.84478, 0.40666, 0.84525, 0.40844, 0.84638, 0.40981],
3606
+ [0.84638, 0.40981, 0.84713, 0.41078, 0.84841, 0.4115, 0.85094, 0.41291],
3607
+ [0.85094, 0.41291, 0.89797, 0.43922, 0.945, 0.46553, 0.99203, 0.49184],
3608
+ [0.99203, 0.49184, 0.99616, 0.49416, 0.99819, 0.49528, 0.99906, 0.49669],
3609
+ [0.99906, 0.49669, 1.00031, 0.49872, 1.00031, 0.50128, 0.99906, 0.50331],
3610
+ [0.99906, 0.50331, 0.99819, 0.50472, 0.99616, 0.50584, 0.99203, 0.50816],
3611
+ [0.99203, 0.50816, 0.945, 0.53447, 0.89797, 0.56078, 0.85094, 0.58709],
3612
+ [0.85094, 0.58709, 0.84841, 0.5885, 0.84713, 0.58922, 0.84638, 0.59019],
3613
+ [0.84638, 0.59019, 0.84525, 0.59156, 0.84478, 0.59334, 0.84506, 0.59509],
3614
+ [0.84506, 0.59509, 0.84525, 0.59631, 0.84597, 0.59756, 0.84747, 0.60003],
3615
+ [0.84747, 0.60003, 0.87504, 0.64634, 0.90261, 0.69266, 0.93019, 0.73897],
3616
+ [0.93019, 0.73897, 0.93259, 0.743, 0.93381, 0.74503, 0.93384, 0.74666],
3617
+ [0.93384, 0.74666, 0.93394, 0.74906, 0.93266, 0.75125, 0.93056, 0.75241],
3618
+ [0.93056, 0.75241, 0.92909, 0.75319, 0.92675, 0.75316, 0.92203, 0.75309],
3619
+ [0.92203, 0.75309, 0.86815, 0.75236, 0.81426, 0.75164, 0.76038, 0.75091],
3620
+ [0.76038, 0.75091, 0.75747, 0.75084, 0.75603, 0.75084, 0.75488, 0.75128],
3621
+ [0.75488, 0.75128, 0.75322, 0.75191, 0.75191, 0.75322, 0.75128, 0.75488],
3622
+ [0.75128, 0.75488, 0.75084, 0.75603, 0.75084, 0.75747, 0.75091, 0.76038],
3623
+ [0.75091, 0.76038, 0.75164, 0.81426, 0.75236, 0.86815, 0.75309, 0.92203],
3624
+ [0.75309, 0.92203, 0.75316, 0.92675, 0.75319, 0.92909, 0.75241, 0.93056],
3625
+ [0.75241, 0.93056, 0.75125, 0.93266, 0.74906, 0.93394, 0.74666, 0.93384],
3626
+ [0.74666, 0.93384, 0.74503, 0.93381, 0.743, 0.93259, 0.73897, 0.93019],
3627
+ [0.73897, 0.93019, 0.69266, 0.90261, 0.64634, 0.87504, 0.60003, 0.84747],
3628
+ [0.60003, 0.84747, 0.59756, 0.84597, 0.59631, 0.84525, 0.59509, 0.84506],
3629
+ [0.59509, 0.84506, 0.59334, 0.84478, 0.59156, 0.84525, 0.59019, 0.84638],
3630
+ [0.59019, 0.84638, 0.58922, 0.84713, 0.5885, 0.84841, 0.58709, 0.85094],
3631
+ [0.58709, 0.85094, 0.56078, 0.89797, 0.53447, 0.945, 0.50816, 0.99203],
3632
+ [0.50816, 0.99203, 0.50584, 0.99616, 0.50472, 0.99819, 0.50331, 0.99906],
3633
+ [0.50331, 0.99906, 0.50128, 1.00031, 0.49872, 1.00031, 0.49669, 0.99906],
3634
+ [0.49669, 0.99906, 0.49528, 0.99819, 0.49416, 0.99616, 0.49184, 0.99203],
3635
+ [0.49184, 0.99203, 0.46553, 0.945, 0.43922, 0.89797, 0.41291, 0.85094],
3636
+ [0.41291, 0.85094, 0.4115, 0.84841, 0.41078, 0.84713, 0.40981, 0.84638],
3637
+ [0.40981, 0.84638, 0.40844, 0.84525, 0.40666, 0.84478, 0.40491, 0.84506],
3638
+ [0.40491, 0.84506, 0.40369, 0.84525, 0.40244, 0.84597, 0.39997, 0.84747],
3639
+ [0.39997, 0.84747, 0.35366, 0.87504, 0.30734, 0.90261, 0.26103, 0.93019],
3640
+ [0.26103, 0.93019, 0.257, 0.93259, 0.25497, 0.93381, 0.25334, 0.93384],
3641
+ [0.25334, 0.93384, 0.25094, 0.93394, 0.24875, 0.93266, 0.24759, 0.93056],
3642
+ [0.24759, 0.93056, 0.24681, 0.92909, 0.24684, 0.92675, 0.24691, 0.92203],
3643
+ [0.24691, 0.92203, 0.24764, 0.86815, 0.24836, 0.81426, 0.24909, 0.76038],
3644
+ [0.24909, 0.76038, 0.24916, 0.75747, 0.24916, 0.75603, 0.24872, 0.75488],
3645
+ [0.24872, 0.75488, 0.24809, 0.75322, 0.24678, 0.75191, 0.24513, 0.75128],
3646
+ [0.24513, 0.75128, 0.24397, 0.75084, 0.24253, 0.75084, 0.23963, 0.75091],
3647
+ [0.23963, 0.75091, 0.18574, 0.75164, 0.13185, 0.75236, 0.07797, 0.75309],
3648
+ [0.07797, 0.75309, 0.07325, 0.75316, 0.07091, 0.75319, 0.06944, 0.75241],
3649
+ [0.06944, 0.75241, 0.06734, 0.75127, 0.06607, 0.74904, 0.06616, 0.74666],
3650
+ [0.06616, 0.74666, 0.06619, 0.74503, 0.06741, 0.743, 0.06981, 0.73897],
3651
+ [0.06981, 0.73897, 0.09739, 0.69266, 0.12496, 0.64634, 0.15253, 0.60003],
3652
+ [0.15253, 0.60003, 0.15403, 0.59756, 0.15475, 0.59631, 0.15494, 0.59509],
3653
+ [0.15494, 0.59509, 0.15522, 0.59334, 0.15475, 0.59156, 0.15363, 0.59019],
3654
+ [0.15363, 0.59019, 0.15288, 0.58922, 0.15159, 0.5885, 0.14906, 0.58709],
3655
+ [0.14906, 0.58709, 0.10203, 0.56078, 0.055, 0.53447, 797e-5, 0.50816],
3656
+ [797e-5, 0.50816, 384e-5, 0.50584, 181e-5, 0.50472, 94e-5, 0.50331],
3657
+ [94e-5, 0.50331, -31e-5, 0.50128, -31e-5, 0.49872, 94e-5, 0.49669],
3658
+ [94e-5, 0.49669, 181e-5, 0.49528, 384e-5, 0.49416, 797e-5, 0.49184],
3659
+ [797e-5, 0.49184, 0.055, 0.46553, 0.10203, 0.43922, 0.14906, 0.41291],
3660
+ [0.14906, 0.41291, 0.15159, 0.4115, 0.15287, 0.41078, 0.15362, 0.40981],
3661
+ [0.15362, 0.40981, 0.15475, 0.40844, 0.15522, 0.40666, 0.15494, 0.40491],
3662
+ [0.15494, 0.40491, 0.15475, 0.40369, 0.15403, 0.40244, 0.15253, 0.39997],
3663
+ [0.15253, 0.39997, 0.12496, 0.35366, 0.09739, 0.30734, 0.06981, 0.26103],
3664
+ [0.06981, 0.26103, 0.06741, 0.257, 0.06619, 0.25497, 0.06616, 0.25334],
3665
+ [0.06616, 0.25334, 0.06606, 0.25094, 0.06734, 0.24875, 0.06944, 0.24759],
3666
+ [0.06944, 0.24759, 0.07091, 0.24681, 0.07325, 0.24684, 0.07797, 0.24691],
3667
+ [0.07797, 0.24691, 0.13185, 0.24764, 0.18574, 0.24836, 0.23963, 0.24909],
3668
+ [0.23963, 0.24909, 0.24253, 0.24916, 0.24397, 0.24916, 0.24513, 0.24872],
3669
+ [0.24513, 0.24872, 0.24678, 0.24809, 0.24809, 0.24678, 0.24872, 0.24512],
3670
+ [0.24872, 0.24512, 0.24916, 0.24397, 0.24916, 0.24253, 0.24909, 0.23962],
3671
+ [0.24909, 0.23962, 0.24836, 0.18574, 0.24764, 0.13185, 0.24691, 0.07797],
3672
+ [0.24691, 0.07797, 0.24684, 0.07325, 0.24681, 0.07091, 0.24759, 0.06944],
3673
+ [0.24759, 0.06944, 0.24875, 0.06734, 0.25094, 0.06606, 0.25334, 0.06616],
3674
+ [0.25334, 0.06616, 0.25497, 0.06619, 0.257, 0.06741, 0.26103, 0.06981],
3675
+ [0.26103, 0.06981, 0.30734, 0.09739, 0.35366, 0.12496, 0.39997, 0.15253],
3676
+ [0.39997, 0.15253, 0.40244, 0.15403, 0.40369, 0.15475, 0.40491, 0.15494],
3677
+ [0.40491, 0.15494, 0.40666, 0.15522, 0.40844, 0.15475, 0.40981, 0.15362],
3678
+ [0.40981, 0.15362, 0.41078, 0.15287, 0.4115, 0.15159, 0.41291, 0.14906],
3679
+ [0.41291, 0.14906, 0.43922, 0.10203, 0.46553, 0.055, 0.49184, 797e-5]
3680
+ ]);
3681
+ var circleShape = createShape([
3682
+ [1, 0.5, 1, 0.77614, 0.77614, 1, 0.5, 1],
3683
+ [0.5, 1, 0.22386, 1, 0, 0.77614, 0, 0.5],
3684
+ [0, 0.5, 0, 0.22386, 0.22386, 0, 0.5, 0],
3685
+ [0.5, 0, 0.77614, 0, 1, 0.22386, 1, 0.5]
3686
+ ]);
3687
+ var clamshellShape = createShape([
3688
+ [0.95752, 0.36588, 0.97848, 0.4081, 0.98896, 0.42921, 0.99426, 0.45126],
3689
+ [0.99426, 0.45126, 1.00191, 0.4833, 1.00191, 0.5167, 0.99426, 0.54874],
3690
+ [0.99426, 0.54874, 0.98896, 0.57079, 0.97848, 0.5919, 0.95752, 0.63412],
3691
+ [0.95752, 0.63412, 0.93623, 0.677, 0.91494, 0.71987, 0.89365, 0.76275],
3692
+ [0.89365, 0.76275, 0.87268, 0.80497, 0.8622, 0.82608, 0.84842, 0.84244],
3693
+ [0.84842, 0.84244, 0.8285, 0.86609, 0.80339, 0.88295, 0.77581, 0.89118],
3694
+ [0.77581, 0.89118, 0.75673, 0.89688, 0.73577, 0.89688, 0.69384, 0.89688],
3695
+ [0.69384, 0.89688, 0.56461, 0.89688, 0.43539, 0.89688, 0.30616, 0.89688],
3696
+ [0.30616, 0.89688, 0.26423, 0.89688, 0.24327, 0.89688, 0.22419, 0.89118],
3697
+ [0.22419, 0.89118, 0.19661, 0.88295, 0.1715, 0.86609, 0.15158, 0.84244],
3698
+ [0.15158, 0.84244, 0.1378, 0.82608, 0.12732, 0.80497, 0.10635, 0.76275],
3699
+ [0.10635, 0.76275, 0.08506, 0.71987, 0.06377, 0.677, 0.04248, 0.63412],
3700
+ [0.04248, 0.63412, 0.02152, 0.5919, 0.01104, 0.57079, 574e-5, 0.54874],
3701
+ [574e-5, 0.54874, -191e-5, 0.5167, -191e-5, 0.4833, 574e-5, 0.45126],
3702
+ [574e-5, 0.45126, 0.01104, 0.42921, 0.02152, 0.4081, 0.04248, 0.36588],
3703
+ [0.04248, 0.36588, 0.06377, 0.323, 0.08506, 0.28013, 0.10635, 0.23725],
3704
+ [0.10635, 0.23725, 0.12732, 0.19503, 0.1378, 0.17392, 0.15158, 0.15756],
3705
+ [0.15158, 0.15756, 0.1715, 0.13391, 0.19661, 0.11705, 0.22419, 0.10882],
3706
+ [0.22419, 0.10882, 0.24327, 0.10312, 0.26423, 0.10312, 0.30616, 0.10312],
3707
+ [0.30616, 0.10312, 0.43539, 0.10312, 0.56461, 0.10312, 0.69384, 0.10312],
3708
+ [0.69384, 0.10312, 0.73577, 0.10312, 0.75673, 0.10312, 0.77581, 0.10882],
3709
+ [0.77581, 0.10882, 0.80339, 0.11705, 0.8285, 0.13391, 0.84842, 0.15756],
3710
+ [0.84842, 0.15756, 0.8622, 0.17392, 0.87268, 0.19503, 0.89365, 0.23725],
3711
+ [0.89365, 0.23725, 0.91494, 0.28013, 0.93623, 0.323, 0.95752, 0.36588]
3712
+ ]);
3713
+ var diamondShape = createShape([
3714
+ [0.67951, 0.864, 0.62689, 0.93286, 0.60059, 0.96728, 0.57021, 0.98296],
3715
+ [0.57021, 0.98296, 0.52616, 1.00568, 0.47384, 1.00568, 0.42979, 0.98296],
3716
+ [0.42979, 0.98296, 0.39941, 0.96728, 0.37311, 0.93286, 0.32049, 0.864],
3717
+ [0.32049, 0.864, 0.26225, 0.78778, 0.20401, 0.71156, 0.14577, 0.63534],
3718
+ [0.14577, 0.63534, 0.11377, 0.59346, 0.09777, 0.57252, 0.08984, 0.5501],
3719
+ [0.08984, 0.5501, 0.07838, 0.51768, 0.07838, 0.48232, 0.08984, 0.4499],
3720
+ [0.08984, 0.4499, 0.09777, 0.42748, 0.11377, 0.40654, 0.14577, 0.36466],
3721
+ [0.14577, 0.36466, 0.20401, 0.28844, 0.26225, 0.21222, 0.32049, 0.136],
3722
+ [0.32049, 0.136, 0.37311, 0.06714, 0.39941, 0.03271, 0.42979, 0.01704],
3723
+ [0.42979, 0.01704, 0.47384, -568e-5, 0.52616, -568e-5, 0.57021, 0.01704],
3724
+ [0.57021, 0.01704, 0.60059, 0.03272, 0.62689, 0.06714, 0.67951, 0.136],
3725
+ [0.67951, 0.136, 0.73775, 0.21222, 0.79599, 0.28844, 0.85423, 0.36466],
3726
+ [0.85423, 0.36466, 0.88623, 0.40654, 0.90223, 0.42748, 0.91016, 0.4499],
3727
+ [0.91016, 0.4499, 0.92162, 0.48232, 0.92162, 0.51768, 0.91016, 0.5501],
3728
+ [0.91016, 0.5501, 0.90223, 0.57252, 0.88623, 0.59346, 0.85423, 0.63534],
3729
+ [0.85423, 0.63534, 0.79599, 0.71156, 0.73775, 0.78778, 0.67951, 0.864]
3730
+ ]);
3731
+ var fanShape = createShape([
3732
+ [0, 0.15789, 0, 0.15232, 0, 0.14954, 7e-5, 0.14718],
3733
+ [7e-5, 0.14718, 256e-5, 0.06699, 0.06699, 256e-5, 0.14718, 8e-5],
3734
+ [0.14718, 8e-5, 0.14954, 0, 0.15232, 0, 0.1579, 0],
3735
+ [0.1579, 0, 0.18761, 0, 0.20246, 0, 0.21503, 39e-5],
3736
+ [0.21503, 39e-5, 0.64271, 0.01366, 0.98632, 0.35728, 0.99961, 0.78497],
3737
+ [0.99961, 0.78497, 1, 0.79753, 1, 0.81239, 1, 0.8421],
3738
+ [1, 0.8421, 1, 0.84767, 1, 0.85046, 0.99993, 0.85282],
3739
+ [0.99993, 0.85282, 0.99743, 0.93301, 0.933, 0.99744, 0.85282, 0.99993],
3740
+ [0.85282, 0.99993, 0.85046, 1, 0.84768, 1, 0.84211, 1],
3741
+ [0.84211, 1, 0.63634, 1, 0.43057, 1, 0.2248, 1],
3742
+ [0.2248, 1, 0.15688, 1, 0.12292, 1, 0.09598, 0.98933],
3743
+ [0.09598, 0.98933, 0.05698, 0.97389, 0.02611, 0.94301, 0.01067, 0.90402],
3744
+ [0.01067, 0.90402, 0, 0.87708, 0, 0.84312, 0, 0.7752],
3745
+ [0, 0.7752, 0, 0.56943, 0, 0.36366, 0, 0.15789]
3746
+ ]);
3747
+ var flowerShape = createShape([
3748
+ [0.85353, 0.14645, 0.81641, 0.10934, 0.73184, 0.12769, 0.62984, 0.1865],
3749
+ [0.62984, 0.1865, 0.59928, 0.07277, 0.55247, 0, 0.5, 0],
3750
+ [0.5, 0, 0.4475, 0, 0.40069, 0.07276, 0.37016, 0.18649],
3751
+ [0.37016, 0.18649, 0.26813, 0.12768, 0.18359, 0.10934, 0.14647, 0.14644],
3752
+ [0.14647, 0.14644, 0.10938, 0.18355, 0.12772, 0.26811, 0.18653, 0.37014],
3753
+ [0.18653, 0.37014, 0.07278, 0.40069, 0, 0.44751, 0, 0.5],
3754
+ [0, 0.5, 0, 0.55248, 0.07275, 0.59929, 0.1865, 0.62984],
3755
+ [0.1865, 0.62984, 0.12766, 0.73188, 0.10931, 0.81644, 0.14641, 0.85355],
3756
+ [0.14641, 0.85355, 0.18353, 0.89067, 0.26809, 0.87231, 0.37012, 0.81347],
3757
+ [0.37012, 0.81347, 0.40069, 0.92722, 0.4475, 1, 0.5, 1],
3758
+ [0.5, 1, 0.55247, 1, 0.59928, 0.92722, 0.62984, 0.81346],
3759
+ [0.62984, 0.81346, 0.73191, 0.8723, 0.81647, 0.89066, 0.85359, 0.85355],
3760
+ [0.85359, 0.85355, 0.89069, 0.81644, 0.87234, 0.73188, 0.8135, 0.62984],
3761
+ [0.8135, 0.62984, 0.92725, 0.59929, 1, 0.55248, 1, 0.5],
3762
+ [1, 0.5, 1, 0.44751, 0.92722, 0.40069, 0.81344, 0.37014],
3763
+ [0.81344, 0.37014, 0.87228, 0.26811, 0.89063, 0.18356, 0.85353, 0.14645]
3764
+ ]);
3765
+ var gemShape = createShape([
3766
+ [0.31244, 0.08536, 0.37064, 0.04306, 0.39978, 0.02191, 0.4308, 0.0114],
3767
+ [0.4308, 0.0114, 0.47568, -38e-4, 0.52432, -38e-4, 0.5692, 0.0114],
3768
+ [0.5692, 0.0114, 0.60022, 0.02191, 0.62936, 0.04306, 0.68756, 0.08536],
3769
+ [0.68756, 0.08536, 0.73121, 0.11706, 0.77485, 0.14876, 0.81849, 0.18046],
3770
+ [0.81849, 0.18046, 0.85308, 0.20558, 0.87038, 0.21814, 0.88446, 0.23321],
3771
+ [0.88446, 0.23321, 0.90483, 0.25499, 0.92046, 0.28077, 0.93035, 0.30891],
3772
+ [0.93035, 0.30891, 0.93721, 0.32838, 0.94032, 0.34951, 0.9466, 0.39178],
3773
+ [0.9466, 0.39178, 0.95468, 0.44627, 0.96276, 0.50076, 0.97083, 0.55524],
3774
+ [0.97083, 0.55524, 0.98183, 0.6294, 0.98734, 0.66648, 0.9818, 0.69989],
3775
+ [0.9818, 0.69989, 0.97375, 0.74823, 0.9495, 0.79239, 0.91301, 0.8251],
3776
+ [0.91301, 0.8251, 0.88779, 0.84771, 0.85353, 0.86296, 0.78503, 0.89347],
3777
+ [0.78503, 0.89347, 0.73331, 0.91651, 0.68159, 0.93954, 0.62987, 0.96258],
3778
+ [0.62987, 0.96258, 0.58853, 0.98099, 0.56785, 0.99019, 0.54663, 0.9949],
3779
+ [0.54663, 0.9949, 0.51592, 1.0017, 0.48408, 1.0017, 0.45337, 0.9949],
3780
+ [0.45337, 0.9949, 0.43215, 0.99019, 0.41147, 0.98099, 0.37013, 0.96258],
3781
+ [0.37013, 0.96258, 0.31841, 0.93954, 0.26669, 0.91651, 0.21497, 0.89347],
3782
+ [0.21497, 0.89347, 0.14647, 0.86296, 0.11221, 0.84771, 0.08699, 0.8251],
3783
+ [0.08699, 0.8251, 0.0505, 0.79239, 0.02625, 0.74823, 0.0182, 0.69989],
3784
+ [0.0182, 0.69989, 0.01266, 0.66648, 0.01817, 0.6294, 0.02917, 0.55524],
3785
+ [0.02917, 0.55524, 0.03724, 0.50076, 0.04532, 0.44627, 0.0534, 0.39178],
3786
+ [0.0534, 0.39178, 0.05968, 0.34951, 0.06279, 0.32838, 0.06965, 0.30891],
3787
+ [0.06965, 0.30891, 0.07954, 0.28077, 0.09517, 0.25499, 0.11554, 0.23321],
3788
+ [0.11554, 0.23321, 0.12962, 0.21814, 0.14692, 0.20558, 0.18151, 0.18046],
3789
+ [0.18151, 0.18046, 0.22515, 0.14876, 0.26879, 0.11706, 0.31244, 0.08536]
3790
+ ]);
3791
+ var ghostishShape = createShape([
3792
+ [0, 0.47619, 0, 0.2132, 0.22386, 0, 0.5, 0],
3793
+ [0.5, 0, 0.77614, 0, 1, 0.2132, 1, 0.47619],
3794
+ [1, 0.47619, 1, 0.5873, 1, 0.69841, 1, 0.80952],
3795
+ [1, 0.80952, 1, 0.91472, 0.91046, 1, 0.8, 1],
3796
+ [0.8, 1, 0.76726, 1, 0.73636, 0.99251, 0.70908, 0.97923],
3797
+ [0.70908, 0.97923, 0.69518, 0.97246, 0.68131, 0.96504, 0.66738, 0.95759],
3798
+ [0.66738, 0.95759, 0.61838, 0.93137, 0.56864, 0.90476, 0.51423, 0.90476],
3799
+ [0.51423, 0.90476, 0.50474, 0.90476, 0.49526, 0.90476, 0.48577, 0.90476],
3800
+ [0.48577, 0.90476, 0.43136, 0.90476, 0.38163, 0.93137, 0.33262, 0.95759],
3801
+ [0.33262, 0.95759, 0.31869, 0.96504, 0.30482, 0.97246, 0.29092, 0.97923],
3802
+ [0.29092, 0.97923, 0.26364, 0.99251, 0.23274, 1, 0.2, 1],
3803
+ [0.2, 1, 0.08954, 1, 0, 0.91472, 0, 0.80952],
3804
+ [0, 0.80952, 0, 0.69841, 0, 0.5873, 0, 0.47619]
3805
+ ]);
3806
+ var heartShape = createShape([
3807
+ [0.78469, 0.05353, 0.717, 0.05353, 0.6566, 0.08531, 0.61713, 0.135],
3808
+ [0.61713, 0.135, 0.57809, 0.17803, 0.53904, 0.22106, 0.5, 0.26409],
3809
+ [0.5, 0.26409, 0.5, 0.26396, 0.5, 0.26382, 0.5, 0.26369],
3810
+ [0.5, 0.26369, 0.46096, 0.22065, 0.42191, 0.1776, 0.38287, 0.13456],
3811
+ [0.38287, 0.13456, 0.3434, 0.08491, 0.283, 0.05312, 0.21531, 0.05312],
3812
+ [0.21531, 0.05312, 0.0964, 0.05312, 0, 0.15116, 0, 0.27206],
3813
+ [0, 0.27206, 0, 0.37831, 0.08867, 0.45772, 0.15287, 0.534],
3814
+ [0.15287, 0.534, 0.21684, 0.61003, 0.2808, 0.686, 0.34476, 0.762],
3815
+ [0.34476, 0.762, 0.39262, 0.81887, 0.44049, 0.87575, 0.48835, 0.93263],
3816
+ [0.48835, 0.93263, 0.49224, 0.93722, 0.49611, 0.94184, 0.5, 0.94647],
3817
+ [0.5, 0.94647, 0.5, 0.9466, 0.5, 0.94674, 0.5, 0.94688],
3818
+ [0.5, 0.94688, 0.50389, 0.94225, 0.50776, 0.93766, 0.51165, 0.93303],
3819
+ [0.51165, 0.93303, 0.55951, 0.87616, 0.60737, 0.81931, 0.65524, 0.76244],
3820
+ [0.65524, 0.76244, 0.7192, 0.68644, 0.78317, 0.61044, 0.84713, 0.53444],
3821
+ [0.84713, 0.53444, 0.91133, 0.45816, 1, 0.37875, 1, 0.27247],
3822
+ [1, 0.27247, 1, 0.15156, 0.9036, 0.05353, 0.78469, 0.05353]
3823
+ ]);
3824
+ var clover4LeafShape = createShape([
3825
+ [0.07095, 0.5, 0.02669, 0.44709, 0, 0.37882, 0, 0.30426],
3826
+ [0, 0.30426, 0, 0.13622, 0.13551, 0, 0.3027, 0],
3827
+ [0.3027, 0, 0.37834, 0, 0.44753, 0.02791, 0.50057, 0.07402],
3828
+ [0.50057, 0.07402, 0.55351, 0.02791, 0.62253, 0, 0.69801, 0],
3829
+ [0.69801, 0, 0.8648, 0, 1, 0.13622, 1, 0.30426],
3830
+ [1, 0.30426, 1, 0.37882, 0.97338, 0.44709, 0.92922, 0.5],
3831
+ [0.92922, 0.5, 0.97338, 0.55291, 1, 0.62118, 1, 0.69574],
3832
+ [1, 0.69574, 1, 0.86378, 0.8648, 1, 0.69801, 1],
3833
+ [0.69801, 1, 0.62253, 1, 0.55351, 0.97209, 0.50057, 0.92598],
3834
+ [0.50057, 0.92598, 0.44753, 0.97209, 0.37834, 1, 0.3027, 1],
3835
+ [0.3027, 1, 0.13551, 1, 0, 0.86378, 0, 0.69574],
3836
+ [0, 0.69574, 0, 0.62118, 0.02669, 0.55291, 0.07095, 0.5]
3837
+ ]);
3838
+ var clover8LeafShape = createShape([
3839
+ [0.96431, 0.5, 1.0451, 0.6505, 0.98406, 0.78678, 0.82834, 0.82831],
3840
+ [0.82834, 0.82831, 0.78678, 0.98406, 0.6505, 1.04506, 0.5, 0.96431],
3841
+ [0.5, 0.96431, 0.34947, 1.0451, 0.21319, 0.98406, 0.17166, 0.82834],
3842
+ [0.17166, 0.82834, 0.01594, 0.78678, -0.0451, 0.6505, 0.03569, 0.5],
3843
+ [0.03569, 0.5, -0.0451, 0.34947, 0.01594, 0.21319, 0.17166, 0.17166],
3844
+ [0.17166, 0.17166, 0.21319, 0.01594, 0.34947, -0.0451, 0.5, 0.03569],
3845
+ [0.5, 0.03569, 0.6505, -0.0451, 0.78678, 0.01594, 0.82831, 0.17166],
3846
+ [0.82831, 0.17166, 0.98406, 0.21319, 1.04506, 0.34947, 0.96431, 0.5]
3847
+ ]);
3848
+ var ovalShape = createShape([
3849
+ [0.77103, 0.77103, 0.53902, 1.00303, 0.22959, 1.06979, 0.07991, 0.9201],
3850
+ [0.07991, 0.9201, -0.06978, 0.7704, -304e-5, 0.46097, 0.22897, 0.22897],
3851
+ [0.22897, 0.22897, 0.46098, -303e-5, 0.77041, -0.06979, 0.92009, 0.0799],
3852
+ [0.92009, 0.0799, 1.06978, 0.2296, 1.00304, 0.53903, 0.77103, 0.77103]
3853
+ ]);
3854
+ var pentagonShape = createShape([
3855
+ [0.3426, 0.07617, 0.39138, 0.03842, 0.41575, 0.01954, 0.44181, 0.01017],
3856
+ [0.44181, 0.01017, 0.47942, -336e-5, 0.52058, -336e-5, 0.55819, 0.01017],
3857
+ [0.55819, 0.01017, 0.58425, 0.01954, 0.60862, 0.03842, 0.6574, 0.07617],
3858
+ [0.6574, 0.07617, 0.69296, 0.1037, 0.72853, 0.13123, 0.76409, 0.15876],
3859
+ [0.76409, 0.15876, 0.79963, 0.18455, 0.83517, 0.21034, 0.87071, 0.23613],
3860
+ [0.87071, 0.23613, 0.9213, 0.27285, 0.94662, 0.29123, 0.96352, 0.31429],
3861
+ [0.96352, 0.31429, 0.98796, 0.34769, 1.00083, 0.38872, 0.99996, 0.43069],
3862
+ [0.99996, 0.43069, 0.99933, 0.45972, 0.9893, 0.49006, 0.96918, 0.55072],
3863
+ [0.96918, 0.55072, 0.95522, 0.59283, 0.94126, 0.63495, 0.9273, 0.67706],
3864
+ [0.9273, 0.67706, 0.91443, 0.72021, 0.90155, 0.76335, 0.88868, 0.8065],
3865
+ [0.88868, 0.8065, 0.87052, 0.86724, 0.86146, 0.89762, 0.84562, 0.92124],
3866
+ [0.84562, 0.92124, 0.82268, 0.95543, 0.78934, 0.98055, 0.75099, 0.99259],
3867
+ [0.75099, 0.99259, 0.7245, 1.00093, 0.69393, 1.00043, 0.63281, 0.99946],
3868
+ [0.63281, 0.99946, 0.58854, 0.99876, 0.54427, 0.99806, 0.5, 0.99737],
3869
+ [0.5, 0.99737, 0.45573, 0.99806, 0.41146, 0.99876, 0.36719, 0.99946],
3870
+ [0.36719, 0.99946, 0.30607, 1.00043, 0.2755, 1.00093, 0.24901, 0.99259],
3871
+ [0.24901, 0.99259, 0.21066, 0.98055, 0.17732, 0.95543, 0.15438, 0.92124],
3872
+ [0.15438, 0.92124, 0.13854, 0.89762, 0.12948, 0.86724, 0.11132, 0.8065],
3873
+ [0.11132, 0.8065, 0.09845, 0.76335, 0.08557, 0.72021, 0.0727, 0.67706],
3874
+ [0.0727, 0.67706, 0.05874, 0.63495, 0.04478, 0.59283, 0.03082, 0.55072],
3875
+ [0.03082, 0.55072, 0.0107, 0.49006, 67e-5, 0.45972, 4e-5, 0.43069],
3876
+ [4e-5, 0.43069, -83e-5, 0.38872, 0.01204, 0.34769, 0.03648, 0.31429],
3877
+ [0.03648, 0.31429, 0.05338, 0.29123, 0.0787, 0.27285, 0.12929, 0.23613],
3878
+ [0.12929, 0.23613, 0.16483, 0.21034, 0.20037, 0.18455, 0.23591, 0.15876],
3879
+ [0.23591, 0.15876, 0.27147, 0.13123, 0.30704, 0.1037, 0.3426, 0.07617]
3880
+ ]);
3881
+ var pillShape = createShape([
3882
+ [0.2662, 0.1259, 0.43407, -0.04197, 0.70623, -0.04197, 0.8741, 0.1259],
3883
+ [0.8741, 0.1259, 1.04197, 0.29377, 1.04197, 0.56593, 0.8741, 0.7338],
3884
+ [0.8741, 0.7338, 0.82733, 0.78057, 0.78057, 0.82733, 0.7338, 0.8741],
3885
+ [0.7338, 0.8741, 0.56593, 1.04197, 0.29377, 1.04197, 0.1259, 0.8741],
3886
+ [0.1259, 0.8741, -0.04197, 0.70623, -0.04197, 0.43407, 0.1259, 0.2662],
3887
+ [0.1259, 0.2662, 0.17267, 0.21943, 0.21943, 0.17267, 0.2662, 0.1259]
3888
+ ]);
3889
+ var pixelCircleShape = createShape([
3890
+ [0.70372, 0, 0.56791, 0, 0.43209, 0, 0.29628, 0],
3891
+ [0.29628, 0, 0.29628, 0.0216, 0.29628, 0.04321, 0.29628, 0.06481],
3892
+ [0.29628, 0.06481, 0.24999, 0.06481, 0.2037, 0.06481, 0.15741, 0.06481],
3893
+ [0.15741, 0.06481, 0.15741, 0.09259, 0.15741, 0.12037, 0.15741, 0.14816],
3894
+ [0.15741, 0.14816, 0.12963, 0.14816, 0.10185, 0.14816, 0.07408, 0.14816],
3895
+ [0.07408, 0.14816, 0.07408, 0.19753, 0.07408, 0.24691, 0.07408, 0.29628],
3896
+ [0.07408, 0.29628, 0.04938, 0.29628, 0.02469, 0.29628, 0, 0.29628],
3897
+ [0, 0.29628, 0, 0.43209, 0, 0.56791, 0, 0.70372],
3898
+ [0, 0.70372, 0.02469, 0.70372, 0.04938, 0.70372, 0.07408, 0.70372],
3899
+ [0.07408, 0.70372, 0.07408, 0.75309, 0.07408, 0.80247, 0.07408, 0.85184],
3900
+ [0.07408, 0.85184, 0.10185, 0.85184, 0.12963, 0.85184, 0.15741, 0.85184],
3901
+ [0.15741, 0.85184, 0.15741, 0.87962, 0.15741, 0.90741, 0.15741, 0.93519],
3902
+ [0.15741, 0.93519, 0.2037, 0.93519, 0.24999, 0.93519, 0.29628, 0.93519],
3903
+ [0.29628, 0.93519, 0.29628, 0.95679, 0.29628, 0.9784, 0.29628, 1],
3904
+ [0.29628, 1, 0.43209, 1, 0.56791, 1, 0.70372, 1],
3905
+ [0.70372, 1, 0.70372, 0.9784, 0.70372, 0.95679, 0.70372, 0.93519],
3906
+ [0.70372, 0.93519, 0.75001, 0.93519, 0.7963, 0.93519, 0.84259, 0.93519],
3907
+ [0.84259, 0.93519, 0.84259, 0.90741, 0.84259, 0.87962, 0.84259, 0.85184],
3908
+ [0.84259, 0.85184, 0.87037, 0.85184, 0.89816, 0.85184, 0.92594, 0.85184],
3909
+ [0.92594, 0.85184, 0.92594, 0.80247, 0.92594, 0.75309, 0.92594, 0.70372],
3910
+ [0.92594, 0.70372, 0.95062, 0.70372, 0.97531, 0.70372, 1, 0.70372],
3911
+ [1, 0.70372, 1, 0.56791, 1, 0.43209, 1, 0.29628],
3912
+ [1, 0.29628, 0.97531, 0.29628, 0.95062, 0.29628, 0.92594, 0.29628],
3913
+ [0.92594, 0.29628, 0.92594, 0.24691, 0.92594, 0.19753, 0.92594, 0.14816],
3914
+ [0.92594, 0.14816, 0.89816, 0.14816, 0.87037, 0.14816, 0.84259, 0.14816],
3915
+ [0.84259, 0.14816, 0.84259, 0.12038, 0.84259, 0.09259, 0.84259, 0.06481],
3916
+ [0.84259, 0.06481, 0.7963, 0.06481, 0.75001, 0.06481, 0.70372, 0.06481],
3917
+ [0.70372, 0.06481, 0.70372, 0.04321, 0.70372, 0.0216, 0.70372, 0]
3918
+ ]);
3919
+ var pixelTriangleShape = createShape([
3920
+ [0.28637, 0, 0.22842, 0, 0.17046, 0, 0.1125, 0],
3921
+ [0.1125, 0, 0.1125, 0.33333, 0.1125, 0.66667, 0.1125, 1],
3922
+ [0.1125, 1, 0.17046, 1, 0.22842, 1, 0.28637, 1],
3923
+ [0.28637, 1, 0.28637, 0.97101, 0.28637, 0.94203, 0.28637, 0.91304],
3924
+ [0.28637, 0.91304, 0.33108, 0.91304, 0.37579, 0.91304, 0.4205, 0.91304],
3925
+ [0.4205, 0.91304, 0.4205, 0.88551, 0.4205, 0.85797, 0.4205, 0.83043],
3926
+ [0.4205, 0.83043, 0.46688, 0.83043, 0.51325, 0.83043, 0.55963, 0.83043],
3927
+ [0.55963, 0.83043, 0.55963, 0.79855, 0.55963, 0.76667, 0.55963, 0.73478],
3928
+ [0.55963, 0.73478, 0.59771, 0.73478, 0.63579, 0.73478, 0.67388, 0.73478],
3929
+ [0.67388, 0.73478, 0.67388, 0.70869, 0.67388, 0.68261, 0.67388, 0.65652],
3930
+ [0.67388, 0.65652, 0.71197, 0.65652, 0.75006, 0.65652, 0.78816, 0.65652],
3931
+ [0.78816, 0.65652, 0.78816, 0.62464, 0.78816, 0.59275, 0.78816, 0.56087],
3932
+ [0.78816, 0.56087, 0.82127, 0.56087, 0.85439, 0.56087, 0.8875, 0.56087],
3933
+ [0.8875, 0.56087, 0.8875, 0.52029, 0.8875, 0.47971, 0.8875, 0.43913],
3934
+ [0.8875, 0.43913, 0.85439, 0.43913, 0.82127, 0.43913, 0.78816, 0.43913],
3935
+ [0.78816, 0.43913, 0.78816, 0.40725, 0.78816, 0.37536, 0.78816, 0.34347],
3936
+ [0.78816, 0.34347, 0.75006, 0.34347, 0.71197, 0.34347, 0.67388, 0.34347],
3937
+ [0.67388, 0.34347, 0.67388, 0.31739, 0.67388, 0.2913, 0.67388, 0.26522],
3938
+ [0.67388, 0.26522, 0.63579, 0.26522, 0.59771, 0.26522, 0.55963, 0.26522],
3939
+ [0.55963, 0.26522, 0.55963, 0.23333, 0.55963, 0.20145, 0.55963, 0.16957],
3940
+ [0.55963, 0.16957, 0.51325, 0.16957, 0.46688, 0.16957, 0.4205, 0.16957],
3941
+ [0.4205, 0.16957, 0.4205, 0.14203, 0.4205, 0.11449, 0.4205, 0.08696],
3942
+ [0.4205, 0.08696, 0.37579, 0.08696, 0.33108, 0.08696, 0.28637, 0.08696],
3943
+ [0.28637, 0.08696, 0.28637, 0.05797, 0.28637, 0.02899, 0.28637, 0]
3944
+ ]);
3945
+ var puffyDiamondShape = createShape([
3946
+ [0.77937, 0.78048, 0.81712, 0.7427, 0.8299, 0.6894, 0.81768, 0.64111],
3947
+ [0.81768, 0.64111, 0.86599, 0.65339, 0.91937, 0.64063, 0.95718, 0.60282],
3948
+ [0.95718, 0.60282, 1.01427, 0.54574, 1.01427, 0.45319, 0.95718, 0.39611],
3949
+ [0.95718, 0.39611, 0.91959, 0.35852, 0.86662, 0.34569, 0.81856, 0.3576],
3950
+ [0.81856, 0.3576, 0.82928, 0.31027, 0.81621, 0.25865, 0.77937, 0.2218],
3951
+ [0.77937, 0.2218, 0.7415, 0.18394, 0.68803, 0.17119, 0.63969, 0.18355],
3952
+ [0.63969, 0.18355, 0.6525, 0.13492, 0.63984, 0.08095, 0.60169, 0.04282],
3953
+ [0.60169, 0.04282, 0.54462, -0.01426, 0.45206, -0.01426, 0.395, 0.04282],
3954
+ [0.395, 0.04282, 0.3571, 0.08073, 0.34435, 0.13427, 0.35678, 0.18269],
3955
+ [0.35678, 0.18269, 0.30938, 0.17184, 0.2576, 0.18487, 0.22069, 0.2218],
3956
+ [0.22069, 0.2218, 0.18385, 0.25865, 0.17079, 0.31028, 0.1815, 0.35761],
3957
+ [0.1815, 0.35761, 0.13341, 0.34568, 0.08041, 0.35851, 0.04282, 0.39611],
3958
+ [0.04282, 0.39611, -0.01427, 0.45319, -0.01427, 0.54574, 0.04282, 0.60282],
3959
+ [0.04282, 0.60282, 0.08063, 0.64064, 0.13404, 0.6534, 0.18235, 0.6411],
3960
+ [0.18235, 0.6411, 0.17013, 0.68939, 0.18291, 0.7427, 0.22069, 0.78048],
3961
+ [0.22069, 0.78048, 0.25744, 0.81725, 0.30894, 0.83033, 0.35619, 0.81973],
3962
+ [0.35619, 0.81973, 0.34478, 0.8675, 0.35772, 0.9199, 0.395, 0.95718],
3963
+ [0.395, 0.95718, 0.45206, 1.01426, 0.54462, 1.01426, 0.60169, 0.95718],
3964
+ [0.60169, 0.95718, 0.63919, 0.91968, 0.65206, 0.86688, 0.64028, 0.81888],
3965
+ [0.64028, 0.81888, 0.6885, 0.83098, 0.74165, 0.81817, 0.77937, 0.78048]
3966
+ ]);
3967
+ var puffyShape = createShape([
3968
+ [0.99994, 0.49408, 0.99912, 0.42679, 0.94916, 0.37292, 0.88825, 0.37382],
3969
+ [0.88825, 0.37382, 0.88491, 0.37382, 0.88159, 0.3741, 0.87831, 0.37449],
3970
+ [0.87831, 0.37449, 0.88087, 0.37218, 0.88337, 0.36982, 0.88575, 0.36722],
3971
+ [0.88575, 0.36722, 0.92937, 0.32028, 0.93028, 0.24307, 0.88784, 0.19483],
3972
+ [0.88784, 0.19483, 0.88534, 0.19201, 0.88287, 0.18919, 0.88031, 0.18648],
3973
+ [0.88031, 0.18648, 0.83669, 0.13954, 0.76694, 0.14055, 0.72444, 0.1888],
3974
+ [0.72444, 0.1888, 0.72209, 0.19144, 0.71997, 0.19421, 0.71787, 0.19703],
3975
+ [0.71787, 0.19703, 0.71822, 0.19342, 0.71844, 0.18975, 0.7185, 0.18603],
3976
+ [0.7185, 0.18603, 0.71934, 0.11874, 0.67066, 0.06346, 0.60981, 0.0625],
3977
+ [0.60981, 0.0625, 0.60682, 0.0625, 0.60383, 0.0625, 0.60084, 0.0625],
3978
+ [0.60084, 0.0625, 0.55575, 0.0625, 0.51706, 0.09248, 0.5, 0.13537],
3979
+ [0.5, 0.13537, 0.48294, 0.09248, 0.44422, 0.0625, 0.39916, 0.0625],
3980
+ [0.39916, 0.0625, 0.39617, 0.0625, 0.39318, 0.0625, 0.39019, 0.0625],
3981
+ [0.39019, 0.0625, 0.32934, 0.0634, 0.28066, 0.11869, 0.28147, 0.18603],
3982
+ [0.28147, 0.18603, 0.28147, 0.18975, 0.28172, 0.19342, 0.28206, 0.19703],
3983
+ [0.28206, 0.19703, 0.28, 0.19418, 0.27781, 0.19144, 0.2755, 0.1888],
3984
+ [0.2755, 0.1888, 0.23306, 0.14055, 0.16325, 0.13954, 0.11962, 0.18648],
3985
+ [0.11962, 0.18648, 0.11709, 0.18925, 0.11453, 0.19201, 0.11209, 0.19483],
3986
+ [0.11209, 0.19483, 0.06966, 0.24307, 0.07056, 0.32022, 0.11419, 0.36722],
3987
+ [0.11419, 0.36722, 0.11659, 0.36982, 0.11906, 0.37218, 0.12162, 0.37449],
3988
+ [0.12162, 0.37449, 0.11833, 0.37409, 0.11501, 0.37387, 0.11169, 0.37382],
3989
+ [0.11169, 0.37382, 0.05084, 0.37292, 87e-5, 0.42679, 0, 0.49408],
3990
+ [0, 0.49408, 0, 0.49803, 0, 0.50197, 0, 0.50592],
3991
+ [0, 0.50592, 81e-5, 0.57321, 0.05081, 0.62708, 0.11169, 0.62618],
3992
+ [0.11169, 0.62618, 0.11506, 0.62618, 0.11837, 0.6259, 0.12162, 0.62551],
3993
+ [0.12162, 0.62551, 0.11906, 0.62782, 0.11659, 0.63018, 0.11419, 0.63278],
3994
+ [0.11419, 0.63278, 0.07056, 0.67972, 0.06966, 0.75693, 0.11209, 0.80518],
3995
+ [0.11209, 0.80518, 0.11459, 0.80799, 0.11709, 0.81081, 0.11962, 0.81352],
3996
+ [0.11962, 0.81352, 0.16325, 0.86046, 0.233, 0.85945, 0.2755, 0.8112],
3997
+ [0.2755, 0.8112, 0.27784, 0.80856, 0.28, 0.80579, 0.28206, 0.80297],
3998
+ [0.28206, 0.80298, 0.28171, 0.80663, 0.28151, 0.8103, 0.28147, 0.81397],
3999
+ [0.28147, 0.81397, 0.28066, 0.88126, 0.32931, 0.9366, 0.39019, 0.9375],
4000
+ [0.39019, 0.9375, 0.39318, 0.9375, 0.39617, 0.9375, 0.39916, 0.9375],
4001
+ [0.39916, 0.9375, 0.44425, 0.9375, 0.48294, 0.90752, 0.5, 0.86463],
4002
+ [0.5, 0.86463, 0.51706, 0.90752, 0.55578, 0.9375, 0.60084, 0.9375],
4003
+ [0.60084, 0.9375, 0.60383, 0.9375, 0.60682, 0.9375, 0.60981, 0.9375],
4004
+ [0.60981, 0.9375, 0.67066, 0.9366, 0.71934, 0.88131, 0.71853, 0.81397],
4005
+ [0.71853, 0.81397, 0.71853, 0.81025, 0.71828, 0.80658, 0.71794, 0.80297],
4006
+ [0.71794, 0.80297, 0.72, 0.80579, 0.72216, 0.80856, 0.7245, 0.8112],
4007
+ [0.7245, 0.8112, 0.76694, 0.85945, 0.83675, 0.86046, 0.88037, 0.81352],
4008
+ [0.88037, 0.81352, 0.88291, 0.81075, 0.88547, 0.80799, 0.88791, 0.80518],
4009
+ [0.88791, 0.80518, 0.93034, 0.75693, 0.92944, 0.67978, 0.88581, 0.63278],
4010
+ [0.88581, 0.63278, 0.88341, 0.63018, 0.88094, 0.62782, 0.87838, 0.62551],
4011
+ [0.87838, 0.62551, 0.88167, 0.62591, 0.88499, 0.62613, 0.88831, 0.62618],
4012
+ [0.88831, 0.62618, 0.94916, 0.62708, 0.99919, 0.57327, 1, 0.50592],
4013
+ [1, 0.50592, 1, 0.50197, 1, 0.49803, 1, 0.49408],
4014
+ [1, 0.49408, 0.99998, 0.49408, 0.99996, 0.49408, 0.99994, 0.49408]
4015
+ ]);
4016
+ var semiCircleShape = createShape([
4017
+ [1, 0.70913, 1, 0.76622, 0.95372, 0.8125, 0.89663, 0.8125],
4018
+ [0.89663, 0.8125, 0.63221, 0.8125, 0.36779, 0.8125, 0.10337, 0.8125],
4019
+ [0.10337, 0.8125, 0.04628, 0.8125, 0, 0.76622, 0, 0.70913],
4020
+ [0, 0.70913, 0, 0.70192, 0, 0.69471, 0, 0.6875],
4021
+ [0, 0.6875, 0, 0.41134, 0.22386, 0.1875, 0.5, 0.1875],
4022
+ [0.5, 0.1875, 0.77614, 0.1875, 1, 0.41134, 1, 0.6875],
4023
+ [1, 0.6875, 1, 0.69471, 1, 0.70192, 1, 0.70913]
4024
+ ]);
4025
+ var cookie12SidedShape = createShape([
4026
+ [0.42719, 0.03077, 0.42887, 0.02912, 0.42972, 0.02827, 0.43044, 0.02759],
4027
+ [0.43044, 0.02759, 0.46953, -92e-4, 0.53047, -92e-4, 0.56956, 0.02759],
4028
+ [0.56956, 0.02759, 0.57028, 0.02827, 0.57113, 0.02912, 0.57281, 0.03077],
4029
+ [0.57281, 0.03077, 0.57384, 0.03174, 0.57434, 0.03224, 0.57481, 0.03271],
4030
+ [0.57481, 0.03271, 0.59982, 0.05657, 0.63526, 0.06606, 0.66885, 0.0579],
4031
+ [0.66885, 0.0579, 0.6695, 0.05774, 0.67019, 0.05756, 0.67157, 0.05721],
4032
+ [0.67157, 0.05721, 0.67385, 0.05662, 0.675, 0.05634, 0.67597, 0.05609],
4033
+ [0.67597, 0.05609, 0.72819, 0.04377, 0.781, 0.07424, 0.79644, 0.12565],
4034
+ [0.79644, 0.12565, 0.79672, 0.12662, 0.79704, 0.12774, 0.79769, 0.13003],
4035
+ [0.79769, 0.13003, 0.79807, 0.1314, 0.79825, 0.13209, 0.79844, 0.13274],
4036
+ [0.79844, 0.13274, 0.80817, 0.1659, 0.8341, 0.19183, 0.86726, 0.20156],
4037
+ [0.86726, 0.20156, 0.86791, 0.20175, 0.8686, 0.20193, 0.86997, 0.20231],
4038
+ [0.86997, 0.20231, 0.87226, 0.20296, 0.87338, 0.20328, 0.87435, 0.20356],
4039
+ [0.87435, 0.20356, 0.92576, 0.219, 0.95623, 0.27181, 0.94391, 0.32403],
4040
+ [0.94391, 0.32403, 0.94366, 0.325, 0.94338, 0.32615, 0.94279, 0.32843],
4041
+ [0.94279, 0.32843, 0.94244, 0.32981, 0.94226, 0.3305, 0.9421, 0.33115],
4042
+ [0.9421, 0.33115, 0.93394, 0.36474, 0.94343, 0.40018, 0.96729, 0.42519],
4043
+ [0.96729, 0.42519, 0.96776, 0.42566, 0.96826, 0.42616, 0.96923, 0.42719],
4044
+ [0.96923, 0.42719, 0.97088, 0.42887, 0.97173, 0.42972, 0.97241, 0.43044],
4045
+ [0.97241, 0.43044, 1.0092, 0.46953, 1.0092, 0.53047, 0.97241, 0.56956],
4046
+ [0.97241, 0.56956, 0.97173, 0.57028, 0.97088, 0.57113, 0.96923, 0.57281],
4047
+ [0.96923, 0.57281, 0.96826, 0.57384, 0.96776, 0.57434, 0.96729, 0.57481],
4048
+ [0.96729, 0.57481, 0.94343, 0.59982, 0.93394, 0.63526, 0.9421, 0.66885],
4049
+ [0.9421, 0.66885, 0.94226, 0.6695, 0.94244, 0.67019, 0.94279, 0.67157],
4050
+ [0.94279, 0.67157, 0.94338, 0.67385, 0.94366, 0.675, 0.94391, 0.67597],
4051
+ [0.94391, 0.67597, 0.95623, 0.72819, 0.92576, 0.781, 0.87435, 0.79644],
4052
+ [0.87435, 0.79644, 0.87338, 0.79672, 0.87226, 0.79704, 0.86997, 0.79769],
4053
+ [0.86997, 0.79769, 0.8686, 0.79807, 0.86791, 0.79825, 0.86726, 0.79844],
4054
+ [0.86726, 0.79844, 0.8341, 0.80817, 0.80817, 0.8341, 0.79844, 0.86726],
4055
+ [0.79844, 0.86726, 0.79825, 0.86791, 0.79807, 0.8686, 0.79769, 0.86997],
4056
+ [0.79769, 0.86997, 0.79704, 0.87226, 0.79672, 0.87338, 0.79644, 0.87435],
4057
+ [0.79644, 0.87435, 0.781, 0.92576, 0.72819, 0.95623, 0.67597, 0.94391],
4058
+ [0.67597, 0.94391, 0.675, 0.94366, 0.67385, 0.94338, 0.67157, 0.94279],
4059
+ [0.67157, 0.94279, 0.67019, 0.94244, 0.6695, 0.94226, 0.66885, 0.9421],
4060
+ [0.66885, 0.9421, 0.63526, 0.93394, 0.59982, 0.94343, 0.57481, 0.96729],
4061
+ [0.57481, 0.96729, 0.57434, 0.96776, 0.57384, 0.96826, 0.57281, 0.96923],
4062
+ [0.57281, 0.96923, 0.57113, 0.97088, 0.57028, 0.97173, 0.56956, 0.97241],
4063
+ [0.56956, 0.97241, 0.53047, 1.0092, 0.46953, 1.0092, 0.43044, 0.97241],
4064
+ [0.43044, 0.97241, 0.42972, 0.97173, 0.42887, 0.97088, 0.42719, 0.96923],
4065
+ [0.42719, 0.96923, 0.42616, 0.96826, 0.42566, 0.96776, 0.42519, 0.96729],
4066
+ [0.42519, 0.96729, 0.40018, 0.94343, 0.36474, 0.93394, 0.33115, 0.9421],
4067
+ [0.33115, 0.9421, 0.3305, 0.94226, 0.32981, 0.94244, 0.32843, 0.94279],
4068
+ [0.32843, 0.94279, 0.32615, 0.94338, 0.325, 0.94366, 0.32403, 0.94391],
4069
+ [0.32403, 0.94391, 0.27181, 0.95623, 0.219, 0.92576, 0.20356, 0.87435],
4070
+ [0.20356, 0.87435, 0.20328, 0.87338, 0.20296, 0.87226, 0.20231, 0.86997],
4071
+ [0.20231, 0.86997, 0.20193, 0.8686, 0.20175, 0.86791, 0.20156, 0.86726],
4072
+ [0.20156, 0.86726, 0.19183, 0.8341, 0.1659, 0.80817, 0.13274, 0.79844],
4073
+ [0.13274, 0.79844, 0.13209, 0.79825, 0.1314, 0.79807, 0.13003, 0.79769],
4074
+ [0.13003, 0.79769, 0.12774, 0.79704, 0.12662, 0.79672, 0.12565, 0.79644],
4075
+ [0.12565, 0.79644, 0.07424, 0.781, 0.04377, 0.72819, 0.05609, 0.67597],
4076
+ [0.05609, 0.67597, 0.05634, 0.675, 0.05662, 0.67385, 0.05721, 0.67157],
4077
+ [0.05721, 0.67157, 0.05756, 0.67019, 0.05774, 0.6695, 0.0579, 0.66885],
4078
+ [0.0579, 0.66885, 0.06606, 0.63526, 0.05657, 0.59982, 0.03271, 0.57481],
4079
+ [0.03271, 0.57481, 0.03224, 0.57434, 0.03174, 0.57384, 0.03077, 0.57281],
4080
+ [0.03077, 0.57281, 0.02912, 0.57113, 0.02827, 0.57028, 0.02759, 0.56956],
4081
+ [0.02759, 0.56956, -92e-4, 0.53047, -92e-4, 0.46953, 0.02759, 0.43044],
4082
+ [0.02759, 0.43044, 0.02827, 0.42972, 0.02912, 0.42887, 0.03077, 0.42719],
4083
+ [0.03077, 0.42719, 0.03174, 0.42616, 0.03224, 0.42566, 0.03271, 0.42519],
4084
+ [0.03271, 0.42519, 0.05657, 0.40018, 0.06606, 0.36474, 0.0579, 0.33115],
4085
+ [0.0579, 0.33115, 0.05774, 0.3305, 0.05756, 0.32981, 0.05721, 0.32843],
4086
+ [0.05721, 0.32843, 0.05662, 0.32615, 0.05634, 0.325, 0.05609, 0.32403],
4087
+ [0.05609, 0.32403, 0.04377, 0.27181, 0.07424, 0.219, 0.12565, 0.20356],
4088
+ [0.12565, 0.20356, 0.12662, 0.20328, 0.12774, 0.20296, 0.13003, 0.20231],
4089
+ [0.13003, 0.20231, 0.1314, 0.20193, 0.13209, 0.20175, 0.13274, 0.20156],
4090
+ [0.13274, 0.20156, 0.1659, 0.19183, 0.19183, 0.1659, 0.20156, 0.13274],
4091
+ [0.20156, 0.13274, 0.20175, 0.13209, 0.20193, 0.1314, 0.20231, 0.13003],
4092
+ [0.20231, 0.13003, 0.20296, 0.12774, 0.20328, 0.12662, 0.20356, 0.12565],
4093
+ [0.20356, 0.12565, 0.219, 0.07424, 0.27181, 0.04377, 0.32403, 0.05609],
4094
+ [0.32403, 0.05609, 0.325, 0.05634, 0.32615, 0.05662, 0.32843, 0.05721],
4095
+ [0.32843, 0.05721, 0.32981, 0.05756, 0.3305, 0.05774, 0.33115, 0.0579],
4096
+ [0.33115, 0.0579, 0.36474, 0.06606, 0.40018, 0.05657, 0.42519, 0.03271],
4097
+ [0.42519, 0.03271, 0.42566, 0.03224, 0.42616, 0.03174, 0.42719, 0.03077]
4098
+ ]);
4099
+ var cookie4SidedShape = createShape([
4100
+ [0.63833, 0.02217, 0.85312, -0.07111, 1.07112, 0.14689, 0.97783, 0.36168],
4101
+ [0.97783, 0.36168, 0.97269, 0.37351, 0.96755, 0.38534, 0.9624, 0.39718],
4102
+ [0.9624, 0.39718, 0.93394, 0.46277, 0.93394, 0.53723, 0.9624, 0.60282],
4103
+ [0.9624, 0.60282, 0.96755, 0.61466, 0.97269, 0.62649, 0.97783, 0.63832],
4104
+ [0.97783, 0.63832, 1.07112, 0.85311, 0.85312, 1.07111, 0.63833, 0.97783],
4105
+ [0.63833, 0.97783, 0.6265, 0.97268, 0.61466, 0.96754, 0.60283, 0.9624],
4106
+ [0.60283, 0.9624, 0.53724, 0.93393, 0.46278, 0.93393, 0.39718, 0.9624],
4107
+ [0.39718, 0.9624, 0.38535, 0.96754, 0.37352, 0.97268, 0.36168, 0.97783],
4108
+ [0.36168, 0.97783, 0.14689, 1.07111, -0.07112, 0.85311, 0.02217, 0.63832],
4109
+ [0.02217, 0.63832, 0.02731, 0.62649, 0.03245, 0.61466, 0.03759, 0.60282],
4110
+ [0.03759, 0.60282, 0.06608, 0.53723, 0.06608, 0.46277, 0.03759, 0.39718],
4111
+ [0.03759, 0.39718, 0.03245, 0.38534, 0.02731, 0.37351, 0.02217, 0.36168],
4112
+ [0.02217, 0.36168, -0.07112, 0.14689, 0.14689, -0.07111, 0.36168, 0.02217],
4113
+ [0.36168, 0.02217, 0.37352, 0.02732, 0.38535, 0.03246, 0.39718, 0.0376],
4114
+ [0.39718, 0.0376, 0.46278, 0.06607, 0.53724, 0.06607, 0.60283, 0.0376],
4115
+ [0.60283, 0.0376, 0.61466, 0.03246, 0.6265, 0.02732, 0.63833, 0.02217]
4116
+ ]);
4117
+ var cookie6SidedShape = createShape([
4118
+ [0.32337, 0.07142, 0.42176, -0.02381, 0.57824, -0.02381, 0.67663, 0.07142],
4119
+ [0.67663, 0.07142, 0.70677, 0.10055, 0.74365, 0.12178, 0.78399, 0.13319],
4120
+ [0.78399, 0.13319, 0.91589, 0.17053, 0.99413, 0.30566, 0.96061, 0.4382],
4121
+ [0.96061, 0.4382, 0.95036, 0.47876, 0.95036, 0.52124, 0.96061, 0.5618],
4122
+ [0.96061, 0.5618, 0.99413, 0.69434, 0.91589, 0.82947, 0.78399, 0.86681],
4123
+ [0.78399, 0.86681, 0.74365, 0.87822, 0.70677, 0.89945, 0.67663, 0.92858],
4124
+ [0.67663, 0.92858, 0.57824, 1.02381, 0.42176, 1.02381, 0.32337, 0.92858],
4125
+ [0.32337, 0.92858, 0.29323, 0.89945, 0.25635, 0.87822, 0.21601, 0.86681],
4126
+ [0.21601, 0.86681, 0.08411, 0.82947, 587e-5, 0.69434, 0.03939, 0.5618],
4127
+ [0.03939, 0.5618, 0.04964, 0.52124, 0.04964, 0.47876, 0.03939, 0.4382],
4128
+ [0.03939, 0.4382, 587e-5, 0.30566, 0.08411, 0.17053, 0.21601, 0.13319],
4129
+ [0.21601, 0.13319, 0.25635, 0.12178, 0.29323, 0.10055, 0.32337, 0.07142]
4130
+ ]);
4131
+ var cookie7SidedShape = createShape([
4132
+ [0.35209, 0.06806, 0.36326, 0.05824, 0.36884, 0.05334, 0.37397, 0.04937],
4133
+ [0.37397, 0.04937, 0.4482, -813e-5, 0.5518, -813e-5, 0.62603, 0.04937],
4134
+ [0.62603, 0.04937, 0.63116, 0.05334, 0.63674, 0.05824, 0.64791, 0.06806],
4135
+ [0.64791, 0.06806, 0.65164, 0.07137, 0.65351, 0.07299, 0.65539, 0.07459],
4136
+ [0.65539, 0.07459, 0.68167, 0.09662, 0.71303, 0.11176, 0.74663, 0.11862],
4137
+ [0.74663, 0.11862, 0.74903, 0.11912, 0.75147, 0.11956, 0.75637, 0.12043],
4138
+ [0.75637, 0.12043, 0.771, 0.12306, 0.77831, 0.12434, 0.78461, 0.1259],
4139
+ [0.78461, 0.1259, 0.87573, 0.14821, 0.94032, 0.2294, 0.94176, 0.3234],
4140
+ [0.94176, 0.3234, 0.94186, 0.3299, 0.94151, 0.33734, 0.9408, 0.35221],
4141
+ [0.9408, 0.35221, 0.94057, 0.35721, 0.94045, 0.35968, 0.94039, 0.36215],
4142
+ [0.94039, 0.36215, 0.93958, 0.39649, 0.94732, 0.43049, 0.96293, 0.46109],
4143
+ [0.96293, 0.46109, 0.96404, 0.46328, 0.96523, 0.46546, 0.96759, 0.46987],
4144
+ [0.96759, 0.46987, 0.97467, 0.48296, 0.97821, 0.4895, 0.98093, 0.4954],
4145
+ [0.98093, 0.4954, 1.02032, 0.58071, 0.99727, 0.68196, 0.92484, 0.74168],
4146
+ [0.92484, 0.74168, 0.91984, 0.74584, 0.91381, 0.75018, 0.90177, 0.7589],
4147
+ [0.90177, 0.7589, 0.89774, 0.76184, 0.89572, 0.76328, 0.89377, 0.76478],
4148
+ [0.89377, 0.76478, 0.86646, 0.78557, 0.84476, 0.81284, 0.83064, 0.84412],
4149
+ [0.83064, 0.84412, 0.82963, 0.84637, 0.82865, 0.84865, 0.82671, 0.85325],
4150
+ [0.82671, 0.85325, 0.82091, 0.86696, 0.818, 0.87381, 0.8151, 0.87962],
4151
+ [0.8151, 0.87962, 0.7731, 0.96368, 0.67977, 1.00875, 0.58801, 0.98925],
4152
+ [0.58801, 0.98925, 0.58166, 0.98787, 0.57451, 0.98587, 0.56019, 0.98187],
4153
+ [0.56019, 0.98187, 0.5554, 0.98056, 0.55301, 0.97987, 0.55063, 0.97928],
4154
+ [0.55063, 0.97928, 0.51741, 0.97084, 0.48259, 0.97084, 0.44937, 0.97928],
4155
+ [0.44937, 0.97928, 0.44699, 0.97987, 0.4446, 0.98056, 0.43981, 0.98187],
4156
+ [0.43981, 0.98187, 0.42549, 0.98587, 0.41834, 0.98787, 0.41199, 0.98925],
4157
+ [0.41199, 0.98925, 0.32023, 1.00875, 0.2269, 0.96368, 0.1849, 0.87962],
4158
+ [0.1849, 0.87962, 0.18199, 0.87381, 0.17909, 0.86696, 0.17329, 0.85325],
4159
+ [0.17329, 0.85325, 0.17135, 0.84865, 0.17037, 0.84637, 0.16936, 0.84412],
4160
+ [0.16936, 0.84412, 0.15523, 0.81284, 0.13353, 0.78557, 0.10623, 0.76478],
4161
+ [0.10623, 0.76478, 0.10428, 0.76328, 0.10226, 0.76184, 0.09823, 0.7589],
4162
+ [0.09823, 0.7589, 0.08619, 0.75018, 0.08017, 0.74584, 0.07516, 0.74168],
4163
+ [0.07516, 0.74168, 273e-5, 0.68196, -0.02032, 0.58071, 0.01907, 0.4954],
4164
+ [0.01907, 0.4954, 0.02179, 0.4895, 0.02533, 0.48296, 0.03241, 0.46987],
4165
+ [0.03241, 0.46987, 0.03477, 0.46546, 0.03596, 0.46328, 0.03707, 0.46109],
4166
+ [0.03707, 0.46109, 0.05268, 0.43049, 0.06042, 0.39649, 0.05961, 0.36215],
4167
+ [0.05961, 0.36215, 0.05955, 0.35968, 0.05943, 0.35721, 0.0592, 0.35221],
4168
+ [0.0592, 0.35221, 0.05849, 0.33734, 0.05813, 0.3299, 0.05824, 0.3234],
4169
+ [0.05824, 0.3234, 0.05968, 0.2294, 0.12427, 0.14821, 0.21539, 0.1259],
4170
+ [0.21539, 0.1259, 0.22169, 0.12434, 0.229, 0.12306, 0.24363, 0.12043],
4171
+ [0.24363, 0.12043, 0.24853, 0.11956, 0.25097, 0.11912, 0.25337, 0.11862],
4172
+ [0.25337, 0.11862, 0.28697, 0.11176, 0.31833, 0.09662, 0.34461, 0.07459],
4173
+ [0.34461, 0.07459, 0.34649, 0.07299, 0.34836, 0.07137, 0.35209, 0.06806]
4174
+ ]);
4175
+ var cookie9SidedShape = createShape([
4176
+ [0.39144, 0.04182, 0.39684, 0.03735, 0.39953, 0.03513, 0.402, 0.03326],
4177
+ [0.402, 0.03326, 0.45981, -0.01109, 0.54019, -0.01109, 0.598, 0.03326],
4178
+ [0.598, 0.03326, 0.60047, 0.03513, 0.60316, 0.03735, 0.60856, 0.04182],
4179
+ [0.60856, 0.04182, 0.61097, 0.04379, 0.61216, 0.04479, 0.61334, 0.04576],
4180
+ [0.61334, 0.04576, 0.64056, 0.06743, 0.67404, 0.07974, 0.70881, 0.08085],
4181
+ [0.70881, 0.08085, 0.71031, 0.08088, 0.71187, 0.08091, 0.71497, 0.08094],
4182
+ [0.71497, 0.08094, 0.72194, 0.08104, 0.72544, 0.08107, 0.7285, 0.08123],
4183
+ [0.7285, 0.08123, 0.80112, 0.08494, 0.86243, 0.13694, 0.87865, 0.20854],
4184
+ [0.87865, 0.20854, 0.87934, 0.21157, 0.88, 0.21504, 0.88131, 0.22194],
4185
+ [0.88131, 0.22194, 0.88187, 0.22504, 0.88215, 0.22657, 0.88247, 0.22807],
4186
+ [0.88247, 0.22807, 0.88956, 0.26244, 0.90737, 0.29357, 0.93325, 0.31694],
4187
+ [0.93325, 0.31694, 0.9344, 0.31797, 0.93556, 0.319, 0.93793, 0.32104],
4188
+ [0.93793, 0.32104, 0.94321, 0.32563, 0.94584, 0.32794, 0.94809, 0.33007],
4189
+ [0.94809, 0.33007, 1.00137, 0.38004, 1.01528, 0.45972, 0.98215, 0.5251],
4190
+ [0.98215, 0.5251, 0.98075, 0.52788, 0.97903, 0.53094, 0.97562, 0.53707],
4191
+ [0.97562, 0.53707, 0.97409, 0.53982, 0.97334, 0.54119, 0.97262, 0.54253],
4192
+ [0.97262, 0.54253, 0.9562, 0.57351, 0.95003, 0.60889, 0.955, 0.6436],
4193
+ [0.955, 0.6436, 0.95521, 0.64513, 0.95546, 0.64666, 0.95596, 0.64975],
4194
+ [0.95596, 0.64975, 0.95709, 0.65672, 0.95765, 0.66019, 0.95803, 0.66328],
4195
+ [0.95803, 0.66328, 0.96703, 0.73616, 0.927, 0.80622, 0.86003, 0.83478],
4196
+ [0.86003, 0.83478, 0.85718, 0.836, 0.8539, 0.83725, 0.8474, 0.83975],
4197
+ [0.8474, 0.83975, 0.8445, 0.84084, 0.84303, 0.84141, 0.84162, 0.84197],
4198
+ [0.84162, 0.84197, 0.80937, 0.855, 0.78212, 0.87812, 0.76381, 0.90794],
4199
+ [0.76381, 0.90794, 0.76303, 0.90925, 0.76225, 0.91059, 0.76065, 0.91328],
4200
+ [0.76065, 0.91328, 0.75709, 0.91934, 0.75531, 0.92237, 0.75362, 0.925],
4201
+ [0.75362, 0.925, 0.71415, 0.98665, 0.63894, 1.01434, 0.56944, 0.99272],
4202
+ [0.56944, 0.99272, 0.5665, 0.99181, 0.56319, 0.99065, 0.55662, 0.98831],
4203
+ [0.55662, 0.98831, 0.55369, 0.98728, 0.55222, 0.98675, 0.55078, 0.98628],
4204
+ [0.55078, 0.98628, 0.51782, 0.97531, 0.48218, 0.97531, 0.44922, 0.98628],
4205
+ [0.44922, 0.98628, 0.44778, 0.98675, 0.44631, 0.98728, 0.44338, 0.98831],
4206
+ [0.44338, 0.98831, 0.43681, 0.99065, 0.4335, 0.99181, 0.43056, 0.99272],
4207
+ [0.43056, 0.99272, 0.36106, 1.01434, 0.28585, 0.98665, 0.24638, 0.925],
4208
+ [0.24638, 0.925, 0.24469, 0.92237, 0.24291, 0.91934, 0.23935, 0.91328],
4209
+ [0.23935, 0.91328, 0.23775, 0.91059, 0.23697, 0.90925, 0.23619, 0.90794],
4210
+ [0.23619, 0.90794, 0.21788, 0.87812, 0.19063, 0.855, 0.15838, 0.84197],
4211
+ [0.15838, 0.84197, 0.15697, 0.84141, 0.1555, 0.84084, 0.1526, 0.83975],
4212
+ [0.1526, 0.83975, 0.1461, 0.83725, 0.14282, 0.836, 0.13997, 0.83478],
4213
+ [0.13997, 0.83478, 0.073, 0.80622, 0.03297, 0.73616, 0.04197, 0.66328],
4214
+ [0.04197, 0.66328, 0.04235, 0.66019, 0.04291, 0.65672, 0.04404, 0.64975],
4215
+ [0.04404, 0.64975, 0.04454, 0.64666, 0.04479, 0.64513, 0.045, 0.6436],
4216
+ [0.045, 0.6436, 0.04997, 0.60889, 0.0438, 0.57351, 0.02738, 0.54253],
4217
+ [0.02738, 0.54253, 0.02666, 0.54119, 0.02591, 0.53982, 0.02438, 0.53707],
4218
+ [0.02438, 0.53707, 0.02097, 0.53094, 0.01925, 0.52788, 0.01785, 0.5251],
4219
+ [0.01785, 0.5251, -0.01528, 0.45972, -137e-5, 0.38004, 0.05191, 0.33007],
4220
+ [0.05191, 0.33007, 0.05416, 0.32794, 0.05679, 0.32563, 0.06207, 0.32104],
4221
+ [0.06207, 0.32104, 0.06444, 0.319, 0.0656, 0.31797, 0.06675, 0.31694],
4222
+ [0.06675, 0.31694, 0.0927, 0.29347, 0.11049, 0.26234, 0.11753, 0.22807],
4223
+ [0.11753, 0.22807, 0.11785, 0.22657, 0.11813, 0.22504, 0.11869, 0.22194],
4224
+ [0.11869, 0.22194, 0.12, 0.21504, 0.12066, 0.21157, 0.12135, 0.20854],
4225
+ [0.12135, 0.20854, 0.13757, 0.13694, 0.19888, 0.08494, 0.2715, 0.08123],
4226
+ [0.2715, 0.08123, 0.27456, 0.08107, 0.27806, 0.08104, 0.28503, 0.08094],
4227
+ [0.28503, 0.08094, 0.28813, 0.08091, 0.28969, 0.08088, 0.29119, 0.08085],
4228
+ [0.29119, 0.08085, 0.32596, 0.07974, 0.35944, 0.06743, 0.38666, 0.04576],
4229
+ [0.38666, 0.04576, 0.38784, 0.04479, 0.38903, 0.04379, 0.39144, 0.04182]
4230
+ ]);
4231
+ var slantedShape = createShape([
4232
+ [0.04911, 0.28294, 0.05715, 0.20613, 0.06118, 0.16772, 0.07595, 0.13743],
4233
+ [0.07595, 0.13743, 0.09732, 0.09358, 0.13462, 0.05972, 0.18009, 0.04288],
4234
+ [0.18009, 0.04288, 0.21151, 0.03125, 0.24979, 0.03125, 0.32635, 0.03125],
4235
+ [0.32635, 0.03125, 0.45521, 0.03125, 0.58407, 0.03125, 0.71293, 0.03125],
4236
+ [0.71293, 0.03125, 0.80551, 0.03125, 0.85181, 0.03125, 0.88715, 0.04642],
4237
+ [0.88715, 0.04642, 0.93832, 0.06838, 0.97725, 0.11203, 0.99352, 0.16569],
4238
+ [0.99352, 0.16569, 1.00476, 0.20272, 0.9999, 0.24916, 0.99017, 0.34206],
4239
+ [0.99017, 0.34206, 0.97708, 0.46706, 0.96398, 0.59206, 0.95089, 0.71706],
4240
+ [0.95089, 0.71706, 0.94285, 0.79387, 0.93883, 0.83228, 0.92405, 0.86256],
4241
+ [0.92405, 0.86256, 0.90268, 0.90641, 0.86538, 0.94028, 0.81991, 0.95712],
4242
+ [0.81991, 0.95712, 0.78849, 0.96875, 0.75021, 0.96875, 0.67365, 0.96875],
4243
+ [0.67365, 0.96875, 0.54479, 0.96875, 0.41593, 0.96875, 0.28707, 0.96875],
4244
+ [0.28707, 0.96875, 0.19449, 0.96875, 0.14819, 0.96875, 0.11285, 0.95359],
4245
+ [0.11285, 0.95359, 0.06169, 0.93162, 0.02275, 0.88797, 648e-5, 0.83431],
4246
+ [648e-5, 0.83431, -476e-5, 0.79728, 1e-4, 0.75084, 983e-5, 0.65794],
4247
+ [983e-5, 0.65794, 0.02292, 0.53294, 0.03602, 0.40794, 0.04911, 0.28294]
4248
+ ]);
4249
+ var softBoomShape = createShape([
4250
+ [0.54668, 0.26546, 0.61712, -0.08849, 0.38296, -0.08849, 0.45337, 0.26546],
4251
+ [0.45337, 0.26546, 0.38296, -0.08849, 0.16664, 11e-4, 0.36715, 0.30118],
4252
+ [0.36715, 0.30118, 0.16664, 11e-4, 11e-4, 0.16665, 0.30118, 0.36715],
4253
+ [0.30118, 0.36715, 11e-4, 0.16665, -0.08849, 0.38296, 0.26546, 0.45334],
4254
+ [0.26546, 0.45334, -0.08849, 0.38293, -0.08849, 0.61706, 0.26546, 0.54665],
4255
+ [0.26546, 0.54665, -0.08849, 0.61706, 114e-5, 0.83334, 0.30118, 0.63284],
4256
+ [0.30118, 0.63284, 114e-5, 0.83334, 0.16668, 0.9989, 0.36715, 0.69881],
4257
+ [0.36715, 0.69881, 0.16664, 0.99884, 0.38296, 1.08843, 0.45334, 0.73452],
4258
+ [0.45334, 0.73452, 0.38293, 1.08849, 0.61706, 1.08849, 0.54665, 0.73452],
4259
+ [0.54665, 0.73452, 0.61706, 1.08849, 0.83334, 0.99884, 0.63284, 0.69881],
4260
+ [0.63284, 0.69881, 0.83334, 0.99884, 0.9989, 0.83331, 0.69881, 0.63284],
4261
+ [0.69881, 0.63284, 0.99884, 0.83334, 1.08843, 0.61702, 0.73452, 0.54665],
4262
+ [0.73452, 0.54665, 1.08849, 0.61706, 1.08849, 0.38293, 0.73452, 0.45334],
4263
+ [0.73452, 0.45334, 1.08849, 0.38293, 0.99884, 0.16665, 0.69881, 0.36715],
4264
+ [0.69881, 0.36715, 0.99884, 0.16665, 0.83331, 11e-4, 0.63284, 0.30118],
4265
+ [0.63284, 0.30118, 0.83334, 114e-5, 0.61702, -0.08845, 0.54665, 0.26546],
4266
+ [0.54665, 0.26546, 0.54666, 0.26546, 0.54667, 0.26546, 0.54668, 0.26546]
4267
+ ]);
4268
+ var softBurstShape = createShape([
4269
+ [0.45359, 0.0247, 0.47494, -823e-5, 0.52506, -823e-5, 0.54641, 0.0247],
4270
+ [0.54641, 0.0247, 0.56348, 0.05101, 0.58055, 0.07733, 0.59763, 0.10364],
4271
+ [0.59763, 0.10364, 0.61166, 0.12529, 0.64, 0.1341, 0.66466, 0.12447],
4272
+ [0.66466, 0.12447, 0.69464, 0.11278, 0.72462, 0.10108, 0.7546, 0.08939],
4273
+ [0.7546, 0.08939, 0.79213, 0.07475, 0.83266, 0.10291, 0.82972, 0.14156],
4274
+ [0.82972, 0.14156, 0.82736, 0.17245, 0.82499, 0.20334, 0.82263, 0.23422],
4275
+ [0.82263, 0.23422, 0.82066, 0.25963, 0.83816, 0.28266, 0.86403, 0.28875],
4276
+ [0.86403, 0.28875, 0.89548, 0.29614, 0.92693, 0.30352, 0.95838, 0.31091],
4277
+ [0.95838, 0.31091, 0.99772, 0.32016, 1.01322, 0.36572, 0.98707, 0.39535],
4278
+ [0.98707, 0.39535, 0.96617, 0.41899, 0.94527, 0.44264, 0.92438, 0.46629],
4279
+ [0.92438, 0.46629, 0.90719, 0.48575, 0.90719, 0.51425, 0.92438, 0.53372],
4280
+ [0.92438, 0.53372, 0.94527, 0.55737, 0.96617, 0.58102, 0.98707, 0.60466],
4281
+ [0.98707, 0.60466, 1.01322, 0.63429, 0.99772, 0.67985, 0.95838, 0.6891],
4282
+ [0.95838, 0.6891, 0.92693, 0.69648, 0.89548, 0.70387, 0.86403, 0.71126],
4283
+ [0.86403, 0.71126, 0.83816, 0.71735, 0.82066, 0.74038, 0.82263, 0.76579],
4284
+ [0.82263, 0.76579, 0.82499, 0.79667, 0.82736, 0.82756, 0.82972, 0.85844],
4285
+ [0.82972, 0.85844, 0.83266, 0.8971, 0.79213, 0.92526, 0.7546, 0.91063],
4286
+ [0.7546, 0.91063, 0.72462, 0.89893, 0.69464, 0.88724, 0.66466, 0.87554],
4287
+ [0.66466, 0.87554, 0.64, 0.86591, 0.61166, 0.87473, 0.59763, 0.89638],
4288
+ [0.59763, 0.89638, 0.58055, 0.92269, 0.56348, 0.94901, 0.54641, 0.97532],
4289
+ [0.54641, 0.97532, 0.52506, 1.00823, 0.47494, 1.00823, 0.45359, 0.97532],
4290
+ [0.45359, 0.97532, 0.43652, 0.94901, 0.41945, 0.92269, 0.40237, 0.89638],
4291
+ [0.40237, 0.89638, 0.38834, 0.87473, 0.36, 0.86591, 0.33534, 0.87554],
4292
+ [0.33534, 0.87554, 0.30536, 0.88724, 0.27538, 0.89893, 0.2454, 0.91063],
4293
+ [0.2454, 0.91063, 0.20787, 0.92526, 0.16734, 0.8971, 0.17028, 0.85844],
4294
+ [0.17028, 0.85844, 0.17264, 0.82756, 0.17501, 0.79667, 0.17737, 0.76579],
4295
+ [0.17737, 0.76579, 0.17934, 0.74038, 0.16184, 0.71735, 0.13597, 0.71126],
4296
+ [0.13597, 0.71126, 0.10452, 0.70387, 0.07307, 0.69648, 0.04162, 0.6891],
4297
+ [0.04162, 0.6891, 228e-5, 0.67985, -0.01322, 0.63429, 0.01293, 0.60466],
4298
+ [0.01293, 0.60466, 0.03383, 0.58102, 0.05473, 0.55737, 0.07562, 0.53372],
4299
+ [0.07562, 0.53372, 0.09281, 0.51425, 0.09281, 0.48575, 0.07562, 0.46629],
4300
+ [0.07562, 0.46629, 0.05473, 0.44264, 0.03383, 0.41899, 0.01293, 0.39535],
4301
+ [0.01293, 0.39535, -0.01322, 0.36572, 228e-5, 0.32016, 0.04162, 0.31091],
4302
+ [0.04162, 0.31091, 0.07307, 0.30352, 0.10452, 0.29614, 0.13597, 0.28875],
4303
+ [0.13597, 0.28875, 0.16184, 0.28266, 0.17934, 0.25963, 0.17737, 0.23422],
4304
+ [0.17737, 0.23422, 0.17501, 0.20334, 0.17264, 0.17245, 0.17028, 0.14156],
4305
+ [0.17028, 0.14156, 0.16734, 0.10291, 0.20787, 0.07475, 0.2454, 0.08939],
4306
+ [0.2454, 0.08939, 0.27538, 0.10108, 0.30536, 0.11278, 0.33534, 0.12447],
4307
+ [0.33534, 0.12447, 0.36, 0.1341, 0.38834, 0.12529, 0.40237, 0.10364],
4308
+ [0.40237, 0.10364, 0.41945, 0.07733, 0.43652, 0.05101, 0.45359, 0.0247]
4309
+ ]);
4310
+ var squareShape = createShape([
4311
+ [1, 0.5375, 1, 0.67725, 1, 0.74712, 0.97806, 0.80253],
4312
+ [0.97806, 0.80253, 0.94628, 0.88278, 0.88278, 0.94628, 0.80253, 0.97806],
4313
+ [0.80253, 0.97806, 0.74713, 1, 0.67725, 1, 0.5375, 1],
4314
+ [0.5375, 1, 0.5125, 1, 0.4875, 1, 0.4625, 1],
4315
+ [0.4625, 1, 0.32275, 1, 0.25288, 1, 0.19747, 0.97806],
4316
+ [0.19747, 0.97806, 0.11722, 0.94628, 0.05372, 0.88278, 0.02194, 0.80253],
4317
+ [0.02194, 0.80253, 0, 0.74713, 0, 0.67725, 0, 0.5375],
4318
+ [0, 0.5375, 0, 0.5125, 0, 0.4875, 0, 0.4625],
4319
+ [0, 0.4625, 0, 0.32275, 0, 0.25288, 0.02194, 0.19747],
4320
+ [0.02194, 0.19747, 0.0537, 0.11723, 0.11723, 0.05371, 0.19747, 0.02194],
4321
+ [0.19747, 0.02194, 0.25288, 0, 0.32275, 0, 0.4625, 0],
4322
+ [0.4625, 0, 0.4875, 0, 0.5125, 0, 0.5375, 0],
4323
+ [0.5375, 0, 0.67725, 0, 0.74712, 0, 0.80253, 0.02194],
4324
+ [0.80253, 0.02194, 0.88277, 0.05371, 0.9463, 0.11723, 0.97806, 0.19747],
4325
+ [0.97806, 0.19747, 1, 0.25288, 1, 0.32275, 1, 0.4625],
4326
+ [1, 0.4625, 1, 0.4875, 1, 0.5125, 1, 0.5375]
4327
+ ]);
4328
+ var sunnyShape = createShape([
4329
+ [0.77016, 0.1213, 0.80126, 0.12342, 0.81681, 0.12448, 0.82938, 0.12995],
4330
+ [0.82938, 0.12995, 0.84756, 0.13791, 0.86208, 0.15244, 0.87004, 0.17062],
4331
+ [0.87004, 0.17062, 0.87554, 0.18318, 0.8766, 0.19874, 0.87871, 0.22983],
4332
+ [0.87871, 0.22983, 0.88031, 0.25348, 0.88192, 0.27714, 0.88353, 0.3008],
4333
+ [0.88353, 0.3008, 0.88439, 0.31338, 0.88481, 0.31968, 0.88618, 0.32568],
4334
+ [0.88618, 0.32568, 0.88816, 0.33436, 0.89159, 0.34264, 0.89633, 0.35018],
4335
+ [0.89633, 0.35018, 0.89961, 0.35541, 0.90376, 0.36015, 0.91204, 0.36965],
4336
+ [0.91204, 0.36965, 0.92764, 0.38751, 0.94323, 0.40537, 0.95882, 0.42324],
4337
+ [0.95882, 0.42324, 0.97932, 0.44674, 0.98957, 0.45847, 0.99457, 0.47124],
4338
+ [0.99457, 0.47124, 1.0018, 0.48973, 1.0018, 0.51027, 0.99457, 0.52876],
4339
+ [0.99457, 0.52876, 0.98957, 0.54153, 0.97932, 0.55326, 0.95882, 0.57676],
4340
+ [0.95882, 0.57676, 0.94323, 0.59463, 0.92764, 0.61249, 0.91204, 0.63035],
4341
+ [0.91204, 0.63035, 0.90376, 0.63985, 0.89961, 0.64459, 0.89633, 0.64982],
4342
+ [0.89633, 0.64982, 0.89159, 0.65736, 0.88816, 0.66564, 0.88618, 0.67432],
4343
+ [0.88618, 0.67432, 0.88481, 0.68032, 0.88439, 0.68662, 0.88353, 0.6992],
4344
+ [0.88353, 0.6992, 0.88192, 0.72286, 0.88031, 0.74652, 0.87871, 0.77017],
4345
+ [0.87871, 0.77017, 0.8766, 0.80126, 0.87554, 0.81682, 0.87004, 0.82938],
4346
+ [0.87004, 0.82938, 0.86208, 0.84756, 0.84756, 0.86209, 0.82938, 0.87005],
4347
+ [0.82938, 0.87005, 0.81681, 0.87552, 0.80126, 0.87658, 0.77016, 0.8787],
4348
+ [0.77016, 0.8787, 0.7465, 0.88031, 0.72285, 0.88192, 0.69919, 0.88352],
4349
+ [0.69919, 0.88352, 0.68661, 0.88438, 0.68032, 0.88482, 0.67431, 0.88617],
4350
+ [0.67431, 0.88617, 0.66563, 0.88815, 0.65735, 0.89158, 0.64981, 0.89632],
4351
+ [0.64981, 0.89632, 0.6446, 0.89961, 0.63985, 0.90376, 0.63035, 0.91205],
4352
+ [0.63035, 0.91205, 0.61248, 0.92764, 0.59462, 0.94323, 0.57675, 0.95882],
4353
+ [0.57675, 0.95882, 0.55327, 0.97932, 0.54153, 0.98955, 0.52875, 0.99455],
4354
+ [0.52875, 0.99455, 0.51027, 1.00182, 0.48973, 1.00182, 0.47125, 0.99455],
4355
+ [0.47125, 0.99455, 0.45847, 0.98955, 0.44673, 0.97932, 0.42325, 0.95882],
4356
+ [0.42325, 0.95882, 0.40538, 0.94323, 0.38752, 0.92764, 0.36965, 0.91205],
4357
+ [0.36965, 0.91205, 0.36015, 0.90376, 0.3554, 0.89961, 0.35019, 0.89632],
4358
+ [0.35019, 0.89632, 0.34265, 0.89158, 0.33437, 0.88815, 0.32569, 0.88617],
4359
+ [0.32569, 0.88617, 0.31968, 0.88482, 0.31339, 0.88438, 0.30081, 0.88352],
4360
+ [0.30081, 0.88352, 0.27715, 0.88192, 0.2535, 0.88031, 0.22984, 0.8787],
4361
+ [0.22984, 0.8787, 0.19874, 0.87658, 0.18319, 0.87552, 0.17062, 0.87005],
4362
+ [0.17062, 0.87005, 0.15244, 0.86209, 0.13792, 0.84756, 0.12996, 0.82938],
4363
+ [0.12996, 0.82938, 0.12446, 0.81682, 0.1234, 0.80126, 0.12129, 0.77017],
4364
+ [0.12129, 0.77017, 0.11968, 0.74652, 0.11807, 0.72286, 0.11647, 0.6992],
4365
+ [0.11647, 0.6992, 0.11561, 0.68662, 0.11519, 0.68032, 0.11382, 0.67432],
4366
+ [0.11382, 0.67432, 0.11185, 0.66564, 0.10841, 0.65736, 0.10367, 0.64982],
4367
+ [0.10367, 0.64982, 0.10039, 0.64459, 0.09624, 0.63985, 0.08796, 0.63035],
4368
+ [0.08796, 0.63035, 0.07236, 0.61249, 0.05677, 0.59463, 0.04118, 0.57676],
4369
+ [0.04118, 0.57676, 0.02068, 0.55326, 0.01043, 0.54153, 543e-5, 0.52876],
4370
+ [543e-5, 0.52876, -18e-4, 0.51027, -18e-4, 0.48973, 543e-5, 0.47124],
4371
+ [543e-5, 0.47124, 0.01043, 0.45847, 0.02068, 0.44674, 0.04118, 0.42324],
4372
+ [0.04118, 0.42324, 0.05677, 0.40537, 0.07236, 0.38751, 0.08796, 0.36965],
4373
+ [0.08796, 0.36965, 0.09624, 0.36015, 0.10039, 0.35541, 0.10367, 0.35018],
4374
+ [0.10367, 0.35018, 0.10841, 0.34264, 0.11184, 0.33436, 0.11382, 0.32568],
4375
+ [0.11382, 0.32568, 0.11519, 0.31968, 0.11561, 0.31338, 0.11647, 0.3008],
4376
+ [0.11647, 0.3008, 0.11808, 0.27714, 0.11969, 0.25348, 0.12129, 0.22983],
4377
+ [0.12129, 0.22983, 0.1234, 0.19874, 0.12446, 0.18318, 0.12996, 0.17062],
4378
+ [0.12996, 0.17062, 0.13792, 0.15244, 0.15244, 0.13791, 0.17062, 0.12995],
4379
+ [0.17062, 0.12995, 0.18319, 0.12448, 0.19874, 0.12342, 0.22984, 0.1213],
4380
+ [0.22984, 0.1213, 0.2535, 0.11969, 0.27716, 0.11808, 0.30081, 0.11648],
4381
+ [0.30081, 0.11648, 0.31339, 0.11562, 0.31968, 0.11518, 0.32569, 0.11383],
4382
+ [0.32569, 0.11383, 0.33437, 0.11185, 0.34266, 0.10842, 0.35019, 0.10368],
4383
+ [0.35019, 0.10368, 0.3554, 0.10039, 0.36015, 0.09624, 0.36965, 0.08795],
4384
+ [0.36965, 0.08795, 0.38752, 0.07236, 0.40538, 0.05677, 0.42325, 0.04118],
4385
+ [0.42325, 0.04118, 0.44673, 0.02068, 0.45847, 0.01045, 0.47125, 545e-5],
4386
+ [0.47125, 545e-5, 0.48973, -182e-5, 0.51027, -182e-5, 0.52875, 545e-5],
4387
+ [0.52875, 545e-5, 0.54153, 0.01045, 0.55327, 0.02068, 0.57675, 0.04118],
4388
+ [0.57675, 0.04118, 0.59462, 0.05677, 0.61248, 0.07236, 0.63035, 0.08795],
4389
+ [0.63035, 0.08795, 0.63985, 0.09624, 0.6446, 0.10039, 0.64981, 0.10368],
4390
+ [0.64981, 0.10368, 0.65735, 0.10842, 0.66563, 0.11185, 0.67431, 0.11383],
4391
+ [0.67431, 0.11383, 0.68032, 0.11518, 0.68661, 0.11562, 0.69919, 0.11648],
4392
+ [0.69919, 0.11648, 0.72285, 0.11808, 0.7465, 0.11969, 0.77016, 0.1213]
4393
+ ]);
4394
+ var triangleShape = createShape([
4395
+ [0.33058, 0.2095, 0.37847, 0.12601, 0.40242, 0.08427, 0.43146, 0.06665],
4396
+ [0.43146, 0.06665, 0.47358, 0.04108, 0.52643, 0.04108, 0.56854, 0.06665],
4397
+ [0.56854, 0.06665, 0.59758, 0.08427, 0.62153, 0.12601, 0.66943, 0.2095],
4398
+ [0.66943, 0.2095, 0.75568, 0.35983, 0.84194, 0.51017, 0.92819, 0.66051],
4399
+ [0.92819, 0.66051, 0.97563, 0.7432, 0.99935, 0.78452, 0.99998, 0.81829],
4400
+ [0.99998, 0.81829, 1.00088, 0.86728, 0.97451, 0.91273, 0.93153, 0.93626],
4401
+ [0.93153, 0.93626, 0.90188, 0.95253, 0.85417, 0.95253, 0.75877, 0.95253],
4402
+ [0.75877, 0.95253, 0.58626, 0.95253, 0.41375, 0.95253, 0.24124, 0.95253],
4403
+ [0.24124, 0.95253, 0.14583, 0.95253, 0.09812, 0.95253, 0.06847, 0.93626],
4404
+ [0.06847, 0.93626, 0.02548, 0.91274, -89e-5, 0.86729, 2e-5, 0.81829],
4405
+ [2e-5, 0.81829, 65e-5, 0.78452, 0.02437, 0.7432, 0.07181, 0.66051],
4406
+ [0.07181, 0.66051, 0.15807, 0.51017, 0.24432, 0.35983, 0.33058, 0.2095]
4407
+ ]);
4408
+ var verySunnyShape = createShape([
4409
+ [0.42725, 0.04123, 0.46018, -0.01374, 0.53981, -0.01374, 0.57275, 0.04123],
4410
+ [0.57275, 0.04123, 0.58508, 0.06182, 0.59741, 0.08241, 0.60974, 0.10301],
4411
+ [0.60974, 0.10301, 0.62896, 0.13504, 0.66687, 0.15076, 0.70309, 0.14166],
4412
+ [0.70309, 0.14166, 0.72638, 0.13583, 0.74967, 0.13, 0.77296, 0.12416],
4413
+ [0.77296, 0.12416, 0.83512, 0.1086, 0.8914, 0.16488, 0.87583, 0.22704],
4414
+ [0.87583, 0.22704, 0.87, 0.25033, 0.86417, 0.27362, 0.85833, 0.29691],
4415
+ [0.85833, 0.29691, 0.84924, 0.33313, 0.86496, 0.37103, 0.89699, 0.39025],
4416
+ [0.89699, 0.39025, 0.91758, 0.40258, 0.93818, 0.41492, 0.95877, 0.42725],
4417
+ [0.95877, 0.42725, 1.01374, 0.46019, 1.01374, 0.53981, 0.95877, 0.57275],
4418
+ [0.95877, 0.57275, 0.93818, 0.58508, 0.91758, 0.59742, 0.89699, 0.60975],
4419
+ [0.89699, 0.60975, 0.86496, 0.62897, 0.84924, 0.66687, 0.85833, 0.70309],
4420
+ [0.85833, 0.70309, 0.86417, 0.72638, 0.87, 0.74967, 0.87583, 0.77296],
4421
+ [0.87583, 0.77296, 0.8914, 0.83512, 0.83512, 0.8914, 0.77296, 0.87584],
4422
+ [0.77296, 0.87584, 0.74967, 0.87, 0.72638, 0.86417, 0.70309, 0.85834],
4423
+ [0.70309, 0.85834, 0.66687, 0.84924, 0.62896, 0.86496, 0.60974, 0.89699],
4424
+ [0.60974, 0.89699, 0.59741, 0.91759, 0.58508, 0.93818, 0.57275, 0.95877],
4425
+ [0.57275, 0.95877, 0.53981, 1.01374, 0.46018, 1.01374, 0.42725, 0.95877],
4426
+ [0.42725, 0.95877, 0.41491, 0.93818, 0.40258, 0.91759, 0.39025, 0.89699],
4427
+ [0.39025, 0.89699, 0.37103, 0.86496, 0.33312, 0.84924, 0.29691, 0.85834],
4428
+ [0.29691, 0.85834, 0.27361, 0.86417, 0.25031, 0.87, 0.22702, 0.87584],
4429
+ [0.22702, 0.87584, 0.16489, 0.8914, 0.10859, 0.83512, 0.12416, 0.77296],
4430
+ [0.12416, 0.77296, 0.12999, 0.74967, 0.13583, 0.72638, 0.14167, 0.70309],
4431
+ [0.14167, 0.70309, 0.15075, 0.66687, 0.13505, 0.62897, 0.103, 0.60975],
4432
+ [0.103, 0.60975, 0.08241, 0.59742, 0.06181, 0.58508, 0.04121, 0.57275],
4433
+ [0.04121, 0.57275, -0.01373, 0.53981, -0.01373, 0.46019, 0.04121, 0.42725],
4434
+ [0.04121, 0.42725, 0.06181, 0.41492, 0.08241, 0.40258, 0.103, 0.39025],
4435
+ [0.103, 0.39025, 0.13505, 0.37103, 0.15075, 0.33313, 0.14167, 0.29691],
4436
+ [0.14167, 0.29691, 0.13583, 0.27362, 0.12999, 0.25033, 0.12416, 0.22704],
4437
+ [0.12416, 0.22704, 0.10859, 0.16488, 0.16489, 0.1086, 0.22702, 0.12416],
4438
+ [0.22702, 0.12416, 0.25031, 0.13, 0.27361, 0.13583, 0.29691, 0.14166],
4439
+ [0.29691, 0.14166, 0.33312, 0.15076, 0.37103, 0.13504, 0.39025, 0.10301],
4440
+ [0.39025, 0.10301, 0.40258, 0.08241, 0.41491, 0.06182, 0.42725, 0.04123]
4441
+ ]);
4442
+ function reversePolygon(polygon) {
4443
+ const reversedFeatures = polygon.features.map((f) => {
4444
+ const reversedCubics = f.cubics.map((c) => c.reverse()).reverse();
4445
+ if (f.type === "corner") {
4446
+ return cornerFeature(reversedCubics, f.convex);
4447
+ } else {
4448
+ return edgeFeature(reversedCubics);
4449
+ }
4450
+ }).reverse();
4451
+ return RoundedPolygon.fromFeatures(
4452
+ reversedFeatures,
4453
+ polygon.centerX,
4454
+ polygon.centerY
4455
+ );
4456
+ }
4457
+ function rotate180(polygon) {
4458
+ return polygon.transformed((x, y) => [1 - x, 1 - y]);
4459
+ }
4460
+ function flipV(polygon) {
4461
+ const flipped = polygon.transformed((x, y) => [x, 1 - y]);
4462
+ return reversePolygon(flipped);
4463
+ }
4464
+ var MD3Shapes = {
4465
+ arch: flipV(archShape),
4466
+ arrow: flipV(arrowShape),
4467
+ boom: boomShape,
4468
+ bun: bunShape,
4469
+ burst: burstShape,
4470
+ circle: circleShape,
4471
+ clamshell: clamshellShape,
4472
+ diamond: diamondShape,
4473
+ fan: rotate180(fanShape),
4474
+ flower: flowerShape,
4475
+ gem: flipV(gemShape),
4476
+ ghostish: flipV(ghostishShape),
4477
+ heart: flipV(heartShape),
4478
+ clover4Leaf: clover4LeafShape,
4479
+ clover8Leaf: clover8LeafShape,
4480
+ oval: flipV(ovalShape),
4481
+ pentagon: flipV(pentagonShape),
4482
+ pill: flipV(pillShape),
4483
+ pixelCircle: pixelCircleShape,
4484
+ pixelTriangle: pixelTriangleShape,
4485
+ puffyDiamond: puffyDiamondShape,
4486
+ puffy: puffyShape,
4487
+ semiCircle: flipV(semiCircleShape),
4488
+ cookie12Sided: cookie12SidedShape,
4489
+ cookie4Sided: cookie4SidedShape,
4490
+ cookie6Sided: cookie6SidedShape,
4491
+ cookie7Sided: cookie7SidedShape,
4492
+ cookie9Sided: cookie9SidedShape,
4493
+ slanted: flipV(slantedShape),
4494
+ softBoom: softBoomShape,
4495
+ softBurst: softBurstShape,
4496
+ square: squareShape,
4497
+ sunny: sunnyShape,
4498
+ triangle: flipV(triangleShape),
4499
+ verySunny: verySunnyShape
4500
+ };
4501
+
4502
+ // src/shapes/render/shape-rendering.ts
4503
+ function toSvgPath(cubics, width = 1, height = 1) {
4504
+ if (cubics.length === 0) return "";
4505
+ const paddingX = width * 0.015;
4506
+ const paddingY = height * 0.015;
4507
+ const sx = width - 2 * paddingX;
4508
+ const sy = height - 2 * paddingY;
4509
+ const flipY = (y) => paddingY + sy * (1 - y);
4510
+ const parts = [
4511
+ `M ${fmt(paddingX + cubics[0].anchor0X * sx)} ${fmt(flipY(cubics[0].anchor0Y))}`
4512
+ ];
4513
+ for (const c of cubics) {
4514
+ parts.push(
4515
+ `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))}`
4516
+ );
4517
+ }
4518
+ parts.push("Z");
4519
+ return parts.join(" ");
4520
+ }
4521
+ function toClipPath(polygon, width, height) {
4522
+ const pathData = toSvgPath(polygon.cubics, width, height);
4523
+ return `path('${pathData}')`;
4524
+ }
4525
+ function fmt(v) {
4526
+ return Number(v.toFixed(4)).toString();
4527
+ }
4528
+
4529
+ // src/ui/navigation/navigation-shape-utils.ts
4530
+ function getNavigationShapeStyle(shape, width = 56, height = 56) {
4531
+ if (!shape || shape === "pill" || shape === "circle") {
4532
+ return void 0;
4533
+ }
4534
+ const polygon = MD3Shapes[shape];
4535
+ if (!polygon) {
4536
+ return void 0;
4537
+ }
4538
+ return {
4539
+ clipPath: toClipPath(polygon, width, height)
4540
+ };
4541
+ }
4542
+ function isSquareShape(shape) {
4543
+ return Boolean(shape && shape !== "pill");
4544
+ }
2629
4545
  var NavigationBarContext = React36__namespace.createContext({ variant: "flexible" });
2630
4546
  function cloneIconWithFill(icon, selected) {
2631
4547
  if (!React36__namespace.isValidElement(icon)) return icon;
@@ -2637,16 +4553,23 @@ function cloneIconWithFill(icon, selected) {
2637
4553
  }
2638
4554
  return icon;
2639
4555
  }
2640
- function ActivePill() {
4556
+ function ActivePill({
4557
+ shape = "pill",
4558
+ width = 56,
4559
+ height = 32
4560
+ }) {
2641
4561
  const { activeIndicatorTransition } = React36__namespace.useContext(NavigationBarContext);
4562
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
2642
4563
  return /* @__PURE__ */ jsxRuntime.jsx(
2643
4564
  react.m.div,
2644
4565
  {
2645
- className: "absolute inset-0 bg-m3-secondary-container pointer-events-none",
2646
- style: {
2647
- borderRadius: 9999,
4566
+ className: cn(
4567
+ "bg-m3-secondary-container pointer-events-none",
4568
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : shape === "circle" ? "absolute inset-0 rounded-full" : "absolute inset-0 rounded-full"
4569
+ ),
4570
+ style: __spreadValues(__spreadValues({
2648
4571
  zIndex: 0
2649
- },
4572
+ }, shapeStyle ? { width, height } : {}), shapeStyle),
2650
4573
  initial: { opacity: 0, scale: 0.5 },
2651
4574
  animate: { opacity: 1, scale: 1 },
2652
4575
  exit: { opacity: 0, scale: 0.5 },
@@ -2654,11 +4577,42 @@ function ActivePill() {
2654
4577
  }
2655
4578
  );
2656
4579
  }
2657
- function HoverStateLayer() {
2658
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] group-focus-visible:opacity-[0.10] active:opacity-[0.10] transition-opacity duration-200 pointer-events-none z-0" });
4580
+ function HoverStateLayer({
4581
+ shape = "pill",
4582
+ width = 56,
4583
+ height = 32
4584
+ }) {
4585
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
4586
+ return /* @__PURE__ */ jsxRuntime.jsx(
4587
+ "div",
4588
+ {
4589
+ className: cn(
4590
+ "bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] group-focus-visible:opacity-[0.10] active:opacity-[0.10] transition-opacity duration-200 pointer-events-none z-0",
4591
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : shape === "circle" ? "absolute inset-0 rounded-full" : "absolute inset-0 rounded-[16px]"
4592
+ ),
4593
+ style: __spreadValues(__spreadValues({}, shapeStyle ? { width, height } : {}), shapeStyle)
4594
+ }
4595
+ );
2659
4596
  }
2660
- function RippleLayer({ ripples, onRippleDone }) {
2661
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full overflow-hidden pointer-events-none z-0", children: /* @__PURE__ */ jsxRuntime.jsx(Ripple, { ripples, onRippleDone }) });
4597
+ function RippleLayer({
4598
+ ripples,
4599
+ onRippleDone,
4600
+ shape = "pill",
4601
+ width = 56,
4602
+ height = 32
4603
+ }) {
4604
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
4605
+ return /* @__PURE__ */ jsxRuntime.jsx(
4606
+ "div",
4607
+ {
4608
+ className: cn(
4609
+ "overflow-hidden pointer-events-none z-0",
4610
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : shape === "circle" ? "absolute inset-0 rounded-full" : "absolute inset-0 rounded-[16px]"
4611
+ ),
4612
+ style: __spreadValues(__spreadValues({}, shapeStyle ? { width, height } : {}), shapeStyle),
4613
+ children: /* @__PURE__ */ jsxRuntime.jsx(Ripple, { ripples, onRippleDone })
4614
+ }
4615
+ );
2662
4616
  }
2663
4617
  function IconContainer({ selected, badge, children }) {
2664
4618
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2684,19 +4638,33 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2684
4638
  onClick,
2685
4639
  disabled = false,
2686
4640
  badge,
4641
+ shape: shapeProp,
4642
+ shapeSize: shapeSizeProp,
4643
+ hideLabel = false,
2687
4644
  className,
2688
4645
  "aria-label": ariaLabelProp,
2689
4646
  asChild = false,
2690
4647
  children
2691
4648
  }, ref) => {
2692
- var _a;
4649
+ var _a, _b, _c;
2693
4650
  const {
2694
4651
  variant,
2695
4652
  itemLayout,
4653
+ shape: contextShape,
4654
+ labelVisibility: contextLabelVisibility,
4655
+ shapeSize: contextShapeSize,
2696
4656
  itemClassName: contextItemClassName
2697
4657
  } = React36__namespace.useContext(NavigationBarContext);
4658
+ const activeShape = (_a = shapeProp != null ? shapeProp : contextShape) != null ? _a : "pill";
4659
+ const isSquare = isSquareShape(activeShape);
4660
+ const resolvedShapeSize = (_b = shapeSizeProp != null ? shapeSizeProp : contextShapeSize) != null ? _b : 56;
2698
4661
  const isForcedHorizontal = itemLayout === "horizontal";
2699
4662
  const isResponsiveHorizontal = (variant === "flexible" || variant === "xr") && itemLayout === void 0;
4663
+ const shouldShowLabel = !hideLabel && (() => {
4664
+ if (contextLabelVisibility === "unlabeled") return false;
4665
+ if (contextLabelVisibility === "auto") return selected;
4666
+ return true;
4667
+ })();
2700
4668
  const { ripples, onPointerDown, removeRipple } = useRippleState({
2701
4669
  disabled
2702
4670
  });
@@ -2724,6 +4692,8 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2724
4692
  contextItemClassName,
2725
4693
  className
2726
4694
  );
4695
+ const iconPillWidth = isSquare ? resolvedShapeSize : 56;
4696
+ const iconPillHeight = isSquare ? resolvedShapeSize : 32;
2727
4697
  if (asChild && children) {
2728
4698
  const child = React36__namespace.Children.only(children);
2729
4699
  const innerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -2733,10 +4703,12 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2733
4703
  className: cn(
2734
4704
  "relative flex items-center justify-center flex-col gap-y-1 w-full px-1 py-1.5",
2735
4705
  isResponsiveHorizontal && "min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1.5 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:py-0 min-[600px]:rounded-full min-[600px]:w-auto",
2736
- isForcedHorizontal && "flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto"
4706
+ isForcedHorizontal && "flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto",
4707
+ // When label is hidden and not horizontal, remove bottom gap
4708
+ !shouldShowLabel && !isForcedHorizontal && "gap-y-0"
2737
4709
  ),
2738
4710
  children: [
2739
- /* @__PURE__ */ jsxRuntime.jsxs(
4711
+ !isSquare && /* @__PURE__ */ jsxRuntime.jsxs(
2740
4712
  "div",
2741
4713
  {
2742
4714
  className: cn(
@@ -2745,9 +4717,18 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2745
4717
  isForcedHorizontal && "block!"
2746
4718
  ),
2747
4719
  children: [
2748
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, {}) }),
2749
- /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, {}),
2750
- /* @__PURE__ */ jsxRuntime.jsx(RippleLayer, { ripples, onRippleDone: removeRipple })
4720
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, { shape: activeShape, width: 56, height: 40 }) }),
4721
+ /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, { shape: activeShape, width: 56, height: 40 }),
4722
+ /* @__PURE__ */ jsxRuntime.jsx(
4723
+ RippleLayer,
4724
+ {
4725
+ ripples,
4726
+ onRippleDone: removeRipple,
4727
+ shape: activeShape,
4728
+ width: 56,
4729
+ height: 40
4730
+ }
4731
+ )
2751
4732
  ]
2752
4733
  }
2753
4734
  ),
@@ -2756,23 +4737,47 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2756
4737
  {
2757
4738
  className: cn(
2758
4739
  "relative flex items-center justify-center shrink-0 z-10",
2759
- "h-8 w-16 mx-auto rounded-full",
2760
- isResponsiveHorizontal && "min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto",
2761
- isForcedHorizontal && "size-6 w-auto h-auto"
4740
+ isSquare ? "mx-auto" : "h-8 w-14 mx-auto rounded-[16px]",
4741
+ !isSquare && isResponsiveHorizontal && "min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto",
4742
+ !isSquare && isForcedHorizontal && "size-6 w-auto h-auto"
2762
4743
  ),
4744
+ style: isSquare ? { width: resolvedShapeSize, height: resolvedShapeSize } : void 0,
2763
4745
  children: [
2764
4746
  /* @__PURE__ */ jsxRuntime.jsxs(
2765
4747
  "div",
2766
4748
  {
2767
4749
  className: cn(
2768
4750
  "absolute inset-0 z-0",
2769
- isResponsiveHorizontal && "min-[600px]:hidden",
2770
- isForcedHorizontal && "hidden"
4751
+ !isSquare && isResponsiveHorizontal && "min-[600px]:hidden",
4752
+ !isSquare && isForcedHorizontal && "hidden"
2771
4753
  ),
2772
4754
  children: [
2773
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, {}) }),
2774
- /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, {}),
2775
- /* @__PURE__ */ jsxRuntime.jsx(RippleLayer, { ripples, onRippleDone: removeRipple })
4755
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
4756
+ ActivePill,
4757
+ {
4758
+ shape: activeShape,
4759
+ width: iconPillWidth,
4760
+ height: iconPillHeight
4761
+ }
4762
+ ) }),
4763
+ /* @__PURE__ */ jsxRuntime.jsx(
4764
+ HoverStateLayer,
4765
+ {
4766
+ shape: activeShape,
4767
+ width: iconPillWidth,
4768
+ height: iconPillHeight
4769
+ }
4770
+ ),
4771
+ /* @__PURE__ */ jsxRuntime.jsx(
4772
+ RippleLayer,
4773
+ {
4774
+ ripples,
4775
+ onRippleDone: removeRipple,
4776
+ shape: activeShape,
4777
+ width: iconPillWidth,
4778
+ height: iconPillHeight
4779
+ }
4780
+ )
2776
4781
  ]
2777
4782
  }
2778
4783
  ),
@@ -2780,15 +4785,19 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2780
4785
  ]
2781
4786
  }
2782
4787
  ),
2783
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "popLayout", children: /* @__PURE__ */ jsxRuntime.jsx(
2784
- "span",
4788
+ label && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "popLayout", initial: false, children: shouldShowLabel && /* @__PURE__ */ jsxRuntime.jsx(
4789
+ react.m.span,
2785
4790
  {
4791
+ initial: { opacity: 0, height: 0, scale: 0.85, y: -2 },
4792
+ animate: { opacity: 1, height: "auto", scale: 1, y: 0 },
4793
+ exit: { opacity: 0, height: 0, scale: 0.85, y: -2 },
4794
+ transition: SPRING_TRANSITION_EXPRESSIVE,
2786
4795
  className: cn(
2787
- "z-10 transition-all duration-200 truncate px-1",
2788
- selected ? "text-m3-on-surface" : "text-m3-on-surface-variant",
2789
- "font-medium text-[12px] leading-4 tracking-[0.5px]"
4796
+ "z-10 transition-colors duration-200 truncate px-1 inline-block overflow-hidden",
4797
+ selected ? "text-m3-on-surface font-medium" : "text-m3-on-surface-variant font-medium",
4798
+ "text-[12px] leading-4 tracking-[0.5px]"
2790
4799
  ),
2791
- children: (_a = child.props.children) != null ? _a : label
4800
+ children: (_c = child.props.children) != null ? _c : label
2792
4801
  },
2793
4802
  "nav-label"
2794
4803
  ) })
@@ -2804,7 +4813,10 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2804
4813
  role: "menuitem",
2805
4814
  "aria-current": selected ? "page" : void 0,
2806
4815
  "aria-disabled": disabled ? true : void 0,
2807
- "aria-label": ariaLabelProp || (typeof label === "string" ? label : void 0),
4816
+ "aria-label": (
4817
+ // Always provide aria-label even when label is visually hidden
4818
+ ariaLabelProp || (typeof label === "string" ? label : void 0)
4819
+ ),
2808
4820
  onClick: handleClick,
2809
4821
  onPointerDown,
2810
4822
  className: itemClassName,
@@ -2820,7 +4832,10 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2820
4832
  role: "menuitem",
2821
4833
  "aria-current": selected ? "page" : void 0,
2822
4834
  "aria-disabled": disabled ? true : void 0,
2823
- "aria-label": ariaLabelProp || (typeof label === "string" ? label : void 0),
4835
+ "aria-label": (
4836
+ // Always provide aria-label even when label is visually hidden
4837
+ ariaLabelProp || (typeof label === "string" ? label : void 0)
4838
+ ),
2824
4839
  onClick: handleClick,
2825
4840
  onPointerDown,
2826
4841
  className: itemClassName,
@@ -2831,10 +4846,12 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2831
4846
  className: cn(
2832
4847
  "relative flex items-center justify-center flex-col gap-y-1 w-full px-1 py-1.5",
2833
4848
  isResponsiveHorizontal && "min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1.5 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:py-0 min-[600px]:rounded-full min-[600px]:w-auto",
2834
- isForcedHorizontal && "flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto"
4849
+ isForcedHorizontal && "flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto",
4850
+ // When label is hidden and not horizontal, remove bottom gap
4851
+ !shouldShowLabel && !isForcedHorizontal && "gap-y-0"
2835
4852
  ),
2836
4853
  children: [
2837
- /* @__PURE__ */ jsxRuntime.jsxs(
4854
+ !isSquare && /* @__PURE__ */ jsxRuntime.jsxs(
2838
4855
  "div",
2839
4856
  {
2840
4857
  className: cn(
@@ -2843,9 +4860,18 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2843
4860
  isForcedHorizontal && "block!"
2844
4861
  ),
2845
4862
  children: [
2846
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, {}) }),
2847
- /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, {}),
2848
- /* @__PURE__ */ jsxRuntime.jsx(RippleLayer, { ripples, onRippleDone: removeRipple })
4863
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, { shape: activeShape, width: 56, height: 40 }) }),
4864
+ /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, { shape: activeShape, width: 56, height: 40 }),
4865
+ /* @__PURE__ */ jsxRuntime.jsx(
4866
+ RippleLayer,
4867
+ {
4868
+ ripples,
4869
+ onRippleDone: removeRipple,
4870
+ shape: activeShape,
4871
+ width: 56,
4872
+ height: 40
4873
+ }
4874
+ )
2849
4875
  ]
2850
4876
  }
2851
4877
  ),
@@ -2854,23 +4880,47 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2854
4880
  {
2855
4881
  className: cn(
2856
4882
  "relative flex items-center justify-center shrink-0 z-10",
2857
- "h-8 w-16 mx-auto rounded-full",
2858
- isResponsiveHorizontal && "min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto",
2859
- isForcedHorizontal && "size-6 w-auto h-auto"
4883
+ isSquare ? "mx-auto" : "h-8 w-14 mx-auto rounded-[16px]",
4884
+ !isSquare && isResponsiveHorizontal && "min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto",
4885
+ !isSquare && isForcedHorizontal && "size-6 w-auto h-auto"
2860
4886
  ),
4887
+ style: isSquare ? { width: resolvedShapeSize, height: resolvedShapeSize } : void 0,
2861
4888
  children: [
2862
4889
  /* @__PURE__ */ jsxRuntime.jsxs(
2863
4890
  "div",
2864
4891
  {
2865
4892
  className: cn(
2866
4893
  "absolute inset-0 z-0",
2867
- isResponsiveHorizontal && "min-[600px]:hidden",
2868
- isForcedHorizontal && "hidden"
4894
+ !isSquare && isResponsiveHorizontal && "min-[600px]:hidden",
4895
+ !isSquare && isForcedHorizontal && "hidden"
2869
4896
  ),
2870
4897
  children: [
2871
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill, {}) }),
2872
- /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer, {}),
2873
- /* @__PURE__ */ jsxRuntime.jsx(RippleLayer, { ripples, onRippleDone: removeRipple })
4898
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
4899
+ ActivePill,
4900
+ {
4901
+ shape: activeShape,
4902
+ width: iconPillWidth,
4903
+ height: iconPillHeight
4904
+ }
4905
+ ) }),
4906
+ /* @__PURE__ */ jsxRuntime.jsx(
4907
+ HoverStateLayer,
4908
+ {
4909
+ shape: activeShape,
4910
+ width: iconPillWidth,
4911
+ height: iconPillHeight
4912
+ }
4913
+ ),
4914
+ /* @__PURE__ */ jsxRuntime.jsx(
4915
+ RippleLayer,
4916
+ {
4917
+ ripples,
4918
+ onRippleDone: removeRipple,
4919
+ shape: activeShape,
4920
+ width: iconPillWidth,
4921
+ height: iconPillHeight
4922
+ }
4923
+ )
2874
4924
  ]
2875
4925
  }
2876
4926
  ),
@@ -2878,13 +4928,17 @@ var NavigationBarItemComponent = React36__namespace.forwardRef(
2878
4928
  ]
2879
4929
  }
2880
4930
  ),
2881
- /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "popLayout", children: /* @__PURE__ */ jsxRuntime.jsx(
2882
- "span",
4931
+ label && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "popLayout", initial: false, children: shouldShowLabel && /* @__PURE__ */ jsxRuntime.jsx(
4932
+ react.m.span,
2883
4933
  {
4934
+ initial: { opacity: 0, height: 0, scale: 0.85, y: -2 },
4935
+ animate: { opacity: 1, height: "auto", scale: 1, y: 0 },
4936
+ exit: { opacity: 0, height: 0, scale: 0.85, y: -2 },
4937
+ transition: SPRING_TRANSITION_EXPRESSIVE,
2884
4938
  className: cn(
2885
- "z-10 transition-all duration-200 truncate px-1",
2886
- selected ? "text-m3-on-surface" : "text-m3-on-surface-variant",
2887
- "font-medium text-[12px] leading-4 tracking-[0.5px]"
4939
+ "z-10 transition-colors duration-200 truncate px-1 inline-block overflow-hidden",
4940
+ selected ? "text-m3-on-surface font-medium" : "text-m3-on-surface-variant font-medium",
4941
+ "text-[12px] leading-4 tracking-[0.5px]"
2888
4942
  ),
2889
4943
  children: label
2890
4944
  },
@@ -2906,9 +4960,9 @@ var navContainerVariants = classVarianceAuthority.cva(
2906
4960
  {
2907
4961
  variants: {
2908
4962
  variant: {
2909
- flexible: "bottom-0 left-0 right-0 w-full h-16 pb-safe",
2910
- baseline: "bottom-0 left-0 right-0 w-full h-20 pb-safe",
2911
- xr: "bottom-6 left-1/2 -translate-x-1/2 w-auto max-w-[calc(100%-2rem)] min-[600px]:max-w-fit h-20 min-[600px]:h-16 rounded-[48px] px-2"
4963
+ flexible: "bottom-0 left-0 right-0 w-full min-h-16 py-1 pb-safe",
4964
+ baseline: "bottom-0 left-0 right-0 w-full min-h-20 py-1 pb-safe",
4965
+ xr: "bottom-6 left-1/2 -translate-x-1/2 w-auto max-w-[calc(100%-2rem)] min-[600px]:max-w-fit min-h-20 min-[600px]:min-h-16 rounded-[48px] px-2 py-1"
2912
4966
  },
2913
4967
  position: {
2914
4968
  fixed: "fixed",
@@ -2930,6 +4984,9 @@ var NavigationBarComponent = React36__namespace.forwardRef(
2930
4984
  ({
2931
4985
  variant = "flexible",
2932
4986
  itemLayout,
4987
+ shape,
4988
+ labelVisibility,
4989
+ shapeSize,
2933
4990
  hideOnScroll = false,
2934
4991
  elevated = false,
2935
4992
  fixed = true,
@@ -2944,6 +5001,13 @@ var NavigationBarComponent = React36__namespace.forwardRef(
2944
5001
  const lastScrollY = React36__namespace.useRef(
2945
5002
  typeof window !== "undefined" ? window.scrollY : 0
2946
5003
  );
5004
+ const isSquare = isSquareShape(shape);
5005
+ const effectiveShapeSize = shapeSize != null ? shapeSize : isSquare ? 56 : 32;
5006
+ const computedMinHeight = React36__namespace.useMemo(() => {
5007
+ const baseHeight = variant === "baseline" ? 80 : 64;
5008
+ const requiredHeight = itemLayout === "horizontal" || labelVisibility === "unlabeled" ? effectiveShapeSize + 16 : effectiveShapeSize + 32;
5009
+ return Math.max(baseHeight, requiredHeight);
5010
+ }, [variant, itemLayout, labelVisibility, effectiveShapeSize]);
2947
5011
  React36__namespace.useEffect(() => {
2948
5012
  if (typeof window === "undefined" || !hideOnScroll) {
2949
5013
  setIsVisible(true);
@@ -2990,6 +5054,9 @@ var NavigationBarComponent = React36__namespace.forwardRef(
2990
5054
  value: {
2991
5055
  variant,
2992
5056
  itemLayout,
5057
+ shape,
5058
+ labelVisibility,
5059
+ shapeSize,
2993
5060
  activeIndicatorTransition,
2994
5061
  itemClassName
2995
5062
  },
@@ -3000,7 +5067,7 @@ var NavigationBarComponent = React36__namespace.forwardRef(
3000
5067
  role: "navigation",
3001
5068
  "aria-label": "Main navigation",
3002
5069
  className: navBaseClasses,
3003
- style,
5070
+ style: __spreadValues({ minHeight: computedMinHeight }, style),
3004
5071
  initial: false,
3005
5072
  animate: {
3006
5073
  y: isVisible ? "0%" : variant === "xr" ? "calc(100% + 40px)" : "100%"
@@ -3012,8 +5079,8 @@ var NavigationBarComponent = React36__namespace.forwardRef(
3012
5079
  role: "menubar",
3013
5080
  "aria-orientation": "horizontal",
3014
5081
  className: cn(
3015
- "flex w-full h-full mx-auto",
3016
- variant === "xr" ? "gap-0 min-[600px]:gap-1.5 items-center justify-center px-1" : "max-w-7xl gap-1.5"
5082
+ "flex w-full h-full mx-auto items-center justify-center",
5083
+ variant === "xr" ? "gap-0 min-[600px]:gap-1.5 px-1" : "max-w-7xl gap-1.5"
3017
5084
  ),
3018
5085
  children
3019
5086
  }
@@ -3026,7 +5093,11 @@ var NavigationBarComponent = React36__namespace.forwardRef(
3026
5093
  );
3027
5094
  NavigationBarComponent.displayName = "NavigationBar";
3028
5095
  var NavigationBar = React36__namespace.memo(NavigationBarComponent);
3029
- var NavigationRailContext = React36__namespace.createContext({ variant: "collapsed", labelVisibility: "labeled" });
5096
+ var NavigationRailContext = React36__namespace.createContext({
5097
+ variant: "collapsed",
5098
+ labelVisibility: "labeled",
5099
+ activeIndicatorWidth: "hug"
5100
+ });
3030
5101
  var MD3_MODAL_TRANSITION = {
3031
5102
  type: "tween",
3032
5103
  ease: [0.05, 0.7, 0.1, 1],
@@ -3037,9 +5108,9 @@ var railContainerVariants = classVarianceAuthority.cva(
3037
5108
  {
3038
5109
  variants: {
3039
5110
  variant: {
3040
- collapsed: "items-center h-full pt-11 pb-4 shadow-none bg-m3-surface rounded-none",
3041
- expanded: "items-start h-full pt-11 pb-4 shadow-none bg-m3-surface rounded-none",
3042
- modal: "bg-m3-surface shadow-lg rounded-r-[var(--m3-shape-corner-large)] h-full pt-11 pb-4",
5111
+ collapsed: "items-center h-full pt-11 pb-14 shadow-none bg-m3-surface rounded-none",
5112
+ expanded: "items-start h-full pt-11 pb-14 shadow-none bg-m3-surface rounded-none",
5113
+ modal: "bg-m3-surface shadow-lg rounded-r-[var(--m3-shape-corner-large)] h-full pt-11 pb-14",
3043
5114
  xr: "h-fit py-5 rounded-[48px] shadow-xl bg-m3-surface border border-white/5"
3044
5115
  },
3045
5116
  narrow: {
@@ -3082,14 +5153,28 @@ function setFocusedItem(items, index) {
3082
5153
  target.focus();
3083
5154
  }
3084
5155
  }
3085
- function ActivePill2({ layoutId, disableInitial = false }) {
5156
+ function ActivePill2({
5157
+ layoutId,
5158
+ disableInitial = false,
5159
+ shape = "pill",
5160
+ width = 56,
5161
+ height = 32
5162
+ }) {
3086
5163
  const { activeIndicatorTransition } = React36__namespace.useContext(NavigationRailContext);
5164
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
3087
5165
  return /* @__PURE__ */ jsxRuntime.jsx(
3088
5166
  react.m.div,
3089
5167
  {
3090
5168
  layoutId,
3091
- className: "absolute inset-0 bg-m3-secondary-container pointer-events-none",
3092
- style: { borderRadius: 9999, zIndex: 0, originX: 0.5, originY: 0.5 },
5169
+ className: cn(
5170
+ "bg-m3-secondary-container pointer-events-none",
5171
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : "absolute inset-0 rounded-full"
5172
+ ),
5173
+ style: __spreadValues(__spreadValues({
5174
+ zIndex: 0,
5175
+ originX: 0.5,
5176
+ originY: 0.5
5177
+ }, shapeStyle ? { width, height } : {}), shapeStyle),
3093
5178
  initial: disableInitial ? false : { opacity: 0, scale: 0.5 },
3094
5179
  animate: { opacity: 1, scale: 1 },
3095
5180
  exit: { opacity: 0, scale: 0.5, transition: { duration: 0.15 } },
@@ -3097,11 +5182,42 @@ function ActivePill2({ layoutId, disableInitial = false }) {
3097
5182
  }
3098
5183
  );
3099
5184
  }
3100
- function HoverStateLayer2() {
3101
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] transition-opacity duration-200 pointer-events-none z-0" });
5185
+ function HoverStateLayer2({
5186
+ shape = "pill",
5187
+ width = 56,
5188
+ height = 32
5189
+ }) {
5190
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
5191
+ return /* @__PURE__ */ jsxRuntime.jsx(
5192
+ "div",
5193
+ {
5194
+ className: cn(
5195
+ "bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] transition-opacity duration-200 pointer-events-none z-0",
5196
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : "absolute inset-0 rounded-full"
5197
+ ),
5198
+ style: __spreadValues(__spreadValues({}, shapeStyle ? { width, height } : {}), shapeStyle)
5199
+ }
5200
+ );
3102
5201
  }
3103
- function RippleLayer2({ ripples, onRippleDone }) {
3104
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full overflow-hidden pointer-events-none z-0", children: /* @__PURE__ */ jsxRuntime.jsx(Ripple, { ripples, onRippleDone }) });
5202
+ function RippleLayer2({
5203
+ ripples,
5204
+ onRippleDone,
5205
+ shape = "pill",
5206
+ width = 56,
5207
+ height = 32
5208
+ }) {
5209
+ const shapeStyle = getNavigationShapeStyle(shape, width, height);
5210
+ return /* @__PURE__ */ jsxRuntime.jsx(
5211
+ "div",
5212
+ {
5213
+ className: cn(
5214
+ "overflow-hidden pointer-events-none z-0",
5215
+ shapeStyle ? "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none" : "absolute inset-0 rounded-full"
5216
+ ),
5217
+ style: __spreadValues(__spreadValues({}, shapeStyle ? { width, height } : {}), shapeStyle),
5218
+ children: /* @__PURE__ */ jsxRuntime.jsx(Ripple, { ripples, onRippleDone })
5219
+ }
5220
+ );
3105
5221
  }
3106
5222
  function IconContainer2({ selected, badge, children }) {
3107
5223
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3127,18 +5243,31 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3127
5243
  onClick,
3128
5244
  disabled = false,
3129
5245
  badge,
5246
+ shape: shapeProp,
5247
+ shapeSize: shapeSizeProp,
5248
+ activeIndicatorWidth: activeIndicatorWidthProp,
3130
5249
  className,
3131
5250
  "aria-label": ariaLabelProp,
3132
5251
  asChild = false,
3133
5252
  children
3134
5253
  }, ref) => {
3135
- var _a;
3136
- const { variant, labelVisibility } = React36__namespace.useContext(
3137
- NavigationRailContext
3138
- );
5254
+ var _a, _b, _c, _d;
5255
+ const {
5256
+ variant,
5257
+ labelVisibility,
5258
+ shape: contextShape,
5259
+ shapeSize: contextShapeSize,
5260
+ activeIndicatorWidth: contextActiveIndicatorWidth
5261
+ } = React36__namespace.useContext(NavigationRailContext);
5262
+ const activeShape = (_a = shapeProp != null ? shapeProp : contextShape) != null ? _a : "pill";
5263
+ const isSquare = isSquareShape(activeShape);
5264
+ const resolvedShapeSize = (_b = shapeSizeProp != null ? shapeSizeProp : contextShapeSize) != null ? _b : 56;
5265
+ const activeIndicatorWidth = (_c = activeIndicatorWidthProp != null ? activeIndicatorWidthProp : contextActiveIndicatorWidth) != null ? _c : "hug";
3139
5266
  const isExpanded = variant === "expanded" || variant === "modal";
3140
5267
  const isModal = variant === "modal";
3141
5268
  const enableLayout = !isModal;
5269
+ const isExpandedPill = isExpanded && !isSquare;
5270
+ const expandedPillWidthClass = activeIndicatorWidth === "fill" ? "w-full" : "w-fit";
3142
5271
  const activePillId = `rail-pill-${React36__namespace.useId()}`;
3143
5272
  const { ripples, onPointerDown, removeRipple } = useRippleState({
3144
5273
  disabled
@@ -3163,6 +5292,8 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3163
5292
  isExpanded ? "w-full flex-row items-center px-3 h-14" : "w-full flex-col justify-center h-14",
3164
5293
  className
3165
5294
  );
5295
+ const iconPillWidth = isSquare ? resolvedShapeSize : 56;
5296
+ const iconPillHeight = isSquare ? resolvedShapeSize : 32;
3166
5297
  if (asChild && children) {
3167
5298
  const child = React36__namespace.Children.only(children);
3168
5299
  const innerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -3172,31 +5303,71 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3172
5303
  layout: enableLayout,
3173
5304
  className: cn(
3174
5305
  "relative flex z-10",
3175
- isExpanded ? "flex-row items-center w-fit h-14 px-4 gap-x-3 rounded-full" : "flex-col items-center justify-center w-full gap-y-1 rounded-full"
5306
+ isExpanded ? cn(
5307
+ "flex-row items-center h-14 px-4 gap-x-3 rounded-full",
5308
+ expandedPillWidthClass
5309
+ ) : "flex-col items-center justify-center w-full gap-y-1 rounded-full"
3176
5310
  ),
3177
5311
  children: [
3178
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
3179
- ActivePill2,
3180
- {
3181
- layoutId: activePillId,
3182
- disableInitial: isModal
3183
- }
3184
- ) }),
3185
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, {}),
3186
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(RippleLayer2, { ripples, onRippleDone: removeRipple }),
5312
+ isExpandedPill && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5313
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
5314
+ ActivePill2,
5315
+ {
5316
+ layoutId: activePillId,
5317
+ disableInitial: isModal,
5318
+ shape: activeShape
5319
+ }
5320
+ ) }),
5321
+ /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, { shape: activeShape }),
5322
+ /* @__PURE__ */ jsxRuntime.jsx(
5323
+ RippleLayer2,
5324
+ {
5325
+ ripples,
5326
+ onRippleDone: removeRipple,
5327
+ shape: activeShape
5328
+ }
5329
+ )
5330
+ ] }),
3187
5331
  /* @__PURE__ */ jsxRuntime.jsxs(
3188
5332
  react.m.div,
3189
5333
  {
3190
5334
  layout: enableLayout,
3191
5335
  className: cn(
3192
5336
  "relative flex items-center justify-center shrink-0 z-10",
3193
- isExpanded ? "size-6" : "h-8 w-14 mx-auto"
5337
+ isSquare ? "mx-auto" : isExpandedPill ? "size-6" : "h-8 w-14 mx-auto rounded-full"
3194
5338
  ),
3195
- style: { borderRadius: 9999 },
5339
+ style: isSquare ? { width: resolvedShapeSize, height: resolvedShapeSize } : void 0,
3196
5340
  children: [
3197
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill2, { layoutId: activePillId }) }),
3198
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, {}),
3199
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(RippleLayer2, { ripples, onRippleDone: removeRipple }),
5341
+ !isExpandedPill && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5342
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
5343
+ ActivePill2,
5344
+ {
5345
+ layoutId: activePillId,
5346
+ disableInitial: isModal,
5347
+ shape: activeShape,
5348
+ width: iconPillWidth,
5349
+ height: iconPillHeight
5350
+ }
5351
+ ) }),
5352
+ /* @__PURE__ */ jsxRuntime.jsx(
5353
+ HoverStateLayer2,
5354
+ {
5355
+ shape: activeShape,
5356
+ width: iconPillWidth,
5357
+ height: iconPillHeight
5358
+ }
5359
+ ),
5360
+ /* @__PURE__ */ jsxRuntime.jsx(
5361
+ RippleLayer2,
5362
+ {
5363
+ ripples,
5364
+ onRippleDone: removeRipple,
5365
+ shape: activeShape,
5366
+ width: iconPillWidth,
5367
+ height: iconPillHeight
5368
+ }
5369
+ )
5370
+ ] }),
3200
5371
  /* @__PURE__ */ jsxRuntime.jsx(
3201
5372
  react.m.div,
3202
5373
  {
@@ -3218,10 +5389,10 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3218
5389
  transition: SPRING_TRANSITION,
3219
5390
  className: cn(
3220
5391
  "z-10 transition-colors duration-200 whitespace-nowrap",
3221
- selected ? "text-m3-on-surface" : "text-m3-on-surface-variant",
3222
- isExpanded ? "text-sm font-medium tracking-wide text-left" : "text-xs font-medium tracking-wide"
5392
+ selected ? isExpandedPill ? "text-m3-on-secondary-container font-medium" : "text-m3-on-surface font-medium" : "text-m3-on-surface-variant font-medium",
5393
+ isExpanded ? "text-sm tracking-wide text-left" : "text-xs tracking-wide"
3223
5394
  ),
3224
- children: (_a = child.props.children) != null ? _a : label
5395
+ children: (_d = child.props.children) != null ? _d : label
3225
5396
  },
3226
5397
  "rail-label"
3227
5398
  ) })
@@ -3267,31 +5438,71 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3267
5438
  layout: enableLayout,
3268
5439
  className: cn(
3269
5440
  "relative flex z-10",
3270
- isExpanded ? "flex-row items-center w-fit h-14 px-4 gap-x-3 rounded-full" : "flex-col items-center justify-center w-full gap-y-1 rounded-full"
5441
+ isExpanded ? cn(
5442
+ "flex-row items-center h-14 px-4 gap-x-3 rounded-full",
5443
+ expandedPillWidthClass
5444
+ ) : "flex-col items-center justify-center w-full gap-y-1 rounded-full"
3271
5445
  ),
3272
5446
  children: [
3273
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
3274
- ActivePill2,
3275
- {
3276
- layoutId: activePillId,
3277
- disableInitial: isModal
3278
- }
3279
- ) }),
3280
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, {}),
3281
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx(RippleLayer2, { ripples, onRippleDone: removeRipple }),
5447
+ isExpandedPill && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5448
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
5449
+ ActivePill2,
5450
+ {
5451
+ layoutId: activePillId,
5452
+ disableInitial: isModal,
5453
+ shape: activeShape
5454
+ }
5455
+ ) }),
5456
+ /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, { shape: activeShape }),
5457
+ /* @__PURE__ */ jsxRuntime.jsx(
5458
+ RippleLayer2,
5459
+ {
5460
+ ripples,
5461
+ onRippleDone: removeRipple,
5462
+ shape: activeShape
5463
+ }
5464
+ )
5465
+ ] }),
3282
5466
  /* @__PURE__ */ jsxRuntime.jsxs(
3283
5467
  react.m.div,
3284
5468
  {
3285
5469
  layout: enableLayout,
3286
5470
  className: cn(
3287
5471
  "relative flex items-center justify-center shrink-0 z-10",
3288
- isExpanded ? "size-6" : "h-8 w-14 mx-auto"
5472
+ isSquare ? "mx-auto" : isExpandedPill ? "size-6" : "h-8 w-14 mx-auto rounded-full"
3289
5473
  ),
3290
- style: { borderRadius: 9999 },
5474
+ style: isSquare ? { width: resolvedShapeSize, height: resolvedShapeSize } : void 0,
3291
5475
  children: [
3292
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(ActivePill2, { layoutId: activePillId }) }),
3293
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(HoverStateLayer2, {}),
3294
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(RippleLayer2, { ripples, onRippleDone: removeRipple }),
5476
+ !isExpandedPill && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5477
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, children: selected && /* @__PURE__ */ jsxRuntime.jsx(
5478
+ ActivePill2,
5479
+ {
5480
+ layoutId: activePillId,
5481
+ disableInitial: isModal,
5482
+ shape: activeShape,
5483
+ width: iconPillWidth,
5484
+ height: iconPillHeight
5485
+ }
5486
+ ) }),
5487
+ /* @__PURE__ */ jsxRuntime.jsx(
5488
+ HoverStateLayer2,
5489
+ {
5490
+ shape: activeShape,
5491
+ width: iconPillWidth,
5492
+ height: iconPillHeight
5493
+ }
5494
+ ),
5495
+ /* @__PURE__ */ jsxRuntime.jsx(
5496
+ RippleLayer2,
5497
+ {
5498
+ ripples,
5499
+ onRippleDone: removeRipple,
5500
+ shape: activeShape,
5501
+ width: iconPillWidth,
5502
+ height: iconPillHeight
5503
+ }
5504
+ )
5505
+ ] }),
3295
5506
  /* @__PURE__ */ jsxRuntime.jsx(
3296
5507
  react.m.div,
3297
5508
  {
@@ -3313,8 +5524,8 @@ var NavigationRailItemComponent = React36__namespace.forwardRef(
3313
5524
  transition: SPRING_TRANSITION,
3314
5525
  className: cn(
3315
5526
  "z-10 transition-colors duration-200 whitespace-nowrap",
3316
- selected ? "text-m3-on-surface" : "text-m3-on-surface-variant",
3317
- isExpanded ? "text-sm font-medium tracking-wide text-left" : "text-xs font-medium tracking-wide"
5527
+ selected ? isExpandedPill ? "text-m3-on-secondary-container font-medium" : "text-m3-on-surface font-medium" : "text-m3-on-surface-variant font-medium",
5528
+ isExpanded ? "text-sm tracking-wide text-left" : "text-xs tracking-wide"
3318
5529
  ),
3319
5530
  children: label
3320
5531
  },
@@ -3374,6 +5585,9 @@ var NavigationRailComponent = React36__namespace.forwardRef(
3374
5585
  ({
3375
5586
  variant = "collapsed",
3376
5587
  labelVisibility = "labeled",
5588
+ shape,
5589
+ shapeSize,
5590
+ activeIndicatorWidth = "hug",
3377
5591
  header,
3378
5592
  fab,
3379
5593
  fabPlacement = "contained",
@@ -3387,6 +5601,7 @@ var NavigationRailComponent = React36__namespace.forwardRef(
3387
5601
  style
3388
5602
  }, ref) => {
3389
5603
  const isModal = variant === "modal";
5604
+ const isExpanded = variant === "expanded" || variant === "modal";
3390
5605
  const isXr = variant === "xr";
3391
5606
  const isSpatial = isXr && fabPlacement === "spatialized";
3392
5607
  const applyAnimation = !isXr || !isSpatial;
@@ -3428,10 +5643,12 @@ var NavigationRailComponent = React36__namespace.forwardRef(
3428
5643
  transition: isModal ? MD3_MODAL_TRANSITION : SPRING_TRANSITION,
3429
5644
  children: [
3430
5645
  (header || fab && !isSpatial) && /* @__PURE__ */ jsxRuntime.jsxs(
3431
- "div",
5646
+ react.m.div,
3432
5647
  {
5648
+ layout: true,
3433
5649
  className: cn(
3434
- "flex w-full flex-col items-center justify-start shrink-0 empty:hidden",
5650
+ "flex w-full flex-col justify-start shrink-0 empty:hidden",
5651
+ isExpanded ? "items-start px-3" : "items-center",
3435
5652
  navHeaderSpacing
3436
5653
  ),
3437
5654
  children: [
@@ -3497,6 +5714,9 @@ var NavigationRailComponent = React36__namespace.forwardRef(
3497
5714
  const contextValue = {
3498
5715
  variant,
3499
5716
  labelVisibility,
5717
+ shape,
5718
+ shapeSize,
5719
+ activeIndicatorWidth,
3500
5720
  activeIndicatorTransition
3501
5721
  };
3502
5722
  if (isModal) {
@@ -6431,6 +8651,10 @@ var ToolbarToggleButtonTokens = {
6431
8651
  PaddingX: 16,
6432
8652
  Gap: 8
6433
8653
  };
8654
+ var ToolbarToggleButtonRadiusTokens = {
8655
+ pillRadius: 24,
8656
+ pressedRadius: 12
8657
+ };
6434
8658
  var ALIGNMENT_CLASS = {
6435
8659
  start: "justify-start",
6436
8660
  center: "justify-center",
@@ -6947,6 +9171,34 @@ function useFloatingToolbarScrollBehavior(options = {}) {
6947
9171
  exitDirection
6948
9172
  };
6949
9173
  }
9174
+ var BUTTON_RADIUS_SPRING = FAST_EFFECTS_SPRING;
9175
+ ({
9176
+ xs: {
9177
+ // 1dp
9178
+ squareShapeRadius: m3Tokens.cornerRadius.medium,
9179
+ // 12dp
9180
+ pressedShapeRadius: m3Tokens.cornerRadius.small},
9181
+ sm: {
9182
+ // 1dp
9183
+ squareShapeRadius: m3Tokens.cornerRadius.medium,
9184
+ // 12dp
9185
+ pressedShapeRadius: m3Tokens.cornerRadius.small},
9186
+ md: {
9187
+ // 1dp
9188
+ squareShapeRadius: m3Tokens.cornerRadius.large,
9189
+ // 16dp
9190
+ pressedShapeRadius: m3Tokens.cornerRadius.medium},
9191
+ lg: {
9192
+ // 2dp
9193
+ squareShapeRadius: m3Tokens.cornerRadius.extraLarge,
9194
+ // 28dp
9195
+ pressedShapeRadius: m3Tokens.cornerRadius.large},
9196
+ xl: {
9197
+ // 3dp
9198
+ squareShapeRadius: m3Tokens.cornerRadius.extraLarge,
9199
+ // 28dp
9200
+ pressedShapeRadius: m3Tokens.cornerRadius.large}
9201
+ });
6950
9202
  var MOTION_PROP_KEYS = [
6951
9203
  "animate",
6952
9204
  "exit",
@@ -6977,29 +9229,34 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
6977
9229
  selected = false,
6978
9230
  icon,
6979
9231
  children,
6980
- pressScale = 0.95,
6981
- pressBounceOffset = 6,
9232
+ pressExpand = true,
9233
+ pressExpandRatio = 0.06,
6982
9234
  ripple = true,
6983
9235
  asChild = false,
6984
9236
  className,
6985
9237
  type = "button",
6986
9238
  disabled,
6987
- onPointerDown: onPointerDownProp
9239
+ onPointerDown: onPointerDownProp,
9240
+ onPointerUp: onPointerUpProp,
9241
+ onPointerLeave: onPointerLeaveProp
6988
9242
  } = _b, props = __objRest(_b, [
6989
9243
  "emphasis",
6990
9244
  "selected",
6991
9245
  "icon",
6992
9246
  "children",
6993
- "pressScale",
6994
- "pressBounceOffset",
9247
+ "pressExpand",
9248
+ "pressExpandRatio",
6995
9249
  "ripple",
6996
9250
  "asChild",
6997
9251
  "className",
6998
9252
  "type",
6999
9253
  "disabled",
7000
- "onPointerDown"
9254
+ "onPointerDown",
9255
+ "onPointerUp",
9256
+ "onPointerLeave"
7001
9257
  ]);
7002
9258
  const context = useToolbarContext();
9259
+ const [isPressed, setIsPressed] = React36__namespace.useState(false);
7003
9260
  const {
7004
9261
  ripples,
7005
9262
  onPointerDown: handleRipplePointerDown,
@@ -7009,6 +9266,7 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
7009
9266
  });
7010
9267
  const handlePointerDown = React36__namespace.useCallback(
7011
9268
  (e) => {
9269
+ setIsPressed(true);
7012
9270
  if (!disabled && ripple) {
7013
9271
  handleRipplePointerDown(e);
7014
9272
  }
@@ -7016,7 +9274,21 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
7016
9274
  },
7017
9275
  [disabled, ripple, handleRipplePointerDown, onPointerDownProp]
7018
9276
  );
7019
- const baseClasses = "relative overflow-hidden inline-flex items-center justify-center min-w-[95px] h-[48px] px-4 rounded-full text-sm font-medium transition-colors select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/40 disabled:pointer-events-none disabled:opacity-38";
9277
+ const handlePointerUp = React36__namespace.useCallback(
9278
+ (e) => {
9279
+ setIsPressed(false);
9280
+ onPointerUpProp == null ? void 0 : onPointerUpProp(e);
9281
+ },
9282
+ [onPointerUpProp]
9283
+ );
9284
+ const handlePointerLeave = React36__namespace.useCallback(
9285
+ (e) => {
9286
+ setIsPressed(false);
9287
+ onPointerLeaveProp == null ? void 0 : onPointerLeaveProp(e);
9288
+ },
9289
+ [onPointerLeaveProp]
9290
+ );
9291
+ const baseClasses = "relative overflow-hidden inline-flex items-center justify-center min-w-[95px] h-[48px] px-4 text-sm font-medium select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/40 disabled:pointer-events-none disabled:opacity-38";
7020
9292
  const variantClasses = {
7021
9293
  standard: selected ? "bg-current/16 text-current hover:bg-current/20 active:bg-current/24" : "bg-transparent text-current hover:bg-current/8 active:bg-current/12",
7022
9294
  tonal: selected ? "bg-m3-secondary-container text-m3-on-secondary-container hover:shadow-sm" : "bg-m3-surface-container-high text-m3-on-surface hover:bg-m3-surface-container-highest",
@@ -7028,27 +9300,17 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
7028
9300
  context == null ? void 0 : context.itemClassName,
7029
9301
  className
7030
9302
  );
7031
- const whileTapConfig = React36__namespace.useMemo(
9303
+ const animateConfig = React36__namespace.useMemo(
7032
9304
  () => ({
7033
- scale: pressScale,
7034
- x: pressBounceOffset ? [
7035
- 0,
7036
- -pressBounceOffset,
7037
- pressBounceOffset,
7038
- -pressBounceOffset / 2,
7039
- pressBounceOffset / 2,
7040
- 0
7041
- ] : 0
9305
+ scaleX: pressExpand && isPressed ? 1 + pressExpandRatio : 1,
9306
+ borderRadius: isPressed ? ToolbarToggleButtonRadiusTokens.pressedRadius : ToolbarToggleButtonRadiusTokens.pillRadius
7042
9307
  }),
7043
- [pressScale, pressBounceOffset]
9308
+ [pressExpand, pressExpandRatio, isPressed]
7044
9309
  );
7045
9310
  const transitionConfig = React36__namespace.useMemo(
7046
- () => __spreadProps(__spreadValues({}, TOOLBAR_SPRING_TRANSITION), {
7047
- scale: TOOLBAR_SPRING_TRANSITION,
7048
- x: {
7049
- duration: 0.35,
7050
- ease: "easeInOut"
7051
- }
9311
+ () => ({
9312
+ scaleX: FAST_SPATIAL_SPRING,
9313
+ borderRadius: BUTTON_RADIUS_SPRING
7052
9314
  }),
7053
9315
  []
7054
9316
  );
@@ -7102,7 +9364,9 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
7102
9364
  ref,
7103
9365
  "aria-pressed": selected,
7104
9366
  className: combinedClassName,
7105
- onPointerDown: handlePointerDown
9367
+ onPointerDown: handlePointerDown,
9368
+ onPointerUp: handlePointerUp,
9369
+ onPointerLeave: handlePointerLeave
7106
9370
  }, strippedProps), {
7107
9371
  children: React36__namespace.cloneElement(child, { children: innerChildContent })
7108
9372
  })
@@ -7115,9 +9379,13 @@ var ToolbarToggleButton = React36__namespace.forwardRef(
7115
9379
  type,
7116
9380
  "aria-pressed": selected,
7117
9381
  disabled,
7118
- whileTap: whileTapConfig,
9382
+ animate: animateConfig,
7119
9383
  transition: transitionConfig,
9384
+ initial: false,
9385
+ style: { transformOrigin: "center" },
7120
9386
  onPointerDown: handlePointerDown,
9387
+ onPointerUp: handlePointerUp,
9388
+ onPointerLeave: handlePointerLeave,
7121
9389
  className: combinedClassName
7122
9390
  }, props), {
7123
9391
  children: [
@@ -7221,7 +9489,9 @@ exports.VerticalMenuContent = VerticalMenuContent;
7221
9489
  exports.VerticalMenuDivider = VerticalMenuDivider;
7222
9490
  exports.VerticalMenuGroup = VerticalMenuGroup;
7223
9491
  exports.appBarTypography = appBarTypography;
9492
+ exports.getNavigationShapeStyle = getNavigationShapeStyle;
7224
9493
  exports.getToolbarColors = getToolbarColors;
9494
+ exports.isSquareShape = isSquareShape;
7225
9495
  exports.standardFloatingToolbarColors = standardFloatingToolbarColors;
7226
9496
  exports.surfaceContainerHighFloatingToolbarColors = surfaceContainerHighFloatingToolbarColors;
7227
9497
  exports.surfaceContainerHighestFloatingToolbarColors = surfaceContainerHighestFloatingToolbarColors;