@underverse-ui/underverse 1.0.83 → 1.0.85

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.d.cts CHANGED
@@ -448,6 +448,7 @@ interface Toast {
448
448
  onClick: () => void;
449
449
  };
450
450
  dismissible?: boolean;
451
+ overflowHidden?: boolean;
451
452
  }
452
453
  interface ToastContextType {
453
454
  addToast: (toast: Omit<Toast, "id">) => void;
@@ -542,8 +543,9 @@ interface AlertProps {
542
543
  onClose?: () => void;
543
544
  actions?: ReactNode;
544
545
  closeAriaLabel?: string;
546
+ overflowHidden?: boolean;
545
547
  }
546
- declare const Alert: ({ title, description, variant, className, icon, dismissible, onClose, actions, closeAriaLabel }: AlertProps) => react_jsx_runtime.JSX.Element | null;
548
+ declare const Alert: ({ title, description, variant, className, icon, dismissible, onClose, actions, closeAriaLabel, overflowHidden, }: AlertProps) => react_jsx_runtime.JSX.Element | null;
547
549
 
548
550
  interface GlobalLoadingProps {
549
551
  className?: string;
@@ -765,6 +767,7 @@ interface ScrollAreaProps extends HTMLAttributes<HTMLDivElement> {
765
767
  contentClassName?: string;
766
768
  variant?: "default" | "muted" | "primary" | "accent";
767
769
  outlined?: boolean;
770
+ overflowHidden?: boolean;
768
771
  useOverlayScrollbar?: boolean;
769
772
  }
770
773
  declare const ScrollArea: React$1.ForwardRefExoticComponent<ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -794,6 +797,7 @@ interface OverlayScrollAreaProps extends React__default.HTMLAttributes<HTMLDivEl
794
797
  viewportClassName?: string;
795
798
  viewportProps?: React__default.HTMLAttributes<HTMLDivElement>;
796
799
  enabled?: boolean;
800
+ overflowHidden?: boolean;
797
801
  overlayScrollbarOptions?: Omit<UseOverlayScrollbarTargetOptions, "enabled">;
798
802
  }
799
803
  declare const OverlayScrollArea: React__default.ForwardRefExoticComponent<OverlayScrollAreaProps & React__default.RefAttributes<HTMLDivElement>>;
@@ -1376,6 +1380,8 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
1376
1380
  monthEventStyle?: "span" | "compact";
1377
1381
  /** Month view only (when `monthEventStyle="compact"`): max visual width (px). */
1378
1382
  monthEventMaxWidth?: number;
1383
+ /** Clip overflow at the outer surface. Disable when child hover shadows or focus rings should escape the timeline card. Default: true. */
1384
+ overflowHidden?: boolean;
1379
1385
  dayTimeStepMinutes?: number;
1380
1386
  /** Render tooltips on events (can be expensive for large datasets). Default: true. */
1381
1387
  enableEventTooltips?: boolean;
@@ -1466,7 +1472,7 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
1466
1472
  virtualization?: CalendarTimelineVirtualization;
1467
1473
  }
1468
1474
 
1469
- declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, eventSheetOverlayOpacity, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, onlyView, view, defaultView, onViewChange, dueDateSprint, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, hideResourceColumn, resourceColumnWidth, defaultResourceColumnWidth, onResourceColumnWidthChange, minResourceColumnWidth, maxResourceColumnWidth, rowHeight, defaultRowHeight, onRowHeightChange, minRowHeight, maxRowHeight, rowHeights, defaultRowHeights, onRowHeightsChange, autoRowHeight, enableLayoutResize, slotMinWidth, adaptiveSlotWidths, dayEventStyle, dayEventMaxWidth, monthEventStyle, monthEventMaxWidth, dayTimeStepMinutes, enableEventTooltips, dayHeaderMode, daySlotCompression, columnVirtualization, dayRangeMode, workHours, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEventClick, onCreateEvent, onEventMove, onEventResize, onEventDelete, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
1475
+ declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, eventSheetOverlayOpacity, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, onlyView, view, defaultView, onViewChange, dueDateSprint, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, hideResourceColumn, resourceColumnWidth, defaultResourceColumnWidth, onResourceColumnWidthChange, minResourceColumnWidth, maxResourceColumnWidth, rowHeight, defaultRowHeight, onRowHeightChange, minRowHeight, maxRowHeight, rowHeights, defaultRowHeights, onRowHeightsChange, autoRowHeight, enableLayoutResize, slotMinWidth, adaptiveSlotWidths, dayEventStyle, dayEventMaxWidth, monthEventStyle, monthEventMaxWidth, overflowHidden, dayTimeStepMinutes, enableEventTooltips, dayHeaderMode, daySlotCompression, columnVirtualization, dayRangeMode, workHours, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEventClick, onCreateEvent, onEventMove, onEventResize, onEventDelete, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
1470
1476
 
