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