// src/components/Table/Table.tsx
import {
  forwardRef as forwardRef3,
  useState,
  useMemo,
  useEffect,
  Children,
  isValidElement
} from "react";

// src/utils/utils.ts
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";
function cn(...inputs) {
  return twMerge(clsx(inputs));
}

// src/components/Table/Table.tsx
import { CaretUp, CaretDown as CaretDown2 } from "phosphor-react";

// src/components/Text/Text.tsx
import { jsx } from "react/jsx-runtime";
var Text = ({
  children,
  size = "md",
  weight = "normal",
  color = "text-text-950",
  as,
  className = "",
  ...props
}) => {
  let sizeClasses;
  let weightClasses;
  const sizeClassMap = {
    "2xs": "text-2xs",
    xs: "text-xs",
    sm: "text-sm",
    md: "text-md",
    lg: "text-lg",
    xl: "text-xl",
    "2xl": "text-2xl",
    "3xl": "text-3xl",
    "4xl": "text-4xl",
    "5xl": "text-5xl",
    "6xl": "text-6xl"
  };
  sizeClasses = sizeClassMap[size] ?? sizeClassMap.md;
  const weightClassMap = {
    hairline: "font-hairline",
    light: "font-light",
    normal: "font-normal",
    medium: "font-medium",
    semibold: "font-semibold",
    bold: "font-bold",
    extrabold: "font-extrabold",
    black: "font-black"
  };
  weightClasses = weightClassMap[weight] ?? weightClassMap.normal;
  const baseClasses = "font-primary";
  const Component = as ?? "p";
  return /* @__PURE__ */ jsx(
    Component,
    {
      className: cn(baseClasses, sizeClasses, weightClasses, color, className),
      ...props,
      children
    }
  );
};
var Text_default = Text;

// src/components/NoSearchResult/NoSearchResult.tsx
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
var NoSearchResult = ({ image, title, description }) => {
  const displayTitle = title || "Nenhum resultado encontrado";
  const displayDescription = description || "N\xE3o encontramos nenhum resultado com esse nome. Tente revisar a busca ou usar outra palavra-chave.";
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col lg:flex-row justify-center items-center gap-6 lg:gap-8 w-full max-w-4xl min-h-96 px-4 lg:px-0", children: [
    /* @__PURE__ */ jsx2("div", { className: "w-48 h-48 lg:w-72 lg:h-72 flex-shrink-0 relative max-w-full", children: /* @__PURE__ */ jsx2(
      "img",
      {
        src: image,
        alt: "No search results",
        className: "w-full h-full object-contain"
      }
    ) }),
    /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center lg:items-start w-full max-w-md min-w-0", children: [
      /* @__PURE__ */ jsx2("div", { className: "flex flex-row justify-center lg:justify-between items-end px-6 pt-6 pb-4 w-full rounded-t-xl", children: /* @__PURE__ */ jsx2(
        Text_default,
        {
          as: "h2",
          className: "text-text-950 font-semibold text-xl lg:text-3xl leading-tight w-full flex items-center justify-center lg:justify-start text-center lg:text-left",
          children: displayTitle
        }
      ) }),
      /* @__PURE__ */ jsx2("div", { className: "flex flex-row justify-center items-center px-6 gap-2 w-full", children: /* @__PURE__ */ jsx2(Text_default, { className: "text-text-600 font-normal text-base lg:text-lg leading-relaxed w-full text-center lg:text-justify", children: displayDescription }) })
    ] })
  ] });
};
var NoSearchResult_default = NoSearchResult;

