analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
164 lines (151 loc) • 6.29 kB
JavaScript
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
var _chunkHGWU3GUNjs = require('./chunk-HGWU3GUN.js');
var _chunk34ST3MKOjs = require('./chunk-34ST3MKO.js');
var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
// src/components/StatisticsCard/StatisticsCard.tsx
var _Plus = require('@phosphor-icons/react/dist/csr/Plus');
var _jsxruntime = require('react/jsx-runtime');
var VARIANT_STYLES = {
high: "bg-success-background",
medium: "bg-warning-background",
low: "bg-error-background",
total: "bg-info-background"
};
var VALUE_TEXT_COLORS = {
high: "text-success-700",
medium: "text-warning-600",
low: "text-error-700",
total: "text-info-700"
};
var StatCard = ({ item, showPlaceholder = false }) => {
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
"div",
{
className: `rounded-xl py-[17px] px-6 min-h-[105px] flex flex-col justify-center items-start gap-1 ${VARIANT_STYLES[item.variant]}`,
children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkANT66KVKjs.Text_default,
{
size: "4xl",
weight: "bold",
className: `${VALUE_TEXT_COLORS[item.variant]} leading-[42px] tracking-[0.2px] self-stretch`,
children: showPlaceholder ? "-" : item.value
}
),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkANT66KVKjs.Text_default,
{
size: "xs",
weight: "bold",
className: "uppercase text-[8px] leading-[9px] text-text-800 whitespace-nowrap",
children: item.label
}
)
]
}
);
};
var getGridColumnsClass = (itemCount) => {
if (itemCount === 6) return "lg:grid-cols-6";
if (itemCount === 5) return "lg:grid-cols-5";
if (itemCount === 4) return "lg:grid-cols-4";
if (itemCount === 3) return "lg:grid-cols-3";
if (itemCount === 2) return "lg:grid-cols-2";
return "lg:grid-cols-1";
};
var StatisticsCard = ({
title,
description,
data,
showPlaceholder = false,
emptyStateMessage,
emptyStateButtonText,
onEmptyStateButtonClick,
dropdownOptions,
selectedDropdownValue,
onDropdownChange,
selectPlaceholder = "Selecione um per\xEDodo",
dropdownAriaLabel = "Filtro de per\xEDodo",
className = ""
}) => {
const hasData = data && data.length > 0;
const gridColumnsClass = hasData ? getGridColumnsClass(data.length) : "";
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
"div",
{
className: `bg-background rounded-xl p-4 h-auto lg:min-h-[185px] flex flex-col gap-2 ${className}`,
children: [
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-row justify-between items-center gap-4", children: [
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 min-w-0 flex flex-col gap-1", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { as: "h3", size: "lg", weight: "bold", color: "text-text-950", children: title }),
description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", color: "text-text-700", children: description })
] }),
dropdownOptions && dropdownOptions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[120px] min-w-[90px] sm:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
_chunkHGWU3GUNjs.Select_default,
{
value: selectedDropdownValue,
onValueChange: onDropdownChange,
size: "medium",
children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkHGWU3GUNjs.SelectTrigger,
{
className: "border border-border-300 rounded [&>span]:whitespace-nowrap [&>span]:overflow-hidden [&>span]:text-ellipsis",
"aria-label": dropdownAriaLabel,
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectValue, { placeholder: selectPlaceholder })
}
),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectContent, { className: "min-w-[120px]", children: dropdownOptions.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkHGWU3GUNjs.SelectItem,
{
value: option.value,
className: "whitespace-nowrap",
children: option.label
},
option.value
)) })
]
}
) })
] }),
hasData ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
"div",
{
className: `grid grid-cols-1 sm:grid-cols-2 gap-[13px] ${gridColumnsClass}`,
children: data.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
StatCard,
{
item,
showPlaceholder
},
`${item.variant}-${item.label}-${index}`
))
}
) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "border border-dashed border-border-300 rounded-lg p-6 min-h-[105px] flex flex-col items-center justify-center gap-2", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkANT66KVKjs.Text_default,
{
size: "sm",
color: "text-text-600",
className: "text-center max-w-md",
children: emptyStateMessage
}
),
onEmptyStateButtonClick && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunk34ST3MKOjs.Button_default,
{
variant: "outline",
action: "primary",
size: "small",
onClick: onEmptyStateButtonClick,
iconLeft: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Plus.PlusIcon, { size: 16, weight: "bold" }),
children: emptyStateButtonText
}
)
] })
]
}
);
};
exports.StatisticsCard = StatisticsCard;
//# sourceMappingURL=chunk-XGPQAGQF.js.map