@underverse-ui/underverse 0.2.35 → 0.2.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -542,7 +542,27 @@ var Badge_default = Badge;
542
542
  // ../../components/ui/Card.tsx
543
543
  var import_react2 = require("react");
544
544
  var import_jsx_runtime3 = require("react/jsx-runtime");
545
- var Card = ({ title, description, children, footer, className, hoverable = false, clickable = false, innerClassName, contentClassName, noPadding = false, onClick, ...rest }) => {
545
+ var getPaddingInfo = (className) => {
546
+ if (!className) return { hasAll: false, hasX: false, hasY: false };
547
+ const hasAll = /\b(p)-\d+|\b(p)-\[/.test(className) || /\bmd:p-|lg:p-|sm:p-|xl:p-/.test(className);
548
+ const hasX = /\b(px|pl|pr|ps|pe)-/.test(className);
549
+ const hasY = /\b(py|pt|pb)-/.test(className);
550
+ return { hasAll, hasX, hasY };
551
+ };
552
+ var Card = ({
553
+ title,
554
+ description,
555
+ children,
556
+ footer,
557
+ className,
558
+ hoverable = false,
559
+ clickable = false,
560
+ innerClassName,
561
+ contentClassName,
562
+ noPadding = false,
563
+ onClick,
564
+ ...rest
565
+ }) => {
546
566
  const [isHovered, setIsHovered] = (0, import_react2.useState)(false);
547
567
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
548
568
  "div",
@@ -582,7 +602,13 @@ var Card = ({ title, description, children, footer, className, hoverable = false
582
602
  ),
583
603
  description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-sm md:text-base text-muted-foreground leading-relaxed", children: description })
584
604
  ] }),
585
- children && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: cn("relative p-4 md:p-6 pt-0", noPadding && "p-0", contentClassName), children }),
605
+ children && (() => {
606
+ const padding = getPaddingInfo(contentClassName);
607
+ const skipAllPadding = noPadding || padding.hasAll;
608
+ const defaultPaddingX = !skipAllPadding && !padding.hasX ? "px-4 md:px-6" : "";
609
+ const defaultPaddingY = !skipAllPadding && !padding.hasY ? "pt-0 pb-4 md:pb-6" : "";
610
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: cn("relative", defaultPaddingX, defaultPaddingY, contentClassName), children });
611
+ })(),
586
612
  footer && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "relative flex items-center p-4 md:p-6 pt-0 border-t border-border mt-4", children: footer })
587
613
  ] })
588
614
  }
@@ -2580,13 +2606,30 @@ var Modal = ({
2580
2606
  document.body.style.overflow = "unset";
2581
2607
  };
2582
2608
  }, [isOpen]);
2609
+ const isInsidePortal = (element) => {
2610
+ if (!element) return false;
2611
+ let current = element;
2612
+ while (current) {
2613
+ if (current.hasAttribute?.("data-datepicker") || current.hasAttribute?.("data-popover") || current.hasAttribute?.("data-dropdown") || current.hasAttribute?.("data-dropdown-menu") || current.hasAttribute?.("data-radix-popper-content-wrapper") || current.hasAttribute?.("data-radix-portal") || current.getAttribute?.("role") === "listbox" || current.getAttribute?.("role") === "dialog" || current.classList?.contains("datepicker-portal") || current.classList?.contains("popover-portal")) {
2614
+ return true;
2615
+ }
2616
+ current = current.parentElement;
2617
+ }
2618
+ return false;
2619
+ };
2583
2620
  const handleOverlayMouseDown = (event) => {
2584
2621
  mouseDownTarget.current = event.target;
2585
2622
  };
2586
2623
  const handleOverlayMouseUp = (event) => {
2587
2624
  const modalContent2 = modalContentRef.current;
2588
- const mouseDownOutside = modalContent2 && !modalContent2.contains(mouseDownTarget.current);
2589
- const mouseUpOutside = modalContent2 && !modalContent2.contains(event.target);
2625
+ const mouseDownTarget_ = mouseDownTarget.current;
2626
+ const mouseUpTarget = event.target;
2627
+ if (isInsidePortal(mouseDownTarget_) || isInsidePortal(mouseUpTarget)) {
2628
+ mouseDownTarget.current = null;
2629
+ return;
2630
+ }
2631
+ const mouseDownOutside = modalContent2 && !modalContent2.contains(mouseDownTarget_);
2632
+ const mouseUpOutside = modalContent2 && !modalContent2.contains(mouseUpTarget);
2590
2633
  if (closeOnOverlayClick && mouseDownOutside && mouseUpOutside) {
2591
2634
  onClose();
2592
2635
  }