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