@algenium/blocks 1.7.0 → 1.8.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.d.cts CHANGED
@@ -215,16 +215,16 @@ type ThemeSwitcherProps = {
215
215
  align?: "start" | "center" | "end";
216
216
  /** Dropdown side (for mini variant) */
217
217
  side?: "top" | "bottom" | "left" | "right";
218
- /** Tooltip position relative to the mini trigger (mini variant only) */
218
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
219
219
  tooltipSide?: "top" | "right" | "bottom" | "left";
220
- /** Tooltip alignment (mini variant only) */
220
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
221
221
  tooltipAlign?: "start" | "center" | "end";
222
- /** Tooltip offset from the trigger in px (mini variant only) */
222
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
223
223
  tooltipSideOffset?: number;
224
224
  /** Translation labels - consumers can pass their own t() values */
225
225
  labels?: ThemeSwitcherLabels;
226
226
  };
227
- declare function ThemeSwitcher({ className, size, shape, variant, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, labels: userLabels, }: ThemeSwitcherProps): react_jsx_runtime.JSX.Element;
227
+ declare function ThemeSwitcher({ className, size, shape, variant, align, side, labels: userLabels, }: ThemeSwitcherProps): react_jsx_runtime.JSX.Element;
228
228
 
229
229
  type Language = {
230
230
  /** Language key/code (e.g., "en", "es") */
@@ -274,14 +274,14 @@ type LanguageSwitcherProps = {
274
274
  align?: "start" | "center" | "end";
275
275
  /** Dropdown side */
276
276
  side?: "top" | "bottom" | "left" | "right";
277
- /** Tooltip position relative to the mini trigger (mini variant only) */
277
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
278
278
  tooltipSide?: "top" | "right" | "bottom" | "left";
279
- /** Tooltip alignment (mini variant only) */
279
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
280
280
  tooltipAlign?: "start" | "center" | "end";
281
- /** Tooltip offset from the trigger in px (mini variant only) */
281
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
282
282
  tooltipSideOffset?: number;
283
283
  };
284
- declare function LanguageSwitcher({ languages: propLanguages, currentLanguage: propCurrentLanguage, onLanguageChange: propOnLanguageChange, labels, className, size, shape, variant, showIcon, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, }: LanguageSwitcherProps): react_jsx_runtime.JSX.Element;
284
+ declare function LanguageSwitcher({ languages: propLanguages, currentLanguage: propCurrentLanguage, onLanguageChange: propOnLanguageChange, labels, className, size, shape, variant, showIcon, align, side, }: LanguageSwitcherProps): react_jsx_runtime.JSX.Element;
285
285
 
286
286
  type EnvironmentSwitcherLabels = {
287
287
  /** Tooltip / aria for the control */
@@ -336,11 +336,14 @@ type EnvironmentSwitcherProps = {
336
336
  variant?: "default" | "mini";
337
337
  align?: "start" | "center" | "end";
338
338
  side?: "top" | "bottom" | "left" | "right";
339
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
339
340
  tooltipSide?: "top" | "right" | "bottom" | "left";
341
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
340
342
  tooltipAlign?: "start" | "center" | "end";
343
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
341
344
  tooltipSideOffset?: number;
342
345
  };
343
- declare function EnvironmentSwitcher({ className, environment: propEnvironment, onEnvironmentChange: propOnEnvironmentChange, environments: propEnvironments, labels: userLabels, size, shape, variant, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, }: EnvironmentSwitcherProps): react_jsx_runtime.JSX.Element;
346
+ declare function EnvironmentSwitcher({ className, environment: propEnvironment, onEnvironmentChange: propOnEnvironmentChange, environments: propEnvironments, labels: userLabels, size, shape, variant, align, side, }: EnvironmentSwitcherProps): react_jsx_runtime.JSX.Element;
344
347
 
345
348
  type EnvironmentBannerLabels = {
346
349
  stagingMessage?: string;
package/dist/index.d.ts CHANGED
@@ -215,16 +215,16 @@ type ThemeSwitcherProps = {
215
215
  align?: "start" | "center" | "end";
216
216
  /** Dropdown side (for mini variant) */
217
217
  side?: "top" | "bottom" | "left" | "right";
218
- /** Tooltip position relative to the mini trigger (mini variant only) */
218
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
219
219
  tooltipSide?: "top" | "right" | "bottom" | "left";
220
- /** Tooltip alignment (mini variant only) */
220
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
221
221
  tooltipAlign?: "start" | "center" | "end";
222
- /** Tooltip offset from the trigger in px (mini variant only) */
222
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
223
223
  tooltipSideOffset?: number;
224
224
  /** Translation labels - consumers can pass their own t() values */
225
225
  labels?: ThemeSwitcherLabels;
226
226
  };
227
- declare function ThemeSwitcher({ className, size, shape, variant, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, labels: userLabels, }: ThemeSwitcherProps): react_jsx_runtime.JSX.Element;
227
+ declare function ThemeSwitcher({ className, size, shape, variant, align, side, labels: userLabels, }: ThemeSwitcherProps): react_jsx_runtime.JSX.Element;
228
228
 
229
229
  type Language = {
230
230
  /** Language key/code (e.g., "en", "es") */
@@ -274,14 +274,14 @@ type LanguageSwitcherProps = {
274
274
  align?: "start" | "center" | "end";
275
275
  /** Dropdown side */
276
276
  side?: "top" | "bottom" | "left" | "right";
277
- /** Tooltip position relative to the mini trigger (mini variant only) */
277
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
278
278
  tooltipSide?: "top" | "right" | "bottom" | "left";
279
- /** Tooltip alignment (mini variant only) */
279
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
280
280
  tooltipAlign?: "start" | "center" | "end";
281
- /** Tooltip offset from the trigger in px (mini variant only) */
281
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
282
282
  tooltipSideOffset?: number;
283
283
  };
284
- declare function LanguageSwitcher({ languages: propLanguages, currentLanguage: propCurrentLanguage, onLanguageChange: propOnLanguageChange, labels, className, size, shape, variant, showIcon, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, }: LanguageSwitcherProps): react_jsx_runtime.JSX.Element;
284
+ declare function LanguageSwitcher({ languages: propLanguages, currentLanguage: propCurrentLanguage, onLanguageChange: propOnLanguageChange, labels, className, size, shape, variant, showIcon, align, side, }: LanguageSwitcherProps): react_jsx_runtime.JSX.Element;
285
285
 
286
286
  type EnvironmentSwitcherLabels = {
287
287
  /** Tooltip / aria for the control */
@@ -336,11 +336,14 @@ type EnvironmentSwitcherProps = {
336
336
  variant?: "default" | "mini";
337
337
  align?: "start" | "center" | "end";
338
338
  side?: "top" | "bottom" | "left" | "right";
339
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
339
340
  tooltipSide?: "top" | "right" | "bottom" | "left";
341
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
340
342
  tooltipAlign?: "start" | "center" | "end";
343
+ /** @deprecated No longer used; mini variant no longer renders a tooltip. */
341
344
  tooltipSideOffset?: number;
342
345
  };
343
- declare function EnvironmentSwitcher({ className, environment: propEnvironment, onEnvironmentChange: propOnEnvironmentChange, environments: propEnvironments, labels: userLabels, size, shape, variant, align, side, tooltipSide, tooltipAlign, tooltipSideOffset, }: EnvironmentSwitcherProps): react_jsx_runtime.JSX.Element;
346
+ declare function EnvironmentSwitcher({ className, environment: propEnvironment, onEnvironmentChange: propOnEnvironmentChange, environments: propEnvironments, labels: userLabels, size, shape, variant, align, side, }: EnvironmentSwitcherProps): react_jsx_runtime.JSX.Element;
344
347
 
345
348
  type EnvironmentBannerLabels = {
346
349
  stagingMessage?: string;
package/dist/index.js CHANGED
@@ -6,13 +6,13 @@ import { AnimatePresence, motion } from 'framer-motion';
6
6
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import { Slot } from '@radix-ui/react-slot';
9
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
10
9
  import * as SliderPrimitive from '@radix-ui/react-slider';
11
10
  import * as TogglePrimitive from '@radix-ui/react-toggle';
12
11
  import * as DialogPrimitive from '@radix-ui/react-dialog';
13
12
  import { Drawer as Drawer$1 } from 'vaul';
14
13
  import * as PopoverPrimitive from '@radix-ui/react-popover';
15
14
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
15
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
16
16
  import { startOfMonth, endOfMonth, eachDayOfInterval, endOfWeek, startOfWeek, format, isSameDay, subMonths, addMonths } from 'date-fns';
17
17
  import { DayPicker } from 'react-day-picker';
18
18
  import valid from 'card-validator';
@@ -3084,6 +3084,11 @@ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
3084
3084
  function cn(...inputs) {
3085
3085
  return twMerge(clsx(inputs));
3086
3086
  }
3087
+ var miniMenuContentClassName = "max-h-none overflow-x-visible overflow-y-visible";
3088
+ var miniMenuContentDefaults = {
3089
+ sideOffset: 8,
3090
+ collisionPadding: 12
3091
+ };
3087
3092
  function DropdownMenu({
3088
3093
  ...props
3089
3094
  }) {
@@ -3382,52 +3387,6 @@ function Button({
3382
3387
  }
3383
3388
  );
3384
3389
  }
3385
- function TooltipProvider({
3386
- delayDuration = 0,
3387
- ...props
3388
- }) {
3389
- return /* @__PURE__ */ jsx(
3390
- TooltipPrimitive.Provider,
3391
- {
3392
- "data-slot": "tooltip-provider",
3393
- delayDuration,
3394
- ...props
3395
- }
3396
- );
3397
- }
3398
- function Tooltip({
3399
- ...props
3400
- }) {
3401
- return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
3402
- }
3403
- function TooltipTrigger({
3404
- ...props
3405
- }) {
3406
- return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
3407
- }
3408
- function TooltipContent({
3409
- className,
3410
- sideOffset = 0,
3411
- children,
3412
- ...props
3413
- }) {
3414
- return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
3415
- TooltipPrimitive.Content,
3416
- {
3417
- "data-slot": "tooltip-content",
3418
- sideOffset,
3419
- className: cn(
3420
- "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
3421
- className
3422
- ),
3423
- ...props,
3424
- children: [
3425
- children,
3426
- /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
3427
- ]
3428
- }
3429
- ) });
3430
- }
3431
3390
  var defaultLabels = {
3432
3391
  theme: "Theme",
3433
3392
  system: "System",
@@ -3471,11 +3430,8 @@ function ThemeSwitcher({
3471
3430
  size = "sm",
3472
3431
  shape = "rounded",
3473
3432
  variant = "default",
3474
- align = "center",
3475
- side = "top",
3476
- tooltipSide = "bottom",
3477
- tooltipAlign = "center",
3478
- tooltipSideOffset = 8,
3433
+ align = "end",
3434
+ side = "bottom",
3479
3435
  labels: userLabels
3480
3436
  }) {
3481
3437
  const { theme, setTheme } = useTheme();
@@ -3509,43 +3465,42 @@ function ThemeSwitcher({
3509
3465
  const CurrentIcon = themes.find((t) => t.key === currentTheme)?.icon || Monitor;
3510
3466
  if (variant === "mini") {
3511
3467
  return /* @__PURE__ */ jsxs(DropdownMenu, { modal: false, children: [
3512
- /* @__PURE__ */ jsxs(Tooltip, { children: [
3513
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
3514
- Button,
3515
- {
3516
- "data-testid": "theme-switcher",
3517
- variant: "ghost",
3518
- size: "icon",
3519
- "aria-label": labels.theme,
3520
- className: cn(sizes.buttonMini, shapeClass, className),
3521
- children: /* @__PURE__ */ jsx(CurrentIcon, { className: sizes.iconMini })
3522
- }
3523
- ) }) }),
3524
- /* @__PURE__ */ jsx(
3525
- TooltipContent,
3526
- {
3527
- side: tooltipSide,
3528
- align: tooltipAlign,
3529
- sideOffset: tooltipSideOffset,
3530
- children: labels.theme
3531
- }
3532
- )
3533
- ] }),
3534
- /* @__PURE__ */ jsx(DropdownMenuContent, { side, align, sideOffset: 8, children: themes.map(({ key, icon: Icon }) => /* @__PURE__ */ jsxs(
3535
- DropdownMenuItem,
3468
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
3469
+ Button,
3536
3470
  {
3537
- onClick: () => handleThemeClick(key),
3538
- className: cn(
3539
- "gap-2 cursor-pointer",
3540
- currentTheme === key && "bg-accent text-accent-foreground [&_svg]:text-accent-foreground"
3541
- ),
3542
- children: [
3543
- /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }),
3544
- /* @__PURE__ */ jsx("span", { children: labels[key] })
3545
- ]
3546
- },
3547
- key
3548
- )) })
3471
+ "data-testid": "theme-switcher",
3472
+ variant: "ghost",
3473
+ size: "icon",
3474
+ "aria-label": labels.theme,
3475
+ className: cn(sizes.buttonMini, shapeClass, className),
3476
+ children: /* @__PURE__ */ jsx(CurrentIcon, { className: sizes.iconMini })
3477
+ }
3478
+ ) }),
3479
+ /* @__PURE__ */ jsx(
3480
+ DropdownMenuContent,
3481
+ {
3482
+ side,
3483
+ align,
3484
+ sideOffset: miniMenuContentDefaults.sideOffset,
3485
+ collisionPadding: miniMenuContentDefaults.collisionPadding,
3486
+ className: miniMenuContentClassName,
3487
+ children: themes.map(({ key, icon: Icon }) => /* @__PURE__ */ jsxs(
3488
+ DropdownMenuItem,
3489
+ {
3490
+ onClick: () => handleThemeClick(key),
3491
+ className: cn(
3492
+ "gap-2 cursor-pointer",
3493
+ currentTheme === key && "bg-accent text-accent-foreground [&_svg]:text-accent-foreground"
3494
+ ),
3495
+ children: [
3496
+ /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }),
3497
+ /* @__PURE__ */ jsx("span", { children: labels[key] })
3498
+ ]
3499
+ },
3500
+ key
3501
+ ))
3502
+ }
3503
+ )
3549
3504
  ] });
