@lindle/linoardo 1.0.10 → 1.0.12
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 +140 -803
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +220 -273
- package/dist/index.d.ts +220 -273
- package/dist/index.js +140 -802
- package/dist/index.js.map +1 -1
- package/dist/styles.css +117 -42
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React3 from 'react';
|
|
2
|
+
import { forwardRef, useCallback, useContext, useId, useState, useMemo, useEffect } from 'react';
|
|
2
3
|
import { twMerge } from 'tailwind-merge';
|
|
3
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
import { createPortal } from 'react-dom';
|
|
5
5
|
|
|
6
6
|
// src/Containment/Button/index.tsx
|
|
7
7
|
|
|
@@ -130,7 +130,7 @@ var sizeClasses = {
|
|
|
130
130
|
large: "px-6 py-3 text-lg",
|
|
131
131
|
"x-large": "px-7 py-3.5 text-xl"
|
|
132
132
|
};
|
|
133
|
-
var Button =
|
|
133
|
+
var Button = React3.forwardRef(
|
|
134
134
|
({
|
|
135
135
|
variant = "solid",
|
|
136
136
|
color = "primary",
|
|
@@ -301,7 +301,7 @@ var resolveIconClassName2 = (icon) => {
|
|
|
301
301
|
const normalized = iconName.startsWith("mdi-") ? iconName : `mdi-${iconName}`;
|
|
302
302
|
return Array.from(/* @__PURE__ */ new Set([...baseClasses, normalized])).join(" ");
|
|
303
303
|
};
|
|
304
|
-
var Chip =
|
|
304
|
+
var Chip = forwardRef(
|
|
305
305
|
({
|
|
306
306
|
variant = "solid",
|
|
307
307
|
color = "primary",
|
|
@@ -333,7 +333,7 @@ var Chip = React5.forwardRef(
|
|
|
333
333
|
const appendIconClassName = resolveIconClassName2(appendIcon);
|
|
334
334
|
const closeIconClassName = resolveIconClassName2(closeIcon);
|
|
335
335
|
const filterIconClassName = filter && selected ? resolveIconClassName2(filterIcon) : void 0;
|
|
336
|
-
const handleClick =
|
|
336
|
+
const handleClick = useCallback(
|
|
337
337
|
(event) => {
|
|
338
338
|
if (disabled) {
|
|
339
339
|
event.preventDefault();
|
|
@@ -344,7 +344,7 @@ var Chip = React5.forwardRef(
|
|
|
344
344
|
},
|
|
345
345
|
[disabled, onClick]
|
|
346
346
|
);
|
|
347
|
-
const handleKeyDown =
|
|
347
|
+
const handleKeyDown = useCallback(
|
|
348
348
|
(event) => {
|
|
349
349
|
onKeyDown?.(event);
|
|
350
350
|
if (event.defaultPrevented || disabled || !interactive) {
|
|
@@ -357,7 +357,7 @@ var Chip = React5.forwardRef(
|
|
|
357
357
|
},
|
|
358
358
|
[disabled, interactive, onKeyDown]
|
|
359
359
|
);
|
|
360
|
-
const handleCloseClick =
|
|
360
|
+
const handleCloseClick = useCallback(
|
|
361
361
|
(event) => {
|
|
362
362
|
event.stopPropagation();
|
|
363
363
|
if (disabled) {
|
|
@@ -368,7 +368,7 @@ var Chip = React5.forwardRef(
|
|
|
368
368
|
},
|
|
369
369
|
[disabled, onClose]
|
|
370
370
|
);
|
|
371
|
-
const handleCloseKeyDown =
|
|
371
|
+
const handleCloseKeyDown = useCallback((event) => {
|
|
372
372
|
if (event.key === " " || event.key === "Enter") {
|
|
373
373
|
event.stopPropagation();
|
|
374
374
|
}
|
|
@@ -440,7 +440,7 @@ var accentClasses = {
|
|
|
440
440
|
surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
|
|
441
441
|
bw: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
|
|
442
442
|
};
|
|
443
|
-
var ListItem =
|
|
443
|
+
var ListItem = React3.forwardRef((props, ref) => {
|
|
444
444
|
const {
|
|
445
445
|
component,
|
|
446
446
|
href,
|
|
@@ -557,13 +557,13 @@ var listRoundedClasses = {
|
|
|
557
557
|
pill: "rounded-full"
|
|
558
558
|
};
|
|
559
559
|
var isListItemElement = (element) => {
|
|
560
|
-
if (!
|
|
560
|
+
if (!React3.isValidElement(element)) {
|
|
561
561
|
return false;
|
|
562
562
|
}
|
|
563
563
|
const elementType = element.type;
|
|
564
564
|
return element.type === Item_default || elementType.displayName === Item_default.displayName;
|
|
565
565
|
};
|
|
566
|
-
var List =
|
|
566
|
+
var List = React3.forwardRef((props, ref) => {
|
|
567
567
|
const {
|
|
568
568
|
variant = "solid",
|
|
569
569
|
density = "default",
|
|
@@ -585,11 +585,11 @@ var List = React5.forwardRef((props, ref) => {
|
|
|
585
585
|
const navClass = nav ? "py-1" : void 0;
|
|
586
586
|
const accentColor = color;
|
|
587
587
|
const enhanceChild = (child) => {
|
|
588
|
-
if (!
|
|
588
|
+
if (!React3.isValidElement(child)) {
|
|
589
589
|
return child;
|
|
590
590
|
}
|
|
591
591
|
if (isListItemElement(child)) {
|
|
592
|
-
return
|
|
592
|
+
return React3.cloneElement(child, {
|
|
593
593
|
density: child.props.density ?? density,
|
|
594
594
|
lines: child.props.lines ?? lines,
|
|
595
595
|
nav: child.props.nav ?? nav,
|
|
@@ -599,14 +599,14 @@ var List = React5.forwardRef((props, ref) => {
|
|
|
599
599
|
});
|
|
600
600
|
}
|
|
601
601
|
if (child.props && typeof child.props === "object" && "children" in child.props) {
|
|
602
|
-
const nestedChildren =
|
|
602
|
+
const nestedChildren = React3.Children.map(child.props.children, enhanceChild);
|
|
603
603
|
if (nestedChildren !== child.props.children) {
|
|
604
|
-
return
|
|
604
|
+
return React3.cloneElement(child, void 0, nestedChildren);
|
|
605
605
|
}
|
|
606
606
|
}
|
|
607
607
|
return child;
|
|
608
608
|
};
|
|
609
|
-
const resolvedChildren =
|
|
609
|
+
const resolvedChildren = React3.Children.map(children, enhanceChild);
|
|
610
610
|
return /* @__PURE__ */ jsx(
|
|
611
611
|
"div",
|
|
612
612
|
{
|
|
@@ -620,8 +620,6 @@ var List = React5.forwardRef((props, ref) => {
|
|
|
620
620
|
});
|
|
621
621
|
List.displayName = "List";
|
|
622
622
|
var List_default = List;
|
|
623
|
-
var isBrowser = typeof window !== "undefined";
|
|
624
|
-
var useIsomorphicLayoutEffect = isBrowser ? React5.useLayoutEffect : React5.useEffect;
|
|
625
623
|
var placementClasses = {
|
|
626
624
|
"bottom-start": "left-0 top-full origin-top-left",
|
|
627
625
|
bottom: "left-1/2 top-full -translate-x-1/2 origin-top",
|
|
@@ -634,350 +632,75 @@ var offsetClasses = {
|
|
|
634
632
|
top: "mb-2",
|
|
635
633
|
bottom: "mt-2"
|
|
636
634
|
};
|
|
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
|
|
635
|
+
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
636
|
var overlayBaseClasses = "fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]";
|
|
639
|
-
var Menu =
|
|
637
|
+
var Menu = React3.forwardRef((props, ref) => {
|
|
640
638
|
const {
|
|
641
639
|
activator,
|
|
642
640
|
children,
|
|
643
|
-
open: openProp,
|
|
644
|
-
defaultOpen = false,
|
|
645
|
-
onOpenChange,
|
|
646
641
|
placement = "bottom-start",
|
|
647
|
-
|
|
648
|
-
|
|
642
|
+
open,
|
|
643
|
+
openOnHover = true,
|
|
644
|
+
openOnFocus = true,
|
|
649
645
|
matchActivatorWidth = false,
|
|
650
646
|
keepMounted = false,
|
|
651
|
-
disabled = false,
|
|
652
647
|
scrim = false,
|
|
653
648
|
contentClassName,
|
|
654
649
|
contentProps,
|
|
655
650
|
overlayClassName,
|
|
656
651
|
className,
|
|
657
|
-
onMouseEnter: rootMouseEnter,
|
|
658
|
-
onMouseLeave: rootMouseLeave,
|
|
659
652
|
...rest
|
|
660
653
|
} = props;
|
|
661
|
-
const
|
|
662
|
-
const
|
|
663
|
-
const
|
|
664
|
-
const
|
|
665
|
-
const
|
|
666
|
-
const
|
|
667
|
-
|
|
668
|
-
|
|
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;
|
|
654
|
+
const hasContent = children !== void 0 && children !== null;
|
|
655
|
+
const manual = typeof open === "boolean";
|
|
656
|
+
const visible = Boolean(open);
|
|
657
|
+
const shouldRenderContent = hasContent && (keepMounted || visible || !manual && (openOnHover || openOnFocus));
|
|
658
|
+
const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
|
|
659
|
+
const visibilityClasses = (() => {
|
|
660
|
+
if (manual) {
|
|
661
|
+
return visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
|
|
812
662
|
}
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
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
|
-
);
|
|
663
|
+
const base2 = "pointer-events-none opacity-0 scale-95";
|
|
664
|
+
const hover = openOnHover ? " group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : "";
|
|
665
|
+
const focus = openOnFocus ? " group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : "";
|
|
666
|
+
return `${base2}${hover}${focus}`;
|
|
667
|
+
})();
|
|
882
668
|
const {
|
|
883
|
-
className:
|
|
669
|
+
className: contentExtraClassName,
|
|
884
670
|
style: contentStyle,
|
|
885
|
-
onClick: contentOnClick,
|
|
886
|
-
onMouseEnter: contentOnMouseEnter,
|
|
887
|
-
onMouseLeave: contentOnMouseLeave,
|
|
888
671
|
role: contentRole,
|
|
889
672
|
tabIndex: contentTabIndex,
|
|
890
|
-
["aria-labelledby"]: ariaLabelledBy,
|
|
891
673
|
...restContentProps
|
|
892
674
|
} = contentProps ?? {};
|
|
893
|
-
const
|
|
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
|
-
});
|
|
675
|
+
const overlayNode = scrim && visible ? /* @__PURE__ */ jsx("div", { className: twMerge(overlayBaseClasses, overlayClassName), "aria-hidden": true }) : null;
|
|
908
676
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
909
|
-
|
|
910
|
-
"div",
|
|
911
|
-
{
|
|
912
|
-
className: twMerge(overlayBaseClasses, overlayClassName),
|
|
913
|
-
"aria-hidden": true,
|
|
914
|
-
onClick: () => setOpen(false),
|
|
915
|
-
onMouseDown: (event) => event.preventDefault()
|
|
916
|
-
}
|
|
917
|
-
) : null,
|
|
677
|
+
overlayNode,
|
|
918
678
|
/* @__PURE__ */ jsxs(
|
|
919
679
|
"div",
|
|
920
680
|
{
|
|
921
681
|
...rest,
|
|
922
|
-
ref
|
|
923
|
-
className: twMerge("relative inline-flex min-w-0", className),
|
|
924
|
-
"data-open":
|
|
925
|
-
onMouseEnter: openOnHover ? handleRootMouseEnter : rootMouseEnter,
|
|
926
|
-
onMouseLeave: openOnHover ? handleRootMouseLeave : rootMouseLeave,
|
|
682
|
+
ref,
|
|
683
|
+
className: twMerge("relative inline-flex min-w-0 group/menu", className),
|
|
684
|
+
"data-open": visible || void 0,
|
|
927
685
|
children: [
|
|
928
|
-
|
|
686
|
+
/* @__PURE__ */ jsx("div", { className: "inline-flex w-full min-w-0", children: activator }),
|
|
929
687
|
shouldRenderContent ? /* @__PURE__ */ jsx(
|
|
930
688
|
"div",
|
|
931
689
|
{
|
|
932
690
|
...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
691
|
className: twMerge(
|
|
940
692
|
menuBaseClasses,
|
|
941
693
|
placementClasses[placement],
|
|
942
694
|
offsetClasses[verticalPlacement],
|
|
695
|
+
matchActivatorWidth ? "min-w-full" : void 0,
|
|
696
|
+
visibilityClasses,
|
|
943
697
|
contentClassName,
|
|
944
|
-
|
|
698
|
+
contentExtraClassName
|
|
945
699
|
),
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
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
|
-
},
|
|
700
|
+
"data-state": visible ? "open" : "closed",
|
|
701
|
+
role: contentRole ?? "menu",
|
|
702
|
+
tabIndex: contentTabIndex ?? -1,
|
|
703
|
+
style: contentStyle,
|
|
981
704
|
children
|
|
982
705
|
}
|
|
983
706
|
) : null
|
|
@@ -988,7 +711,7 @@ var Menu = React5.forwardRef((props, ref) => {
|
|
|
988
711
|
});
|
|
989
712
|
Menu.displayName = "Menu";
|
|
990
713
|
var Menu_default = Menu;
|
|
991
|
-
var ExpansionPanelContext =
|
|
714
|
+
var ExpansionPanelContext = React3.createContext(null);
|
|
992
715
|
var densityClasses2 = {
|
|
993
716
|
comfortable: "py-5",
|
|
994
717
|
default: "py-4",
|
|
@@ -1017,7 +740,7 @@ var accentClasses2 = {
|
|
|
1017
740
|
surface: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
|
|
1018
741
|
bw: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" }
|
|
1019
742
|
};
|
|
1020
|
-
var ExpansionPanelItem =
|
|
743
|
+
var ExpansionPanelItem = forwardRef((props, ref) => {
|
|
1021
744
|
const {
|
|
1022
745
|
value,
|
|
1023
746
|
title,
|
|
@@ -1036,8 +759,8 @@ var ExpansionPanelItem = React5.forwardRef((props, ref) => {
|
|
|
1036
759
|
color: colorOverride,
|
|
1037
760
|
...rest
|
|
1038
761
|
} = props;
|
|
1039
|
-
const context =
|
|
1040
|
-
const generatedValue =
|
|
762
|
+
const context = useContext(ExpansionPanelContext);
|
|
763
|
+
const generatedValue = useId();
|
|
1041
764
|
const panelValue = value ?? generatedValue;
|
|
1042
765
|
const density = context?.density ?? "default";
|
|
1043
766
|
const color = colorOverride ?? context?.color ?? "primary";
|
|
@@ -1045,9 +768,9 @@ var ExpansionPanelItem = React5.forwardRef((props, ref) => {
|
|
|
1045
768
|
const variant = context?.variant ?? "elevated";
|
|
1046
769
|
const rounded = context?.rounded ?? "lg";
|
|
1047
770
|
const accent = accentClasses2[color] ?? accentClasses2.primary;
|
|
1048
|
-
const headerId =
|
|
1049
|
-
const contentId =
|
|
1050
|
-
const [standaloneExpanded, setStandaloneExpanded] =
|
|
771
|
+
const headerId = useId();
|
|
772
|
+
const contentId = useId();
|
|
773
|
+
const [standaloneExpanded, setStandaloneExpanded] = useState(false);
|
|
1051
774
|
const isExpanded = context ? context.expandedValues.includes(panelValue) : standaloneExpanded;
|
|
1052
775
|
const handleToggle = () => {
|
|
1053
776
|
if (disabled) {
|
|
@@ -1173,7 +896,7 @@ var normalizeValues = (value, allowMultiple) => {
|
|
|
1173
896
|
return normalized.length ? [normalized[0]] : [];
|
|
1174
897
|
};
|
|
1175
898
|
var clampValues = (values, allowMultiple) => allowMultiple ? uniqueValues(values) : values.length ? [values[0]] : [];
|
|
1176
|
-
var ExpansionPanel =
|
|
899
|
+
var ExpansionPanel = forwardRef((props, ref) => {
|
|
1177
900
|
const {
|
|
1178
901
|
variant = "elevated",
|
|
1179
902
|
rounded = "lg",
|
|
@@ -1189,22 +912,22 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
|
|
|
1189
912
|
...rest
|
|
1190
913
|
} = props;
|
|
1191
914
|
const isControlled = value !== void 0;
|
|
1192
|
-
const controlledValues =
|
|
915
|
+
const controlledValues = useMemo(() => {
|
|
1193
916
|
if (!isControlled) {
|
|
1194
917
|
return void 0;
|
|
1195
918
|
}
|
|
1196
919
|
return normalizeValues(value, multiple);
|
|
1197
920
|
}, [isControlled, value, multiple]);
|
|
1198
|
-
const [internalValues, setInternalValues] =
|
|
921
|
+
const [internalValues, setInternalValues] = useState(
|
|
1199
922
|
() => normalizeValues(defaultValue, multiple)
|
|
1200
923
|
);
|
|
1201
924
|
const expandedValues = controlledValues ?? internalValues;
|
|
1202
|
-
|
|
925
|
+
useEffect(() => {
|
|
1203
926
|
if (!isControlled) {
|
|
1204
927
|
setInternalValues((prev) => clampValues(prev, multiple));
|
|
1205
928
|
}
|
|
1206
929
|
}, [multiple, isControlled]);
|
|
1207
|
-
const handleValueChange =
|
|
930
|
+
const handleValueChange = useCallback(
|
|
1208
931
|
(next) => {
|
|
1209
932
|
if (!isControlled) {
|
|
1210
933
|
setInternalValues(next);
|
|
@@ -1219,7 +942,7 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
|
|
|
1219
942
|
},
|
|
1220
943
|
[isControlled, multiple, onChange]
|
|
1221
944
|
);
|
|
1222
|
-
const toggle =
|
|
945
|
+
const toggle = useCallback(
|
|
1223
946
|
(panelValue, disabled) => {
|
|
1224
947
|
if (disabled) {
|
|
1225
948
|
return;
|
|
@@ -1230,7 +953,7 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
|
|
|
1230
953
|
},
|
|
1231
954
|
[expandedValues, handleValueChange, multiple]
|
|
1232
955
|
);
|
|
1233
|
-
const providerValue =
|
|
956
|
+
const providerValue = useMemo(
|
|
1234
957
|
() => ({ expandedValues, toggle, density, color, divider, rounded, variant }),
|
|
1235
958
|
[expandedValues, toggle, density, color, divider, rounded, variant]
|
|
1236
959
|
);
|
|
@@ -1249,8 +972,6 @@ var ExpansionPanel = React5.forwardRef((props, ref) => {
|
|
|
1249
972
|
});
|
|
1250
973
|
ExpansionPanel.displayName = "ExpansionPanel";
|
|
1251
974
|
var ExpansionPanel_default = ExpansionPanel;
|
|
1252
|
-
var isBrowser2 = typeof window !== "undefined";
|
|
1253
|
-
var useIsomorphicLayoutEffect2 = isBrowser2 ? React5.useLayoutEffect : React5.useEffect;
|
|
1254
975
|
var containerBaseClasses = "fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none";
|
|
1255
976
|
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
977
|
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 +982,87 @@ var resolveSizeValue = (value) => {
|
|
|
1261
982
|
}
|
|
1262
983
|
return typeof value === "number" ? `${value}px` : value;
|
|
1263
984
|
};
|
|
1264
|
-
var Dialog =
|
|
985
|
+
var Dialog = React3.forwardRef((props, forwardedRef) => {
|
|
1265
986
|
const {
|
|
1266
987
|
activator,
|
|
1267
988
|
children,
|
|
1268
|
-
open
|
|
1269
|
-
defaultOpen = false,
|
|
1270
|
-
onOpenChange,
|
|
1271
|
-
persistent = false,
|
|
1272
|
-
closeOnEsc = true,
|
|
1273
|
-
closeOnOutsideClick = true,
|
|
1274
|
-
closeOnContentClick = false,
|
|
1275
|
-
scrim = true,
|
|
989
|
+
open = false,
|
|
1276
990
|
keepMounted = false,
|
|
991
|
+
scrim = true,
|
|
1277
992
|
fullscreen = false,
|
|
1278
993
|
maxWidth = "32rem",
|
|
1279
994
|
width,
|
|
1280
995
|
containerClassName,
|
|
1281
996
|
overlayClassName,
|
|
1282
997
|
overlayProps,
|
|
1283
|
-
scrollLock = true,
|
|
1284
|
-
disabled = false,
|
|
1285
998
|
className,
|
|
1286
999
|
style,
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
id
|
|
1000
|
+
role: roleProp = "dialog",
|
|
1001
|
+
tabIndex = -1,
|
|
1002
|
+
id,
|
|
1290
1003
|
["aria-modal"]: ariaModalProp,
|
|
1291
1004
|
...rest
|
|
1292
1005
|
} = 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
1006
|
const state = open ? "open" : "closed";
|
|
1308
|
-
const
|
|
1309
|
-
const
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
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;
|
|
1007
|
+
const shouldRenderDialog = keepMounted || open;
|
|
1008
|
+
const resolvedStyle = { ...style };
|
|
1009
|
+
if (fullscreen) {
|
|
1010
|
+
if (resolvedStyle.maxWidth === void 0) {
|
|
1011
|
+
resolvedStyle.maxWidth = "none";
|
|
1347
1012
|
}
|
|
1348
|
-
|
|
1349
|
-
|
|
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;
|
|
1013
|
+
if (resolvedStyle.width === void 0) {
|
|
1014
|
+
resolvedStyle.width = "100%";
|
|
1364
1015
|
}
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
previous.focus();
|
|
1016
|
+
if (resolvedStyle.height === void 0) {
|
|
1017
|
+
resolvedStyle.height = "100%";
|
|
1368
1018
|
}
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
if (!open || !closeOnEsc || persistent || !isBrowser2) {
|
|
1372
|
-
return;
|
|
1019
|
+
if (resolvedStyle.maxHeight === void 0) {
|
|
1020
|
+
resolvedStyle.maxHeight = "100%";
|
|
1373
1021
|
}
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
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;
|
|
1022
|
+
} else {
|
|
1023
|
+
if (resolvedStyle.maxWidth === void 0) {
|
|
1024
|
+
resolvedStyle.maxWidth = resolveSizeValue(maxWidth);
|
|
1387
1025
|
}
|
|
1388
|
-
|
|
1389
|
-
|
|
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`;
|
|
1026
|
+
if (width !== void 0 && resolvedStyle.width === void 0) {
|
|
1027
|
+
resolvedStyle.width = resolveSizeValue(width);
|
|
1396
1028
|
}
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
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(
|
|
1029
|
+
}
|
|
1030
|
+
const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
|
|
1031
|
+
const { className: overlayExtraClassName, ...restOverlayProps } = overlayProps ?? {};
|
|
1032
|
+
const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsx(
|
|
1480
1033
|
"div",
|
|
1481
1034
|
{
|
|
1482
|
-
...
|
|
1483
|
-
className: twMerge(
|
|
1484
|
-
overlayBaseClasses2,
|
|
1485
|
-
scrim ? void 0 : "bg-transparent backdrop-blur-none",
|
|
1486
|
-
overlayClassName,
|
|
1487
|
-
overlayPropsClassName
|
|
1488
|
-
),
|
|
1035
|
+
...restOverlayProps,
|
|
1036
|
+
className: twMerge(overlayBaseClasses2, overlayClassName, overlayExtraClassName),
|
|
1489
1037
|
"data-state": state,
|
|
1490
|
-
"aria-hidden": true
|
|
1491
|
-
onPointerDown: handleOverlayPointerDown
|
|
1038
|
+
"aria-hidden": true
|
|
1492
1039
|
}
|
|
1493
1040
|
) : null;
|
|
1494
|
-
|
|
1495
|
-
/* @__PURE__ */
|
|
1041
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1042
|
+
activator ? /* @__PURE__ */ jsx("div", { className: "inline-flex", children: activator }) : null,
|
|
1043
|
+
shouldRenderDialog ? /* @__PURE__ */ jsxs("div", { className: twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
|
|
1496
1044
|
overlayNode,
|
|
1497
1045
|
/* @__PURE__ */ jsx("div", { className: twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsx(
|
|
1498
1046
|
"div",
|
|
1499
1047
|
{
|
|
1500
|
-
...
|
|
1501
|
-
ref:
|
|
1502
|
-
id
|
|
1503
|
-
role,
|
|
1504
|
-
tabIndex
|
|
1048
|
+
...rest,
|
|
1049
|
+
ref: forwardedRef,
|
|
1050
|
+
id,
|
|
1051
|
+
role: roleProp,
|
|
1052
|
+
tabIndex,
|
|
1505
1053
|
"aria-modal": ariaModal,
|
|
1506
|
-
className: twMerge(
|
|
1507
|
-
|
|
1508
|
-
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
1509
|
-
className
|
|
1510
|
-
),
|
|
1511
|
-
style: resolvedPanelStyle,
|
|
1054
|
+
className: twMerge(panelBaseClasses, fullscreen ? "h-full w-full max-w-none rounded-none" : void 0, className),
|
|
1055
|
+
style: resolvedStyle,
|
|
1512
1056
|
"data-state": state,
|
|
1513
|
-
onClick: handleContentClick,
|
|
1514
1057
|
children
|
|
1515
1058
|
}
|
|
1516
1059
|
) })
|
|
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
|
|
1060
|
+
] }) : null
|
|
1534
1061
|
] });
|
|
1535
1062
|
});
|
|
1536
1063
|
Dialog.displayName = "Dialog";
|
|
1537
1064
|
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
|
|
1065
|
+
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
1066
|
var wrapperBaseClasses = "relative inline-flex max-w-full align-middle";
|
|
1540
1067
|
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
1068
|
var resolveSizeValue2 = (value) => {
|
|
@@ -1572,259 +1099,70 @@ var arrowPlacementClasses = {
|
|
|
1572
1099
|
"right-start": "left-full top-4 -translate-x-1/2",
|
|
1573
1100
|
"right-end": "left-full bottom-4 -translate-x-1/2"
|
|
1574
1101
|
};
|
|
1575
|
-
var ToolTip =
|
|
1102
|
+
var ToolTip = React3.forwardRef((props, forwardedRef) => {
|
|
1576
1103
|
const {
|
|
1577
1104
|
activator,
|
|
1578
1105
|
children,
|
|
1579
|
-
open: openProp,
|
|
1580
|
-
defaultOpen = false,
|
|
1581
|
-
onOpenChange,
|
|
1582
1106
|
placement = "top",
|
|
1583
|
-
openDelay = 120,
|
|
1584
|
-
closeDelay = 100,
|
|
1585
|
-
openOnHover = true,
|
|
1586
|
-
openOnFocus = true,
|
|
1587
|
-
openOnClick = false,
|
|
1588
|
-
interactive = false,
|
|
1589
1107
|
arrow = true,
|
|
1590
1108
|
disabled = false,
|
|
1109
|
+
persistent = false,
|
|
1110
|
+
showOnHover = true,
|
|
1111
|
+
showOnFocus = true,
|
|
1112
|
+
interactive = false,
|
|
1591
1113
|
keepMounted = false,
|
|
1592
1114
|
maxWidth = "18rem",
|
|
1593
1115
|
wrapperClassName,
|
|
1594
|
-
closeOnContentClick = false,
|
|
1595
1116
|
className,
|
|
1596
1117
|
style,
|
|
1597
|
-
id
|
|
1118
|
+
id,
|
|
1598
1119
|
...rest
|
|
1599
1120
|
} = props;
|
|
1600
|
-
const
|
|
1601
|
-
const
|
|
1602
|
-
const
|
|
1603
|
-
const
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
const
|
|
1608
|
-
const
|
|
1609
|
-
const
|
|
1610
|
-
const
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1121
|
+
const hasRenderableContent = children !== void 0 && children !== null;
|
|
1122
|
+
const shouldEnableTriggers = !disabled && (persistent || showOnHover || showOnFocus);
|
|
1123
|
+
const shouldRenderTooltip = hasRenderableContent && (shouldEnableTriggers || keepMounted);
|
|
1124
|
+
const resolvedStyle = { ...style };
|
|
1125
|
+
if (resolvedStyle.maxWidth === void 0) {
|
|
1126
|
+
resolvedStyle.maxWidth = resolveSizeValue2(maxWidth);
|
|
1127
|
+
}
|
|
1128
|
+
const baseVisibility = persistent ? "opacity-100 scale-100" : "opacity-0 scale-95";
|
|
1129
|
+
const hoverClasses = !persistent && showOnHover ? " group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100" : "";
|
|
1130
|
+
const focusClasses = !persistent && showOnFocus ? " group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100" : "";
|
|
1131
|
+
const visibilityClasses = `${baseVisibility}${hoverClasses}${focusClasses}`;
|
|
1132
|
+
const pointerClasses = (() => {
|
|
1133
|
+
if (persistent) {
|
|
1134
|
+
return "pointer-events-auto";
|
|
1614
1135
|
}
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
if (closeTimeoutRef.current !== null) {
|
|
1618
|
-
window.clearTimeout(closeTimeoutRef.current);
|
|
1619
|
-
closeTimeoutRef.current = null;
|
|
1136
|
+
if (!interactive) {
|
|
1137
|
+
return "pointer-events-none";
|
|
1620
1138
|
}
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
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;
|
|
1139
|
+
const classes = ["pointer-events-none"];
|
|
1140
|
+
if (showOnHover) {
|
|
1141
|
+
classes.push("group-hover/tooltip:pointer-events-auto");
|
|
1661
1142
|
}
|
|
1662
|
-
|
|
1663
|
-
|
|
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);
|
|
1143
|
+
if (showOnFocus) {
|
|
1144
|
+
classes.push("group-focus-within/tooltip:pointer-events-auto");
|
|
1791
1145
|
}
|
|
1792
|
-
return
|
|
1793
|
-
}
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
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(
|
|
1146
|
+
return classes.join(" ");
|
|
1147
|
+
})();
|
|
1148
|
+
return /* @__PURE__ */ jsxs("span", { className: twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName), "data-disabled": disabled || void 0, children: [
|
|
1149
|
+
/* @__PURE__ */ jsx("span", { className: "inline-flex max-w-full", children: activator }),
|
|
1150
|
+
shouldRenderTooltip ? /* @__PURE__ */ jsxs(
|
|
1809
1151
|
"div",
|
|
1810
1152
|
{
|
|
1811
|
-
...
|
|
1153
|
+
...rest,
|
|
1812
1154
|
ref: forwardedRef,
|
|
1813
1155
|
role: "tooltip",
|
|
1814
|
-
id
|
|
1815
|
-
"aria-hidden":
|
|
1816
|
-
|
|
1817
|
-
className: twMerge(tooltipBaseClasses, placementClasses2[placement], pointerClass, className),
|
|
1156
|
+
id,
|
|
1157
|
+
"aria-hidden": persistent || disabled ? void 0 : true,
|
|
1158
|
+
className: twMerge(tooltipBaseClasses, placementClasses2[placement], visibilityClasses, pointerClasses, className),
|
|
1818
1159
|
style: resolvedStyle,
|
|
1819
|
-
onPointerEnter: handleTooltipPointerEnter,
|
|
1820
|
-
onPointerLeave: handleTooltipPointerLeave,
|
|
1821
|
-
onClick: handleTooltipClick,
|
|
1822
1160
|
children: [
|
|
1823
1161
|
children,
|
|
1824
1162
|
arrow && /* @__PURE__ */ jsx("span", { className: twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
|
|
1825
1163
|
]
|
|
1826
1164
|
}
|
|
1827
|
-
)
|
|
1165
|
+
) : null
|
|
1828
1166
|
] });
|
|
1829
1167
|
});
|
|
1830
1168
|
ToolTip.displayName = "ToolTip";
|