1471
1477
  type ComboboxOption = string | {
1472
1478
  label: string;
@@ -1918,6 +1924,8 @@ interface ListProps extends React$1.HTMLAttributes<HTMLUListElement> {
1918
1924
  dense?: boolean;
1919
1925
  /** Class name customization for all list items */
1920
1926
  itemClassName?: string;
1927
+ /** Clip overflow on the outer list wrapper. Mainly relevant for striped/card-like variants. */
1928
+ overflowHidden?: boolean;
1921
1929
  }
1922
1930
  interface ListItemProps extends React$1.HTMLAttributes<HTMLLIElement> {
1923
1931
  as?: "li" | "div" | "a" | "button";
@@ -2101,6 +2109,7 @@ interface MusicPlayerProps {
2101
2109
  autoPlay?: boolean;
2102
2110
  showPlaylist?: boolean;
2103
2111
  className?: string;
2112
+ overflowHidden?: boolean;
2104
2113
  }
2105
2114
  declare const MusicPlayer: React__default.FC<MusicPlayerProps>;
2106
2115
 
@@ -2314,6 +2323,8 @@ interface DataTableProps<T> {
2314
2323
  stickyHeader?: boolean;
2315
2324
  /** Chiều cao tối đa của bảng khi bật stickyHeader (mặc định: 500px) */
2316
2325
  maxHeight?: number | string;
2326
+ /** Clip overflow của outer wrapper. Tắt khi cần cho phép shadow/focus ring tràn ra ngoài. */
2327
+ overflowHidden?: boolean;
2317
2328
  /** Enable OverlayScrollbars on table viewport. Default: false */
2318
2329
  useOverlayScrollbar?: boolean;
2319
2330
  /** Double-click leaf headers to auto-fit column width based on visible content. Default: true */
@@ -2321,7 +2332,7 @@ interface DataTableProps<T> {
2321
2332
  labels?: DataTableLabels;
2322
2333
  }
2323
2334
 
2324
- declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
2335
+ declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
2325
2336
 
2326
2337
  interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
2327
2338
  containerClassName?: string;
package/dist/index.d.ts CHANGED
@@ -448,6 +448,7 @@ interface Toast {
448
448
  onClick: () => void;
449
449
  };
450
450
  dismissible?: boolean;
451
+ overflowHidden?: boolean;
451
452
  }
452
453
  interface ToastContextType {
453
454
  addToast: (toast: Omit<Toast, "id">) => void;
@@ -542,8 +543,9 @@ interface AlertProps {
542
543
  onClose?: () => void;
543
544
  actions?: ReactNode;
544
545
  closeAriaLabel?: string;
546
+ overflowHidden?: boolean;
545
547
  }
546
- declare const Alert: ({ title, description, variant, className, icon, dismissible, onClose, actions, closeAriaLabel }: AlertProps) => react_jsx_runtime.JSX.Element | null;
548
+ declare const Alert: ({ title, description, variant, className, icon, dismissible, onClose, actions, closeAriaLabel, overflowHidden, }: AlertProps) => react_jsx_runtime.JSX.Element | null;
547
549
 
548
550
  interface GlobalLoadingProps {
549
551
  className?: string;
@@ -765,6 +767,7 @@ interface ScrollAreaProps extends HTMLAttributes<HTMLDivElement> {
765
767
  contentClassName?: string;
766
768
  variant?: "default" | "muted" | "primary" | "accent";
767
769
  outlined?: boolean;
770
+ overflowHidden?: boolean;
768
771
  useOverlayScrollbar?: boolean;
769
772
  }
770
773
  declare const ScrollArea: React$1.ForwardRefExoticComponent<ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -794,6 +797,7 @@ interface OverlayScrollAreaProps extends React__default.HTMLAttributes<HTMLDivEl
794
797
  viewportClassName?: string;
795
798
  viewportProps?: React__default.HTMLAttributes<HTMLDivElement>;
796
799
  enabled?: boolean;
800
+ overflowHidden?: boolean;
797
801
  overlayScrollbarOptions?: Omit<UseOverlayScrollbarTargetOptions, "enabled">;
798
802
  }
799
803
  declare const OverlayScrollArea: React__default.ForwardRefExoticComponent<OverlayScrollAreaProps & React__default.RefAttributes<HTMLDivElement>>;
@@ -1376,6 +1380,8 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
1376
1380
  monthEventStyle?: "span" | "compact";
1377
1381
  /** Month view only (when `monthEventStyle="compact"`): max visual width (px). */
1378
1382
  monthEventMaxWidth?: number;
1383
+ /** Clip overflow at the outer surface. Disable when child hover shadows or focus rings should escape the timeline card. Default: true. */
1384
+ overflowHidden?: boolean;
1379
1385
  dayTimeStepMinutes?: number;
1380
1386
  /** Render tooltips on events (can be expensive for large datasets). Default: true. */
1381
1387
  enableEventTooltips?: boolean;
@@ -1466,7 +1472,7 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
1466
1472
  virtualization?: CalendarTimelineVirtualization;
1467
1473
  }
1468
1474
 
1469
- declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, eventSheetOverlayOpacity, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, onlyView, view, defaultView, onViewChange, dueDateSprint, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, hideResourceColumn, resourceColumnWidth, defaultResourceColumnWidth, onResourceColumnWidthChange, minResourceColumnWidth, maxResourceColumnWidth, rowHeight, defaultRowHeight, onRowHeightChange, minRowHeight, maxRowHeight, rowHeights, defaultRowHeights, onRowHeightsChange, autoRowHeight, enableLayoutResize, slotMinWidth, adaptiveSlotWidths, dayEventStyle, dayEventMaxWidth, monthEventStyle, monthEventMaxWidth, dayTimeStepMinutes, enableEventTooltips, dayHeaderMode, daySlotCompression, columnVirtualization, dayRangeMode, workHours, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEventClick, onCreateEvent, onEventMove, onEventResize, onEventDelete, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
1475
+ declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, eventSheetOverlayOpacity, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, onlyView, view, defaultView, onViewChange, dueDateSprint, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, hideResourceColumn, resourceColumnWidth, defaultResourceColumnWidth, onResourceColumnWidthChange, minResourceColumnWidth, maxResourceColumnWidth, rowHeight, defaultRowHeight, onRowHeightChange, minRowHeight, maxRowHeight, rowHeights, defaultRowHeights, onRowHeightsChange, autoRowHeight, enableLayoutResize, slotMinWidth, adaptiveSlotWidths, dayEventStyle, dayEventMaxWidth, monthEventStyle, monthEventMaxWidth, overflowHidden, dayTimeStepMinutes, enableEventTooltips, dayHeaderMode, daySlotCompression, columnVirtualization, dayRangeMode, workHours, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEventClick, onCreateEvent, onEventMove, onEventResize, onEventDelete, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
1470
1476
 
1471
1477
  type ComboboxOption = string | {
1472
1478
  label: string;
@@ -1918,6 +1924,8 @@ interface ListProps extends React$1.HTMLAttributes<HTMLUListElement> {
1918
1924
  dense?: boolean;
1919
1925
  /** Class name customization for all list items */
1920
1926
  itemClassName?: string;
1927
+ /** Clip overflow on the outer list wrapper. Mainly relevant for striped/card-like variants. */
1928
+ overflowHidden?: boolean;
1921
1929
  }
1922
1930
  interface ListItemProps extends React$1.HTMLAttributes<HTMLLIElement> {
1923
1931
  as?: "li" | "div" | "a" | "button";
@@ -2101,6 +2109,7 @@ interface MusicPlayerProps {
2101
2109
  autoPlay?: boolean;
2102
2110
  showPlaylist?: boolean;
2103
2111
  className?: string;
2112
+ overflowHidden?: boolean;
2104
2113
  }
2105
2114
  declare const MusicPlayer: React__default.FC<MusicPlayerProps>;
2106
2115
 
@@ -2314,6 +2323,8 @@ interface DataTableProps<T> {
2314
2323
  stickyHeader?: boolean;
2315
2324
  /** Chiều cao tối đa của bảng khi bật stickyHeader (mặc định: 500px) */
2316
2325
  maxHeight?: number | string;
2326
+ /** Clip overflow của outer wrapper. Tắt khi cần cho phép shadow/focus ring tràn ra ngoài. */
2327
+ overflowHidden?: boolean;
2317
2328
  /** Enable OverlayScrollbars on table viewport. Default: false */
2318
2329
  useOverlayScrollbar?: boolean;
2319
2330
  /** Double-click leaf headers to auto-fit column width based on visible content. Default: true */
@@ -2321,7 +2332,7 @@ interface DataTableProps<T> {
2321
2332
  labels?: DataTableLabels;
2322
2333
  }
2323
2334
 
2324
- declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
2335
+ declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
2325
2336
 
2326
2337
  interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
2327
2338
  containerClassName?: string;
package/dist/index.js CHANGED
@@ -5308,9 +5308,10 @@ var ToastComponent = ({ toast, onRemove }) => {
5308
5308
  "div",
5309
5309
  {
5310
5310
  className: cn(
5311
- "relative w-80 rounded-xl border backdrop-blur-md transition-all duration-300 pointer-events-auto overflow-hidden",
5311
+ "relative w-80 rounded-xl border backdrop-blur-md transition-all duration-300 pointer-events-auto",
5312
5312
  "bg-card shadow-xl",
5313
5313
  "animate-in slide-in-from-right-full",
5314
+ toast.overflowHidden !== false && "overflow-hidden",
5314
5315
  config.containerClassName,
5315
5316
  isVisible ? "opacity-100 translate-x-0" : "opacity-0 translate-x-full"
5316
5317
  ),
@@ -6156,7 +6157,18 @@ var variantConfig = {
6156
6157
  accentBarClassName: "bg-destructive"
6157
6158
  }
6158
6159
  };
6159
- var Alert = ({ title, description, variant = "default", className, icon, dismissible = false, onClose, actions, closeAriaLabel }) => {
6160
+ var Alert = ({
6161
+ title,
6162
+ description,
6163
+ variant = "default",
6164
+ className,
6165
+ icon,
6166
+ dismissible = false,
6167
+ onClose,
6168
+ actions,
6169
+ closeAriaLabel,
6170
+ overflowHidden = true
6171
+ }) => {
6160
6172
  const [open, setOpen] = useState12(true);
6161
6173
  const t = useSmartTranslations("Common");
6162
6174
  if (!open) return null;
@@ -6170,9 +6182,10 @@ var Alert = ({ title, description, variant = "default", className, icon, dismiss
6170
6182
  "div",
6171
6183
  {
6172
6184
  className: cn(
6173
- "relative w-full rounded-r-xl border border-l-0 overflow-hidden",
6185
+ "relative w-full rounded-r-xl border border-l-0",
6174
6186
  "flex items-start gap-3 p-4 pl-5",
6175
6187
  "backdrop-blur-md",
6188
+ overflowHidden && "overflow-hidden",
6176
6189
  config.containerClassName,
6177
6190
  className
6178
6191
  ),
@@ -7749,19 +7762,23 @@ var variantClasses2 = {
7749
7762
  accent: "bg-accent/10"
7750
7763
  };
7751
7764
  var ScrollArea = forwardRef6(
7752
- ({ className, contentClassName, children, variant = "default", outlined = false, useOverlayScrollbar = false, ...props }, ref) => {
7765
+ ({
7766
+ className,
7767
+ contentClassName,
7768
+ children,
7769
+ variant = "default",
7770
+ outlined = false,
7771
+ overflowHidden = true,
7772
+ useOverlayScrollbar = false,
7773
+ ...props
7774
+ }, ref) => {
7753
7775
  const viewportRef = useRef11(null);
7754
7776
  useOverlayScrollbarTarget(viewportRef, { enabled: useOverlayScrollbar });
7755
7777
  return /* @__PURE__ */ jsx32(
7756
7778
  "div",
7757
7779
  {
7758
7780
  ref,
7759
- className: cn(
7760
- "relative overflow-hidden rounded-2xl md:rounded-3xl",
7761
- variantClasses2[variant],
7762
- outlined && "border border-border/60",
7763
- className
7764
- ),
7781
+ className: cn("relative", variantClasses2[variant], outlined && "border border-border/60", overflowHidden && "overflow-hidden", className),
7765
7782
  ...props,
7766
7783
  children: /* @__PURE__ */ jsx32("div", { ref: viewportRef, className: cn("h-full w-full overflow-y-auto scroll-area-viewport", contentClassName), children })
7767
7784
  }
@@ -7774,13 +7791,13 @@ ScrollArea.displayName = "ScrollArea";
7774
7791
  import { forwardRef as forwardRef7, useRef as useRef12 } from "react";
7775
7792
  import { jsx as jsx33 } from "react/jsx-runtime";
7776
7793
  var OverlayScrollArea = forwardRef7(
7777
- ({ className, viewportClassName, viewportProps, enabled = true, overlayScrollbarOptions, children, ...props }, ref) => {
7794
+ ({ className, viewportClassName, viewportProps, enabled = true, overflowHidden = true, overlayScrollbarOptions, children, ...props }, ref) => {
7778
7795
  const viewportRef = useRef12(null);
7779
7796
  useOverlayScrollbarTarget(viewportRef, {
7780
7797
  enabled,
7781
7798
  ...overlayScrollbarOptions
7782
7799
  });
7783
- return /* @__PURE__ */ jsx33("div", { ref, className: cn("relative overflow-hidden", className), ...props, children: /* @__PURE__ */ jsx33(
7800
+ return /* @__PURE__ */ jsx33("div", { ref, className: cn("relative", overflowHidden && "overflow-hidden", className), ...props, children: /* @__PURE__ */ jsx33(
7784
7801
  "div",
7785
7802
  {
7786
7803
  ref: viewportRef,
@@ -13548,6 +13565,7 @@ function CalendarTimeline({
13548
13565
  dayEventMaxWidth,
13549
13566
  monthEventStyle = "span",
13550
13567
  monthEventMaxWidth,
13568
+ overflowHidden = true,
13551
13569
  dayTimeStepMinutes = 60,
13552
13570
  enableEventTooltips = true,
13553
13571
  dayHeaderMode = "full",
@@ -14610,9 +14628,10 @@ function CalendarTimeline({
14610
14628
  "div",
14611
14629
  {
14612
14630
  className: cn(
14613
- "rounded-2xl md:rounded-3xl overflow-hidden bg-card text-card-foreground backdrop-blur-sm",
14631
+ "rounded-2xl md:rounded-3xl bg-card text-card-foreground backdrop-blur-sm",
14614
14632
  "border border-border/50 shadow-sm md:hover:shadow-md",
14615
14633
  "transition-[transform,box-shadow,border-color,background-color] duration-300 ease-soft",
14634
+ overflowHidden && "overflow-hidden",
14616
14635
  densityClass,
14617
14636
  className
14618
14637
  ),
@@ -18793,6 +18812,7 @@ var ListRoot = React46.forwardRef(
18793
18812
  className,
18794
18813
  itemClassName,
18795
18814
  // New prop
18815
+ overflowHidden = true,
18796
18816
  children,
18797
18817
  ...rest
18798
18818
  }, ref) => {
@@ -18806,21 +18826,36 @@ var ListRoot = React46.forwardRef(
18806
18826
  bordered: "border border-border/50 rounded-2xl md:rounded-3xl max-md:rounded-xl",
18807
18827
  card: "rounded-2xl md:rounded-3xl bg-card shadow-md border border-border/50 max-md:rounded-xl max-md:shadow-sm",
18808
18828
  flush: "",
18809
- striped: "rounded-2xl md:rounded-3xl border border-border/50 overflow-hidden max-md:rounded-xl"
18829
+ striped: "rounded-2xl md:rounded-3xl border border-border/50 max-md:rounded-xl"
18810
18830
  };
18811
18831
  if (loading2) {
18812
18832
  return /* @__PURE__ */ jsx54(
18813
18833
  Comp,
18814
18834
  {
18815
18835
  ref,
18816
- className: cn("group/list", variantClasses3[variant], inset && "p-1.5 md:p-2 max-md:p-1", divided && "divide-y divide-border/60", className),
18836
+ className: cn(
18837
+ "group/list",
18838
+ variantClasses3[variant],
18839
+ variant === "striped" && overflowHidden && "overflow-hidden",
18840
+ inset && "p-1.5 md:p-2 max-md:p-1",
18841
+ divided && "divide-y divide-border/60",
18842
+ className
18843
+ ),
18817
18844
  ...rest,
18818
18845
  children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx54(ListItemSkeleton, { size }, i))
18819
18846
  }
18820
18847
  );
18821
18848
  }
18822
18849
  if (!hasChildren && emptyText) {
18823
- return /* @__PURE__ */ jsx54(Comp, { ref, className: cn("group/list", variantClasses3[variant], inset && "p-1.5 md:p-2 max-md:p-1", className), ...rest, children: /* @__PURE__ */ jsx54("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText }) });
18850
+ return /* @__PURE__ */ jsx54(
18851
+ Comp,
18852
+ {
18853
+ ref,
18854
+ className: cn("group/list", variantClasses3[variant], variant === "striped" && overflowHidden && "overflow-hidden", inset && "p-1.5 md:p-2 max-md:p-1", className),
18855
+ ...rest,
18856
+ children: /* @__PURE__ */ jsx54("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText })
18857
+ }
18858
+ );
18824
18859
  }
18825
18860
  return /* @__PURE__ */ jsx54(
18826
18861
  Comp,
@@ -18829,6 +18864,7 @@ var ListRoot = React46.forwardRef(
18829
18864
  className: cn(
18830
18865
  "group/list",
18831
18866
  variantClasses3[variant],
18867
+ variant === "striped" && overflowHidden && "overflow-hidden",
18832
18868
  inset && "p-1.5 md:p-2 max-md:p-1",
18833
18869
  divided && "divide-y divide-border/60",
18834
18870
  variant === "striped" && "[&>*:nth-child(even)]:bg-muted/30",
@@ -20159,7 +20195,8 @@ var MusicPlayer = ({
20159
20195
  playlist = DEFAULT_PLAYLIST,
20160
20196
  autoPlay = false,
20161
20197
  showPlaylist: initialShowPlaylist = true,
20162
- className = ""
20198
+ className = "",
20199
+ overflowHidden = true
20163
20200
  }) => {
20164
20201
  const [currentSongIndex, setCurrentSongIndex] = useState38(0);
20165
20202
  const [isPlaying, setIsPlaying] = useState38(false);
@@ -20261,108 +20298,116 @@ var MusicPlayer = ({
20261
20298
  }
20262
20299
  }
20263
20300
  }, [currentSongIndex, currentSong.startTime, isPlaying]);
20264
- return /* @__PURE__ */ jsxs48("div", { className: `underverse-music-player bg-card dark:bg-card border border-border/50 rounded-2xl shadow-2xl overflow-hidden ${className}`, children: [
20265
- /* @__PURE__ */ jsx58("audio", { ref: audioRef, src: currentSong.audioUrl, onTimeUpdate: handleTimeUpdate, onLoadedMetadata: handleLoadedMetadata, onEnded: playNext }),
20266
- /* @__PURE__ */ jsxs48("div", { className: "p-6", children: [
20267
- /* @__PURE__ */ jsxs48("div", { className: "text-center mb-6", children: [
20268
- /* @__PURE__ */ jsx58("div", { className: "w-48 h-48 mx-auto mb-4 bg-primary/10 dark:bg-primary/20 border border-primary/30 rounded-2xl shadow-lg flex items-center justify-center", children: /* @__PURE__ */ jsx58("div", { className: "text-6xl", children: "\u{1F3B5}" }) }),
20269
- /* @__PURE__ */ jsx58("h2", { className: "text-2xl font-bold text-foreground mb-1", children: currentSong.title }),
20270
- currentSong.artist && /* @__PURE__ */ jsx58("p", { className: "text-muted-foreground", children: currentSong.artist })
20271
- ] }),
20272
- /* @__PURE__ */ jsxs48("div", { className: "mb-4", children: [
20273
- /* @__PURE__ */ jsx58(
20274
- "input",
20275
- {
20276
- type: "range",
20277
- min: "0",
20278
- max: duration || 0,
20279
- value: currentTime,
20280
- onChange: handleSeek,
20281
- className: "w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer slider"
20282
- }
20283
- ),
20284
- /* @__PURE__ */ jsxs48("div", { className: "flex justify-between text-sm text-muted-foreground mt-1", children: [
20285
- /* @__PURE__ */ jsx58("span", { children: formatTime3(currentTime) }),
20286
- /* @__PURE__ */ jsx58("span", { children: formatTime3(duration) })
20287
- ] })
20288
- ] }),
20289
- /* @__PURE__ */ jsxs48("div", { className: "flex items-center justify-center gap-4 mb-6", children: [
20290
- /* @__PURE__ */ jsx58(
20291
- "button",
20292
- {
20293
- onClick: playPrevious,
20294
- className: "w-12 h-12 flex items-center justify-center rounded-full bg-secondary hover:bg-secondary/80 transition-colors text-secondary-foreground",
20295
- children: /* @__PURE__ */ jsx58(SkipBack, { size: 24 })
20296
- }
20297
- ),
20298
- /* @__PURE__ */ jsx58(
20299
- "button",
20300
- {
20301
- onClick: togglePlay,
20302
- className: "w-16 h-16 flex items-center justify-center rounded-full bg-primary hover:bg-primary/90 transition-colors text-primary-foreground shadow-lg",
20303
- children: isPlaying ? /* @__PURE__ */ jsx58(Pause2, { size: 32 }) : /* @__PURE__ */ jsx58(Play2, { size: 32, className: "ml-1" })
20304
- }
20305
- ),
20306
- /* @__PURE__ */ jsx58(
20307
- "button",
20308
- {
20309
- onClick: playNext,
20310
- className: "w-12 h-12 flex items-center justify-center rounded-full bg-secondary hover:bg-secondary/80 transition-colors text-secondary-foreground",
20311
- children: /* @__PURE__ */ jsx58(SkipForward, { size: 24 })
20312
- }
20313
- )
20314
- ] }),
20315
- /* @__PURE__ */ jsxs48("div", { className: "flex items-center gap-3 mb-4", children: [
20316
- /* @__PURE__ */ jsx58("button", { onClick: toggleMute, className: "text-foreground hover:text-primary transition-colors", children: isMuted || volume === 0 ? /* @__PURE__ */ jsx58(VolumeX2, { size: 20 }) : /* @__PURE__ */ jsx58(Volume22, { size: 20 }) }),
20317
- /* @__PURE__ */ jsx58(
20318
- "input",
20319
- {
20320
- type: "range",
20321
- min: "0",
20322
- max: "1",
20323
- step: "0.01",
20324
- value: volume,
20325
- onChange: handleVolumeChange,
20326
- className: "flex-1 h-2 bg-muted rounded-lg appearance-none cursor-pointer"
20327
- }
20328
- )
20329
- ] }),
20330
- /* @__PURE__ */ jsx58("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxs48(
20331
- "button",
20332
- {
20333
- onClick: () => setShowPlaylist(!showPlaylist),
20334
- className: "flex items-center gap-2 px-4 py-2 bg-secondary hover:bg-secondary/80 rounded-lg text-secondary-foreground transition-colors",
20335
- children: [
20336
- showPlaylist ? /* @__PURE__ */ jsx58(X17, { size: 20 }) : /* @__PURE__ */ jsx58(List2, { size: 20 }),
20337
- /* @__PURE__ */ jsx58("span", { children: showPlaylist ? "Hide Playlist" : "Show Playlist" })
20338
- ]
20339
- }
20340
- ) })
20341
- ] }),
20342
- showPlaylist && /* @__PURE__ */ jsx58("div", { className: "bg-muted/50 backdrop-blur-sm max-h-96 overflow-y-auto border-t border-border/50", children: /* @__PURE__ */ jsxs48("div", { className: "p-4", children: [
20343
- /* @__PURE__ */ jsxs48("h3", { className: "text-lg font-semibold text-foreground mb-3", children: [
20344
- "Playlist (",
20345
- playlist.length,
20346
- " songs)"
20347
- ] }),
20348
- /* @__PURE__ */ jsx58("div", { className: "space-y-2", children: playlist.map((song, index) => /* @__PURE__ */ jsxs48(
20349
- "div",
20350
- {
20351
- onClick: () => playSong(index),
20352
- className: `flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-all ${index === currentSongIndex ? "bg-primary/20 border border-primary shadow-lg" : "bg-secondary/30 hover:bg-secondary/50"}`,
20353
- children: [
20354
- /* @__PURE__ */ jsx58("div", { className: "shrink-0 w-8 h-8 flex items-center justify-center rounded-full bg-primary text-primary-foreground text-sm font-semibold", children: index === currentSongIndex && isPlaying ? "\u25B6" : index + 1 }),
20355
- /* @__PURE__ */ jsxs48("div", { className: "flex-1 min-w-0", children: [
20356
- /* @__PURE__ */ jsx58("p", { className: "text-foreground font-medium truncate", children: song.title }),
20357
- song.artist && /* @__PURE__ */ jsx58("p", { className: "text-muted-foreground text-sm truncate", children: song.artist })
20358
- ] }),
20359
- /* @__PURE__ */ jsx58("div", { className: "text-muted-foreground text-sm shrink-0", children: song.duration })
20360
- ]
20361
- },
20362
- song.id
20363
- )) })
20364
- ] }) }),
20365
- /* @__PURE__ */ jsx58("style", { children: `
20301
+ return /* @__PURE__ */ jsxs48(
20302
+ "div",
20303
+ {
20304
+ className: [
20305
+ "underverse-music-player bg-card dark:bg-card border border-border/50 rounded-2xl shadow-2xl",
20306
+ overflowHidden ? "overflow-hidden" : "",
20307
+ className
20308
+ ].filter(Boolean).join(" "),
20309
+ children: [
20310
+ /* @__PURE__ */ jsx58("audio", { ref: audioRef, src: currentSong.audioUrl, onTimeUpdate: handleTimeUpdate, onLoadedMetadata: handleLoadedMetadata, onEnded: playNext }),
20311
+ /* @__PURE__ */ jsxs48("div", { className: "p-6", children: [
20312
+ /* @__PURE__ */ jsxs48("div", { className: "text-center mb-6", children: [
20313
+ /* @__PURE__ */ jsx58("div", { className: "w-48 h-48 mx-auto mb-4 bg-primary/10 dark:bg-primary/20 border border-primary/30 rounded-2xl shadow-lg flex items-center justify-center", children: /* @__PURE__ */ jsx58("div", { className: "text-6xl", children: "\u{1F3B5}" }) }),
20314
+ /* @__PURE__ */ jsx58("h2", { className: "text-2xl font-bold text-foreground mb-1", children: currentSong.title }),
20315
+ currentSong.artist && /* @__PURE__ */ jsx58("p", { className: "text-muted-foreground", children: currentSong.artist })
20316
+ ] }),
20317
+ /* @__PURE__ */ jsxs48("div", { className: "mb-4", children: [
20318
+ /* @__PURE__ */ jsx58(
20319
+ "input",
20320
+ {
20321
+ type: "range",
20322
+ min: "0",
20323
+ max: duration || 0,
20324
+ value: currentTime,
20325
+ onChange: handleSeek,
20326
+ className: "w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer slider"
20327
+ }
20328
+ ),
20329
+ /* @__PURE__ */ jsxs48("div", { className: "flex justify-between text-sm text-muted-foreground mt-1", children: [
20330
+ /* @__PURE__ */ jsx58("span", { children: formatTime3(currentTime) }),
20331
+ /* @__PURE__ */ jsx58("span", { children: formatTime3(duration) })
20332
+ ] })
20333
+ ] }),
20334
+ /* @__PURE__ */ jsxs48("div", { className: "flex items-center justify-center gap-4 mb-6", children: [
20335
+ /* @__PURE__ */ jsx58(
20336
+ "button",
20337
+ {
20338
+ onClick: playPrevious,
20339
+ className: "w-12 h-12 flex items-center justify-center rounded-full bg-secondary hover:bg-secondary/80 transition-colors text-secondary-foreground",
20340
+ children: /* @__PURE__ */ jsx58(SkipBack, { size: 24 })
20341
+ }
20342
+ ),
20343
+ /* @__PURE__ */ jsx58(
20344
+ "button",
20345
+ {
20346
+ onClick: togglePlay,
20347
+ className: "w-16 h-16 flex items-center justify-center rounded-full bg-primary hover:bg-primary/90 transition-colors text-primary-foreground shadow-lg",
20348
+ children: isPlaying ? /* @__PURE__ */ jsx58(Pause2, { size: 32 }) : /* @__PURE__ */ jsx58(Play2, { size: 32, className: "ml-1" })
20349
+ }
20350
+ ),
20351
+ /* @__PURE__ */ jsx58(
20352
+ "button",
20353
+ {
20354
+ onClick: playNext,
20355
+ className: "w-12 h-12 flex items-center justify-center rounded-full bg-secondary hover:bg-secondary/80 transition-colors text-secondary-foreground",
20356
+ children: /* @__PURE__ */ jsx58(SkipForward, { size: 24 })
20357
+ }
20358
+ )
20359
+ ] }),
20360
+ /* @__PURE__ */ jsxs48("div", { className: "flex items-center gap-3 mb-4", children: [
20361
+ /* @__PURE__ */ jsx58("button", { onClick: toggleMute, className: "text-foreground hover:text-primary transition-colors", children: isMuted || volume === 0 ? /* @__PURE__ */ jsx58(VolumeX2, { size: 20 }) : /* @__PURE__ */ jsx58(Volume22, { size: 20 }) }),
20362
+ /* @__PURE__ */ jsx58(
20363
+ "input",
20364
+ {
20365
+ type: "range",
20366
+ min: "0",
20367
+ max: "1",
20368
+ step: "0.01",
20369
+ value: volume,
20370
+ onChange: handleVolumeChange,
20371
+ className: "flex-1 h-2 bg-muted rounded-lg appearance-none cursor-pointer"
20372
+ }
20373
+ )
20374
+ ] }),
20375
+ /* @__PURE__ */ jsx58("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxs48(
20376
+ "button",
20377
+ {
20378
+ onClick: () => setShowPlaylist(!showPlaylist),
20379
+ className: "flex items-center gap-2 px-4 py-2 bg-secondary hover:bg-secondary/80 rounded-lg text-secondary-foreground transition-colors",
20380
+ children: [
20381
+ showPlaylist ? /* @__PURE__ */ jsx58(X17, { size: 20 }) : /* @__PURE__ */ jsx58(List2, { size: 20 }),
20382
+ /* @__PURE__ */ jsx58("span", { children: showPlaylist ? "Hide Playlist" : "Show Playlist" })
20383
+ ]
20384
+ }
20385
+ ) })
20386
+ ] }),
20387
+ showPlaylist && /* @__PURE__ */ jsx58("div", { className: "bg-muted/50 backdrop-blur-sm max-h-96 overflow-y-auto border-t border-border/50", children: /* @__PURE__ */ jsxs48("div", { className: "p-4", children: [
20388
+ /* @__PURE__ */ jsxs48("h3", { className: "text-lg font-semibold text-foreground mb-3", children: [
20389
+ "Playlist (",
20390
+ playlist.length,
20391
+ " songs)"
20392
+ ] }),
20393
+ /* @__PURE__ */ jsx58("div", { className: "space-y-2", children: playlist.map((song, index) => /* @__PURE__ */ jsxs48(
20394
+ "div",
20395
+ {
20396
+ onClick: () => playSong(index),
20397
+ className: `flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-all ${index === currentSongIndex ? "bg-primary/20 border border-primary shadow-lg" : "bg-secondary/30 hover:bg-secondary/50"}`,
20398
+ children: [
20399
+ /* @__PURE__ */ jsx58("div", { className: "shrink-0 w-8 h-8 flex items-center justify-center rounded-full bg-primary text-primary-foreground text-sm font-semibold", children: index === currentSongIndex && isPlaying ? "\u25B6" : index + 1 }),
20400
+ /* @__PURE__ */ jsxs48("div", { className: "flex-1 min-w-0", children: [
20401
+ /* @__PURE__ */ jsx58("p", { className: "text-foreground font-medium truncate", children: song.title }),
20402
+ song.artist && /* @__PURE__ */ jsx58("p", { className: "text-muted-foreground text-sm truncate", children: song.artist })
20403
+ ] }),
20404
+ /* @__PURE__ */ jsx58("div", { className: "text-muted-foreground text-sm shrink-0", children: song.duration })
20405
+ ]
20406
+ },
20407
+ song.id
20408
+ )) })
20409
+ ] }) }),
20410
+ /* @__PURE__ */ jsx58("style", { children: `
20366
20411
  .underverse-music-player input[type="range"]::-webkit-slider-thumb {
20367
20412
  -webkit-appearance: none;
20368
20413
  appearance: none;
@@ -20388,7 +20433,9 @@ var MusicPlayer = ({
20388
20433
  background: linear-gradient(to right, hsl(var(--primary)) var(--progress, 0%), hsl(var(--muted)) var(--progress, 0%));
20389
20434
  }
20390
20435
  ` })
20391
- ] });
20436
+ ]
20437
+ }
20438
+ );
20392
20439
  };
20393
20440
  var MusicPlayer_default = MusicPlayer;
20394
20441
 
@@ -21923,6 +21970,7 @@ function DataTable({
21923
21970
  storageKey,
21924
21971
  stickyHeader = true,
21925
21972
  maxHeight = 500,
21973
+ overflowHidden = true,
21926
21974
  useOverlayScrollbar = false,
21927
21975
  enableHeaderAutoFit = true,
21928
21976
  labels
@@ -22056,7 +22104,8 @@ function DataTable({
22056
22104
  "div",
22057
22105
  {
22058
22106
  className: cn(
22059
- "relative rounded-2xl md:rounded-3xl border border-border/50 bg-card overflow-hidden",
22107
+ "relative rounded-2xl md:rounded-3xl border border-border/50 bg-card",
22108
+ overflowHidden && "overflow-hidden",
22060
22109
  loading2 && "opacity-60 pointer-events-none"
22061
22110
  ),
22062
22111
  children: /* @__PURE__ */ jsx67(