@underverse-ui/underverse 0.2.51 → 0.2.52

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
@@ -248,14 +248,21 @@ declare const Switch: React$1.FC<SwitchProps>;
248
248
 
249
249
  declare const Label: React$1.ForwardRefExoticComponent<React$1.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<(props?: class_variance_authority_types.ClassProp | undefined) => string> & React$1.RefAttributes<HTMLLabelElement>>;
250
250
 
251
+ type StatusType = "online" | "offline" | "busy" | "away" | "none";
251
252
  interface AvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {
252
253
  src?: string;
253
254
  alt?: string;
254
255
  fallback?: string;
255
256
  size?: "sm" | "md" | "lg";
257
+ /** Show status indicator dot */
258
+ showStatus?: boolean;
259
+ /** Status type: online, offline, busy, away, none */
260
+ status?: StatusType;
261
+ /** Hide status dot on hover */
262
+ hideStatusOnHover?: boolean;
256
263
  onClick?: () => void;
257
264
  }
258
- declare const Avatar: ({ src, alt, fallback, size, className, onClick, ...props }: AvatarProps) => react_jsx_runtime.JSX.Element;
265
+ declare const Avatar: ({ src, alt, fallback, size, showStatus, status, hideStatusOnHover, className, onClick, ...props }: AvatarProps) => react_jsx_runtime.JSX.Element;
259
266
 
260
267
  interface SkeletonProps {
261
268
  className?: string;
package/dist/index.d.ts CHANGED
@@ -248,14 +248,21 @@ declare const Switch: React$1.FC<SwitchProps>;
248
248
 
249
249
  declare const Label: React$1.ForwardRefExoticComponent<React$1.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<(props?: class_variance_authority_types.ClassProp | undefined) => string> & React$1.RefAttributes<HTMLLabelElement>>;
250
250
 
251
+ type StatusType = "online" | "offline" | "busy" | "away" | "none";
251
252
  interface AvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {
252
253
  src?: string;
253
254
  alt?: string;
254
255
  fallback?: string;
255
256
  size?: "sm" | "md" | "lg";
257
+ /** Show status indicator dot */
258
+ showStatus?: boolean;
259
+ /** Status type: online, offline, busy, away, none */
260
+ status?: StatusType;
261
+ /** Hide status dot on hover */
262
+ hideStatusOnHover?: boolean;
256
263
  onClick?: () => void;
257
264
  }
258
- declare const Avatar: ({ src, alt, fallback, size, className, onClick, ...props }: AvatarProps) => react_jsx_runtime.JSX.Element;
265
+ declare const Avatar: ({ src, alt, fallback, size, showStatus, status, hideStatusOnHover, className, onClick, ...props }: AvatarProps) => react_jsx_runtime.JSX.Element;
259
266
 
260
267
  interface SkeletonProps {
261
268
  className?: string;
package/dist/index.js CHANGED
@@ -2053,13 +2053,36 @@ var sizeClasses = {
2053
2053
  md: "h-10 w-10 text-base",
2054
2054
  lg: "h-14 w-14 text-lg"
2055
2055
  };
2056
- var Avatar = ({ src, alt = "avatar", fallback = "?", size = "md", className, onClick, ...props }) => {
2056
+ var statusColors = {
2057
+ online: "bg-success",
2058
+ offline: "bg-muted-foreground",
2059
+ busy: "bg-destructive",
2060
+ away: "bg-warning",
2061
+ none: "bg-transparent"
2062
+ };
2063
+ var statusDotSizes = {
2064
+ sm: "w-2 h-2 border",
2065
+ md: "w-3 h-3 border-2",
2066
+ lg: "w-4 h-4 border-2"
2067
+ };
2068
+ var Avatar = ({
2069
+ src,
2070
+ alt = "avatar",
2071
+ fallback = "?",
2072
+ size = "md",
2073
+ showStatus = true,
2074
+ status = "online",
2075
+ hideStatusOnHover = true,
2076
+ className,
2077
+ onClick,
2078
+ ...props
2079
+ }) => {
2057
2080
  const hasValidSrc = !!(src && src.trim().length > 0);
2058
2081
  return /* @__PURE__ */ jsxs9(
2059
2082
  "div",
2060
2083
  {
2061
2084
  className: cn(
2062
- "relative inline-flex items-center justify-center overflow-hidden rounded-full bg-muted text-foreground select-none transition-all duration-200 ease-soft",
2085
+ "group relative inline-flex items-center justify-center overflow-visible rounded-full bg-muted text-foreground select-none transition-all duration-200 ease-soft",
2063
2086
  onClick && "cursor-pointer hover:ring-2 hover:ring-primary/50 hover:ring-offset-2 hover:shadow-lg active:scale-95",
2064
2087
  sizeClasses[size],
2065
2088
  className
@@ -2067,31 +2090,44 @@ var Avatar = ({ src, alt = "avatar", fallback = "?", size = "md", className, onC
2067
2090
  onClick,
2068
2091
  ...props,
2069
2092
  children: [
2070
- hasValidSrc && /* @__PURE__ */ jsx12("div", { className: "absolute inset-0", children: /* @__PURE__ */ jsx12(
2071
- SmartImage,
2072
- {
2073
- src,
2074
- alt,
2075
- fill: true,
2076
- ratioClass: void 0,
2077
- className: "h-full w-full",
2078
- roundedClass: "rounded-full",
2079
- fit: "cover",
2080
- objectPosition: "center",
2081
- quality: 80
2082
- }
2083
- ) }),
2084
- !hasValidSrc && /* @__PURE__ */ jsx12(
2085
- "span",
2093
+ /* @__PURE__ */ jsxs9("div", { className: "absolute inset-0 overflow-hidden rounded-full", children: [
2094
+ hasValidSrc && /* @__PURE__ */ jsx12(
2095
+ SmartImage,
2096
+ {
2097
+ src,
2098
+ alt,
2099
+ fill: true,
2100
+ ratioClass: void 0,
2101
+ className: "h-full w-full",
2102
+ roundedClass: "rounded-full",
2103
+ fit: "cover",
2104
+ objectPosition: "center",
2105
+ quality: 80
2106
+ }
2107
+ ),
2108
+ !hasValidSrc && /* @__PURE__ */ jsx12("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx12(
2109
+ "span",
2110
+ {
2111
+ className: cn(
2112
+ "font-bold uppercase bg-linear-to-br from-primary to-primary/80 bg-clip-text text-transparent",
2113
+ "transition-all duration-200 animate-fade-in"
2114
+ ),
2115
+ children: fallback
2116
+ }
2117
+ ) })
2118
+ ] }),
2119
+ showStatus && status !== "none" && /* @__PURE__ */ jsx12(
2120
+ "div",
2086
2121
  {
2087
2122
  className: cn(
2088
- "font-bold uppercase bg-linear-to-br from-primary to-primary/80 bg-clip-text text-transparent",
2089
- "transition-all duration-200 animate-fade-in"
2090
- ),
2091
- children: fallback
2123
+ "absolute bottom-0 right-0 rounded-full border-background z-10",
2124
+ statusColors[status],
2125
+ statusDotSizes[size],
2126
+ "transition-opacity duration-200",
2127
+ hideStatusOnHover ? "opacity-100 group-hover:opacity-50" : "opacity-100"
2128
+ )
2092
2129
  }
2093
- ),
2094
- /* @__PURE__ */ jsx12("div", { className: "absolute bottom-0 right-0 w-3 h-3 bg-success border-2 border-background rounded-full opacity-0 group-hover:opacity-100 transition-opacity duration-200" })
2130
+ )
2095
2131
  ]
2096
2132
  }
2097
2133
  );