// src/components/Button/Button.tsx
import { forwardRef } from "react";
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
var VARIANT_ACTION_CLASSES = {
  solid: {
    primary: "bg-primary-950 text-text border border-primary-950 hover:bg-primary-800 hover:border-primary-800 focus-visible:outline-none focus-visible:bg-primary-950 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-primary-700 active:border-primary-700 disabled:bg-primary-500 disabled:border-primary-500 disabled:opacity-40 disabled:cursor-not-allowed",
    secondary: "bg-text-950 text-text border border-text-800 hover:bg-text-800 hover:border-text-950 focus-visible:outline-none focus-visible:bg-text-900 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-text-700 active:border-text-700 disabled:bg-text-500 disabled:border-text-500 disabled:opacity-40 disabled:cursor-not-allowed",
    positive: "bg-success-500 text-text border border-success-500 hover:bg-success-600 hover:border-success-600 focus-visible:outline-none focus-visible:bg-success-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-success-700 active:border-success-700 disabled:bg-success-500 disabled:border-success-500 disabled:opacity-40 disabled:cursor-not-allowed",
    negative: "bg-error-500 text-text border border-error-500 hover:bg-error-600 hover:border-error-600 focus-visible:outline-none focus-visible:bg-error-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-error-700 active:border-error-700 disabled:bg-error-500 disabled:border-error-500 disabled:opacity-40 disabled:cursor-not-allowed"
  },
  outline: {
    primary: "bg-transparent text-primary-950 border border-primary-950 hover:bg-background-50 hover:text-primary-400 hover:border-primary-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 active:border-primary-700 disabled:opacity-40 disabled:cursor-not-allowed",
    secondary: "bg-transparent text-text-950 border border-text-800 hover:bg-background-50 hover:text-text-700 hover:border-text-700 focus-visible:border-0 focus-visible:outline-none focus-visible:text-text-900 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-text-700 active:border-text-700 disabled:opacity-40 disabled:cursor-not-allowed",
    positive: "bg-transparent text-success-500 border border-success-300 hover:bg-background-50 hover:text-success-400 hover:border-success-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 active:border-success-700 disabled:opacity-40 disabled:cursor-not-allowed",
    negative: "bg-transparent text-error-500 border border-error-300 hover:bg-background-50 hover:text-error-400 hover:border-error-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 active:border-error-700 disabled:opacity-40 disabled:cursor-not-allowed"
  },
  link: {
    primary: "bg-transparent text-primary-950 hover:text-primary-400 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 disabled:opacity-40 disabled:cursor-not-allowed",
    secondary: "bg-transparent text-text-950 hover:text-text-800 focus-visible:outline-none focus-visible:text-text-900 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-text-700 disabled:opacity-40 disabled:cursor-not-allowed",
    positive: "bg-transparent text-success-500 hover:text-success-400 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 disabled:opacity-40 disabled:cursor-not-allowed",
    negative: "bg-transparent text-error-500 hover:text-error-400 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 disabled:opacity-40 disabled:cursor-not-allowed"
  }
};
var SIZE_CLASSES = {
  "extra-small": "text-xs px-3.5 py-2",
  small: "text-sm px-4 py-2.5",
  medium: "text-md px-5 py-2.5",
  large: "text-lg px-6 py-3",
  "extra-large": "text-lg px-7 py-3.5"
};
var Button = forwardRef(
  ({
    children,
    iconLeft,
    iconRight,
    size = "medium",
    variant = "solid",
    action = "primary",
    className = "",
    disabled,
    type = "button",
    ...props
  }, ref) => {
    if (variant === "raw") {
      return /* @__PURE__ */ jsxs2(
        "button",
        {
          ref,
          className,
          disabled,
          type,
          ...props,
          children: [
            iconLeft && /* @__PURE__ */ jsx3("span", { className: "mr-2 flex items-center", children: iconLeft }),
            children,
            iconRight && /* @__PURE__ */ jsx3("span", { className: "ml-2 flex items-center", children: iconRight })
          ]
        }
      );
    }
    const sizeClasses = SIZE_CLASSES[size];
    const variantClasses = VARIANT_ACTION_CLASSES[variant][action];
    const baseClasses = "inline-flex items-center justify-center rounded-full cursor-pointer font-medium";
    return /* @__PURE__ */ jsxs2(
      "button",
      {
        ref,
        className: cn(baseClasses, variantClasses, sizeClasses, className),
        disabled,
        type,
        ...props,
        children: [
          iconLeft && /* @__PURE__ */ jsx3("span", { className: "mr-2 flex items-center", children: iconLeft }),
          children,
          iconRight && /* @__PURE__ */ jsx3("span", { className: "ml-2 flex items-center", children: iconRight })
        ]
      }
    );
  }
);
Button.displayName = "Button";
var Button_default = Button;

