@sigep/react 1.1.3 → 1.1.4

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.js CHANGED
@@ -20,9 +20,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ Accordion: () => Accordion,
24
+ Alert: () => Alert,
23
25
  Avatar: () => Avatar,
26
+ Badge: () => Badge,
27
+ Breadcrumb: () => Breadcrumb,
24
28
  Button: () => Button,
25
29
  Card: () => Card,
30
+ Divider: () => Divider,
26
31
  InputCNPJ: () => InputCNPJ,
27
32
  InputCPF: () => InputCPF,
28
33
  InputCep: () => InputCep,
@@ -36,17 +41,34 @@ __export(index_exports, {
36
41
  InputString: () => InputString,
37
42
  InputWrapper: () => InputWrapper,
38
43
  Modal: () => Modal,
44
+ Skeleton: () => Skeleton,
45
+ Spinner: () => Spinner,
46
+ Tabs: () => Tabs,
39
47
  Textarea: () => Textarea,
40
48
  Tooltip: () => Tooltip,
49
+ accordion: () => accordion,
50
+ accordionContent: () => accordionContent,
51
+ accordionItem: () => accordionItem,
52
+ accordionTrigger: () => accordionTrigger,
53
+ alert: () => alert,
41
54
  avatar: () => avatar,
55
+ badge: () => badge,
56
+ breadcrumb: () => breadcrumb,
57
+ breadcrumbItem: () => breadcrumbItem,
42
58
  button: () => button,
43
59
  card: () => card,
60
+ divider: () => divider,
44
61
  maskCEP: () => maskCEP,
45
62
  maskCNPJ: () => maskCNPJ,
46
63
  maskCPF: () => maskCPF,
47
64
  maskCurrency: () => maskCurrency,
48
65
  maskPhone: () => maskPhone,
49
66
  modal: () => modal,
67
+ skeleton: () => skeleton,
68
+ spinner: () => spinner,
69
+ tabList: () => tabList,
70
+ tabTrigger: () => tabTrigger,
71
+ tabs: () => tabs,
50
72
  tooltip: () => tooltip,
51
73
  unmask: () => unmask,
52
74
  unmaskCurrency: () => unmaskCurrency
@@ -1296,11 +1318,605 @@ var Textarea = (0, import_react18.forwardRef)(
1296
1318
  }
1297
1319
  );
1298
1320
  Textarea.displayName = "Textarea";
1321
+
1322
+ // src/components/Accordion/index.tsx
1323
+ var import_react19 = require("react");
1324
+ var import_tailwind_variants10 = require("tailwind-variants");
1325
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1326
+ var accordion = (0, import_tailwind_variants10.tv)({
1327
+ base: "divide-y divide-gray-200",
1328
+ variants: {
1329
+ variant: {
1330
+ default: "border border-gray-200 rounded-lg",
1331
+ separated: "space-y-2 divide-y-0",
1332
+ flush: ""
1333
+ }
1334
+ },
1335
+ defaultVariants: {
1336
+ variant: "default"
1337
+ }
1338
+ });
1339
+ var accordionItem = (0, import_tailwind_variants10.tv)({
1340
+ base: "",
1341
+ variants: {
1342
+ variant: {
1343
+ default: "",
1344
+ separated: "border border-gray-200 rounded-lg overflow-hidden",
1345
+ flush: "border-b border-gray-200 last:border-b-0"
1346
+ }
1347
+ }
1348
+ });
1349
+ var accordionTrigger = (0, import_tailwind_variants10.tv)({
1350
+ base: "flex w-full items-center justify-between px-4 py-3 text-left text-sm font-medium text-gray-900 transition-colors hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed",
1351
+ variants: {
1352
+ open: {
1353
+ true: "",
1354
+ false: ""
1355
+ }
1356
+ }
1357
+ });
1358
+ var accordionContent = (0, import_tailwind_variants10.tv)({
1359
+ base: "overflow-hidden transition-all duration-200",
1360
+ variants: {
1361
+ open: {
1362
+ true: "max-h-[2000px] opacity-100",
1363
+ false: "max-h-0 opacity-0"
1364
+ }
1365
+ }
1366
+ });
1367
+ var Accordion = (0, import_react19.forwardRef)(
1368
+ ({
1369
+ variant = "default",
1370
+ items,
1371
+ type = "single",
1372
+ defaultValue = [],
1373
+ value,
1374
+ onChange,
1375
+ className,
1376
+ ...props
1377
+ }, ref) => {
1378
+ const id = (0, import_react19.useId)();
1379
+ const [internalValue, setInternalValue] = (0, import_react19.useState)(defaultValue);
1380
+ const openItems = value !== void 0 ? value : internalValue;
1381
+ const handleToggle = (itemValue) => {
1382
+ let next;
1383
+ if (type === "single") {
1384
+ next = openItems.includes(itemValue) ? [] : [itemValue];
1385
+ } else {
1386
+ next = openItems.includes(itemValue) ? openItems.filter((v) => v !== itemValue) : [...openItems, itemValue];
1387
+ }
1388
+ if (value === void 0) {
1389
+ setInternalValue(next);
1390
+ }
1391
+ onChange?.(next);
1392
+ };
1393
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { ref, className: accordion({ variant, className }), ...props, children: items.map((item) => {
1394
+ const isOpen = openItems.includes(item.value);
1395
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1396
+ "div",
1397
+ {
1398
+ className: accordionItem({ variant }),
1399
+ children: [
1400
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1401
+ "button",
1402
+ {
1403
+ type: "button",
1404
+ id: `${id}-trigger-${item.value}`,
1405
+ "aria-expanded": isOpen,
1406
+ "aria-controls": `${id}-content-${item.value}`,
1407
+ disabled: item.disabled,
1408
+ className: accordionTrigger({ open: isOpen }),
1409
+ onClick: () => handleToggle(item.value),
1410
+ children: [
1411
+ item.trigger,
1412
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1413
+ "svg",
1414
+ {
1415
+ className: `h-4 w-4 flex-shrink-0 text-gray-500 transition-transform duration-200 ${isOpen ? "rotate-180" : ""}`,
1416
+ fill: "none",
1417
+ viewBox: "0 0 24 24",
1418
+ stroke: "currentColor",
1419
+ strokeWidth: 2,
1420
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" })
1421
+ }
1422
+ )
1423
+ ]
1424
+ }
1425
+ ),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1427
+ "div",
1428
+ {
1429
+ id: `${id}-content-${item.value}`,
1430
+ role: "region",
1431
+ "aria-labelledby": `${id}-trigger-${item.value}`,
1432
+ className: accordionContent({ open: isOpen }),
1433
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "px-4 pb-3 text-sm text-gray-600", children: item.content })
1434
+ }
1435
+ )
1436
+ ]
1437
+ },
1438
+ item.value
1439
+ );
1440
+ }) });
1441
+ }
1442
+ );
1443
+ Accordion.displayName = "Accordion";
1444
+
1445
+ // src/components/Alert/index.tsx
1446
+ var import_react20 = require("react");
1447
+ var import_tailwind_variants11 = require("tailwind-variants");
1448
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1449
+ var alert = (0, import_tailwind_variants11.tv)({
1450
+ base: "flex gap-3 rounded-lg border p-4 text-sm",
1451
+ variants: {
1452
+ variant: {
1453
+ info: "bg-blue-50 border-blue-200 text-blue-800",
1454
+ success: "bg-green-50 border-green-200 text-green-800",
1455
+ warning: "bg-yellow-50 border-yellow-200 text-yellow-800",
1456
+ danger: "bg-red-50 border-red-200 text-red-800"
1457
+ }
1458
+ },
1459
+ defaultVariants: {
1460
+ variant: "info"
1461
+ }
1462
+ });
1463
+ var iconMap = {
1464
+ info: "\u2139",
1465
+ success: "\u2713",
1466
+ warning: "\u26A0",
1467
+ danger: "\u2715"
1468
+ };
1469
+ var iconColorMap = {
1470
+ info: "text-blue-500",
1471
+ success: "text-green-500",
1472
+ warning: "text-yellow-500",
1473
+ danger: "text-red-500"
1474
+ };
1475
+ var Alert = (0, import_react20.forwardRef)(
1476
+ ({ variant = "info", title, icon, onClose, className, children, ...props }, ref) => {
1477
+ const resolvedIcon = icon !== void 0 ? icon : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: `text-base font-bold flex-shrink-0 ${iconColorMap[variant || "info"]}`, children: iconMap[variant || "info"] });
1478
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1479
+ "div",
1480
+ {
1481
+ ref,
1482
+ role: "alert",
1483
+ className: alert({ variant, className }),
1484
+ ...props,
1485
+ children: [
1486
+ resolvedIcon,
1487
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex-1 min-w-0", children: [
1488
+ title && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "font-semibold mb-1", children: title }),
1489
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { children })
1490
+ ] }),
1491
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1492
+ "button",
1493
+ {
1494
+ type: "button",
1495
+ onClick: onClose,
1496
+ className: "flex-shrink-0 opacity-60 hover:opacity-100 transition-opacity",
1497
+ "aria-label": "Fechar alerta",
1498
+ children: "\u2715"
1499
+ }
1500
+ )
1501
+ ]
1502
+ }
1503
+ );
1504
+ }
1505
+ );
1506
+ Alert.displayName = "Alert";
1507
+
1508
+ // src/components/Badge/index.tsx
1509
+ var import_react21 = require("react");
1510
+ var import_tailwind_variants12 = require("tailwind-variants");
1511
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1512
+ var badge = (0, import_tailwind_variants12.tv)({
1513
+ base: "inline-flex items-center font-medium transition-colors",
1514
+ variants: {
1515
+ variant: {
1516
+ primary: "bg-blue-50 text-blue-700 border border-blue-200",
1517
+ success: "bg-green-50 text-green-700 border border-green-200",
1518
+ danger: "bg-red-50 text-red-700 border border-red-200",
1519
+ warning: "bg-yellow-50 text-yellow-700 border border-yellow-200",
1520
+ neutral: "bg-gray-100 text-gray-700 border border-gray-200"
1521
+ },
1522
+ size: {
1523
+ sm: "px-2 py-0.5 text-xs rounded",
1524
+ md: "px-2.5 py-0.5 text-xs rounded-md",
1525
+ lg: "px-3 py-1 text-sm rounded-md"
1526
+ },
1527
+ dot: {
1528
+ true: "gap-1.5",
1529
+ false: ""
1530
+ }
1531
+ },
1532
+ defaultVariants: {
1533
+ variant: "primary",
1534
+ size: "md",
1535
+ dot: false
1536
+ }
1537
+ });
1538
+ var dotColors = {
1539
+ primary: "bg-blue-500",
1540
+ success: "bg-green-500",
1541
+ danger: "bg-red-500",
1542
+ warning: "bg-yellow-500",
1543
+ neutral: "bg-gray-500"
1544
+ };
1545
+ var Badge = (0, import_react21.forwardRef)(
1546
+ ({ variant = "primary", size, dot, className, children, ...props }, ref) => {
1547
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1548
+ "span",
1549
+ {
1550
+ ref,
1551
+ className: badge({ variant, size, dot, className }),
1552
+ ...props,
1553
+ children: [
1554
+ dot && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1555
+ "span",
1556
+ {
1557
+ className: `inline-block h-1.5 w-1.5 rounded-full ${dotColors[variant || "primary"]}`
1558
+ }
1559
+ ),
1560
+ children
1561
+ ]
1562
+ }
1563
+ );
1564
+ }
1565
+ );
1566
+ Badge.displayName = "Badge";
1567
+
1568
+ // src/components/Breadcrumb/index.tsx
1569
+ var import_react22 = require("react");
1570
+ var import_tailwind_variants13 = require("tailwind-variants");
1571
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1572
+ var breadcrumb = (0, import_tailwind_variants13.tv)({
1573
+ base: "flex items-center text-sm",
1574
+ variants: {
1575
+ variant: {
1576
+ default: "",
1577
+ contained: "bg-gray-50 px-4 py-2 rounded-lg"
1578
+ }
1579
+ },
1580
+ defaultVariants: {
1581
+ variant: "default"
1582
+ }
1583
+ });
1584
+ var breadcrumbItem = (0, import_tailwind_variants13.tv)({
1585
+ base: "transition-colors",
1586
+ variants: {
1587
+ active: {
1588
+ true: "text-gray-900 font-medium",
1589
+ false: "text-gray-500 hover:text-gray-700"
1590
+ }
1591
+ }
1592
+ });
1593
+ var defaultSeparator = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1594
+ "svg",
1595
+ {
1596
+ className: "h-4 w-4 text-gray-400 flex-shrink-0",
1597
+ fill: "none",
1598
+ viewBox: "0 0 24 24",
1599
+ stroke: "currentColor",
1600
+ strokeWidth: 2,
1601
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" })
1602
+ }
1603
+ );
1604
+ var Breadcrumb = (0, import_react22.forwardRef)(
1605
+ ({ variant, items, separator = defaultSeparator, className, ...props }, ref) => {
1606
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1607
+ "nav",
1608
+ {
1609
+ ref,
1610
+ "aria-label": "Breadcrumb",
1611
+ className: breadcrumb({ variant, className }),
1612
+ ...props,
1613
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ol", { className: "flex items-center gap-2", children: items.map((item, index) => {
1614
+ const isLast = index === items.length - 1;
1615
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("li", { className: "flex items-center gap-2", children: [
1616
+ item.href || item.onClick ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1617
+ "a",
1618
+ {
1619
+ href: item.href,
1620
+ onClick: item.onClick,
1621
+ className: breadcrumbItem({ active: isLast }),
1622
+ ...isLast && { "aria-current": "page" },
1623
+ children: item.label
1624
+ }
1625
+ ) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1626
+ "span",
1627
+ {
1628
+ className: breadcrumbItem({ active: isLast }),
1629
+ ...isLast && { "aria-current": "page" },
1630
+ children: item.label
1631
+ }
1632
+ ),
1633
+ !isLast && separator
1634
+ ] }, index);
1635
+ }) })
1636
+ }
1637
+ );
1638
+ }
1639
+ );
1640
+ Breadcrumb.displayName = "Breadcrumb";
1641
+
1642
+ // src/components/Divider/index.tsx
1643
+ var import_react23 = require("react");
1644
+ var import_tailwind_variants14 = require("tailwind-variants");
1645
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1646
+ var divider = (0, import_tailwind_variants14.tv)({
1647
+ base: "",
1648
+ variants: {
1649
+ orientation: {
1650
+ horizontal: "w-full flex items-center",
1651
+ vertical: "h-full inline-flex flex-col items-center"
1652
+ },
1653
+ variant: {
1654
+ solid: "",
1655
+ dashed: ""
1656
+ }
1657
+ },
1658
+ defaultVariants: {
1659
+ orientation: "horizontal",
1660
+ variant: "solid"
1661
+ }
1662
+ });
1663
+ var dividerLine = (0, import_tailwind_variants14.tv)({
1664
+ base: "bg-gray-200 flex-1",
1665
+ variants: {
1666
+ orientation: {
1667
+ horizontal: "h-px w-full",
1668
+ vertical: "w-px h-full"
1669
+ },
1670
+ variant: {
1671
+ solid: "",
1672
+ dashed: "bg-transparent border-gray-200 border-dashed"
1673
+ }
1674
+ },
1675
+ compoundVariants: [
1676
+ { orientation: "horizontal", variant: "dashed", className: "border-t h-0" },
1677
+ { orientation: "vertical", variant: "dashed", className: "border-l w-0" }
1678
+ ]
1679
+ });
1680
+ var Divider = (0, import_react23.forwardRef)(
1681
+ ({ orientation = "horizontal", variant, label, className, ...props }, ref) => {
1682
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1683
+ "div",
1684
+ {
1685
+ ref,
1686
+ role: "separator",
1687
+ "aria-orientation": orientation || "horizontal",
1688
+ className: divider({ orientation, variant, className }),
1689
+ ...props,
1690
+ children: [
1691
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: dividerLine({ orientation, variant }) }),
1692
+ label && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
1693
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1694
+ "span",
1695
+ {
1696
+ className: `flex-shrink-0 text-xs text-gray-500 ${orientation === "horizontal" ? "px-3" : "py-2"}`,
1697
+ children: label
1698
+ }
1699
+ ),
1700
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: dividerLine({ orientation, variant }) })
1701
+ ] })
1702
+ ]
1703
+ }
1704
+ );
1705
+ }
1706
+ );
1707
+ Divider.displayName = "Divider";
1708
+
1709
+ // src/components/Skeleton/index.tsx
1710
+ var import_react24 = require("react");
1711
+ var import_tailwind_variants15 = require("tailwind-variants");
1712
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1713
+ var skeleton = (0, import_tailwind_variants15.tv)({
1714
+ base: "animate-pulse bg-gray-200",
1715
+ variants: {
1716
+ variant: {
1717
+ text: "rounded-md h-4 w-full",
1718
+ circular: "rounded-full",
1719
+ rectangular: "rounded-md"
1720
+ },
1721
+ size: {
1722
+ sm: "",
1723
+ md: "",
1724
+ lg: ""
1725
+ }
1726
+ },
1727
+ compoundVariants: [
1728
+ { variant: "circular", size: "sm", className: "h-8 w-8" },
1729
+ { variant: "circular", size: "md", className: "h-10 w-10" },
1730
+ { variant: "circular", size: "lg", className: "h-16 w-16" },
1731
+ { variant: "text", size: "sm", className: "h-3" },
1732
+ { variant: "text", size: "md", className: "h-4" },
1733
+ { variant: "text", size: "lg", className: "h-5" }
1734
+ ],
1735
+ defaultVariants: {
1736
+ variant: "text",
1737
+ size: "md"
1738
+ }
1739
+ });
1740
+ var Skeleton = (0, import_react24.forwardRef)(
1741
+ ({ variant, size, width, height, lines = 1, className, style, ...props }, ref) => {
1742
+ const customStyle = {
1743
+ ...style,
1744
+ ...width !== void 0 && { width },
1745
+ ...height !== void 0 && { height }
1746
+ };
1747
+ if (lines > 1 && variant !== "circular") {
1748
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { ref, className: "flex flex-col gap-2", ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1749
+ "div",
1750
+ {
1751
+ className: skeleton({ variant, size, className }),
1752
+ style: {
1753
+ ...customStyle,
1754
+ ...i === lines - 1 && { width: "75%" }
1755
+ }
1756
+ },
1757
+ i
1758
+ )) });
1759
+ }
1760
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1761
+ "div",
1762
+ {
1763
+ ref,
1764
+ className: skeleton({ variant, size, className }),
1765
+ style: customStyle,
1766
+ ...props
1767
+ }
1768
+ );
1769
+ }
1770
+ );
1771
+ Skeleton.displayName = "Skeleton";
1772
+
1773
+ // src/components/Spinner/index.tsx
1774
+ var import_react25 = require("react");
1775
+ var import_tailwind_variants16 = require("tailwind-variants");
1776
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1777
+ var spinner = (0, import_tailwind_variants16.tv)({
1778
+ base: "inline-block animate-spin rounded-full border-solid border-current border-r-transparent",
1779
+ variants: {
1780
+ size: {
1781
+ sm: "h-4 w-4 border-2",
1782
+ md: "h-6 w-6 border-2",
1783
+ lg: "h-8 w-8 border-[3px]",
1784
+ xl: "h-12 w-12 border-4"
1785
+ },
1786
+ variant: {
1787
+ primary: "text-blue-500",
1788
+ secondary: "text-gray-400",
1789
+ white: "text-white"
1790
+ }
1791
+ },
1792
+ defaultVariants: {
1793
+ size: "md",
1794
+ variant: "primary"
1795
+ }
1796
+ });
1797
+ var Spinner = (0, import_react25.forwardRef)(
1798
+ ({ size, variant, label = "Carregando...", className, ...props }, ref) => {
1799
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1800
+ "div",
1801
+ {
1802
+ ref,
1803
+ role: "status",
1804
+ className: spinner({ size, variant, className }),
1805
+ ...props,
1806
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "sr-only", children: label })
1807
+ }
1808
+ );
1809
+ }
1810
+ );
1811
+ Spinner.displayName = "Spinner";
1812
+
1813
+ // src/components/Tabs/index.tsx
1814
+ var import_react26 = require("react");
1815
+ var import_tailwind_variants17 = require("tailwind-variants");
1816
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1817
+ var tabs = (0, import_tailwind_variants17.tv)({
1818
+ base: "",
1819
+ variants: {
1820
+ variant: {
1821
+ line: "",
1822
+ enclosed: "",
1823
+ pill: ""
1824
+ }
1825
+ },
1826
+ defaultVariants: {
1827
+ variant: "line"
1828
+ }
1829
+ });
1830
+ var tabList = (0, import_tailwind_variants17.tv)({
1831
+ base: "flex",
1832
+ variants: {
1833
+ variant: {
1834
+ line: "border-b border-gray-200 gap-0",
1835
+ enclosed: "border-b border-gray-200 gap-0",
1836
+ pill: "gap-1 bg-gray-100 p-1 rounded-lg"
1837
+ }
1838
+ }
1839
+ });
1840
+ var tabTrigger = (0, import_tailwind_variants17.tv)({
1841
+ base: "inline-flex items-center justify-center gap-2 font-medium text-sm transition-colors whitespace-nowrap disabled:opacity-50 disabled:cursor-not-allowed",
1842
+ variants: {
1843
+ variant: {
1844
+ line: "px-4 py-2.5 border-b-2 -mb-px text-gray-500 hover:text-gray-900 hover:border-gray-300",
1845
+ enclosed: "px-4 py-2 border border-transparent rounded-t-md -mb-px text-gray-500 hover:text-gray-900",
1846
+ pill: "px-3 py-1.5 rounded-md text-gray-600 hover:text-gray-900"
1847
+ },
1848
+ active: {
1849
+ true: "",
1850
+ false: ""
1851
+ }
1852
+ },
1853
+ compoundVariants: [
1854
+ { variant: "line", active: true, className: "text-blue-500 border-b-blue-500" },
1855
+ { variant: "enclosed", active: true, className: "bg-white text-blue-500 border-gray-200 border-b-white" },
1856
+ { variant: "pill", active: true, className: "bg-white text-blue-500 shadow-sm" }
1857
+ ],
1858
+ defaultVariants: {
1859
+ variant: "line",
1860
+ active: false
1861
+ }
1862
+ });
1863
+ var Tabs = (0, import_react26.forwardRef)(
1864
+ ({ variant = "line", items, defaultValue, value, onChange, className, ...props }, ref) => {
1865
+ const id = (0, import_react26.useId)();
1866
+ const [internalValue, setInternalValue] = (0, import_react26.useState)(
1867
+ defaultValue || items[0]?.value || ""
1868
+ );
1869
+ const activeValue = value !== void 0 ? value : internalValue;
1870
+ const handleChange = (val) => {
1871
+ if (value === void 0) {
1872
+ setInternalValue(val);
1873
+ }
1874
+ onChange?.(val);
1875
+ };
1876
+ const activeItem = items.find((item) => item.value === activeValue);
1877
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { ref, className: tabs({ variant, className }), ...props, children: [
1878
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { role: "tablist", className: tabList({ variant }), children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1879
+ "button",
1880
+ {
1881
+ role: "tab",
1882
+ type: "button",
1883
+ id: `${id}-tab-${item.value}`,
1884
+ "aria-selected": activeValue === item.value,
1885
+ "aria-controls": `${id}-panel-${item.value}`,
1886
+ disabled: item.disabled,
1887
+ className: tabTrigger({
1888
+ variant,
1889
+ active: activeValue === item.value
1890
+ }),
1891
+ onClick: () => handleChange(item.value),
1892
+ children: item.label
1893
+ },
1894
+ item.value
1895
+ )) }),
1896
+ activeItem && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1897
+ "div",
1898
+ {
1899
+ role: "tabpanel",
1900
+ id: `${id}-panel-${activeItem.value}`,
1901
+ "aria-labelledby": `${id}-tab-${activeItem.value}`,
1902
+ className: "py-4",
1903
+ children: activeItem.content
1904
+ }
1905
+ )
1906
+ ] });
1907
+ }
1908
+ );
1909
+ Tabs.displayName = "Tabs";
1299
1910
  // Annotate the CommonJS export names for ESM import in node:
