@bmsuisse/ui 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3461,11 +3461,660 @@ function Stepper({
3461
3461
  ] })
3462
3462
  );
3463
3463
  }
3464
+
3465
+ // src/patterns/animated-brand/AnimatedBrand.tsx
3466
+ import {
3467
+ useEffect as useEffect9,
3468
+ useRef as useRef9,
3469
+ useState as useState16
3470
+ } from "react";
3471
+
3472
+ // src/patterns/animated-brand/brandMotion.ts
3473
+ var BRAND_ANIMATIONS = [
3474
+ { id: "bounce", label: "Bounce home" },
3475
+ { id: "orbit", label: "Orbit and settle" },
3476
+ { id: "impact", label: "Shot in, boom" },
3477
+ { id: "liquid", label: "Liquid split" },
3478
+ { id: "signature", label: "Solid to signature" },
3479
+ { id: "burst", label: "Big bang, small dot" },
3480
+ { id: "gravity", label: "Gravity press" }
3481
+ ];
3482
+ function playBrandMotion(p, name, onComplete) {
3483
+ const list = [];
3484
+ if (!p.animate || window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
3485
+ onComplete?.();
3486
+ return () => {
3487
+ };
3488
+ }
3489
+ const accent2 = "var(--bms-brand-dot)";
3490
+ const q = (s) => {
3491
+ const element = p.querySelector(s);
3492
+ if (!element) throw new Error(`Missing logo part: ${s}`);
3493
+ return element;
3494
+ }, logo = q('[data-logo-part="logo"]'), ring = q('[data-logo-part="ring"]'), bead = q('[data-logo-part="bead"]'), tail = q('[data-logo-part="tail"]'), core = q('[data-logo-part="core"]');
3495
+ const unit = parseFloat(getComputedStyle(logo).fontSize) || 48;
3496
+ const a = (el, k, d = 2e3, delay = 0) => {
3497
+ const v = el.animate(k, {
3498
+ duration: d,
3499
+ delay,
3500
+ iterations: 1,
3501
+ fill: "both",
3502
+ easing: "linear"
3503
+ });
3504
+ list.push(v);
3505
+ return v;
3506
+ };
3507
+ const t = (x, y, sx = 1, sy = sx) => `translate(${x}em,${y}em) scale(${sx},${sy})`;
3508
+ const points = (items) => items.map(([offset, x, y, sx = 1, sy = sx, color = accent2]) => ({
3509
+ offset,
3510
+ transform: t(x, y, sx, sy),
3511
+ background: color
3512
+ }));
3513
+ const shock = (delay, strength = 1) => p.querySelectorAll('[data-logo-part="echo"]').forEach((e, j) => {
3514
+ a(
3515
+ e,
3516
+ [
3517
+ { opacity: 0, transform: "scale(1)" },
3518
+ { opacity: 0.48 * strength, transform: "scale(1.6)", offset: 0.08 },
3519
+ { opacity: 0, transform: `scale(${j ? 8 : 6})`, offset: 1 }
3520
+ ],
3521
+ 650,
3522
+ delay + j * 110
3523
+ );
3524
+ });
3525
+ const sparks = (delay, out = 1) => p.querySelectorAll('[data-logo-part="particle"]').forEach((e, j) => {
3526
+ const angle = j * Math.PI / 4, x = Math.cos(angle) * out, y = Math.sin(angle) * out;
3527
+ a(
3528
+ e,
3529
+ [
3530
+ { opacity: 0, transform: t(0, 0, 0.2) },
3531
+ { opacity: 0.85, transform: t(x * 0.3, y * 0.3), offset: 0.12 },
3532
+ { opacity: 0, transform: t(x, y, 0.25), offset: 1 }
3533
+ ],
3534
+ 650,
3535
+ delay
3536
+ );
3537
+ });
3538
+ const impact = (start, duration) => {
3539
+ a(
3540
+ ring,
3541
+ [
3542
+ { offset: 0, transform: "scale(1)" },
3543
+ { offset: start - 0.015, transform: "scale(1)" },
3544
+ { offset: start + 0.045, transform: "scale(.82,1.12)" },
3545
+ { offset: start + 0.12, transform: "scale(1.06,.97)" },
3546
+ { offset: start + 0.24, transform: "scale(1)" },
3547
+ { offset: 1, transform: "scale(1)" }
3548
+ ],
3549
+ duration
3550
+ );
3551
+ a(
3552
+ tail,
3553
+ [
3554
+ { offset: 0, transform: "translateX(0)" },
3555
+ { offset: start, transform: "translateX(0)" },
3556
+ { offset: start + 0.04, transform: "translateX(-.065em)" },
3557
+ { offset: start + 0.14, transform: "translateX(.018em)" },
3558
+ { offset: start + 0.24, transform: "translateX(0)" },
3559
+ { offset: 1, transform: "translateX(0)" }
3560
+ ],
3561
+ duration
3562
+ );
3563
+ };
3564
+ if (name === "bounce") {
3565
+ const beadRect = bead.getBoundingClientRect();
3566
+ const viewportUnitX = beadRect.width > 0 ? beadRect.width / 0.2 : unit;
3567
+ const viewportUnitY = beadRect.height > 0 ? beadRect.height / 0.2 : unit;
3568
+ const originX = beadRect.x + beadRect.width / 2;
3569
+ const originY = beadRect.y + beadRect.height / 2;
3570
+ const letters = Array.from(
3571
+ p.querySelectorAll("[data-brand-letter]")
3572
+ ).reverse();
3573
+ const baseline = p.querySelector("[data-brand-baseline]")?.getBoundingClientRect().top ?? originY;
3574
+ const pen = typeof CanvasRenderingContext2D !== "undefined" ? document.createElement("canvas").getContext("2d") : null;
3575
+ if (pen) pen.font = getComputedStyle(logo).font;
3576
+ const stops = letters.length ? letters.map((letter) => {
3577
+ const rect = letter.getBoundingClientRect();
3578
+ const ascent = pen?.measureText(letter.textContent ?? "").actualBoundingBoxAscent ?? unit * 0.7;
3579
+ return {
3580
+ x: (rect.x + rect.width / 2 - originX) / viewportUnitX,
3581
+ y: (baseline - originY) / viewportUnitY - ascent / unit - 0.1
3582
+ };
3583
+ }) : [
3584
+ { x: -1.1, y: -0.7 },
3585
+ { x: -0.3, y: -0.4 },
3586
+ { x: 0.3, y: -0.4 }
3587
+ ];
3588
+ const duration = 1e3 + stops.length * 340;
3589
+ let from = { x: stops[0].x + 0.5, y: stops[0].y - 0.65 };
3590
+ const frames = [{ offset: 0, transform: t(from.x, from.y) }];
3591
+ const destinations = [...stops, { x: 0, y: 0 }];
3592
+ const jumpEnd = 0.94;
3593
+ destinations.forEach((to, index) => {
3594
+ const start = index / destinations.length * jumpEnd;
3595
+ const length = jumpEnd / destinations.length;
3596
+ for (let k = 1; k <= 10; k++) {
3597
+ const u = k / 10;
3598
+ frames.push({
3599
+ offset: start + length * u * 0.87,
3600
+ transform: t(
3601
+ from.x + (to.x - from.x) * u,
3602
+ from.y + (to.y - from.y) * u - 1.6 * u * (1 - u)
3603
+ )
3604
+ });
3605
+ }
3606
+ frames.push({
3607
+ offset: start + length * 0.94,
3608
+ transform: t(to.x, to.y + 0.018, 1.15, 0.82)
3609
+ });
3610
+ frames.push({ offset: start + length, transform: t(to.x, to.y) });
3611
+ from = to;
3612
+ });
3613
+ frames.push({ offset: 1, transform: t(0, 0) });
3614
+ a(bead, frames, duration);
3615
+ shock(duration * 0.94, 0.5);
3616
+ } else if (name === "orbit") {
3617
+ const frames = [];
3618
+ for (let step = 0; step <= 72; step++) {
3619
+ const u = step / 72;
3620
+ const angle = -Math.PI / 2 + u * Math.PI * 3.7;
3621
+ const radius = 0.683 * (1 - u ** 2.4);
3622
+ frames.push({
3623
+ offset: u,
3624
+ transform: t(Math.cos(angle) * radius, Math.sin(angle) * radius)
3625
+ });
3626
+ }
3627
+ a(bead, frames, 2500);
3628
+ a(
3629
+ ring,
3630
+ [
3631
+ { transform: "scale(1)" },
3632
+ { offset: 0.8, transform: "scale(1.06)" },
3633
+ { offset: 1, transform: "scale(1)" }
3634
+ ],
3635
+ 2500
3636
+ );
3637
+ shock(2400, 0.5);
3638
+ } else if (name === "impact") {
3639
+ const d = 1650;
3640
+ a(
3641
+ bead,
3642
+ points([
3643
+ [0, 6.5, 0, 4, 0.38],
3644
+ [0.2, 6.5, 0, 4, 0.38],
3645
+ [0.3, 1.5, 0, 4, 0.38],
3646
+ [0.33, 0, 0, 0.55, 1.55],
3647
+ [0.39, -0.09, 0, 1.35, 0.72],
3648
+ [0.48, 0.035, 0, 0.93, 1.06],
3649
+ [0.65, 0, 0, 1, 1],
3650
+ [1, 0, 0, 1, 1]
3651
+ ]),
3652
+ d
3653
+ );
3654
+ a(
3655
+ q('[data-logo-part="trail"]'),
3656
+ [
3657
+ { opacity: 0, transform: t(6.5, 0, 2, 1) },
3658
+ { opacity: 0, transform: t(6.5, 0, 2, 1), offset: 0.2 },
3659
+ { opacity: 0.6, transform: t(0.5, 0, 1.8, 1), offset: 0.32 },
3660
+ { opacity: 0, transform: t(0, 0, 0.1, 1), offset: 0.39 },
3661
+ { opacity: 0, offset: 1 }
3662
+ ],
3663
+ d
3664
+ );
3665
+ impact(0.33, d);
3666
+ shock(545);
3667
+ sparks(545, 0.94);
3668
+ } else if (name === "liquid") {
3669
+ const d = 2400;
3670
+ a(
3671
+ bead,
3672
+ points([
3673
+ [0, 0, 0, 4],
3674
+ [0.15, 0, 0, 4],
3675
+ [0.3, 0, 0, 5.2, 2.7],
3676
+ [0.43, 0, 0, 2.8, 4.4],
3677
+ [0.58, 0, 0, 1.6, 2],
3678
+ [0.74, 0, 0, 0.85, 1.15],
3679
+ [0.88, 0, 0, 1.06, 0.94],
3680
+ [1, 0, 0, 1]
3681
+ ]),
3682
+ d
3683
+ );
3684
+ a(
3685
+ ring,
3686
+ [
3687
+ { offset: 0, opacity: 0, transform: "scale(.2) rotate(-35deg)" },
3688
+ { offset: 0.36, opacity: 0, transform: "scale(.2) rotate(-35deg)" },
3689
+ { offset: 0.63, opacity: 1, transform: "scale(1.1,.9) rotate(8deg)" },
3690
+ { offset: 0.8, opacity: 1, transform: "scale(.97,1.03) rotate(-2deg)" },
3691
+ { offset: 1, opacity: 1, transform: "scale(1) rotate(0deg)" }
3692
+ ],
3693
+ d
3694
+ );
3695
+ a(
3696
+ tail,
3697
+ [
3698
+ { offset: 0, opacity: 0, transform: "translateX(-.25em)" },
3699
+ { offset: 0.35, opacity: 0, transform: "translateX(-.25em)" },
3700
+ { offset: 0.72, opacity: 1, transform: "translateX(.025em)" },
3701
+ { offset: 1, opacity: 1, transform: "translateX(0)" }
3702
+ ],
3703
+ d
3704
+ );
3705
+ } else if (name === "gravity") {
3706
+ const d = 2600;
3707
+ a(
3708
+ bead,
3709
+ points([
3710
+ [0, 0, -1.15, 4],
3711
+ [0.12, 0, -1.15, 4],
3712
+ [0.24, 0, -0.88, 4],
3713
+ [0.34, 0, -0.35, 3.7, 4.3],
3714
+ [0.4, 0, 0.15, 5.1, 2.5],
3715
+ [0.49, 0, -0.32, 3.4, 4.2],
3716
+ [0.58, 0, 0.07, 4.4, 3.5],
3717
+ [0.67, 0, 0, 3.8, 4],
3718
+ [0.81, 0, 0, 0.78, 1.22],
3719
+ [0.91, 0, 0, 1.1, 0.9],
3720
+ [1, 0, 0, 1]
3721
+ ]),
3722
+ d
3723
+ );
3724
+ a(
3725
+ ring,
3726
+ [
3727
+ { offset: 0, opacity: 0, transform: "scale(.25)" },
3728
+ { offset: 0.64, opacity: 0, transform: "scale(.25)" },
3729
+ { offset: 0.81, opacity: 1, transform: "scale(1.12,.88)" },
3730
+ { offset: 0.92, opacity: 1, transform: "scale(.97,1.03)" },
3731
+ { offset: 1, opacity: 1, transform: "scale(1)" }
3732
+ ],
3733
+ d
3734
+ );
3735
+ a(
3736
+ tail,
3737
+ [
3738
+ { offset: 0, opacity: 0, transform: "translateY(.12em)" },
3739
+ { offset: 0.43, opacity: 0, transform: "translateY(.12em)" },
3740
+ { offset: 0.72, opacity: 1, transform: "translateY(0)" },
3741
+ { offset: 1, opacity: 1, transform: "translateY(0)" }
3742
+ ],
3743
+ d
3744
+ );
3745
+ shock(1040, 0.5);
3746
+ } else if (name === "signature") {
3747
+ const d = 2200;
3748
+ a(
3749
+ core,
3750
+ [
3751
+ { opacity: 1, background: accent2, transform: "scale(1)" },
3752
+ { opacity: 1, background: accent2, transform: "scale(1.08)", offset: 0.22 },
3753
+ { opacity: 1, background: accent2, transform: "scale(.22)", offset: 0.65 },
3754
+ { opacity: 1, background: accent2, transform: "scale(.25)", offset: 0.84 },
3755
+ { opacity: 0, background: accent2, transform: "scale(.25)", offset: 1 }
3756
+ ],
3757
+ d
3758
+ );
3759
+ a(
3760
+ bead,
3761
+ [{ opacity: 0 }, { opacity: 0, offset: 0.85 }, { opacity: 1, offset: 1 }],
3762
+ d
3763
+ );
3764
+ a(
3765
+ ring,
3766
+ [
3767
+ { opacity: 0, transform: "scale(.3)" },
3768
+ { opacity: 0, transform: "scale(.3)", offset: 0.25 },
3769
+ { opacity: 1, transform: "scale(1.04)", offset: 0.65 },
3770
+ { opacity: 1, transform: "scale(1)", offset: 0.83 },
3771
+ { opacity: 1, transform: "scale(1)", offset: 1 }
3772
+ ],
3773
+ d
3774
+ );
3775
+ a(
3776
+ tail,
3777
+ [
3778
+ { opacity: 0, transform: "translateX(-.18em)" },
3779
+ { opacity: 0, transform: "translateX(-.18em)", offset: 0.22 },
3780
+ { opacity: 1, transform: "translateX(0)", offset: 0.64 },
3781
+ { opacity: 1, transform: "translateX(0)", offset: 1 }
3782
+ ],
3783
+ d
3784
+ );
3785
+ } else {
3786
+ const d = 2500;
3787
+ a(
3788
+ core,
3789
+ [
3790
+ { opacity: 1, background: accent2, transform: "scale(.92)" },
3791
+ { opacity: 1, background: accent2, transform: "scale(1.14)", offset: 0.24 },
3792
+ { opacity: 0, background: accent2, transform: "scale(.1)", offset: 0.36 },
3793
+ { opacity: 0, offset: 1 }
3794
+ ],
3795
+ d
3796
+ );
3797
+ a(
3798
+ bead,
3799
+ [
3800
+ { opacity: 0, transform: "scale(.2)" },
3801
+ { opacity: 0, transform: "scale(.2)", offset: 0.69 },
3802
+ { opacity: 1, transform: "scale(1.2)", offset: 0.84 },
3803
+ { opacity: 1, transform: "scale(1)", offset: 1 }
3804
+ ],
3805
+ d
3806
+ );
3807
+ a(
3808
+ ring,
3809
+ [
3810
+ { opacity: 0, transform: "scale(.82)" },
3811
+ { opacity: 0, transform: "scale(.82)", offset: 0.34 },
3812
+ { opacity: 0.7, transform: "scale(1.04)", offset: 0.57 },
3813
+ { opacity: 1, transform: "scale(1)", offset: 0.82 },
3814
+ { opacity: 1, transform: "scale(1)", offset: 1 }
3815
+ ],
3816
+ d
3817
+ );
3818
+ a(
3819
+ tail,
3820
+ [
3821
+ { opacity: 0.15, transform: "translateX(-.06em)" },
3822
+ { opacity: 0.15, transform: "translateX(-.06em)", offset: 0.3 },
3823
+ { opacity: 1, transform: "translateX(0)", offset: 0.68 },
3824
+ { opacity: 1, transform: "translateX(0)", offset: 1 }
3825
+ ],
3826
+ d
3827
+ );
3828
+ p.querySelectorAll('[data-logo-part="particle"]').forEach((el, j) => {
3829
+ const angle = j * Math.PI / 4, x = Math.cos(angle) * 0.86, y = Math.sin(angle) * 0.86;
3830
+ a(
3831
+ el,
3832
+ [
3833
+ { opacity: 0, transform: t(0, 0, 0.2) },
3834
+ { opacity: 0, transform: t(0, 0, 0.2), offset: 0.27 },
3835
+ { opacity: 1, transform: t(x, y, 1.2), offset: 0.43 },
3836
+ { opacity: 1, transform: t(x * 0.85, y * 0.85), offset: 0.59 },
3837
+ { opacity: 0, transform: t(0, 0, 0.5), offset: 0.82 },
3838
+ { opacity: 0, transform: t(0, 0, 0.5), offset: 1 }
3839
+ ],
3840
+ d
3841
+ );
3842
+ });
3843
+ shock(1800, 0.6);
3844
+ }
3845
+ let cancelled = false;
3846
+ void Promise.all(list.map((animation) => animation.finished)).then(
3847
+ () => {
3848
+ if (!cancelled) {
3849
+ for (const animation of list) animation.cancel();
3850
+ onComplete?.();
3851
+ }
3852
+ },
3853
+ () => {
3854
+ }
3855
+ );
3856
+ return () => {
3857
+ cancelled = true;
3858
+ for (const animation of list) animation.cancel();
3859
+ };
3860
+ }
3861
+
3862
+ // src/patterns/animated-brand/AnimatedBrand.tsx
3863
+ import { jsx as jsx49, jsxs as jsxs31 } from "react/jsx-runtime";
3864
+ var absolute = {
3865
+ position: "absolute",
3866
+ borderRadius: "50%",
3867
+ pointerEvents: "none"
3868
+ };
3869
+ var centered = {
3870
+ ...absolute,
3871
+ width: ".2em",
3872
+ height: ".2em",
3873
+ left: "50%",
3874
+ top: "50%",
3875
+ margin: "-.1em"
3876
+ };
3877
+ var accent = "var(--bms-brand-dot)";
3878
+ function AnimatedBrand({
3879
+ product = "Brain",
3880
+ dotColor = "#e60028",
3881
+ textColor = "#929292",
3882
+ oneColor,
3883
+ productColor,
3884
+ ringColor,
3885
+ mode = "full",
3886
+ animation = "random",
3887
+ size = 48,
3888
+ autoPlay = true,
3889
+ replayKey,
3890
+ onComplete,
3891
+ className,
3892
+ style
3893
+ }) {
3894
+ const ref = useRef9(null);
3895
+ const completion = useRef9(onComplete);
3896
+ const [segmented, setSegmented] = useState16(null);
3897
+ useEffect9(() => {
3898
+ const letters2 = typeof Intl.Segmenter === "function" ? Array.from(new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(product), ({ segment }) => segment) : product ? [product] : [];
3899
+ setSegmented({ product, letters: letters2 });
3900
+ }, [product]);
3901
+ useEffect9(() => {
3902
+ completion.current = onComplete;
3903
+ }, [onComplete]);
3904
+ useEffect9(() => {
3905
+ const element = ref.current;
3906
+ if (!element || !autoPlay || segmented?.product !== product) return;
3907
+ let disposed = false;
3908
+ let stop;
3909
+ let completed = false;
3910
+ const finish = () => {
3911
+ if (!disposed && !completed) {
3912
+ completed = true;
3913
+ completion.current?.();
3914
+ }
3915
+ };
3916
+ const reduced = window.matchMedia("(prefers-reduced-motion: reduce)");
3917
+ const changed = () => {
3918
+ if (reduced.matches) {
3919
+ stop?.();
3920
+ finish();
3921
+ }
3922
+ };
3923
+ reduced.addEventListener("change", changed);
3924
+ const start = () => {
3925
+ if (disposed || completed) return;
3926
+ if (reduced.matches) {
3927
+ finish();
3928
+ return;
3929
+ }
3930
+ const choice = animation === "random" ? BRAND_ANIMATIONS[Math.floor(Math.random() * BRAND_ANIMATIONS.length)].id : animation;
3931
+ stop = playBrandMotion(element, choice, finish);
3932
+ };
3933
+ void (document.fonts?.ready ?? Promise.resolve()).then(start, start);
3934
+ return () => {
3935
+ disposed = true;
3936
+ stop?.();
3937
+ reduced.removeEventListener("change", changed);
3938
+ };
3939
+ }, [product, mode, animation, size, autoPlay, replayKey, segmented]);
3940
+ const tail = mode === "full" ? `ne${product}` : mode === "one" ? "ne" : "";
3941
+ const suffix = mode === "full" && product ? segmented?.product === product ? segmented.letters : [product] : [];
3942
+ const letters = tail ? ["n", "e", ...suffix] : [];
3943
+ const label = mode === "full" ? `One${product}` : mode === "one" ? "One" : "O";
3944
+ const wrapperStyle = {
3945
+ "--bms-brand-dot": dotColor,
3946
+ display: "inline-flex",
3947
+ fontSize: size,
3948
+ color: textColor,
3949
+ ...style
3950
+ };
3951
+ return /* @__PURE__ */ jsx49(
3952
+ "span",
3953
+ {
3954
+ ref,
3955
+ className,
3956
+ style: wrapperStyle,
3957
+ children: /* @__PURE__ */ jsxs31(
3958
+ "span",
3959
+ {
3960
+ "data-logo-part": "logo",
3961
+ role: "img",
3962
+ "aria-label": label,
3963
+ style: {
3964
+ display: "inline-flex",
3965
+ position: "relative",
3966
+ alignItems: "center",
3967
+ fontSize: "inherit",
3968
+ fontWeight: 700,
3969
+ lineHeight: 1,
3970
+ letterSpacing: "-.055em",
3971
+ whiteSpace: "nowrap",
3972
+ userSelect: "none"
3973
+ },
3974
+ children: [
3975
+ /* @__PURE__ */ jsxs31(
3976
+ "span",
3977
+ {
3978
+ "data-logo-part": "mark",
3979
+ "aria-hidden": "true",
3980
+ style: {
3981
+ position: "relative",
3982
+ flex: "none",
3983
+ color: ringColor ?? oneColor,
3984
+ width: ".8em",
3985
+ height: ".8em",
3986
+ marginRight: tail ? ".04em" : 0
3987
+ },
3988
+ children: [
3989
+ /* @__PURE__ */ jsx49(
3990
+ "span",
3991
+ {
3992
+ "data-logo-part": "ring",
3993
+ style: {
3994
+ ...absolute,
3995
+ inset: 0,
3996
+ border: ".157em solid currentColor",
3997
+ boxSizing: "border-box"
3998
+ }
3999
+ }
4000
+ ),
4001
+ /* @__PURE__ */ jsx49(
4002
+ "span",
4003
+ {
4004
+ "data-logo-part": "core",
4005
+ style: {
4006
+ ...absolute,
4007
+ inset: 0,
4008
+ background: accent,
4009
+ opacity: 0,
4010
+ zIndex: 2
4011
+ }
4012
+ }
4013
+ ),
4014
+ /* @__PURE__ */ jsx49(
4015
+ "span",
4016
+ {
4017
+ "data-logo-part": "trail",
4018
+ style: {
4019
+ position: "absolute",
4020
+ width: "1.8em",
4021
+ height: ".045em",
4022
+ left: "50%",
4023
+ top: "50%",
4024
+ marginTop: "-.0225em",
4025
+ background: `linear-gradient(90deg, ${accent}, transparent)`,
4026
+ transformOrigin: "left center",
4027
+ opacity: 0,
4028
+ pointerEvents: "none"
4029
+ }
4030
+ }
4031
+ ),
4032
+ [0, 1].map((id) => /* @__PURE__ */ jsx49(
4033
+ "span",
4034
+ {
4035
+ "data-logo-part": "echo",
4036
+ style: {
4037
+ ...centered,
4038
+ border: `.025em solid ${accent}`,
4039
+ boxSizing: "border-box",
4040
+ opacity: 0
4041
+ }
4042
+ },
4043
+ id
4044
+ )),
4045
+ Array.from({ length: 8 }, (_, id) => /* @__PURE__ */ jsx49(
4046
+ "span",
4047
+ {
4048
+ "data-logo-part": "particle",
4049
+ style: {
4050
+ ...centered,
4051
+ width: ".055em",
4052
+ height: ".055em",
4053
+ margin: "-.0275em",
4054
+ background: accent,
4055
+ opacity: 0
4056
+ }
4057
+ },
4058
+ id
4059
+ )),
4060
+ /* @__PURE__ */ jsx49(
4061
+ "span",
4062
+ {
4063
+ "data-logo-part": "bead",
4064
+ style: { ...centered, background: accent, zIndex: 3 }
4065
+ }
4066
+ )
4067
+ ]
4068
+ }
4069
+ ),
4070
+ /* @__PURE__ */ jsxs31(
4071
+ "span",
4072
+ {
4073
+ "data-logo-part": "tail",
4074
+ "aria-hidden": "true",
4075
+ style: {
4076
+ display: "inline-flex",
4077
+ alignItems: "baseline",
4078
+ whiteSpace: "pre"
4079
+ },
4080
+ children: [
4081
+ letters.map((letter, index) => /* @__PURE__ */ jsx49(
4082
+ "span",
4083
+ {
4084
+ "data-brand-letter": "",
4085
+ style: { display: "inline-block", color: index < 2 ? oneColor : productColor },
4086
+ children: letter
4087
+ },
4088
+ `${index}-${letter}`
4089
+ )),
4090
+ /* @__PURE__ */ jsx49(
4091
+ "span",
4092
+ {
4093
+ "data-brand-baseline": "",
4094
+ style: {
4095
+ display: "inline-block",
4096
+ width: 0,
4097
+ height: 0,
4098
+ alignSelf: "baseline"
4099
+ }
4100
+ }
4101
+ )
4102
+ ]
4103
+ }
4104
+ )
4105
+ ]
4106
+ }
4107
+ )
4108
+ }
4109
+ );
4110
+ }
3464
4111
  export {
3465
4112
  AiButton,
3466
4113
  AiExplainButton,
3467
4114
  AlertBox,
4115
+ AnimatedBrand,
3468
4116
  AsyncBoundary,
4117
+ BRAND_ANIMATIONS,
3469
4118
  Badge,
3470
4119
  Button,
3471
4120
  ButtonGroup,