// src/components/EmptyState/EmptyState.tsx
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
var EmptyState = ({
  image,
  title,
  description,
  buttonText,
  buttonIcon,
  onButtonClick,
  buttonVariant = "solid",
  buttonAction = "primary",
  size = "large"
}) => {
  const displayTitle = title || "Nenhum dado dispon\xEDvel";
  const displayDescription = description || "N\xE3o h\xE1 dados para exibir no momento.";
  const titleClassName = size === "compact" ? "text-text-600 text-sm font-semibold text-center" : "text-text-950 text-3xl font-semibold text-center";
  const descriptionClassName = size === "compact" ? "text-text-600 text-sm font-normal text-center" : "text-text-600 text-[18px] font-normal text-center";
  const containerMinHeight = size === "compact" ? "min-h-0" : "min-h-[705px]";
  return /* @__PURE__ */ jsxs3(
    "div",
    {
      className: `flex flex-col justify-center items-center gap-6 w-full ${containerMinHeight} bg-background rounded-xl p-6`,
      children: [
        image && /* @__PURE__ */ jsx4("div", { className: "max-w-[170px] max-h-[150px] flex items-center justify-center", children: typeof image === "string" ? /* @__PURE__ */ jsx4(
          "img",
          {
            src: image,
            alt: displayTitle,
            className: "w-full h-full max-w-[170px] max-h-[150px]"
          }
        ) : /* @__PURE__ */ jsx4("div", { className: "w-[170px] h-[150px] flex items-center justify-center", children: image }) }),
        /* @__PURE__ */ jsxs3("div", { className: "flex flex-col items-center gap-4 w-full max-w-[600px] px-6", children: [
          /* @__PURE__ */ jsx4(Text_default, { as: "h2", className: titleClassName, children: displayTitle }),
          /* @__PURE__ */ jsx4(Text_default, { className: descriptionClassName, children: displayDescription })
        ] }),
        buttonText && onButtonClick && /* @__PURE__ */ jsx4(
          Button_default,
          {
            variant: buttonVariant,
            action: buttonAction,
            size: "large",
            onClick: onButtonClick,
            iconLeft: buttonIcon,
            className: "rounded-full px-5 py-2.5",
            children: buttonText
          }
        )
      ]
    }
  );
};
var EmptyState_default = EmptyState;