1300
1911
  0 && (module.exports = {
1912
+ Accordion,
1913
+ Alert,
1301
1914
  Avatar,
1915
+ Badge,
1916
+ Breadcrumb,
1302
1917
  Button,
1303
1918
  Card,
1919
+ Divider,
1304
1920
  InputCNPJ,
1305
1921
  InputCPF,
1306
1922
  InputCep,
@@ -1314,17 +1930,34 @@ Textarea.displayName = "Textarea";
1314
1930
  InputString,
1315
1931
  InputWrapper,
1316
1932
  Modal,
1933
+ Skeleton,
1934
+ Spinner,
1935
+ Tabs,
1317
1936
  Textarea,
1318
1937
  Tooltip,
1938
+ accordion,
1939
+ accordionContent,
1940
+ accordionItem,
1941
+ accordionTrigger,
1942
+ alert,
1319
1943
  avatar,
1944
+ badge,
1945
+ breadcrumb,
1946
+ breadcrumbItem,
1320
1947
  button,
1321
1948
  card,
1949
+ divider,
1322
1950
  maskCEP,
1323
1951
  maskCNPJ,
1324
1952
  maskCPF,
1325
1953
  maskCurrency,
1326
1954
  maskPhone,
1327
1955
  modal,
1956
+ skeleton,
1957
+ spinner,
1958
+ tabList,
1959
+ tabTrigger,
1960
+ tabs,
1328
1961
  tooltip,
1329
1962
  unmask,
1330
1963
  unmaskCurrency