ivt
Version:
Ivt Components Library
106 lines (100 loc) • 6.42 kB
JavaScript
import React__default from 'react';
import { c as cn } from '../chunks/utils-05LlW3Cl.mjs';
import { f as formatNegative, a as formatNumberWithComma, b as formatMoney } from '../chunks/format-numbers-BMHnFGse.mjs';
import { C as Card, a as CardHeader, c as CardTitle, f as CardContent, b as CardFooter } from '../chunks/card-C_2pshaz.mjs';
import { T as TooltipIndicator } from '../chunks/TooltipIndicator-DgBUQgOI.mjs';
import { S as Skeleton } from '../chunks/skeleton-CIulxewv.mjs';
import { T as TriangleAlert } from '../chunks/triangle-alert-D5Cr5kOo.mjs';
import { f as formatDateToBrazilian } from '../chunks/date-bAe2UaSj.mjs';
import { c as TooltipProvider, T as Tooltip, a as TooltipTrigger, b as TooltipContent } from '../chunks/tooltip-BTEGteNb.mjs';
import '../chunks/bundle-mjs-BYcyWisL.mjs';
import '../chunks/createLucideIcon-DLrNgMqk.mjs';
import '../chunks/format-Cn5wls3k.mjs';
import '../chunks/index-Bl-WJHvp.mjs';
import '../chunks/index-1tQVI0Jh.mjs';
import '../chunks/index-DT8WgpCS.mjs';
import 'react/jsx-runtime';
import '../chunks/index-DUpRrJTH.mjs';
import '../chunks/index-DgKlJYZP.mjs';
import 'react-dom';
import '@radix-ui/react-slot';
import '../chunks/index-Cbm3--wc.mjs';
import '../chunks/index-tkRL9Tft.mjs';
import '../chunks/index-DKOlG3mh.mjs';
import '../chunks/index-aLIsJMgt.mjs';
import '../chunks/index-DmY774z-.mjs';
import '../chunks/index-BTe1rv5Z.mjs';
import '../chunks/index-C6s8KI_8.mjs';
import '../chunks/index-D4FMFHi9.mjs';
import '../chunks/index-An4yBrAZ.mjs';
function DashCard({ title, tooltip, value, footer, valueFormatter = (v)=>v, className, valueClassName, isLoading }) {
return /*#__PURE__*/ React__default.createElement(Card, {
className: cn("h-full gap-2", className)
}, /*#__PURE__*/ React__default.createElement(CardHeader, {
className: "gap-0"
}, /*#__PURE__*/ React__default.createElement(CardTitle, {
className: "flex flex-wrap items-center gap-2 text-sm font-medium"
}, title, tooltip && /*#__PURE__*/ React__default.createElement(TooltipIndicator, null, tooltip))), /*#__PURE__*/ React__default.createElement(CardContent, null, isLoading ? /*#__PURE__*/ React__default.createElement(Skeleton, {
className: cn("h-10 w-32 rounded-md", valueClassName)
}) : /*#__PURE__*/ React__default.createElement("p", {
className: cn("text-3xl font-bold", typeof value === "number" && formatNegative(+value), valueClassName)
}, valueFormatter(value))), footer && /*#__PURE__*/ React__default.createElement(CardFooter, null, isLoading ? /*#__PURE__*/ React__default.createElement(Skeleton, {
className: "h-4 w-20"
}) : footer));
}
function DashCardList({ title, tooltip, footer, content, className, valueClassName, isLoading }) {
return /*#__PURE__*/ React__default.createElement(Card, {
className: cn("h-full gap-2", className)
}, /*#__PURE__*/ React__default.createElement(CardHeader, {
className: "gap-0"
}, /*#__PURE__*/ React__default.createElement(CardTitle, {
className: "flex flex-wrap items-center gap-2 text-sm font-medium"
}, title, tooltip && /*#__PURE__*/ React__default.createElement(TooltipIndicator, null, tooltip))), /*#__PURE__*/ React__default.createElement(CardContent, null, isLoading ? /*#__PURE__*/ React__default.createElement(Skeleton, {
className: cn("h-10 w-32 rounded-md", valueClassName)
}) : content), footer && /*#__PURE__*/ React__default.createElement(CardFooter, null, isLoading ? /*#__PURE__*/ React__default.createElement(Skeleton, {
className: "h-4 w-20"
}) : footer));
}
const ErrorMessageDashCard = ({ children, className, shouldIcon = true, ...props })=>{
return /*#__PURE__*/ React__default.createElement("div", {
className: cn("text-destructive flex flex-wrap items-center gap-1 text-sm", className),
...props
}, shouldIcon && /*#__PURE__*/ React__default.createElement(TriangleAlert, {
className: "h-4 w-4"
}), /*#__PURE__*/ React__default.createElement("span", null, children ?? "Erro ao carregar os dados"));
};
const ValuePercentage = ({ percentage, prevStartDate, prevEndDate, startDate, endDate, prevValue, value, valueMaxFractionDigits = 2, valueMinFractionDigits = 2, showText = true, text = "desde o último mês", formatAsMoney = false })=>{
const cellCSS = percentage === 0 ? "text-muted-foreground" : percentage < 0 ? "text-destructive" : "text-positive";
const iconValue = percentage < 0 ? "▼" : "▲";
const formatValue = (val)=>{
const options = {
value: val,
minimumFractionDigits: valueMinFractionDigits,
maximumFractionDigits: valueMaxFractionDigits
};
return formatAsMoney ? formatMoney({
value: options.value,
minimumFractionDigits: options.minimumFractionDigits,
maximumFractionDigits: options.maximumFractionDigits,
currency: "BRL"
}) : formatNumberWithComma(options);
};
return /*#__PURE__*/ React__default.createElement(TooltipProvider, null, /*#__PURE__*/ React__default.createElement(Tooltip, null, /*#__PURE__*/ React__default.createElement(TooltipTrigger, {
asChild: true
}, /*#__PURE__*/ React__default.createElement("div", {
className: cn("text-xs", cellCSS)
}, /*#__PURE__*/ React__default.createElement("span", {
className: "mr-1"
}, iconValue), /*#__PURE__*/ React__default.createElement("span", null, formatNumberWithComma({
value: percentage,
minimumFractionDigits: 0,
maximumFractionDigits: 2
}), "%"), " ", showText && /*#__PURE__*/ React__default.createElement("span", {
className: "text-muted-foreground"
}, text))), prevStartDate && startDate && /*#__PURE__*/ React__default.createElement(TooltipContent, {
side: "bottom",
className: "bg-secondary flex flex-col"
}, /*#__PURE__*/ React__default.createElement("span", null, formatDateToBrazilian(prevStartDate), " ", prevEndDate && `- ${formatDateToBrazilian(prevEndDate)}`, ":", " ", formatValue(prevValue ?? 0)), /*#__PURE__*/ React__default.createElement("span", null, formatDateToBrazilian(startDate), " ", endDate && `- ${formatDateToBrazilian(endDate)}`, ":", " ", formatValue(value ?? 0)))));
};
export { DashCard, DashCardList, ErrorMessageDashCard, ValuePercentage };
//# sourceMappingURL=index.mjs.map