// src/components/Skeleton/Skeleton.tsx
import { forwardRef as forwardRef2 } from "react";
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
var SKELETON_ANIMATION_CLASSES = {
  pulse: "animate-pulse",
  none: ""
};
var SKELETON_VARIANT_CLASSES = {
  text: "h-4 bg-background-200 rounded",
  circular: "bg-background-200 rounded-full",
  rectangular: "bg-background-200",
  rounded: "bg-background-200 rounded-lg"
};
var SPACING_CLASSES = {
  none: "",
  small: "space-y-1",
  medium: "space-y-2",
  large: "space-y-3"
};
var Skeleton = forwardRef2(
  ({
    variant = "text",
    width,
    height,
    animation = "pulse",
    lines = 1,
    spacing = "none",
    className = "",
    children,
    ...props
  }, ref) => {
    const animationClass = SKELETON_ANIMATION_CLASSES[animation];
    const variantClass = SKELETON_VARIANT_CLASSES[variant];
    const spacingClass = SPACING_CLASSES[spacing];
    const style = {
      width: typeof width === "number" ? `${width}px` : width,
      height: typeof height === "number" ? `${height}px` : height
    };
    if (variant === "text" && lines > 1) {
      return /* @__PURE__ */ jsx5(
        "div",
        {
          ref,
          className: cn("flex flex-col", spacingClass, className),
          ...props,
          children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx5(
            "div",
            {
              className: cn(variantClass, animationClass),
              style: index === lines - 1 ? { width: "60%" } : void 0
            },
            index
          ))
        }
      );
    }
    return /* @__PURE__ */ jsx5(
      "div",
      {
        ref,
        className: cn(variantClass, animationClass, className),
        style,
        ...props,
        children
      }
    );
  }
);
var SkeletonText = forwardRef2(
  (props, ref) => /* @__PURE__ */ jsx5(Skeleton, { ref, variant: "text", ...props })
);
var SkeletonCircle = forwardRef2((props, ref) => /* @__PURE__ */ jsx5(Skeleton, { ref, variant: "circular", ...props }));
var SkeletonRectangle = forwardRef2((props, ref) => /* @__PURE__ */ jsx5(Skeleton, { ref, variant: "rectangular", ...props }));
var SkeletonRounded = forwardRef2((props, ref) => /* @__PURE__ */ jsx5(Skeleton, { ref, variant: "rounded", ...props }));
var SkeletonCard = forwardRef2(
  ({
    showAvatar = true,
    showTitle = true,
    showDescription = true,
    showActions = true,
    lines = 2,
    className = "",
    ...props
  }, ref) => {
    return /* @__PURE__ */ jsxs4(
      "div",
      {
        ref,
        className: cn(
          "w-full p-4 bg-background border border-border-200 rounded-lg",
          className
        ),
        ...props,
        children: [
          /* @__PURE__ */ jsxs4("div", { className: "flex items-start space-x-3", children: [
            showAvatar && /* @__PURE__ */ jsx5(SkeletonCircle, { width: 40, height: 40 }),
            /* @__PURE__ */ jsxs4("div", { className: "flex-1 space-y-2", children: [
              showTitle && /* @__PURE__ */ jsx5(SkeletonText, { width: "60%", height: 20 }),
              showDescription && /* @__PURE__ */ jsx5(SkeletonText, { lines, spacing: "small" })
            ] })
          ] }),
          showActions && /* @__PURE__ */ jsxs4("div", { className: "flex justify-end space-x-2 mt-4", children: [
            /* @__PURE__ */ jsx5(SkeletonRectangle, { width: 80, height: 32 }),
            /* @__PURE__ */ jsx5(SkeletonRectangle, { width: 80, height: 32 })
          ] })
        ]
      }
    );
  }
);
var SkeletonList = forwardRef2(
  ({
    items = 3,
    showAvatar = true,
    showTitle = true,
    showDescription = true,
    lines = 1,
    className = "",
    ...props
  }, ref) => {
    return /* @__PURE__ */ jsx5("div", { ref, className: cn("space-y-3", className), ...props, children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ jsxs4("div", { className: "flex items-start space-x-3 p-3", children: [
      showAvatar && /* @__PURE__ */ jsx5(SkeletonCircle, { width: 32, height: 32 }),
      /* @__PURE__ */ jsxs4("div", { className: "flex-1 space-y-2", children: [
        showTitle && /* @__PURE__ */ jsx5(SkeletonText, { width: "40%", height: 16 }),
        showDescription && /* @__PURE__ */ jsx5(SkeletonText, { lines, spacing: "small" })
      ] })
    ] }, index)) });
  }
);
var SkeletonTable = forwardRef2(
  ({ rows = 5, columns = 4, showHeader = true, className = "", ...props }, ref) => {
    return /* @__PURE__ */ jsxs4("div", { ref, className: cn("w-full", className), ...props, children: [
      showHeader && /* @__PURE__ */ jsx5("div", { className: "flex space-x-2 mb-3", children: Array.from({ length: columns }, (_, index) => /* @__PURE__ */ jsx5(
        SkeletonText,
        {
          width: `${100 / columns}%`,
          height: 20
        },
        index
      )) }),
      /* @__PURE__ */ jsx5("div", { className: "space-y-2", children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ jsx5("div", { className: "flex space-x-2", children: Array.from({ length: columns }, (_2, colIndex) => /* @__PURE__ */ jsx5(
        SkeletonText,
        {
          width: `${100 / columns}%`,
          height: 16
        },
        colIndex
      )) }, rowIndex)) })
    ] });
  }
);