3550
3505
  }
3551
3506
  return /* @__PURE__ */ jsx(
@@ -3639,11 +3594,8 @@ function LanguageSwitcher({
3639
3594
  shape = "rounded",
3640
3595
  variant = "default",
3641
3596
  showIcon = true,
3642
- align = "center",
3643
- side = "top",
3644
- tooltipSide = "bottom",
3645
- tooltipAlign = "center",
3646
- tooltipSideOffset = 8
3597
+ align = "end",
3598
+ side = "bottom"
3647
3599
  }) {
3648
3600
  const context = useLanguageContext();
3649
3601
  const contextLanguages = context?.languages?.map((lang) => ({
@@ -3661,34 +3613,24 @@ function LanguageSwitcher({
3661
3613
  };
3662
3614
  if (variant === "mini") {
3663
3615
  return /* @__PURE__ */ jsxs(DropdownMenu, { modal: false, children: [
3664
- /* @__PURE__ */ jsxs(Tooltip, { children: [
3665
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
3666
- Button,
3667
- {
3668
- variant: "ghost",
3669
- size: "icon",
3670
- "aria-label": defaultLabels4.language,
3671
- className: cn(sizes.buttonMini, shapeClass, className),
3672
- children: /* @__PURE__ */ jsx(Languages, { className: sizes.iconMini })
3673
- }
3674
- ) }) }),
3675
- /* @__PURE__ */ jsx(
3676
- TooltipContent,
3677
- {
3678
- side: tooltipSide,
3679
- align: tooltipAlign,
3680
- sideOffset: tooltipSideOffset,
3681
- children: defaultLabels4.language
3682
- }
3683
- )
3684
- ] }),
3616
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
3617
+ Button,
3618
+ {
3619
+ variant: "ghost",
3620
+ size: "icon",
3621
+ "aria-label": defaultLabels4.language,
3622
+ className: cn(sizes.buttonMini, shapeClass, className),
3623
+ children: /* @__PURE__ */ jsx(Languages, { className: sizes.iconMini })
3624
+ }
3625
+ ) }),
3685
3626
  /* @__PURE__ */ jsx(
3686
3627
  DropdownMenuContent,
3687
3628
  {
3688
3629
  side,
3689
3630
  align,
3690
- sideOffset: 8,
3691
- className: "min-w-0 w-auto",
3631
+ sideOffset: miniMenuContentDefaults.sideOffset,
3632
+ collisionPadding: miniMenuContentDefaults.collisionPadding,
3633
+ className: cn(miniMenuContentClassName, "min-w-0 w-auto"),
3692
3634
  children: languages.map(({ key, nativeName }) => /* @__PURE__ */ jsx(
3693
3635
  DropdownMenuItem,
3694
3636
  {
@@ -3888,10 +3830,7 @@ function EnvironmentSwitcher({
3888
3830
  shape = "rounded",
3889
3831
  variant = "mini",
3890
3832
  align = "end",
3891
- side = "bottom",
3892
- tooltipSide = "bottom",
3893
- tooltipAlign = "center",
3894
- tooltipSideOffset = 8
3833
+ side = "bottom"
3895
3834
  }) {
3896
3835
  const ctx = useEnvironmentContext();
3897
3836
  const labels = { ...defaultLabels2, ...userLabels };
@@ -3907,53 +3846,18 @@ function EnvironmentSwitcher({
3907
3846
  };
3908
3847
  if (variant === "mini") {
3909
3848
  return /* @__PURE__ */ jsxs(DropdownMenu, { modal: false, children: [
3910
- /* @__PURE__ */ jsxs(Tooltip, { children: [
3911
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
3912
- Button,
3913
- {
3914
- "data-testid": "environment-switcher",
3915
- variant: "outline",
3916
- size: "sm",
3917
- "aria-label": labels.environment,
3918
- className: cn(
3919
- sizes.buttonMini,
3920
- shapeClass,
3921
- "font-medium tabular-nums border-border bg-background",
3922
- className
3923
- ),
3924
- children: [
3925
- /* @__PURE__ */ jsx(
3926
- "span",
3927
- {
3928
- className: cn(
3929
- "rounded-full shrink-0 ring-1 ring-background",
3930
- sizes.dot,
3931
- getEnvironmentDotClass(environment)
3932
- ),
3933
- "aria-hidden": true
3934
- }
3935
- ),
3936
- /* @__PURE__ */ jsx("span", { className: "max-w-[5.5rem] truncate", children: getEnvironmentLabel(environment, labels) })
3937
- ]
3938
- }
3939
- ) }) }),
3940
- /* @__PURE__ */ jsx(
3941
- TooltipContent,
3942
- {
3943
- side: tooltipSide,
3944
- align: tooltipAlign,
3945
- sideOffset: tooltipSideOffset,
3946
- children: labels.environment
3947
- }
3948
- )
3949
- ] }),
3950
- /* @__PURE__ */ jsx(DropdownMenuContent, { side, align, sideOffset: 8, children: environments.map((env) => /* @__PURE__ */ jsxs(
3951
- DropdownMenuItem,
3849
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
3850
+ Button,
3952
3851
  {
3953
- onClick: () => handleSelect(env),
3852
+ "data-testid": "environment-switcher",
3853
+ variant: "outline",
3854
+ size: "sm",
3855
+ "aria-label": labels.environment,
3954
3856
  className: cn(
3955
- "gap-2 cursor-pointer",
3956
- environment === env && "bg-accent text-accent-foreground [&_svg]:text-accent-foreground"
3857
+ sizes.buttonMini,
3858
+ shapeClass,
3859
+ "font-medium tabular-nums border-border bg-background",
3860
+ className
3957
3861
  ),
3958
3862
  children: [
3959
3863
  /* @__PURE__ */ jsx(
@@ -3962,16 +3866,50 @@ function EnvironmentSwitcher({
3962
3866
  className: cn(
3963
3867
  "rounded-full shrink-0 ring-1 ring-background",
3964
3868
  sizes.dot,
3965
- getEnvironmentDotClass(env)
3869
+ getEnvironmentDotClass(environment)
3966
3870
  ),
3967
3871
  "aria-hidden": true
3968
3872
  }
3969
3873
  ),
3970
- /* @__PURE__ */ jsx("span", { children: getEnvironmentLabel(env, labels) })
3874
+ /* @__PURE__ */ jsx("span", { className: "max-w-[5.5rem] truncate", children: getEnvironmentLabel(environment, labels) })
3971
3875
  ]
3972
- },
3973
- env
3974
- )) })
3876
+ }
3877
+ ) }),
3878
+ /* @__PURE__ */ jsx(
3879
+ DropdownMenuContent,
3880
+ {
3881
+ side,
3882
+ align,
3883
+ sideOffset: miniMenuContentDefaults.sideOffset,
3884
+ collisionPadding: miniMenuContentDefaults.collisionPadding,
3885
+ className: miniMenuContentClassName,
3886
+ children: environments.map((env) => /* @__PURE__ */ jsxs(
3887
+ DropdownMenuItem,
3888
+ {
3889
+ onClick: () => handleSelect(env),
3890
+ className: cn(
3891
+ "gap-2 cursor-pointer",
3892
+ environment === env && "bg-accent text-accent-foreground [&_svg]:text-accent-foreground"
3893
+ ),
3894
+ children: [
3895
+ /* @__PURE__ */ jsx(
3896
+ "span",
3897
+ {
3898
+ className: cn(
3899
+ "rounded-full shrink-0 ring-1 ring-background",
3900
+ sizes.dot,
3901
+ getEnvironmentDotClass(env)
3902
+ ),
3903
+ "aria-hidden": true
3904
+ }
3905
+ ),
3906
+ /* @__PURE__ */ jsx("span", { children: getEnvironmentLabel(env, labels) })
3907
+ ]
3908
+ },
3909
+ env
3910
+ ))
3911
+ }
3912
+ )
3975
3913
  ] });
3976
3914
  }
3977
3915
  return /* @__PURE__ */ jsxs(
@@ -5829,6 +5767,52 @@ function UpcomingEvents({
5829
5767
  );
5830
5768
  }) });
