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