@rehagro/ui 1.0.0 → 1.0.2

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
@@ -13,7 +13,9 @@ var TOKEN_MAP = {
13
13
  danger: { var: "--rh-danger", isColor: true },
14
14
  dangerHover: { var: "--rh-danger-hover", isColor: true },
15
15
  warning: { var: "--rh-warning", isColor: true },
16
+ warningHover: { var: "--rh-warning-hover", isColor: true },
16
17
  success: { var: "--rh-success", isColor: true },
18
+ successHover: { var: "--rh-success-hover", isColor: true },
17
19
  text: { var: "--rh-text", isColor: true },
18
20
  textMuted: { var: "--rh-text-muted", isColor: true },
19
21
  surface: { var: "--rh-surface", isColor: true },
@@ -613,10 +615,44 @@ function RehagroProvider({ theme, toastPosition, children }) {
613
615
  }, [theme]);
614
616
  return /* @__PURE__ */ jsx("div", { className: "rh-root", style, children: /* @__PURE__ */ jsx(ToastProvider, { position: toastPosition, children }) });
615
617
  }
616
- var variantClasses = {
617
- solid: "rh-bg-primary rh-text-surface rh-border-primary hover:rh-bg-primary-hover hover:rh-border-primary-hover",
618
- outline: "rh-bg-transparent rh-text-primary rh-border-primary hover:rh-bg-primary hover:rh-text-surface",
619
- ghost: "rh-bg-transparent rh-text-primary rh-border-transparent hover:rh-bg-primary/10"
618
+ function toRgbTriplet2(value) {
619
+ if (value.startsWith("#")) {
620
+ const h = value.replace("#", "");
621
+ const full = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
622
+ const r = parseInt(full.slice(0, 2), 16);
623
+ const g = parseInt(full.slice(2, 4), 16);
624
+ const b = parseInt(full.slice(4, 6), 16);
625
+ if ([r, g, b].some(Number.isNaN)) return void 0;
626
+ return `${r} ${g} ${b}`;
627
+ }
628
+ const m = value.match(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i);
629
+ if (m) return `${m[1]} ${m[2]} ${m[3]}`;
630
+ const parts = value.trim().split(/\s+/);
631
+ if (parts.length === 3 && parts.every((p) => !Number.isNaN(Number(p)))) return value.trim();
632
+ return void 0;
633
+ }
634
+ var variantColorClasses = {
635
+ solid: {
636
+ primary: "rh-bg-primary rh-text-surface rh-border-primary hover:rh-bg-primary-hover hover:rh-border-primary-hover",
637
+ secondary: "rh-bg-secondary rh-text-surface rh-border-secondary hover:rh-bg-secondary-hover hover:rh-border-secondary-hover",
638
+ danger: "rh-bg-danger rh-text-surface rh-border-danger hover:rh-bg-danger-hover hover:rh-border-danger-hover",
639
+ warning: "rh-bg-warning rh-text-surface rh-border-warning hover:rh-bg-warning-hover hover:rh-border-warning-hover",
640
+ success: "rh-bg-success rh-text-surface rh-border-success hover:rh-bg-success-hover hover:rh-border-success-hover"
641
+ },
642
+ outline: {
643
+ primary: "rh-bg-transparent rh-text-primary rh-border-primary hover:rh-bg-primary hover:rh-text-surface",
644
+ secondary: "rh-bg-transparent rh-text-secondary rh-border-secondary hover:rh-bg-secondary hover:rh-text-surface",
645
+ danger: "rh-bg-transparent rh-text-danger rh-border-danger hover:rh-bg-danger hover:rh-text-surface",
646
+ warning: "rh-bg-transparent rh-text-warning rh-border-warning hover:rh-bg-warning hover:rh-text-surface",
647
+ success: "rh-bg-transparent rh-text-success rh-border-success hover:rh-bg-success hover:rh-text-surface"
648
+ },
649
+ ghost: {
650
+ primary: "rh-bg-transparent rh-text-primary rh-border-transparent hover:rh-bg-primary/10",
651
+ secondary: "rh-bg-transparent rh-text-secondary rh-border-transparent hover:rh-bg-secondary/10",
652
+ danger: "rh-bg-transparent rh-text-danger rh-border-transparent hover:rh-bg-danger/10",
653
+ warning: "rh-bg-transparent rh-text-warning rh-border-transparent hover:rh-bg-warning/10",
654
+ success: "rh-bg-transparent rh-text-success rh-border-transparent hover:rh-bg-success/10"
655
+ }
620
656
  };
621
657
  var sizeClasses = {
622
658
  sm: "rh-text-sm rh-px-3 rh-py-1.5",
@@ -637,27 +673,36 @@ var Button = forwardRef(function Button2({
637
673
  variant = "solid",
638
674
  size = "md",
639
675
  radius = "sm",
676
+ color = "primary",
677
+ hoverColor,
640
678
  loading = false,
641
679
  disabled,
642
680
  leftIcon,
643
681
  rightIcon,
644
682
  className = "",
683
+ style,
645
684
  children,
646
685
  ...rest
647
686
  }, ref) {
648
687
  const isDisabled = React8.useMemo(() => disabled || loading, [disabled, loading]);
688
+ const hoverStyle = React8.useMemo(() => {
689
+ if (!hoverColor) return style;
690
+ const triplet = toRgbTriplet2(hoverColor);
691
+ return { ...style, [`--rh-${color}-hover`]: triplet ?? hoverColor };
692
+ }, [hoverColor, color, style]);
649
693
  return /* @__PURE__ */ jsxs(
650
694
  "button",
651
695
  {
652
696
  ref,
653
697
  disabled: isDisabled,
654
698
  "aria-busy": loading || void 0,
699
+ style: hoverStyle,
655
700
  className: [
656
701
  "rh-inline-flex rh-items-center rh-justify-center rh-gap-2",
657
702
  "rh-border rh-font-sans rh-font-medium",
658
703
  "rh-transition-colors rh-duration-150",
659
704
  "focus-visible:rh-outline-none focus-visible:rh-ring-2 focus-visible:rh-ring-ring focus-visible:rh-ring-offset-2",
660
- variantClasses[variant],
705
+ variantColorClasses[variant][color],
661
706
  sizeClasses[size],
662
707
  radiusClasses[radius],
663
708
  isDisabled ? "rh-opacity-50 rh-cursor-not-allowed rh-pointer-events-none" : "",
@@ -703,7 +748,7 @@ var Button = forwardRef(function Button2({
703
748
  }
704
749
  );
705
750
  });
706
- var variantColorClasses = {
751
+ var variantColorClasses2 = {
707
752
  solid: {
708
753
  primary: "rh-bg-primary rh-text-surface rh-border-primary hover:rh-bg-primary-hover hover:rh-border-primary-hover",
709
754
  danger: "rh-bg-danger rh-text-surface rh-border-danger hover:rh-bg-danger-hover hover:rh-border-danger-hover",
@@ -764,7 +809,7 @@ var IconButton = forwardRef(function IconButton2({
764
809
  "rh-border rh-font-sans",
765
810
  "rh-transition-colors rh-duration-150",
766
811
  "focus-visible:rh-outline-none focus-visible:rh-ring-2 focus-visible:rh-ring-ring focus-visible:rh-ring-offset-2",
767
- variantColorClasses[variant][color],
812
+ variantColorClasses2[variant][color],
768
813
  sizeClasses2[size],
769
814
  radiusClasses2[radius],
770
815
  isDisabled ? "rh-opacity-50 rh-cursor-not-allowed rh-pointer-events-none" : "",
@@ -1464,7 +1509,7 @@ var Select = forwardRef(
1464
1509
  );
1465
1510
  }
1466
1511
  );
1467
- var variantClasses2 = {
1512
+ var variantClasses = {
1468
1513
  light: "rh-bg-surface rh-text-text rh-border rh-border-border rh-shadow-md",
1469
1514
  default: "rh-bg-primary/10 rh-text-text rh-border rh-border-primary/20 rh-shadow-md",
1470
1515
  dark: "rh-bg-primary rh-text-surface rh-shadow-md"
@@ -1604,7 +1649,7 @@ var Tooltip = forwardRef(
1604
1649
  className: [
1605
1650
  "rh-absolute rh-z-50 rh-w-max rh-max-w-xs rh-rounded-xs",
1606
1651
  tooltipPlacementClasses[placement],
1607
- variantClasses2[variant],
1652
+ variantClasses[variant],
1608
1653
  sizeClasses6[size],
1609
1654
  className
1610
1655
  ].filter(Boolean).join(" "),
@@ -1691,7 +1736,7 @@ var imageSizeClasses = {
1691
1736
  lg: "rh-w-12 rh-h-12",
1692
1737
  xl: "rh-w-16 rh-h-16"
1693
1738
  };
1694
- var variantClasses3 = {
1739
+ var variantClasses2 = {
1695
1740
  circle: "rh-rounded-full",
1696
1741
  square: "rh-rounded-sm"
1697
1742
  };
@@ -1709,7 +1754,7 @@ var Avatar = forwardRef(function Avatar2({ src, alt = "", initials, size = "md",
1709
1754
  "rh-inline-flex rh-items-center rh-justify-center rh-shrink-0 rh-overflow-hidden",
1710
1755
  "rh-bg-primary rh-text-surface rh-font-sans rh-font-medium rh-select-none",
1711
1756
  sizeClasses7[size],
1712
- variantClasses3[variant],
1757
+ variantClasses2[variant],
1713
1758
  className
1714
1759
  ].filter(Boolean).join(" "),
1715
1760
  ...rest,
@@ -1718,13 +1763,86 @@ var Avatar = forwardRef(function Avatar2({ src, alt = "", initials, size = "md",
1718
1763
  {
1719
1764
  src,
1720
1765
  alt,
1721
- className: [imageSizeClasses[size], variantClasses3[variant], "rh-object-cover"].join(" "),
1766
+ className: [imageSizeClasses[size], variantClasses2[variant], "rh-object-cover"].join(" "),
1722
1767
  onError: () => setImgError(true)
1723
1768
  }
1724
1769
  ) : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: fallbackLabel })
1725
1770
  }
1726
1771
  );
1727
1772
  });
1773
+ var PRESET_COLORS = /* @__PURE__ */ new Set(["primary", "secondary", "danger", "warning", "success"]);
1774
+ var isPresetColor = (color) => PRESET_COLORS.has(color);
1775
+ var activePresetClasses = {
1776
+ primary: "rh-bg-primary rh-text-surface rh-border-primary",
1777
+ secondary: "rh-bg-secondary rh-text-surface rh-border-secondary",
1778
+ danger: "rh-bg-danger rh-text-surface rh-border-danger",
1779
+ warning: "rh-bg-warning rh-text-surface rh-border-warning",
1780
+ success: "rh-bg-success rh-text-surface rh-border-success"
1781
+ };
1782
+ var inactivePresetClasses = {
1783
+ primary: "rh-bg-primary/10 rh-text-primary rh-border-primary/30",
1784
+ secondary: "rh-bg-secondary/10 rh-text-secondary rh-border-secondary/30",
1785
+ danger: "rh-bg-danger/10 rh-text-danger rh-border-danger/30",
1786
+ warning: "rh-bg-warning/10 rh-text-warning rh-border-warning/30",
1787
+ success: "rh-bg-success/10 rh-text-success rh-border-success/30"
1788
+ };
1789
+ var sizeClasses8 = {
1790
+ sm: "rh-text-xs rh-px-2 rh-py-0.5 rh-gap-1",
1791
+ md: "rh-text-sm rh-px-2.5 rh-py-1 rh-gap-1.5",
1792
+ lg: "rh-text-sm rh-px-3 rh-py-1.5 rh-gap-1.5"
1793
+ };
1794
+ function getCustomColorStyles(color, active) {
1795
+ if (active) {
1796
+ return { backgroundColor: color, borderColor: color, color: "#fff" };
1797
+ }
1798
+ return {
1799
+ backgroundColor: `color-mix(in srgb, ${color} 10%, transparent)`,
1800
+ borderColor: `color-mix(in srgb, ${color} 30%, transparent)`,
1801
+ color
1802
+ };
1803
+ }
1804
+ var Tag = forwardRef(function Tag2({
1805
+ color = "primary",
1806
+ size = "md",
1807
+ active = false,
1808
+ title,
1809
+ leftIcon,
1810
+ rightIcon,
1811
+ className = "",
1812
+ style,
1813
+ children,
1814
+ ...rest
1815
+ }, ref) {
1816
+ const preset = isPresetColor(color);
1817
+ const colorClasses = preset ? active ? activePresetClasses[color] : inactivePresetClasses[color] : "";
1818
+ const customStyles = preset ? {} : getCustomColorStyles(color, active);
1819
+ return /* @__PURE__ */ jsxs(
1820
+ "span",
1821
+ {
1822
+ ref,
1823
+ role: rest.onClick ? "button" : void 0,
1824
+ tabIndex: rest.onClick ? 0 : void 0,
1825
+ "aria-pressed": rest.onClick ? active : void 0,
1826
+ className: [
1827
+ "rh-inline-flex rh-items-center rh-font-sans rh-font-medium rh-rounded-full",
1828
+ "rh-border rh-whitespace-nowrap rh-select-none",
1829
+ "rh-transition-colors rh-duration-150",
1830
+ rest.onClick ? "rh-cursor-pointer" : "",
1831
+ sizeClasses8[size],
1832
+ colorClasses,
1833
+ className
1834
+ ].filter(Boolean).join(" "),
1835
+ style: { ...customStyles, ...style },
1836
+ ...rest,
1837
+ children: [
1838
+ leftIcon,
1839
+ title,
1840
+ children,
1841
+ rightIcon
1842
+ ]
1843
+ }
1844
+ );
1845
+ });
1728
1846
  var Container = forwardRef(
1729
1847
  function Container2({ fluid = false, className = "", children, ...rest }, ref) {
1730
1848
  return /* @__PURE__ */ jsx(
@@ -1894,6 +2012,6 @@ var GridItem = forwardRef(
1894
2012
  }
1895
2013
  );
1896
2014
 
1897
- export { Avatar, Button, Checkbox, CloseIcon, Container, DeleteIcon, EditIcon, ErrorIcon, GridContainer, GridItem, IconButton, InfoIcon, NeutralIcon, PlusIcon, RehagroProvider, SearchIcon, Select, SuccessIcon, TextInput, Toast, ToastContainer, ToastProvider, Tooltip, WarningIcon, useToast };
2015
+ export { Avatar, Button, Checkbox, CloseIcon, Container, DeleteIcon, EditIcon, ErrorIcon, GridContainer, GridItem, IconButton, InfoIcon, NeutralIcon, PlusIcon, RehagroProvider, SearchIcon, Select, SuccessIcon, Tag, TextInput, Toast, ToastContainer, ToastProvider, Tooltip, WarningIcon, useToast };
1898
2016
  //# sourceMappingURL=index.mjs.map
1899
2017
  //# sourceMappingURL=index.mjs.map