5831
5769
  }
5770
+ function TooltipProvider({
5771
+ delayDuration = 0,
5772
+ ...props
5773
+ }) {
5774
+ return /* @__PURE__ */ jsx(
5775
+ TooltipPrimitive.Provider,
5776
+ {
5777
+ "data-slot": "tooltip-provider",
5778
+ delayDuration,
5779
+ ...props
5780
+ }
5781
+ );
5782
+ }
5783
+ function Tooltip({
5784
+ ...props
5785
+ }) {
5786
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
5787
+ }
5788
+ function TooltipTrigger({
5789
+ ...props
5790
+ }) {
5791
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
5792
+ }
5793
+ function TooltipContent({
5794
+ className,
5795
+ sideOffset = 0,
5796
+ children,
5797
+ ...props
5798
+ }) {
5799
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
5800
+ TooltipPrimitive.Content,
5801
+ {
5802
+ "data-slot": "tooltip-content",
5803
+ sideOffset,
5804
+ className: cn(
5805
+ "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
5806
+ className
5807
+ ),
5808
+ ...props,
5809
+ children: [
5810
+ children,
5811
+ /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
5812
+ ]
5813
+ }
5814
+ ) });
5815
+ }
5832
5816
  function CalendarSubscribeButton({
5833
5817
  feedUrl,
5834
5818
  label