// src/components/Table/TablePagination.tsx
import { CaretLeft, CaretRight, CaretDown } from "phosphor-react";
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
var TablePagination = ({
  totalItems,
  currentPage,
  totalPages,
  itemsPerPage,
  itemsPerPageOptions = [10, 20, 50, 100],
  onPageChange,
  onItemsPerPageChange,
  itemLabel = "itens",
  className,
  ...props
}) => {
  const startItem = totalItems === 0 ? 0 : (currentPage - 1) * itemsPerPage + 1;
  const endItem = totalItems === 0 ? 0 : Math.min(currentPage * itemsPerPage, totalItems);
  const handlePrevious = () => {
    if (currentPage > 1) {
      onPageChange(currentPage - 1);
    }
  };
  const handleNext = () => {
    if (currentPage < totalPages) {
      onPageChange(currentPage + 1);
    }
  };
  const handleItemsPerPageChange = (e) => {
    if (onItemsPerPageChange) {
      onItemsPerPageChange(Number(e.target.value));
    }
  };
  const isFirstPage = currentPage === 1;
  const isLastPage = currentPage === totalPages;
  return /* @__PURE__ */ jsxs5(
    "div",
    {
      className: cn(
        "flex flex-col sm:flex-row items-center gap-3 sm:gap-4 w-full bg-background-50 rounded-xl p-4",
        "sm:justify-between",
        className
      ),
      ...props,
      children: [
        /* @__PURE__ */ jsxs5("span", { className: "font-normal text-xs leading-[14px] text-text-800", children: [
          startItem,
          " - ",
          endItem,
          " de ",
          totalItems,
          " ",
          itemLabel
        ] }),
        /* @__PURE__ */ jsxs5("div", { className: "flex flex-wrap sm:flex-nowrap items-center gap-2 sm:gap-4 justify-center sm:justify-start", children: [
          onItemsPerPageChange && /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
            /* @__PURE__ */ jsx6(
              "select",
              {
                value: itemsPerPage,
                onChange: handleItemsPerPageChange,
                className: "w-24 h-9 py-0 px-3 pr-8 bg-background border border-border-300 rounded appearance-none cursor-pointer font-normal text-sm leading-[21px] text-text-900",
                "aria-label": "Items por p\xE1gina",
                children: itemsPerPageOptions.map((option) => /* @__PURE__ */ jsxs5("option", { value: option, children: [
                  option,
                  " itens"
                ] }, option))
              }
            ),
            /* @__PURE__ */ jsx6(
              CaretDown,
              {
                size: 14,
                weight: "regular",
                className: "absolute right-3 top-1/2 -translate-y-1/2 text-background-600 pointer-events-none"
              }
            )
          ] }),
          /* @__PURE__ */ jsxs5("span", { className: "font-normal text-xs leading-[14px] text-text-950", children: [
            "P\xE1gina ",
            currentPage,
            " de ",
            totalPages
          ] }),
          /* @__PURE__ */ jsxs5(
            "button",
            {
              onClick: handlePrevious,
              disabled: isFirstPage,
              className: cn(
                "flex flex-row justify-center items-center py-2 px-4 gap-2 rounded-3xl transition-all",
                isFirstPage ? "opacity-50 cursor-not-allowed" : "hover:bg-primary-950/10 cursor-pointer"
              ),
              "aria-label": "P\xE1gina anterior",
              children: [
                /* @__PURE__ */ jsx6(CaretLeft, { size: 12, weight: "bold", className: "text-primary-950" }),
                /* @__PURE__ */ jsx6("span", { className: "font-medium text-xs leading-[14px] text-primary-950", children: "Anterior" })
              ]
            }
          ),
          /* @__PURE__ */ jsxs5(
            "button",
            {
              onClick: handleNext,
              disabled: isLastPage,
              className: cn(
                "flex flex-row justify-center items-center py-2 px-4 gap-2 rounded-3xl transition-all",
                isLastPage ? "opacity-50 cursor-not-allowed" : "hover:bg-primary-950/10 cursor-pointer"
              ),
              "aria-label": "Pr\xF3xima p\xE1gina",
              children: [
                /* @__PURE__ */ jsx6("span", { className: "font-medium text-xs leading-[14px] text-primary-950", children: "Pr\xF3xima" }),
                /* @__PURE__ */ jsx6(CaretRight, { size: 12, weight: "bold", className: "text-primary-950" })
              ]
            }
          )
        ] })
      ]
    }
  );
};
TablePagination.displayName = "TablePagination";
var TablePagination_default = TablePagination;

