analytica-frontend-lib 1.0.36 → 1.0.37

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.mjs CHANGED
@@ -1601,6 +1601,172 @@ var ProgressBar = ({
1601
1601
  };
1602
1602
  var ProgressBar_default = ProgressBar;
1603
1603
 
1604
+ // src/components/ProgressCircle/ProgressCircle.tsx
1605
+ import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
1606
+ var SIZE_CLASSES8 = {
1607
+ small: {
1608
+ container: "w-[90px] h-[90px]",
1609
+ // 90px circle from design specs
1610
+ strokeWidth: 4,
1611
+ // 4px stroke width - matches ProgressBar small (h-1)
1612
+ textSize: "2xl",
1613
+ // 24px for percentage (font-size: 24px)
1614
+ textWeight: "medium",
1615
+ // font-weight: 500
1616
+ labelSize: "2xs",
1617
+ // 10px for status label (closest to 8px design spec)
1618
+ labelWeight: "bold",
1619
+ // font-weight: 700
1620
+ spacing: "gap-1"
1621
+ // 4px gap between percentage and label
1622
+ },
1623
+ medium: {
1624
+ container: "w-[152px] h-[152px]",
1625
+ // 151.67px ≈ 152px circle from design specs
1626
+ strokeWidth: 8,
1627
+ // 8px stroke width - matches ProgressBar medium (h-2)
1628
+ textSize: "2xl",
1629
+ // 24px for percentage (font-size: 24px)
1630
+ textWeight: "medium",
1631
+ // font-weight: 500
1632
+ labelSize: "xs",
1633
+ // 12px for status label (font-size: 12px)
1634
+ labelWeight: "medium",
1635
+ // font-weight: 500 (changed from bold)
1636
+ spacing: "gap-1"
1637
+ // 4px gap between percentage and label
1638
+ }
1639
+ };
1640
+ var VARIANT_CLASSES3 = {
1641
+ blue: {
1642
+ background: "stroke-primary-100",
1643
+ // Light blue background (#BBDCF7)
1644
+ fill: "stroke-primary-700",
1645
+ // Blue for activity progress (#2271C4)
1646
+ textColor: "text-primary-700",
1647
+ // Blue text color (#2271C4)
1648
+ labelColor: "text-text-700"
1649
+ // Gray text for label (#525252)
1650
+ },
1651
+ green: {
1652
+ background: "stroke-background-300",
1653
+ // Gray background (#D5D4D4 - matches design)
1654
+ fill: "stroke-success-200",
1655
+ // Green for performance (#84D3A2 - matches design)
1656
+ textColor: "text-text-800",
1657
+ // Dark gray text (#404040 - matches design)
1658
+ labelColor: "text-text-600"
1659
+ // Medium gray text for label (#737373 - matches design)
1660
+ }
1661
+ };
1662
+ var ProgressCircle = ({
1663
+ value,
1664
+ max = 100,
1665
+ size = "small",
1666
+ variant = "blue",
1667
+ label,
1668
+ showPercentage = true,
1669
+ className = "",
1670
+ labelClassName = "",
1671
+ percentageClassName = ""
1672
+ }) => {
1673
+ const safeValue = isNaN(value) ? 0 : value;
1674
+ const clampedValue = Math.max(0, Math.min(safeValue, max));
1675
+ const percentage = max === 0 ? 0 : clampedValue / max * 100;
1676
+ const sizeClasses = SIZE_CLASSES8[size];
1677
+ const variantClasses = VARIANT_CLASSES3[variant];
1678
+ const radius = size === "small" ? 37 : 64;
1679
+ const circumference = 2 * Math.PI * radius;
1680
+ const strokeDashoffset = circumference - percentage / 100 * circumference;
1681
+ const center = size === "small" ? 45 : 76;
1682
+ const svgSize = size === "small" ? 90 : 152;
1683
+ return /* @__PURE__ */ jsxs14(
1684
+ "div",
1685
+ {
1686
+ className: `relative flex flex-col items-center justify-center ${sizeClasses.container} rounded-lg ${className}`,
1687
+ children: [
1688
+ /* @__PURE__ */ jsxs14(
1689
+ "svg",
1690
+ {
1691
+ className: "absolute inset-0 transform -rotate-90",
1692
+ width: svgSize,
1693
+ height: svgSize,
1694
+ viewBox: `0 0 ${svgSize} ${svgSize}`,
1695
+ "aria-hidden": "true",
1696
+ children: [
1697
+ /* @__PURE__ */ jsx19(
1698
+ "circle",
1699
+ {
1700
+ cx: center,
1701
+ cy: center,
1702
+ r: radius,
1703
+ fill: "none",
1704
+ strokeWidth: sizeClasses.strokeWidth,
1705
+ className: `${variantClasses.background} rounded-lg`
1706
+ }
1707
+ ),
1708
+ /* @__PURE__ */ jsx19(
1709
+ "circle",
1710
+ {
1711
+ cx: center,
1712
+ cy: center,
1713
+ r: radius,
1714
+ fill: "none",
1715
+ strokeWidth: sizeClasses.strokeWidth,
1716
+ strokeLinecap: "round",
1717
+ strokeDasharray: circumference,
1718
+ strokeDashoffset,
1719
+ className: `${variantClasses.fill} transition-all duration-500 ease-out shadow-soft-shadow-3 rounded-lg`
1720
+ }
1721
+ )
1722
+ ]
1723
+ }
1724
+ ),
1725
+ /* @__PURE__ */ jsx19(
1726
+ "progress",
1727
+ {
1728
+ value: clampedValue,
1729
+ max,
1730
+ "aria-label": typeof label === "string" ? label : "Progress",
1731
+ className: "absolute opacity-0 w-0 h-0"
1732
+ }
1733
+ ),
1734
+ /* @__PURE__ */ jsxs14(
1735
+ "div",
1736
+ {
1737
+ className: `relative z-10 flex flex-col items-center justify-center ${sizeClasses.spacing}`,
1738
+ children: [
1739
+ showPercentage && /* @__PURE__ */ jsxs14(
1740
+ Text_default,
1741
+ {
1742
+ size: sizeClasses.textSize,
1743
+ weight: sizeClasses.textWeight,
1744
+ className: `text-center ${variantClasses.textColor} ${percentageClassName}`,
1745
+ children: [
1746
+ Math.round(percentage),
1747
+ "%"
1748
+ ]
1749
+ }
1750
+ ),
1751
+ label && /* @__PURE__ */ jsx19(
1752
+ Text_default,
1753
+ {
1754
+ as: "span",
1755
+ size: sizeClasses.labelSize,
1756
+ weight: sizeClasses.labelWeight,
1757
+ className: `${variantClasses.labelColor} text-center uppercase tracking-wide ${labelClassName}`,
1758
+ children: label
1759
+ }
1760
+ )
1761
+ ]
1762
+ }
1763
+ )
1764
+ ]
1765
+ }
1766
+ );
1767
+ };
1768
+ var ProgressCircle_default = ProgressCircle;
1769
+
1604
1770
  // src/components/DropdownMenu/DropdownMenu.tsx
1605
1771
  import { SignOut, User } from "phosphor-react";
1606
1772
  import {
@@ -1613,7 +1779,7 @@ import {
1613
1779
  useState as useState5
1614
1780
  } from "react";
1615
1781
  import { create as create2, useStore } from "zustand";
1616
- import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
1782
+ import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
1617
1783
  function createDropdownStore() {
1618
1784
  return create2((set) => ({
1619
1785
  open: false,
@@ -1704,13 +1870,13 @@ var DropdownMenu = ({ children, open, onOpenChange }) => {
1704
1870
  store.setState({ open });
1705
1871
  }
1706
1872
  }, []);
1707
- return /* @__PURE__ */ jsx19("div", { className: "relative", ref: menuRef, children: injectStore(children, store) });
1873
+ return /* @__PURE__ */ jsx20("div", { className: "relative", ref: menuRef, children: injectStore(children, store) });
1708
1874
  };
1709
1875
  var DropdownMenuTrigger = forwardRef9(({ className, children, onClick, store: externalStore, ...props }, ref) => {
1710
1876
  const store = useDropdownStore(externalStore);
1711
1877
  const open = useStore(store, (s) => s.open);
1712
1878
  const toggleOpen = () => store.setState({ open: !open });
1713
- return /* @__PURE__ */ jsx19(
1879
+ return /* @__PURE__ */ jsx20(
1714
1880
  "button",
1715
1881
  {
1716
1882
  ref,
@@ -1743,7 +1909,7 @@ var ALIGN_CLASSES = {
1743
1909
  end: "right-0"
1744
1910
  };
1745
1911
  var MenuLabel = forwardRef9(({ className, inset, store: _store, ...props }, ref) => {
1746
- return /* @__PURE__ */ jsx19(
1912
+ return /* @__PURE__ */ jsx20(
1747
1913
  "div",
1748
1914
  {
1749
1915
  ref,
@@ -1780,7 +1946,7 @@ var MenuContent = forwardRef9(
1780
1946
  const horizontal = ALIGN_CLASSES[align];
1781
1947
  return `absolute ${vertical} ${horizontal}`;
1782
1948
  };
1783
- return /* @__PURE__ */ jsx19(
1949
+ return /* @__PURE__ */ jsx20(
1784
1950
  "div",
1785
1951
  {
1786
1952
  ref,
@@ -1838,7 +2004,7 @@ var MenuItem = forwardRef9(
1838
2004
  const getVariantProps = () => {
1839
2005
  return variant === "profile" ? { "data-variant": "profile" } : {};
1840
2006
  };
1841
- return /* @__PURE__ */ jsxs14(
2007
+ return /* @__PURE__ */ jsxs15(
1842
2008
  "div",
1843
2009
  {
1844
2010
  ref,
@@ -1868,7 +2034,7 @@ var MenuItem = forwardRef9(
1868
2034
  }
1869
2035
  );
1870
2036
  MenuItem.displayName = "MenuItem";
1871
- var MenuSeparator = forwardRef9(({ className, store: _store, ...props }, ref) => /* @__PURE__ */ jsx19(
2037
+ var MenuSeparator = forwardRef9(({ className, store: _store, ...props }, ref) => /* @__PURE__ */ jsx20(
1872
2038
  "div",
1873
2039
  {
1874
2040
  ref,
@@ -1881,7 +2047,7 @@ var ProfileMenuTrigger = forwardRef9(({ className, onClick, store: externalStore
1881
2047
  const store = useDropdownStore(externalStore);
1882
2048
  const open = useStore(store, (s) => s.open);
1883
2049
  const toggleOpen = () => store.setState({ open: !open });
1884
- return /* @__PURE__ */ jsx19(
2050
+ return /* @__PURE__ */ jsx20(
1885
2051
  "button",
1886
2052
  {
1887
2053
  ref,
@@ -1893,13 +2059,13 @@ var ProfileMenuTrigger = forwardRef9(({ className, onClick, store: externalStore
1893
2059
  },
1894
2060
  "aria-expanded": open,
1895
2061
  ...props,
1896
- children: /* @__PURE__ */ jsx19("span", { className: "size-6 rounded-full bg-background-100 flex items-center justify-center", children: /* @__PURE__ */ jsx19(User, { className: "text-background-950", size: 18 }) })
2062
+ children: /* @__PURE__ */ jsx20("span", { className: "size-6 rounded-full bg-background-100 flex items-center justify-center", children: /* @__PURE__ */ jsx20(User, { className: "text-background-950", size: 18 }) })
1897
2063
  }
1898
2064
  );
1899
2065
  });
1900
2066
  ProfileMenuTrigger.displayName = "ProfileMenuTrigger";
1901
2067
  var ProfileMenuHeader = forwardRef9(({ className, name, email, store: _store, ...props }, ref) => {
1902
- return /* @__PURE__ */ jsxs14(
2068
+ return /* @__PURE__ */ jsxs15(
1903
2069
  "div",
1904
2070
  {
1905
2071
  ref,
@@ -1910,10 +2076,10 @@ var ProfileMenuHeader = forwardRef9(({ className, name, email, store: _store, ..
1910
2076
  `,
1911
2077
  ...props,
1912
2078
  children: [
1913
- /* @__PURE__ */ jsx19("span", { className: "size-16 bg-background-100 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx19(User, { size: 34, className: "text-background-950" }) }),
1914
- /* @__PURE__ */ jsxs14("div", { className: "flex flex-col ", children: [
1915
- /* @__PURE__ */ jsx19("p", { className: "text-xl font-bold text-text-950", children: name }),
1916
- /* @__PURE__ */ jsx19("p", { className: "text-md text-text-600", children: email })
2079
+ /* @__PURE__ */ jsx20("span", { className: "size-16 bg-background-100 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx20(User, { size: 34, className: "text-background-950" }) }),
2080
+ /* @__PURE__ */ jsxs15("div", { className: "flex flex-col ", children: [
2081
+ /* @__PURE__ */ jsx20("p", { className: "text-xl font-bold text-text-950", children: name }),
2082
+ /* @__PURE__ */ jsx20("p", { className: "text-md text-text-600", children: email })
1917
2083
  ] })
1918
2084
  ]
1919
2085
  }
@@ -1921,7 +2087,7 @@ var ProfileMenuHeader = forwardRef9(({ className, name, email, store: _store, ..
1921
2087
  });
1922
2088
  ProfileMenuHeader.displayName = "ProfileMenuHeader";
1923
2089
  var ProfileMenuSection = forwardRef9(({ className, children, store: _store, ...props }, ref) => {
1924
- return /* @__PURE__ */ jsx19(
2090
+ return /* @__PURE__ */ jsx20(
1925
2091
  "div",
1926
2092
  {
1927
2093
  ref,
@@ -1939,7 +2105,7 @@ var ProfileMenuFooter = forwardRef9(
1939
2105
  ({ className, disabled = false, onClick, store: externalStore, ...props }, ref) => {
1940
2106
  const store = useDropdownStore(externalStore);
1941
2107
  const setOpen = useStore(store, (s) => s.setOpen);
1942
- return /* @__PURE__ */ jsxs14(
2108
+ return /* @__PURE__ */ jsxs15(
1943
2109
  "button",
1944
2110
  {
1945
2111
  ref,
@@ -1951,8 +2117,8 @@ var ProfileMenuFooter = forwardRef9(
1951
2117
  },
1952
2118
  ...props,
1953
2119
  children: [
1954
- /* @__PURE__ */ jsx19("span", { className: "mr-2 flex items-center", children: /* @__PURE__ */ jsx19(SignOut, {}) }),
1955
- /* @__PURE__ */ jsx19("span", { children: "Sair" })
2120
+ /* @__PURE__ */ jsx20("span", { className: "mr-2 flex items-center", children: /* @__PURE__ */ jsx20(SignOut, {}) }),
2121
+ /* @__PURE__ */ jsx20("span", { children: "Sair" })
1956
2122
  ]
1957
2123
  }
1958
2124
  );
@@ -1972,13 +2138,13 @@ import {
1972
2138
  cloneElement as cloneElement2
1973
2139
  } from "react";
1974
2140
  import { CaretDown, Check as Check3 } from "phosphor-react";
1975
- import { Fragment as Fragment2, jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
1976
- var VARIANT_CLASSES3 = {
2141
+ import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
2142
+ var VARIANT_CLASSES4 = {
1977
2143
  outlined: "border-2 rounded-sm focus:border-primary-950",
1978
2144
  underlined: "border-b-2 focus:border-primary-950",
1979
2145
  rounded: "border-2 rounded-4xl focus:border-primary-950"
1980
2146
  };
1981
- var SIZE_CLASSES8 = {
2147
+ var SIZE_CLASSES9 = {
1982
2148
  small: "text-sm",
1983
2149
  medium: "text-md",
1984
2150
  large: "text-lg"
@@ -2018,7 +2184,7 @@ function getLabelAsNode(children) {
2018
2184
  }
2019
2185
  const flattened = Children2.toArray(children);
2020
2186
  if (flattened.length === 1) return flattened[0];
2021
- return /* @__PURE__ */ jsx20(Fragment2, { children: flattened });
2187
+ return /* @__PURE__ */ jsx21(Fragment2, { children: flattened });
2022
2188
  }
2023
2189
  var injectStore2 = (children, store) => {
2024
2190
  return Children2.map(children, (child) => {
@@ -2116,8 +2282,8 @@ var Select = ({
2116
2282
  onValueChange(value);
2117
2283
  }
2118
2284
  }, [value]);
2119
- const sizeClasses = SIZE_CLASSES8[size];
2120
- return /* @__PURE__ */ jsx20("div", { className: `relative ${sizeClasses} w-[288px]`, ref: selectRef, children: injectStore2(children, store) });
2285
+ const sizeClasses = SIZE_CLASSES9[size];
2286
+ return /* @__PURE__ */ jsx21("div", { className: `relative ${sizeClasses} w-[288px]`, ref: selectRef, children: injectStore2(children, store) });
2121
2287
  };
2122
2288
  var SelectValue = ({
2123
2289
  placeholder,
@@ -2126,7 +2292,7 @@ var SelectValue = ({
2126
2292
  const store = useSelectStore(externalStore);
2127
2293
  const selectedLabel = useStore2(store, (s) => s.selectedLabel);
2128
2294
  const value = useStore2(store, (s) => s.value);
2129
- return /* @__PURE__ */ jsx20("span", { className: "text-inherit", children: selectedLabel || placeholder || value });
2295
+ return /* @__PURE__ */ jsx21("span", { className: "text-inherit", children: selectedLabel || placeholder || value });
2130
2296
  };
2131
2297
  var SelectTrigger = forwardRef10(
2132
2298
  ({
@@ -2140,8 +2306,8 @@ var SelectTrigger = forwardRef10(
2140
2306
  const store = useSelectStore(externalStore);
2141
2307
  const open = useStore2(store, (s) => s.open);
2142
2308
  const toggleOpen = () => store.setState({ open: !open });
2143
- const variantClasses = VARIANT_CLASSES3[variant];
2144
- return /* @__PURE__ */ jsxs15(
2309
+ const variantClasses = VARIANT_CLASSES4[variant];
2310
+ return /* @__PURE__ */ jsxs16(
2145
2311
  "button",
2146
2312
  {
2147
2313
  ref,
@@ -2159,7 +2325,7 @@ var SelectTrigger = forwardRef10(
2159
2325
  ...props,
2160
2326
  children: [
2161
2327
  props.children,
2162
- /* @__PURE__ */ jsx20(
2328
+ /* @__PURE__ */ jsx21(
2163
2329
  CaretDown,
2164
2330
  {
2165
2331
  className: `h-[1em] w-[1em] opacity-50 transition-transform ${open ? "rotate-180" : ""}`
@@ -2184,7 +2350,7 @@ var SelectContent = forwardRef10(
2184
2350
  const open = useStore2(store, (s) => s.open);
2185
2351
  if (!open) return null;
2186
2352
  const getPositionClasses = () => `absolute ${SIDE_CLASSES2[side]} ${ALIGN_CLASSES2[align]}`;
2187
- return /* @__PURE__ */ jsx20(
2353
+ return /* @__PURE__ */ jsx21(
2188
2354
  "div",
2189
2355
  {
2190
2356
  role: "menu",
@@ -2218,7 +2384,7 @@ var SelectItem = forwardRef10(
2218
2384
  }
2219
2385
  props.onClick?.(e);
2220
2386
  };
2221
- return /* @__PURE__ */ jsxs15(
2387
+ return /* @__PURE__ */ jsxs16(
2222
2388
  "div",
2223
2389
  {
2224
2390
  role: "menuitem",
@@ -2238,7 +2404,7 @@ var SelectItem = forwardRef10(
2238
2404
  tabIndex: disabled ? -1 : 0,
2239
2405
  ...props,
2240
2406
  children: [
2241
- /* @__PURE__ */ jsx20("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: selectedValue === value && /* @__PURE__ */ jsx20(Check3, { className: "" }) }),
2407
+ /* @__PURE__ */ jsx21("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: selectedValue === value && /* @__PURE__ */ jsx21(Check3, { className: "" }) }),
2242
2408
  children
2243
2409
  ]
2244
2410
  }
@@ -2269,6 +2435,7 @@ export {
2269
2435
  ProfileMenuSection,
2270
2436
  ProfileMenuTrigger,
2271
2437
  ProgressBar_default as ProgressBar,
2438
+ ProgressCircle_default as ProgressCircle,
2272
2439
  Radio_default as Radio,
2273
2440
  Select_default as Select,
2274
2441
  SelectContent,