@lindle/linoardo 1.0.10 → 1.0.11

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
@@ -1,7 +1,6 @@
1
- import * as React5 from 'react';
1
+ import * as React4 from 'react';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
- import { createPortal } from 'react-dom';
5
4
 
6
5
  // src/Containment/Button/index.tsx
7
6
 
@@ -130,7 +129,7 @@ var sizeClasses = {
130
129
  large: "px-6 py-3 text-lg",
131
130
  "x-large": "px-7 py-3.5 text-xl"
132
131
  };
133
- var Button = React5.forwardRef(
132
+ var Button = React4.forwardRef(
134
133
  ({
135
134
  variant = "solid",
136
135
  color = "primary",
@@ -301,7 +300,7 @@ var resolveIconClassName2 = (icon) => {
301
300
  const normalized = iconName.startsWith("mdi-") ? iconName : `mdi-${iconName}`;
302
301
  return Array.from(/* @__PURE__ */ new Set([...baseClasses, normalized])).join(" ");
303
302
  };
304
- var Chip = React5.forwardRef(
303
+ var Chip = React4.forwardRef(
305
304
  ({
306
305
  variant = "solid",
307
306
  color = "primary",
@@ -333,7 +332,7 @@ var Chip = React5.forwardRef(
333
332
  const appendIconClassName = resolveIconClassName2(appendIcon);
334
333
  const closeIconClassName = resolveIconClassName2(closeIcon);
335
334
  const filterIconClassName = filter && selected ? resolveIconClassName2(filterIcon) : void 0;
336
- const handleClick = React5.useCallback(
335
+ const handleClick = React4.useCallback(
337
336
  (event) => {
338
337
  if (disabled) {
339
338
  event.preventDefault();
@@ -344,7 +343,7 @@ var Chip = React5.forwardRef(
344
343
  },
345
344
  [disabled, onClick]
346
345
  );
347
- const handleKeyDown = React5.useCallback(
346
+ const handleKeyDown = React4.useCallback(
348
347
  (event) => {
349
348
  onKeyDown?.(event);
350
349
  if (event.defaultPrevented || disabled || !interactive) {
@@ -357,7 +356,7 @@ var Chip = React5.forwardRef(
357
356
  },
358
357
  [disabled, interactive, onKeyDown]
359
358
  );
360
- const handleCloseClick = React5.useCallback(
359
+ const handleCloseClick = React4.useCallback(
361
360
  (event) => {
362
361
  event.stopPropagation();
363
362
  if (disabled) {
@@ -368,7 +367,7 @@ var Chip = React5.forwardRef(
368
367
  },
369
368
  [disabled, onClose]
370
369
  );
371
- const handleCloseKeyDown = React5.useCallback((event) => {
370
+ const handleCloseKeyDown = React4.useCallback((event) => {
372
371
  if (event.key === " " || event.key === "Enter") {
373
372
  event.stopPropagation();
374
373
  }
@@ -440,7 +439,7 @@ var accentClasses = {
440
439
  surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
441
440
  bw: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
442
441
  };
443
- var ListItem = React5.forwardRef((props, ref) => {
442
+ var ListItem = React4.forwardRef((props, ref) => {
444
443
  const {
445
444
  component,
446
445
  href,
@@ -557,13 +556,13 @@ var listRoundedClasses = {
557
556
  pill: "rounded-full"
558
557
  };
559
558
  var isListItemElement = (element) => {
560
- if (!React5.isValidElement(element)) {
559
+ if (!React4.isValidElement(element)) {
561
560
  return false;
562
561
  }
563
562
  const elementType = element.type;
564
563
  return element.type === Item_default || elementType.displayName === Item_default.displayName;
565
564
  };
566
- var List = React5.forwardRef((props, ref) => {
565
+ var List = React4.forwardRef((props, ref) => {
567
566
  const {
568
567
  variant = "solid",
569
568
  density = "default",
@@ -585,11 +584,11 @@ var List = React5.forwardRef((props, ref) => {
585
584
  const navClass = nav ? "py-1" : void 0;
586
585
  const accentColor = color;
587
586
  const enhanceChild = (child) => {
588
- if (!React5.isValidElement(child)) {
587
+ if (!React4.isValidElement(child)) {
589
588
  return child;
590
589
  }
591
590
  if (isListItemElement(child)) {
592
- return React5.cloneElement(child, {
591
+ return React4.cloneElement(child, {
593
592
  density: child.props.density ?? density,
594
593
  lines: child.props.lines ?? lines,
595
594
  nav: child.props.nav ?? nav,
@@ -599,14 +598,14 @@ var List = React5.forwardRef((props, ref) => {
599
598
  });
600
599
  }
601
600
  if (child.props && typeof child.props === "object" && "children" in child.props) {
602
- const nestedChildren = React5.Children.map(child.props.children, enhanceChild);
601
+ const nestedChildren = React4.Children.map(child.props.children, enhanceChild);
603
602
  if (nestedChildren !== child.props.children) {
604
- return React5.cloneElement(child, void 0, nestedChildren);
603
+ return React4.cloneElement(child, void 0, nestedChildren);
605
604
  }
606
605
  }
607
606
  return child;
608
607
  };
609
- const resolvedChildren = React5.Children.map(children, enhanceChild);
608
+ const resolvedChildren = React4.Children.map(children, enhanceChild);
610
609
  return /* @__PURE__ */ jsx(
611
610
  "div",
612
611
  {
@@ -620,8 +619,6 @@ var List = React5.forwardRef((props, ref) => {
620
619
  });
621
620
  List.displayName = "List";
622
621
  var List_default = List;
623
- var isBrowser = typeof window !== "undefined";
624
- var useIsomorphicLayoutEffect = isBrowser ? React5.useLayoutEffect : React5.useEffect;
625
622
  var placementClasses = {
626
623
  "bottom-start": "left-0 top-full origin-top-left",
627
624
  bottom: "left-1/2 top-full -translate-x-1/2 origin-top",
@@ -634,350 +631,75 @@ var offsetClasses = {
634
631
  top: "mb-2",
635
632
  bottom: "mt-2"
636
633
  };
637
- var menuBaseClasses = "absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0 data-[state=closed]:scale-95 data-[state=open]:opacity-100 data-[state=open]:scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2";
634
+ var menuBaseClasses = "absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2";
638
635
  var overlayBaseClasses = "fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]";
639
- var Menu = React5.forwardRef((props, ref) => {
636
+ var Menu = React4.forwardRef((props, ref) => {
640
637
  const {
641
638
  activator,
642
639
  children,
643
- open: openProp,
644
- defaultOpen = false,
645
- onOpenChange,
646
640
  placement = "bottom-start",
647
- openOnHover = false,
648
- closeOnContentClick = true,
641
+ open,
642
+ openOnHover = true,
643
+ openOnFocus = true,
649
644
  matchActivatorWidth = false,
650
645
  keepMounted = false,
651
- disabled = false,
652
646
  scrim = false,
653
647
  contentClassName,
654
648
  contentProps,
655
649
  overlayClassName,
656
650
  className,
657
- onMouseEnter: rootMouseEnter,
658
- onMouseLeave: rootMouseLeave,
659
651
  ...rest
660
652
  } = props;
661
- const baseId = React5.useId();
662
- const menuId = `${baseId}-menu`;
663
- const activatorId = `${baseId}-activator`;
664
- const isControlled = typeof openProp === "boolean";
665
- const [internalOpen, setInternalOpen] = React5.useState(defaultOpen);
666
- const open = isControlled ? Boolean(openProp) : internalOpen;
667
- const localRootRef = React5.useRef(null);
668
- const menuRef = React5.useRef(null);
669
- const activatorRef = React5.useRef(null);
670
- const closeTimeoutRef = React5.useRef(null);
671
- const mergedRootRef = React5.useCallback(
672
- (node) => {
673
- localRootRef.current = node;
674
- if (typeof ref === "function") {
675
- ref(node);
676
- } else if (ref) {
677
- ref.current = node;
678
- }
679
- },
680
- [ref]
681
- );
682
- const [activatorWidth, setActivatorWidth] = React5.useState();
683
- const updateActivatorWidth = React5.useCallback(() => {
684
- if (!matchActivatorWidth) {
685
- setActivatorWidth(void 0);
686
- return;
687
- }
688
- const node = activatorRef.current;
689
- if (!node) {
690
- return;
691
- }
692
- setActivatorWidth(node.getBoundingClientRect().width);
693
- }, [matchActivatorWidth]);
694
- useIsomorphicLayoutEffect(() => {
695
- if (!matchActivatorWidth) {
696
- return;
697
- }
698
- updateActivatorWidth();
699
- if (!activatorRef.current || typeof ResizeObserver === "undefined") {
700
- return;
701
- }
702
- const observer = new ResizeObserver(() => updateActivatorWidth());
703
- observer.observe(activatorRef.current);
704
- return () => observer.disconnect();
705
- }, [matchActivatorWidth, updateActivatorWidth]);
706
- const setOpen = React5.useCallback(
707
- (nextOpen) => {
708
- if (disabled || open === nextOpen) {
709
- return;
710
- }
711
- if (!isControlled) {
712
- setInternalOpen(nextOpen);
713
- }
714
- onOpenChange?.(nextOpen);
715
- },
716
- [disabled, isControlled, onOpenChange, open]
717
- );
718
- React5.useEffect(() => {
719
- if (!disabled || !open) {
720
- return;
721
- }
722
- if (!isControlled) {
723
- setInternalOpen(false);
724
- }
725
- onOpenChange?.(false);
726
- }, [disabled, open, isControlled, onOpenChange]);
727
- React5.useEffect(() => {
728
- if (!open) {
729
- return;
730
- }
731
- const handlePointerDown = (event) => {
732
- const target = event.target;
733
- if (!target) {
734
- return;
735
- }
736
- if (localRootRef.current?.contains(target)) {
737
- return;
738
- }
739
- setOpen(false);
740
- };
741
- const handleKeyDown = (event) => {
742
- if (event.key === "Escape") {
743
- event.stopPropagation();
744
- setOpen(false);
745
- activatorRef.current?.focus();
746
- }
747
- };
748
- document.addEventListener("pointerdown", handlePointerDown);
749
- document.addEventListener("keydown", handleKeyDown);
750
- return () => {
751
- document.removeEventListener("pointerdown", handlePointerDown);
752
- document.removeEventListener("keydown", handleKeyDown);
753
- };
754
- }, [open, setOpen]);
755
- React5.useEffect(() => {
756
- if (!open) {
757
- return;
758
- }
759
- const node = menuRef.current;
760
- if (!node) {
761
- return;
762
- }
763
- const id = window.requestAnimationFrame(() => {
764
- node.focus({ preventScroll: true });
765
- });
766
- return () => window.cancelAnimationFrame(id);
767
- }, [open]);
768
- const setActivatorNode = React5.useCallback(
769
- (node) => {
770
- activatorRef.current = node;
771
- if (node && matchActivatorWidth) {
772
- setActivatorWidth(node.getBoundingClientRect().width);
773
- }
774
- },
775
- [matchActivatorWidth]
776
- );
777
- const handleActivatorClick = React5.useCallback(
778
- (event) => {
779
- event.preventDefault();
780
- if (disabled) {
781
- return;
782
- }
783
- setOpen(!open);
784
- },
785
- [disabled, open, setOpen]
786
- );
787
- const handleActivatorKeyDown = React5.useCallback(
788
- (event) => {
789
- if (event.key === "Enter" || event.key === " ") {
790
- event.preventDefault();
791
- setOpen(!open);
792
- }
793
- if (event.key === "ArrowDown") {
794
- event.preventDefault();
795
- setOpen(true);
796
- }
797
- },
798
- [open, setOpen]
799
- );
800
- const clearCloseTimeout = React5.useCallback(() => {
801
- if (closeTimeoutRef.current !== null) {
802
- if (isBrowser) {
803
- window.clearTimeout(closeTimeoutRef.current);
804
- }
805
- closeTimeoutRef.current = null;
806
- }
807
- }, []);
808
- const scheduleClose = React5.useCallback(() => {
809
- if (!isBrowser) {
810
- setOpen(false);
811
- return;
653
+ const hasContent = children !== void 0 && children !== null;
654
+ const manual = typeof open === "boolean";
655
+ const visible = Boolean(open);
656
+ const shouldRenderContent = hasContent && (keepMounted || visible || !manual && (openOnHover || openOnFocus));
657
+ const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
658
+ const visibilityClasses = (() => {
659
+ if (manual) {
660
+ return visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
812
661
  }
813
- clearCloseTimeout();
814
- closeTimeoutRef.current = window.setTimeout(() => {
815
- setOpen(false);
816
- closeTimeoutRef.current = null;
817
- }, 150);
818
- }, [clearCloseTimeout, setOpen]);
819
- React5.useEffect(() => {
820
- return () => clearCloseTimeout();
821
- }, [clearCloseTimeout]);
822
- const isMovingWithinMenu = React5.useCallback(
823
- (event) => {
824
- const nextTarget = event.relatedTarget;
825
- if (!nextTarget || !localRootRef.current) {
826
- return false;
827
- }
828
- return localRootRef.current.contains(nextTarget);
829
- },
830
- [localRootRef]
831
- );
832
- const handleRootMouseEnter = React5.useCallback(
833
- (event) => {
834
- rootMouseEnter?.(event);
835
- if (event.defaultPrevented) {
836
- return;
837
- }
838
- if (openOnHover) {
839
- clearCloseTimeout();
840
- setOpen(true);
841
- }
842
- },
843
- [clearCloseTimeout, openOnHover, rootMouseEnter, setOpen]
844
- );
845
- const handleRootMouseLeave = React5.useCallback(
846
- (event) => {
847
- rootMouseLeave?.(event);
848
- if (event.defaultPrevented) {
849
- return;
850
- }
851
- if (openOnHover) {
852
- if (isMovingWithinMenu(event)) {
853
- return;
854
- }
855
- scheduleClose();
856
- }
857
- },
858
- [isMovingWithinMenu, openOnHover, rootMouseLeave, scheduleClose]
859
- );
860
- const handleActivatorMouseEnter = React5.useCallback(
861
- (_event) => {
862
- if (disabled) {
863
- return;
864
- }
865
- clearCloseTimeout();
866
- setOpen(true);
867
- },
868
- [clearCloseTimeout, disabled, setOpen]
869
- );
870
- const handleActivatorMouseLeave = React5.useCallback(
871
- (event) => {
872
- if (disabled || !openOnHover) {
873
- return;
874
- }
875
- if (isMovingWithinMenu(event)) {
876
- return;
877
- }
878
- scheduleClose();
879
- },
880
- [disabled, isMovingWithinMenu, openOnHover, scheduleClose]
881
- );
662
+ const base2 = "pointer-events-none opacity-0 scale-95";
663
+ const hover = openOnHover ? " group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : "";
664
+ const focus = openOnFocus ? " group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : "";
665
+ return `${base2}${hover}${focus}`;
666
+ })();
882
667
  const {
883
- className: contentClass,
668
+ className: contentExtraClassName,
884
669
  style: contentStyle,
885
- onClick: contentOnClick,
886
- onMouseEnter: contentOnMouseEnter,
887
- onMouseLeave: contentOnMouseLeave,
888
670
  role: contentRole,
889
671
  tabIndex: contentTabIndex,
890
- ["aria-labelledby"]: ariaLabelledBy,
891
672
  ...restContentProps
892
673
  } = contentProps ?? {};
893
- const shouldRenderContent = open || keepMounted;
894
- const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
895
- const activatorElement = activator({
896
- ref: setActivatorNode,
897
- id: activatorId,
898
- "aria-haspopup": "menu",
899
- "aria-expanded": open,
900
- "aria-controls": menuId,
901
- onClick: handleActivatorClick,
902
- onKeyDown: handleActivatorKeyDown,
903
- onMouseEnter: openOnHover ? handleActivatorMouseEnter : void 0,
904
- onMouseLeave: openOnHover ? handleActivatorMouseLeave : void 0,
905
- disabled,
906
- open
907
- });
674
+ const overlayNode = scrim && visible ? /* @__PURE__ */ jsx("div", { className: twMerge(overlayBaseClasses, overlayClassName), "aria-hidden": true }) : null;
908
675
  return /* @__PURE__ */ jsxs(Fragment, { children: [
909
- scrim && open ? /* @__PURE__ */ jsx(
910
- "div",
911
- {
912
- className: twMerge(overlayBaseClasses, overlayClassName),
913
- "aria-hidden": true,
914
- onClick: () => setOpen(false),
915
- onMouseDown: (event) => event.preventDefault()
916
- }
917
- ) : null,
676
+ overlayNode,
918
677
  /* @__PURE__ */ jsxs(
919
678
  "div",
920
679
  {
921
680
  ...rest,
922
- ref: mergedRootRef,
923
- className: twMerge("relative inline-flex min-w-0", className),
924
- "data-open": open || void 0,
925
- onMouseEnter: openOnHover ? handleRootMouseEnter : rootMouseEnter,
926
- onMouseLeave: openOnHover ? handleRootMouseLeave : rootMouseLeave,
681
+ ref,
682
+ className: twMerge("relative inline-flex min-w-0 group/menu", className),
683
+ "data-open": visible || void 0,
927
684
  children: [
928
- activatorElement,
685
+ /* @__PURE__ */ jsx("div", { className: "inline-flex w-full min-w-0", children: activator }),
929
686
  shouldRenderContent ? /* @__PURE__ */ jsx(
930
687
  "div",
931
688
  {
932
689
  ...restContentProps,
933
- ref: menuRef,
934
- id: menuId,
935
- role: contentRole ?? "menu",
936
- tabIndex: contentTabIndex ?? -1,
937
- "aria-labelledby": ariaLabelledBy ?? activatorId,
938
- "data-state": open ? "open" : "closed",
939
690
  className: twMerge(
940
691
  menuBaseClasses,
941
692
  placementClasses[placement],
942
693
  offsetClasses[verticalPlacement],
694
+ matchActivatorWidth ? "min-w-full" : void 0,
695
+ visibilityClasses,
943
696
  contentClassName,
944
- contentClass
697
+ contentExtraClassName
945
698
  ),
946
- style: {
947
- ...contentStyle,
948
- ...matchActivatorWidth && activatorWidth ? { minWidth: activatorWidth, width: activatorWidth } : void 0
949
- },
950
- onMouseEnter: (event) => {
951
- contentOnMouseEnter?.(event);
952
- if (event.defaultPrevented) {
953
- return;
954
- }
955
- if (openOnHover) {
956
- clearCloseTimeout();
957
- setOpen(true);
958
- }
959
- },
960
- onMouseLeave: (event) => {
961
- contentOnMouseLeave?.(event);
962
- if (event.defaultPrevented) {
963
- return;
964
- }
965
- if (openOnHover) {
966
- if (isMovingWithinMenu(event)) {
967
- return;
968
- }
969
- scheduleClose();
970
- }
971
- },
972
- onClick: (event) => {
973
- contentOnClick?.(event);
974
- if (event.defaultPrevented) {
975
- return;
976
- }
977
- if (closeOnContentClick) {
978
- setOpen(false);
979
- }
980
- },
699
+ "data-state": visible ? "open" : "closed",
700
+ role: contentRole ?? "menu",
701
+ tabIndex: contentTabIndex ?? -1,
702
+ style: contentStyle,
981
703
  children
982
704
  }
983
705
  ) : null
@@ -988,7 +710,7 @@ var Menu = React5.forwardRef((props, ref) => {
988
710
  });
989
711
  Menu.displayName = "Menu";
990
712
  var Menu_default = Menu;
991
- var ExpansionPanelContext = React5.createContext(null);
713
+ var ExpansionPanelContext = React4.createContext(null);
992
714
  var densityClasses2 = {
993
715
  comfortable: "py-5",
994
716
  default: "py-4",
@@ -1017,7 +739,7 @@ var accentClasses2 = {
1017
739
  surface: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
1018
740
  bw: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" }
1019
741
  };
1020
- var ExpansionPanelItem = React5.forwardRef((props, ref) => {
742
+ var ExpansionPanelItem = React4.forwardRef((props, ref) => {
1021
743
  const {
1022
744
  value,
1023
745
  title,
@@ -1036,8 +758,8 @@ var ExpansionPanelItem = React5.forwardRef((props, ref) => {
1036
758
  color: colorOverride,
1037
759
  ...rest
1038
760
  } = props;
1039
- const context = React5.useContext(ExpansionPanelContext);
1040
- const generatedValue = React5.useId();
761
+ const context = React4.useContext(ExpansionPanelContext);
762
+ const generatedValue = React4.useId();
1041
763
  const panelValue = value ?? generatedValue;
1042
764
  const density = context?.density ?? "default";
1043
765
  const color = colorOverride ?? context?.color ?? "primary";
@@ -1045,9 +767,9 @@ var ExpansionPanelItem = React5.forwardRef((props, ref) => {
1045
767
  const variant = context?.variant ?? "elevated";
1046
768
  const rounded = context?.rounded ?? "lg";
1047
769
  const accent = accentClasses2[color] ?? accentClasses2.primary;
1048
- const headerId = React5.useId();
1049
- const contentId = React5.useId();
1050
- const [standaloneExpanded, setStandaloneExpanded] = React5.useState(false);
770
+ const headerId = React4.useId();
771
+ const contentId = React4.useId();
772
+ const [standaloneExpanded, setStandaloneExpanded] = React4.useState(false);
1051
773
  const isExpanded = context ? context.expandedValues.includes(panelValue) : standaloneExpanded;
1052
774
  const handleToggle = () => {
1053
775
  if (disabled) {
@@ -1173,7 +895,7 @@ var normalizeValues = (value, allowMultiple) => {
1173
895
  return normalized.length ? [normalized[0]] : [];
1174
896
  };
1175
897
  var clampValues = (values, allowMultiple) => allowMultiple ? uniqueValues(values) : values.length ? [values[0]] : [];
1176
- var ExpansionPanel = React5.forwardRef((props, ref) => {
898
+ var ExpansionPanel = React4.forwardRef((props, ref) => {
1177
899
  const {
1178
900
  variant = "elevated",
1179
901
  rounded = "lg",
@@ -1189,22 +911,22 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
1189
911
  ...rest
1190
912
  } = props;
1191
913
  const isControlled = value !== void 0;
1192
- const controlledValues = React5.useMemo(() => {
914
+ const controlledValues = React4.useMemo(() => {
1193
915
  if (!isControlled) {
1194
916
  return void 0;
1195
917
  }
1196
918
  return normalizeValues(value, multiple);
1197
919
  }, [isControlled, value, multiple]);
1198
- const [internalValues, setInternalValues] = React5.useState(
920
+ const [internalValues, setInternalValues] = React4.useState(
1199
921
  () => normalizeValues(defaultValue, multiple)
1200
922
  );
1201
923
  const expandedValues = controlledValues ?? internalValues;
1202
- React5.useEffect(() => {
924
+ React4.useEffect(() => {
1203
925
  if (!isControlled) {
1204
926
  setInternalValues((prev) => clampValues(prev, multiple));
1205
927
  }
1206
928
  }, [multiple, isControlled]);
1207
- const handleValueChange = React5.useCallback(
929
+ const handleValueChange = React4.useCallback(
1208
930
  (next) => {
1209
931
  if (!isControlled) {
1210
932
  setInternalValues(next);
@@ -1219,7 +941,7 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
1219
941
  },
1220
942
  [isControlled, multiple, onChange]
1221
943
  );
1222
- const toggle = React5.useCallback(
944
+ const toggle = React4.useCallback(
1223
945
  (panelValue, disabled) => {
1224
946
  if (disabled) {
1225
947
  return;
@@ -1230,7 +952,7 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
1230
952
  },
1231
953
  [expandedValues, handleValueChange, multiple]
1232
954
  );
1233
- const providerValue = React5.useMemo(
955
+ const providerValue = React4.useMemo(
1234
956
  () => ({ expandedValues, toggle, density, color, divider, rounded, variant }),
1235
957
  [expandedValues, toggle, density, color, divider, rounded, variant]
1236
958
  );
@@ -1249,8 +971,6 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
1249
971
  });
1250
972
  ExpansionPanel.displayName = "ExpansionPanel";
1251
973
  var ExpansionPanel_default = ExpansionPanel;
1252
- var isBrowser2 = typeof window !== "undefined";
1253
- var useIsomorphicLayoutEffect2 = isBrowser2 ? React5.useLayoutEffect : React5.useEffect;
1254
974
  var containerBaseClasses = "fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none";
1255
975
  var overlayBaseClasses2 = "absolute inset-0 bg-gray-900/55 backdrop-blur-[2px] transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100";
1256
976
  var panelWrapperClasses = "relative z-10 flex w-full max-h-[95vh] justify-center transition-transform transition-opacity duration-200 data-[state=closed]:translate-y-4 data-[state=closed]:opacity-0 data-[state=open]:translate-y-0 data-[state=open]:opacity-100";
@@ -1261,281 +981,87 @@ var resolveSizeValue = (value) => {
1261
981
  }
1262
982
  return typeof value === "number" ? `${value}px` : value;
1263
983
  };
1264
- var Dialog = React5.forwardRef((props, forwardedRef) => {
984
+ var Dialog = React4.forwardRef((props, forwardedRef) => {
1265
985
  const {
1266
986
  activator,
1267
987
  children,
1268
- open: openProp,
1269
- defaultOpen = false,
1270
- onOpenChange,
1271
- persistent = false,
1272
- closeOnEsc = true,
1273
- closeOnOutsideClick = true,
1274
- closeOnContentClick = false,
1275
- scrim = true,
988
+ open = false,
1276
989
  keepMounted = false,
990
+ scrim = true,
1277
991
  fullscreen = false,
1278
992
  maxWidth = "32rem",
1279
993
  width,
1280
994
  containerClassName,
1281
995
  overlayClassName,
1282
996
  overlayProps,
1283
- scrollLock = true,
1284
- disabled = false,
1285
997
  className,
1286
998
  style,
1287
- tabIndex: tabIndexProp,
1288
- role: roleProp,
1289
- id: idProp,
999
+ role: roleProp = "dialog",
1000
+ tabIndex = -1,
1001
+ id,
1290
1002
  ["aria-modal"]: ariaModalProp,
1291
1003
  ...rest
1292
1004
  } = props;
1293
- const { onClick: panelOnClick, ...panelProps } = rest;
1294
- const {
1295
- className: overlayPropsClassName,
1296
- onPointerDown: overlayOnPointerDown,
1297
- ...overlayRestProps
1298
- } = overlayProps ?? {};
1299
- const baseId = React5.useId();
1300
- const panelId = idProp ?? `${baseId}-dialog`;
1301
- const activatorId = `${panelId}-activator`;
1302
- const role = roleProp ?? "dialog";
1303
- const resolvedTabIndex = tabIndexProp ?? -1;
1304
- const isControlled = typeof openProp === "boolean";
1305
- const [internalOpen, setInternalOpen] = React5.useState(defaultOpen);
1306
- const open = isControlled ? Boolean(openProp) : internalOpen;
1307
1005
  const state = open ? "open" : "closed";
1308
- const panelRef = React5.useRef(null);
1309
- const activatorRef = React5.useRef(null);
1310
- const previouslyFocusedElement = React5.useRef(null);
1311
- const [mounted, setMounted] = React5.useState(false);
1312
- useIsomorphicLayoutEffect2(() => {
1313
- setMounted(true);
1314
- }, []);
1315
- const setPanelRef = React5.useCallback(
1316
- (node) => {
1317
- panelRef.current = node;
1318
- if (typeof forwardedRef === "function") {
1319
- forwardedRef(node);
1320
- } else if (forwardedRef) {
1321
- forwardedRef.current = node;
1322
- }
1323
- },
1324
- [forwardedRef]
1325
- );
1326
- const setActivatorNode = React5.useCallback((node) => {
1327
- activatorRef.current = node;
1328
- }, []);
1329
- const updateOpen = React5.useCallback(
1330
- (nextOpen, options) => {
1331
- if (disabled && nextOpen) {
1332
- return;
1333
- }
1334
- if (!options?.force && !nextOpen && persistent) {
1335
- return;
1336
- }
1337
- if (!isControlled) {
1338
- setInternalOpen(nextOpen);
1339
- }
1340
- onOpenChange?.(nextOpen);
1341
- },
1342
- [disabled, isControlled, onOpenChange, persistent]
1343
- );
1344
- React5.useEffect(() => {
1345
- if (!disabled || !open) {
1346
- return;
1006
+ const shouldRenderDialog = keepMounted || open;
1007
+ const resolvedStyle = { ...style };
1008
+ if (fullscreen) {
1009
+ if (resolvedStyle.maxWidth === void 0) {
1010
+ resolvedStyle.maxWidth = "none";
1347
1011
  }
1348
- updateOpen(false, { force: true });
1349
- }, [disabled, open, updateOpen]);
1350
- React5.useEffect(() => {
1351
- if (!isBrowser2) {
1352
- return;
1353
- }
1354
- if (open) {
1355
- previouslyFocusedElement.current = document.activeElement;
1356
- const node = panelRef.current;
1357
- if (node) {
1358
- if (!node.hasAttribute("tabindex")) {
1359
- node.setAttribute("tabindex", resolvedTabIndex.toString());
1360
- }
1361
- requestAnimationFrame(() => node.focus({ preventScroll: true }));
1362
- }
1363
- return;
1012
+ if (resolvedStyle.width === void 0) {
1013
+ resolvedStyle.width = "100%";
1364
1014
  }
1365
- const previous = previouslyFocusedElement.current ?? activatorRef.current;
1366
- if (previous && typeof previous.focus === "function") {
1367
- previous.focus();
1015
+ if (resolvedStyle.height === void 0) {
1016
+ resolvedStyle.height = "100%";
1368
1017
  }
1369
- }, [open, resolvedTabIndex]);
1370
- React5.useEffect(() => {
1371
- if (!open || !closeOnEsc || persistent || !isBrowser2) {
1372
- return;
1018
+ if (resolvedStyle.maxHeight === void 0) {
1019
+ resolvedStyle.maxHeight = "100%";
1373
1020
  }
1374
- const handleKeyDown = (event) => {
1375
- if (event.key !== "Escape") {
1376
- return;
1377
- }
1378
- event.stopPropagation();
1379
- updateOpen(false);
1380
- };
1381
- document.addEventListener("keydown", handleKeyDown);
1382
- return () => document.removeEventListener("keydown", handleKeyDown);
1383
- }, [closeOnEsc, open, persistent, updateOpen]);
1384
- React5.useEffect(() => {
1385
- if (!scrollLock || !open || !isBrowser2) {
1386
- return;
1021
+ } else {
1022
+ if (resolvedStyle.maxWidth === void 0) {
1023
+ resolvedStyle.maxWidth = resolveSizeValue(maxWidth);
1387
1024
  }
1388
- const { body, documentElement } = document;
1389
- const previousOverflow = body.style.overflow;
1390
- const previousPaddingRight = body.style.paddingRight;
1391
- const scrollbarWidth = window.innerWidth - documentElement.clientWidth;
1392
- body.style.overflow = "hidden";
1393
- if (scrollbarWidth > 0) {
1394
- const computedPaddingRight = parseFloat(window.getComputedStyle(body).paddingRight) || 0;
1395
- body.style.paddingRight = `${computedPaddingRight + scrollbarWidth}px`;
1025
+ if (width !== void 0 && resolvedStyle.width === void 0) {
1026
+ resolvedStyle.width = resolveSizeValue(width);
1396
1027
  }
1397
- return () => {
1398
- body.style.overflow = previousOverflow;
1399
- body.style.paddingRight = previousPaddingRight;
1400
- };
1401
- }, [open, scrollLock]);
1402
- const handleOverlayPointerDown = React5.useCallback(
1403
- (event) => {
1404
- overlayOnPointerDown?.(event);
1405
- if (event.defaultPrevented) {
1406
- return;
1407
- }
1408
- if (!closeOnOutsideClick || event.button > 0) {
1409
- return;
1410
- }
1411
- updateOpen(false);
1412
- },
1413
- [closeOnOutsideClick, overlayOnPointerDown, updateOpen]
1414
- );
1415
- const handleContentClick = React5.useCallback(
1416
- (event) => {
1417
- panelOnClick?.(event);
1418
- if (event.defaultPrevented) {
1419
- return;
1420
- }
1421
- if (closeOnContentClick) {
1422
- updateOpen(false, { force: true });
1423
- }
1424
- },
1425
- [closeOnContentClick, panelOnClick, updateOpen]
1426
- );
1427
- const handleActivatorClick = React5.useCallback(
1428
- (event) => {
1429
- if (disabled) {
1430
- event.preventDefault();
1431
- event.stopPropagation();
1432
- return;
1433
- }
1434
- updateOpen(!open, { force: true });
1435
- },
1436
- [disabled, open, updateOpen]
1437
- );
1438
- const handleActivatorKeyDown = React5.useCallback(
1439
- (event) => {
1440
- if (event.key !== "Enter" && event.key !== " ") {
1441
- return;
1442
- }
1443
- event.preventDefault();
1444
- if (disabled) {
1445
- return;
1446
- }
1447
- updateOpen(!open, { force: true });
1448
- },
1449
- [disabled, open, updateOpen]
1450
- );
1451
- const shouldRenderOverlay = (scrim || closeOnOutsideClick) && isBrowser2;
1452
- const portalReady = mounted && isBrowser2 && (open || keepMounted);
1453
- const resolvedPanelStyle = React5.useMemo(() => {
1454
- const nextStyle = { ...style };
1455
- if (fullscreen) {
1456
- if (nextStyle.maxWidth === void 0) {
1457
- nextStyle.maxWidth = "none";
1458
- }
1459
- if (nextStyle.width === void 0) {
1460
- nextStyle.width = "100%";
1461
- }
1462
- if (nextStyle.height === void 0) {
1463
- nextStyle.height = "100%";
1464
- }
1465
- if (nextStyle.maxHeight === void 0) {
1466
- nextStyle.maxHeight = "100%";
1467
- }
1468
- } else {
1469
- if (nextStyle.maxWidth === void 0) {
1470
- nextStyle.maxWidth = resolveSizeValue(maxWidth);
1471
- }
1472
- if (width !== void 0 && nextStyle.width === void 0) {
1473
- nextStyle.width = resolveSizeValue(width);
1474
- }
1475
- }
1476
- return nextStyle;
1477
- }, [fullscreen, maxWidth, style, width]);
1478
- const ariaModal = ariaModalProp ?? (role === "dialog" || role === "alertdialog" ? true : void 0);
1479
- const overlayNode = shouldRenderOverlay && portalReady ? /* @__PURE__ */ jsx(
1028
+ }
1029
+ const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
1030
+ const { className: overlayExtraClassName, ...restOverlayProps } = overlayProps ?? {};
1031
+ const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsx(
1480
1032
  "div",
1481
1033
  {
1482
- ...overlayRestProps,
1483
- className: twMerge(
1484
- overlayBaseClasses2,
1485
- scrim ? void 0 : "bg-transparent backdrop-blur-none",
1486
- overlayClassName,
1487
- overlayPropsClassName
1488
- ),
1034
+ ...restOverlayProps,
1035
+ className: twMerge(overlayBaseClasses2, overlayClassName, overlayExtraClassName),
1489
1036
  "data-state": state,
1490
- "aria-hidden": true,
1491
- onPointerDown: handleOverlayPointerDown
1037
+ "aria-hidden": true
1492
1038
  }
1493
1039
  ) : null;
1494
- const dialogNode = portalReady && document.body ? createPortal(
1495
- /* @__PURE__ */ jsxs("div", { className: twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
1040
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1041
+ activator ? /* @__PURE__ */ jsx("div", { className: "inline-flex", children: activator }) : null,
1042
+ shouldRenderDialog ? /* @__PURE__ */ jsxs("div", { className: twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
1496
1043
  overlayNode,
1497
1044
  /* @__PURE__ */ jsx("div", { className: twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsx(
1498
1045
  "div",
1499
1046
  {
1500
- ...panelProps,
1501
- ref: setPanelRef,
1502
- id: panelId,
1503
- role,
1504
- tabIndex: resolvedTabIndex,
1047
+ ...rest,
1048
+ ref: forwardedRef,
1049
+ id,
1050
+ role: roleProp,
1051
+ tabIndex,
1505
1052
  "aria-modal": ariaModal,
1506
- className: twMerge(
1507
- panelBaseClasses,
1508
- fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
1509
- className
1510
- ),
1511
- style: resolvedPanelStyle,
1053
+ className: twMerge(panelBaseClasses, fullscreen ? "h-full w-full max-w-none rounded-none" : void 0, className),
1054
+ style: resolvedStyle,
1512
1055
  "data-state": state,
1513
- onClick: handleContentClick,
1514
1056
  children
1515
1057
  }
1516
1058
  ) })
1517
- ] }),
1518
- document.body
1519
- ) : null;
1520
- const activatorNode = activator ? activator({
1521
- ref: setActivatorNode,
1522
- id: activatorId,
1523
- disabled,
1524
- open,
1525
- "aria-haspopup": "dialog",
1526
- "aria-expanded": open,
1527
- "aria-controls": panelId,
1528
- onClick: handleActivatorClick,
1529
- onKeyDown: handleActivatorKeyDown
1530
- }) : null;
1531
- return /* @__PURE__ */ jsxs(Fragment, { children: [
1532
- activatorNode,
1533
- dialogNode
1059
+ ] }) : null
1534
1060
  ] });
1535
1061
  });
1536
1062
  Dialog.displayName = "Dialog";
1537
1063
  var Dialog_default = Dialog;
1538
- var tooltipBaseClasses = "absolute z-[60] max-w-xs rounded-lg border border-white/10 bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-lg shadow-black/30 ring-1 ring-black/40 transition-all duration-150 data-[state=closed]:pointer-events-none data-[state=closed]:scale-95 data-[state=closed]:opacity-0 data-[state=open]:opacity-100 data-[state=open]:scale-100";
1064
+ var tooltipBaseClasses = "absolute z-[60] max-w-xs rounded-lg border border-white/10 bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-lg shadow-black/30 ring-1 ring-black/40 transition-all duration-150";
1539
1065
  var wrapperBaseClasses = "relative inline-flex max-w-full align-middle";
1540
1066
  var arrowBaseClasses = "pointer-events-none absolute h-2 w-2 rotate-45 border border-white/10 bg-gray-900 shadow-lg shadow-black/20";
1541
1067
  var resolveSizeValue2 = (value) => {
@@ -1572,259 +1098,70 @@ var arrowPlacementClasses = {
1572
1098
  "right-start": "left-full top-4 -translate-x-1/2",
1573
1099
  "right-end": "left-full bottom-4 -translate-x-1/2"
1574
1100
  };
1575
- var ToolTip = React5.forwardRef((props, forwardedRef) => {
1101
+ var ToolTip = React4.forwardRef((props, forwardedRef) => {
1576
1102
  const {
1577
1103
  activator,
1578
1104
  children,
1579
- open: openProp,
1580
- defaultOpen = false,
1581
- onOpenChange,
1582
1105
  placement = "top",
1583
- openDelay = 120,
1584
- closeDelay = 100,
1585
- openOnHover = true,
1586
- openOnFocus = true,
1587
- openOnClick = false,
1588
- interactive = false,
1589
1106
  arrow = true,
1590
1107
  disabled = false,
1108
+ persistent = false,
1109
+ showOnHover = true,
1110
+ showOnFocus = true,
1111
+ interactive = false,
1591
1112
  keepMounted = false,
1592
1113
  maxWidth = "18rem",
1593
1114
  wrapperClassName,
1594
- closeOnContentClick = false,
1595
1115
  className,
1596
1116
  style,
1597
- id: idProp,
1117
+ id,
1598
1118
  ...rest
1599
1119
  } = props;
1600
- const { onPointerEnter: tooltipPointerEnter, onPointerLeave: tooltipPointerLeave, onClick: tooltipOnClick, ...tooltipProps } = rest;
1601
- const baseId = React5.useId();
1602
- const tooltipId = idProp ?? `${baseId}-tooltip`;
1603
- const isControlled = typeof openProp === "boolean";
1604
- const [internalOpen, setInternalOpen] = React5.useState(defaultOpen);
1605
- const open = isControlled ? Boolean(openProp) : internalOpen;
1606
- const state = open ? "open" : "closed";
1607
- const describedBy = open || keepMounted ? tooltipId : void 0;
1608
- const openTimeoutRef = React5.useRef(null);
1609
- const closeTimeoutRef = React5.useRef(null);
1610
- const clearOpenTimer = React5.useCallback(() => {
1611
- if (openTimeoutRef.current !== null) {
1612
- window.clearTimeout(openTimeoutRef.current);
1613
- openTimeoutRef.current = null;
1120
+ const hasRenderableContent = children !== void 0 && children !== null;
1121
+ const shouldEnableTriggers = !disabled && (persistent || showOnHover || showOnFocus);
1122
+ const shouldRenderTooltip = hasRenderableContent && (shouldEnableTriggers || keepMounted);
1123
+ const resolvedStyle = { ...style };
1124
+ if (resolvedStyle.maxWidth === void 0) {
1125
+ resolvedStyle.maxWidth = resolveSizeValue2(maxWidth);
1126
+ }
1127
+ const baseVisibility = persistent ? "opacity-100 scale-100" : "opacity-0 scale-95";
1128
+ const hoverClasses = !persistent && showOnHover ? " group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100" : "";
1129
+ const focusClasses = !persistent && showOnFocus ? " group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100" : "";
1130
+ const visibilityClasses = `${baseVisibility}${hoverClasses}${focusClasses}`;
1131
+ const pointerClasses = (() => {
1132
+ if (persistent) {
1133
+ return "pointer-events-auto";
1614
1134
  }
1615
- }, []);
1616
- const clearCloseTimer = React5.useCallback(() => {
1617
- if (closeTimeoutRef.current !== null) {
1618
- window.clearTimeout(closeTimeoutRef.current);
1619
- closeTimeoutRef.current = null;
1135
+ if (!interactive) {
1136
+ return "pointer-events-none";
1620
1137
  }
1621
- }, []);
1622
- const setOpen = React5.useCallback(
1623
- (nextOpen) => {
1624
- if (!isControlled) {
1625
- setInternalOpen(nextOpen);
1626
- }
1627
- onOpenChange?.(nextOpen);
1628
- },
1629
- [isControlled, onOpenChange]
1630
- );
1631
- const scheduleOpen = React5.useCallback(
1632
- (source) => {
1633
- if (disabled) {
1634
- return;
1635
- }
1636
- clearCloseTimer();
1637
- const delay = source === "click" ? 0 : openDelay;
1638
- if (delay <= 0) {
1639
- setOpen(true);
1640
- return;
1641
- }
1642
- openTimeoutRef.current = window.setTimeout(() => setOpen(true), delay);
1643
- },
1644
- [clearCloseTimer, disabled, openDelay, setOpen]
1645
- );
1646
- const scheduleClose = React5.useCallback(
1647
- (source) => {
1648
- clearOpenTimer();
1649
- const delay = source === "click" ? 0 : closeDelay;
1650
- if (delay <= 0) {
1651
- setOpen(false);
1652
- return;
1653
- }
1654
- closeTimeoutRef.current = window.setTimeout(() => setOpen(false), delay);
1655
- },
1656
- [clearOpenTimer, closeDelay, setOpen]
1657
- );
1658
- React5.useEffect(() => {
1659
- if (!disabled) {
1660
- return;
1138
+ const classes = ["pointer-events-none"];
1139
+ if (showOnHover) {
1140
+ classes.push("group-hover/tooltip:pointer-events-auto");
1661
1141
  }
1662
- clearOpenTimer();
1663
- clearCloseTimer();
1664
- if (open) {
1665
- setOpen(false);
1666
- }
1667
- }, [clearCloseTimer, clearOpenTimer, disabled, open, setOpen]);
1668
- React5.useEffect(
1669
- () => () => {
1670
- clearOpenTimer();
1671
- clearCloseTimer();
1672
- },
1673
- [clearCloseTimer, clearOpenTimer]
1674
- );
1675
- const handleActivatorPointerEnter = React5.useCallback(
1676
- (event) => {
1677
- if (event.pointerType === "touch") {
1678
- return;
1679
- }
1680
- if (openOnHover) {
1681
- scheduleOpen("hover");
1682
- }
1683
- },
1684
- [openOnHover, scheduleOpen]
1685
- );
1686
- const handleActivatorPointerLeave = React5.useCallback(
1687
- (event) => {
1688
- if (event.pointerType === "touch") {
1689
- return;
1690
- }
1691
- if (openOnHover) {
1692
- scheduleClose("hover");
1693
- }
1694
- },
1695
- [openOnHover, scheduleClose]
1696
- );
1697
- const handleActivatorFocus = React5.useCallback(
1698
- () => {
1699
- if (openOnFocus) {
1700
- scheduleOpen("focus");
1701
- }
1702
- },
1703
- [openOnFocus, scheduleOpen]
1704
- );
1705
- const handleActivatorBlur = React5.useCallback(
1706
- () => {
1707
- if (openOnFocus) {
1708
- scheduleClose("focus");
1709
- }
1710
- },
1711
- [openOnFocus, scheduleClose]
1712
- );
1713
- const handleActivatorClick = React5.useCallback(
1714
- (event) => {
1715
- if (!openOnClick) {
1716
- return;
1717
- }
1718
- event.preventDefault();
1719
- event.stopPropagation();
1720
- if (disabled) {
1721
- return;
1722
- }
1723
- if (open) {
1724
- scheduleClose("click");
1725
- } else {
1726
- scheduleOpen("click");
1727
- }
1728
- },
1729
- [disabled, open, openOnClick, scheduleClose, scheduleOpen]
1730
- );
1731
- const handleActivatorKeyDown = React5.useCallback(
1732
- (event) => {
1733
- if (!openOnClick) {
1734
- return;
1735
- }
1736
- if (event.key !== "Enter" && event.key !== " ") {
1737
- return;
1738
- }
1739
- event.preventDefault();
1740
- if (open) {
1741
- scheduleClose("click");
1742
- } else {
1743
- scheduleOpen("click");
1744
- }
1745
- },
1746
- [open, openOnClick, scheduleClose, scheduleOpen]
1747
- );
1748
- const handleTooltipPointerEnter = React5.useCallback(
1749
- (event) => {
1750
- tooltipPointerEnter?.(event);
1751
- if (event.defaultPrevented) {
1752
- return;
1753
- }
1754
- if (interactive) {
1755
- clearCloseTimer();
1756
- }
1757
- },
1758
- [clearCloseTimer, interactive, tooltipPointerEnter]
1759
- );
1760
- const handleTooltipPointerLeave = React5.useCallback(
1761
- (event) => {
1762
- tooltipPointerLeave?.(event);
1763
- if (event.defaultPrevented) {
1764
- return;
1765
- }
1766
- if (interactive) {
1767
- scheduleClose("hover");
1768
- }
1769
- },
1770
- [interactive, scheduleClose, tooltipPointerLeave]
1771
- );
1772
- const handleTooltipClick = React5.useCallback(
1773
- (event) => {
1774
- tooltipOnClick?.(event);
1775
- if (event.defaultPrevented) {
1776
- return;
1777
- }
1778
- if (closeOnContentClick) {
1779
- scheduleClose("click");
1780
- }
1781
- },
1782
- [closeOnContentClick, scheduleClose, tooltipOnClick]
1783
- );
1784
- const hasRenderableContent = children !== void 0 && children !== null;
1785
- const shouldRenderTooltip = hasRenderableContent && (open || keepMounted);
1786
- const pointerClass = interactive ? "pointer-events-auto" : "pointer-events-none";
1787
- const resolvedStyle = React5.useMemo(() => {
1788
- const nextStyle = { ...style };
1789
- if (nextStyle.maxWidth === void 0) {
1790
- nextStyle.maxWidth = resolveSizeValue2(maxWidth);
1142
+ if (showOnFocus) {
1143
+ classes.push("group-focus-within/tooltip:pointer-events-auto");
1791
1144
  }
1792
- return nextStyle;
1793
- }, [maxWidth, style]);
1794
- const activatorNode = activator({
1795
- id: `${tooltipId}-activator`,
1796
- open,
1797
- disabled,
1798
- "aria-describedby": describedBy,
1799
- onPointerEnter: handleActivatorPointerEnter,
1800
- onPointerLeave: handleActivatorPointerLeave,
1801
- onFocus: handleActivatorFocus,
1802
- onBlur: handleActivatorBlur,
1803
- onClick: openOnClick ? handleActivatorClick : void 0,
1804
- onKeyDown: openOnClick ? handleActivatorKeyDown : void 0
1805
- });
1806
- return /* @__PURE__ */ jsxs("span", { className: twMerge(wrapperBaseClasses, wrapperClassName), children: [
1807
- activatorNode,
1808
- shouldRenderTooltip && /* @__PURE__ */ jsxs(
1145
+ return classes.join(" ");
1146
+ })();
1147
+ return /* @__PURE__ */ jsxs("span", { className: twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName), "data-disabled": disabled || void 0, children: [
1148
+ /* @__PURE__ */ jsx("span", { className: "inline-flex max-w-full", children: activator }),
1149
+ shouldRenderTooltip ? /* @__PURE__ */ jsxs(
1809
1150
  "div",
1810
1151
  {
1811
- ...tooltipProps,
1152
+ ...rest,
1812
1153
  ref: forwardedRef,
1813
1154
  role: "tooltip",
1814
- id: tooltipId,
1815
- "aria-hidden": !open,
1816
- "data-state": state,
1817
- className: twMerge(tooltipBaseClasses, placementClasses2[placement], pointerClass, className),
1155
+ id,
1156
+ "aria-hidden": persistent || disabled ? void 0 : true,
1157
+ className: twMerge(tooltipBaseClasses, placementClasses2[placement], visibilityClasses, pointerClasses, className),
1818
1158
  style: resolvedStyle,
1819
- onPointerEnter: handleTooltipPointerEnter,
1820
- onPointerLeave: handleTooltipPointerLeave,
1821
- onClick: handleTooltipClick,
1822
1159
  children: [
1823
1160
  children,
1824
1161
  arrow && /* @__PURE__ */ jsx("span", { className: twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
1825
1162
  ]
1826
1163
  }
1827
- )
1164
+ ) : null
1828
1165
  ] });
1829
1166
  });
1830
1167
  ToolTip.displayName = "ToolTip";