// src/components/Table/Table.tsx
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
function useTableSort(data, options = {}) {
  const { syncWithUrl = false } = options;
  const getInitialState = () => {
    if (!syncWithUrl || globalThis.window === void 0) {
      return { column: null, direction: null };
    }
    const params = new URLSearchParams(globalThis.location.search);
    const sortBy = params.get("sortBy");
    const sort = params.get("sort");
    if (sortBy && sort && (sort === "ASC" || sort === "DESC")) {
      return {
        column: sortBy,
        direction: sort.toLowerCase()
      };
    }
    return { column: null, direction: null };
  };
  const initialState = getInitialState();
  const [sortColumn, setSortColumn] = useState(
    initialState.column
  );
  const [sortDirection, setSortDirection] = useState(
    initialState.direction
  );
  useEffect(() => {
    if (!syncWithUrl || globalThis.window === void 0) return;
    const url = new URL(globalThis.location.href);
    const params = url.searchParams;
    if (sortColumn && sortDirection) {
      params.set("sortBy", sortColumn);
      params.set("sort", sortDirection.toUpperCase());
    } else {
      params.delete("sortBy");
      params.delete("sort");
    }
    globalThis.history.replaceState({}, "", url.toString());
  }, [sortColumn, sortDirection, syncWithUrl]);
  const handleSort = (column) => {
    if (sortColumn === column) {
      if (sortDirection === "asc") {
        setSortDirection("desc");
      } else if (sortDirection === "desc") {
        setSortColumn(null);
        setSortDirection(null);
      }
    } else {
      setSortColumn(column);
      setSortDirection("asc");
    }
  };
  const sortedData = useMemo(() => {
    if (!sortColumn || !sortDirection) {
      return data;
    }
    return [...data].sort((a, b) => {
      const aValue = a[sortColumn];
      const bValue = b[sortColumn];
      if (typeof aValue === "string" && typeof bValue === "string") {
        const comparison = aValue.localeCompare(bValue);
        return sortDirection === "asc" ? comparison : -comparison;
      }
      if (typeof aValue === "number" && typeof bValue === "number") {
        return sortDirection === "asc" ? aValue - bValue : bValue - aValue;
      }
      return 0;
    });
  }, [data, sortColumn, sortDirection]);
  return { sortedData, sortColumn, sortDirection, handleSort };
}
var renderHeaderElements = (children) => {
  return Children.map(children, (child) => {
    if (isValidElement(child) && (child.type === TableCaption || child.type === TableHeader)) {
      return child;
    }
    return null;
  });
};
var getNoSearchResultContent = (config, defaultTitle, defaultDescription) => {
  if (config.component) {
    return config.component;
  }
  if (config.image) {
    return /* @__PURE__ */ jsx7(
      NoSearchResult_default,
      {
        image: config.image,
        title: config.title || defaultTitle,
        description: config.description || defaultDescription
      }
    );
  }
  return /* @__PURE__ */ jsxs6("div", { className: "text-center", children: [
    /* @__PURE__ */ jsx7("p", { className: "text-text-600 text-lg font-semibold mb-2", children: config.title || defaultTitle }),
    /* @__PURE__ */ jsx7("p", { className: "text-text-500 text-sm", children: config.description || defaultDescription })
  ] });
};
var getEmptyStateContent = (config, defaultTitle, defaultDescription) => {
  if (config?.component) {
    return config.component;
  }
  return /* @__PURE__ */ jsx7(
    EmptyState_default,
    {
      image: config?.image,
      title: config?.title || defaultTitle,
      description: config?.description || defaultDescription,
      buttonText: config?.buttonText,
      buttonIcon: config?.buttonIcon,
      onButtonClick: config?.onButtonClick,
      buttonVariant: config?.buttonVariant,
      buttonAction: config?.buttonAction
    }
  );
};
var renderTableWrapper = (variant, tableRef, className, children, stateContent, tableProps) => {
  return /* @__PURE__ */ jsxs6(
    "div",
    {
      className: cn(
        "relative w-full overflow-x-auto",
        variant === "default" && "border border-border-200 rounded-xl"
      ),
      children: [
        /* @__PURE__ */ jsx7(
          "table",
          {
            ref: tableRef,
            className: cn(
              "analytica-table w-full caption-bottom text-sm border-separate border-spacing-0",
              className
            ),
            ...tableProps,
            children: renderHeaderElements(children)
          }
        ),
        /* @__PURE__ */ jsx7("div", { className: "py-8 flex justify-center", children: stateContent })
      ]
    }
  );
};
var Table = forwardRef3(
  ({
    variant = "default",
    className,
    children,
    showLoading = false,
    loadingState,
    showNoSearchResult = false,
    noSearchResultState,
    showEmpty = false,
    emptyState,
    ...props
  }, ref) => {
    const defaultNoSearchResultState = {
      title: "Nenhum resultado encontrado",
      description: "N\xE3o encontramos nenhum resultado com esse nome. Tente revisar a busca ou usar outra palavra-chave."
    };
    const defaultEmptyState = {
      title: "Nenhum dado dispon\xEDvel",
      description: "N\xE3o h\xE1 dados para exibir no momento."
    };
    const finalNoSearchResultState = noSearchResultState || defaultNoSearchResultState;
    const finalEmptyState = emptyState || defaultEmptyState;
    if (showLoading) {
      const loadingContent = loadingState?.component || /* @__PURE__ */ jsx7(SkeletonTable, { rows: 5, columns: 4, showHeader: false });
      return renderTableWrapper(
        variant,
        ref,
        className,
        children,
        loadingContent,
        props
      );
    }
    if (showNoSearchResult) {
      const noSearchContent = getNoSearchResultContent(
        finalNoSearchResultState,
        defaultNoSearchResultState.title || "",
        defaultNoSearchResultState.description || ""
      );
      return renderTableWrapper(
        variant,
        ref,
        className,
        children,
        noSearchContent,
        props
      );
    }
    if (showEmpty) {
      const emptyContent = getEmptyStateContent(
        finalEmptyState,
        defaultEmptyState.title || "Nenhum dado dispon\xEDvel",
        defaultEmptyState.description || "N\xE3o h\xE1 dados para exibir no momento."
      );
      return renderTableWrapper(
        variant,
        ref,
        className,
        children,
        emptyContent,
        props
      );
    }
    return /* @__PURE__ */ jsx7(
      "div",
      {
        className: cn(
          "relative w-full overflow-x-auto",
          variant === "default" && "border border-border-200 rounded-xl"
        ),
        children: /* @__PURE__ */ jsxs6(
          "table",
          {
            ref,
            className: cn(
              variant === "default" && "analytica-table",
              variant === "default" && "border-separate border-spacing-0",
              "w-full caption-bottom text-sm",
              className
            ),
            ...props,
            children: [
              !Children.toArray(children).some(
                (child) => isValidElement(child) && child.type === TableCaption
              ) && /* @__PURE__ */ jsx7("caption", { className: "sr-only", children: "My Table" }),
              children
            ]
          }
        )
      }
    );
  }
);
Table.displayName = "Table";
var TableHeader = forwardRef3(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
  "thead",
  {
    ref,
    className: cn("[&_tr:first-child]:border-0", className),
    ...props
  }
));
TableHeader.displayName = "TableHeader";
var TableBody = forwardRef3(
  ({ className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsx7(
    "tbody",
    {
      ref,
      className: cn(
        "[&_tr:last-child]:border-border-200",
        variant === "default" && "border-t border-border-200",
        className
      ),
      ...props
    }
  )
);
TableBody.displayName = "TableBody";
var TableFooter = forwardRef3(
  ({ variant = "default", className, ...props }, ref) => /* @__PURE__ */ jsx7(
    "tfoot",
    {
      ref,
      className: cn(
        "bg-background-50 font-medium [&>tr]:last:border-b-0 px-6 py-3.5",
        variant === "default" && "border-t border-border-200",
        className
      ),
      ...props
    }
  )
);
TableFooter.displayName = "TableFooter";
var VARIANT_STATES_ROW = {
  default: {
    default: "border border-border-200",
    defaultBorderless: "border-b border-border-200",
    borderless: ""
  },
  selected: {
    default: "border-b-2 border-indicator-primary",
    defaultBorderless: "border-b border-indicator-primary",
    borderless: "bg-indicator-primary/10"
  },
  invalid: {
    default: "border-b-2 border-indicator-error",
    defaultBorderless: "border-b border-indicator-error",
    borderless: "bg-indicator-error/10"
  },
  disabled: {
    default: "border-b border-border-100 bg-background-50 opacity-50 cursor-not-allowed",
    defaultBorderless: "border-b border-border-100 bg-background-50 opacity-50 cursor-not-allowed",
    borderless: "bg-background-50 opacity-50 cursor-not-allowed"
  }
};
var TableRow = forwardRef3(
  ({
    variant = "default",
    state = "default",
    clickable = false,
    className,
    ...props
  }, ref) => {
    return /* @__PURE__ */ jsx7(
      "tr",
      {
        ref,
        className: cn(
          "transition-colors",
          state === "disabled" ? "" : "hover:bg-muted/50",
          state === "disabled" || !clickable ? "" : "cursor-pointer",
          VARIANT_STATES_ROW[state][variant],
          className
        ),
        "aria-disabled": state === "disabled",
        ...props
      }
    );
  }
);
TableRow.displayName = "TableRow";
var TableHead = forwardRef3(
  ({
    className,
    sortable = true,
    sortDirection = null,
    onSort,
    children,
    ...props
  }, ref) => {
    const handleClick = () => {
      if (sortable && onSort) {
        onSort();
      }
    };
    return /* @__PURE__ */ jsx7(
      "th",
      {
        ref,
        className: cn(
          "h-10 px-6 py-3.5 text-left align-middle font-bold text-base text-text-800 tracking-[0.2px] leading-none [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] whitespace-nowrap",
          sortable && "cursor-pointer select-none hover:bg-muted/30",
          className
        ),
        onClick: handleClick,
        ...props,
        children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
          children,
          sortable && /* @__PURE__ */ jsxs6("div", { className: "flex flex-col", children: [
            sortDirection === "asc" && /* @__PURE__ */ jsx7(CaretUp, { size: 16, weight: "fill", className: "text-text-800" }),
            sortDirection === "desc" && /* @__PURE__ */ jsx7(CaretDown2, { size: 16, weight: "fill", className: "text-text-800" })
          ] })
        ] })
      }
    );
  }
);
TableHead.displayName = "TableHead";
var TableCell = forwardRef3(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
  "td",
  {
    ref,
    className: cn(
      "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] text-base font-normal text-text-800 leading-[150%] tracking-normal px-6 py-3.5 whitespace-nowrap",
      className
    ),
    ...props
  }
));
TableCell.displayName = "TableCell";
var TableCaption = forwardRef3(({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
  "caption",
  {
    ref,
    className: cn(
      "border-t border-border-200 text-sm text-text-800 px-6 py-3.5",
      className
    ),
    ...props
  }
));
TableCaption.displayName = "TableCaption";
var Table_default = Table;
export {
  TableBody,
  TableCaption,
  TableCell,
  TableFooter,
  TableHead,
  TableHeader,
  TablePagination_default as TablePagination,
  TableRow,
  Table_default as default,
  useTableSort
};
//# sourceMappingURL=index.mjs.map