framepexls-ui-lib 0.3.19 → 0.3.20

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.
@@ -11,7 +11,7 @@ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>,
11
11
  className?: string;
12
12
  inputClassName?: string;
13
13
  };
14
- declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size" | "type"> & {
14
+ declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
15
15
  label?: React__default.ReactNode;
16
16
  description?: React__default.ReactNode;
17
17
  error?: boolean;
@@ -11,7 +11,7 @@ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>,
11
11
  className?: string;
12
12
  inputClassName?: string;
13
13
  };
14
- declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size" | "type"> & {
14
+ declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
15
15
  label?: React__default.ReactNode;
16
16
  description?: React__default.ReactNode;
17
17
  error?: boolean;
@@ -1,4 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Tone } from './Badge.mjs';
3
+ import 'react';
2
4
 
3
5
  type KpiCardProps = {
4
6
  label: string;
@@ -6,7 +8,8 @@ type KpiCardProps = {
6
8
  delta: string;
7
9
  help?: string;
8
10
  clickable?: boolean;
11
+ tone?: Tone;
9
12
  };
10
- declare function KpiCard({ label, value, delta, help, clickable }: KpiCardProps): react_jsx_runtime.JSX.Element;
13
+ declare function KpiCard({ label, value, delta, help, clickable, tone }: KpiCardProps): react_jsx_runtime.JSX.Element;
11
14
 
12
15
  export { type KpiCardProps, KpiCard as default };
package/dist/KpiCard.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Tone } from './Badge.js';
3
+ import 'react';
2
4
 
3
5
  type KpiCardProps = {
4
6
  label: string;
@@ -6,7 +8,8 @@ type KpiCardProps = {
6
8
  delta: string;
7
9
  help?: string;
8
10
  clickable?: boolean;
11
+ tone?: Tone;
9
12
  };
10
- declare function KpiCard({ label, value, delta, help, clickable }: KpiCardProps): react_jsx_runtime.JSX.Element;
13
+ declare function KpiCard({ label, value, delta, help, clickable, tone }: KpiCardProps): react_jsx_runtime.JSX.Element;
11
14
 
12
15
  export { type KpiCardProps, KpiCard as default };
package/dist/KpiCard.js CHANGED
@@ -38,25 +38,77 @@ function MotionNumber({ value, format }) {
38
38
  }, [value]);
39
39
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: format ? format(display) : Math.round(display).toLocaleString() });
40
40
  }
41
- function KpiCard({ label, value, delta, help, clickable }) {
41
+ const toneStyles = {
42
+ emerald: {
43
+ ring: "hover:ring-emerald-400/70",
44
+ badge: "bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-200"
45
+ },
46
+ indigo: {
47
+ ring: "hover:ring-indigo-400/70",
48
+ badge: "bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-200"
49
+ },
50
+ amber: {
51
+ ring: "hover:ring-amber-400/70",
52
+ badge: "bg-amber-500/10 text-amber-700 dark:bg-amber-500/20 dark:text-amber-200"
53
+ },
54
+ slate: {
55
+ ring: "hover:ring-slate-400/60",
56
+ badge: "bg-slate-500/10 text-slate-700 dark:bg-slate-500/25 dark:text-slate-100"
57
+ },
58
+ rose: {
59
+ ring: "hover:ring-rose-400/70",
60
+ badge: "bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-200"
61
+ },
62
+ sky: {
63
+ ring: "hover:ring-sky-400/70",
64
+ badge: "bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-200"
65
+ },
66
+ violet: {
67
+ ring: "hover:ring-violet-400/70",
68
+ badge: "bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-200"
69
+ },
70
+ cyan: {
71
+ ring: "hover:ring-cyan-400/70",
72
+ badge: "bg-cyan-500/10 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-200"
73
+ },
74
+ teal: {
75
+ ring: "hover:ring-teal-400/70",
76
+ badge: "bg-teal-500/10 text-teal-600 dark:bg-teal-500/20 dark:text-teal-200"
77
+ },
78
+ pink: {
79
+ ring: "hover:ring-pink-400/70",
80
+ badge: "bg-pink-500/10 text-pink-600 dark:bg-pink-500/20 dark:text-pink-200"
81
+ },
82
+ orange: {
83
+ ring: "hover:ring-orange-400/70",
84
+ badge: "bg-orange-500/10 text-orange-600 dark:bg-orange-500/20 dark:text-orange-200"
85
+ },
86
+ lime: {
87
+ ring: "hover:ring-lime-400/70",
88
+ badge: "bg-lime-500/10 text-lime-700 dark:bg-lime-500/20 dark:text-lime-200"
89
+ }
90
+ };
91
+ function KpiCard({ label, value, delta, help, clickable, tone = "rose" }) {
92
+ var _a;
42
93
  const interactive = !!clickable;
94
+ const styles = (_a = toneStyles[tone]) != null ? _a : toneStyles.rose;
43
95
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
44
96
  import_framer_motion.motion.div,
45
97
  {
46
98
  whileHover: interactive ? { y: -2, scale: 1.01 } : void 0,
47
99
  whileTap: interactive ? { scale: 0.985, y: 0 } : void 0,
48
100
  transition: interactive ? { type: "tween", duration: 0.16, ease: "easeOut" } : void 0,
49
- className: `rounded-2xl border border-white/50 bg-white/75 p-4 text-slate-900/90 backdrop-blur-sm shadow-sm transition-shadow dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-white ${interactive ? "cursor-pointer hover:shadow-lg ring-1 ring-transparent hover:ring-blue-400/60" : ""}`,
101
+ className: `rounded-2xl border border-white/50 bg-white/75 p-4 text-slate-900/90 backdrop-blur-sm shadow-sm transition-shadow dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-white ${interactive ? `cursor-pointer hover:shadow-lg ring-1 ring-transparent ${styles.ring}` : ""}`,
50
102
  children: [
51
103
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between", children: [
52
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-slate-600 dark:text-white/80", children: label }),
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-slate-700 dark:text-slate-50", children: label }),
53
105
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
54
106
  import_framer_motion.motion.span,
55
107
  {
56
108
  initial: { opacity: 0, y: -4 },
57
109
  animate: { opacity: 1, y: 0 },
58
110
  transition: { duration: 0.2 },
59
- className: "rounded-full bg-blue-600/10 px-2 py-0.5 text-[12px] font-semibold text-blue-700 dark:bg-blue-500/15 dark:text-blue-200",
111
+ className: `rounded-full px-2 py-0.5 text-[12px] font-semibold ${styles.badge}`,
60
112
  children: delta
61
113
  }
62
114
  )
package/dist/KpiCard.mjs CHANGED
@@ -15,25 +15,77 @@ function MotionNumber({ value, format }) {
15
15
  }, [value]);
16
16
  return /* @__PURE__ */ jsx("span", { children: format ? format(display) : Math.round(display).toLocaleString() });
17
17
  }
18
- function KpiCard({ label, value, delta, help, clickable }) {
18
+ const toneStyles = {
19
+ emerald: {
20
+ ring: "hover:ring-emerald-400/70",
21
+ badge: "bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-200"
22
+ },
23
+ indigo: {
24
+ ring: "hover:ring-indigo-400/70",
25
+ badge: "bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-200"
26
+ },
27
+ amber: {
28
+ ring: "hover:ring-amber-400/70",
29
+ badge: "bg-amber-500/10 text-amber-700 dark:bg-amber-500/20 dark:text-amber-200"
30
+ },
31
+ slate: {
32
+ ring: "hover:ring-slate-400/60",
33
+ badge: "bg-slate-500/10 text-slate-700 dark:bg-slate-500/25 dark:text-slate-100"
34
+ },
35
+ rose: {
36
+ ring: "hover:ring-rose-400/70",
37
+ badge: "bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-200"
38
+ },
39
+ sky: {
40
+ ring: "hover:ring-sky-400/70",
41
+ badge: "bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-200"
42
+ },
43
+ violet: {
44
+ ring: "hover:ring-violet-400/70",
45
+ badge: "bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-200"
46
+ },
47
+ cyan: {
48
+ ring: "hover:ring-cyan-400/70",
49
+ badge: "bg-cyan-500/10 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-200"
50
+ },
51
+ teal: {
52
+ ring: "hover:ring-teal-400/70",
53
+ badge: "bg-teal-500/10 text-teal-600 dark:bg-teal-500/20 dark:text-teal-200"
54
+ },
55
+ pink: {
56
+ ring: "hover:ring-pink-400/70",
57
+ badge: "bg-pink-500/10 text-pink-600 dark:bg-pink-500/20 dark:text-pink-200"
58
+ },
59
+ orange: {
60
+ ring: "hover:ring-orange-400/70",
61
+ badge: "bg-orange-500/10 text-orange-600 dark:bg-orange-500/20 dark:text-orange-200"
62
+ },
63
+ lime: {
64
+ ring: "hover:ring-lime-400/70",
65
+ badge: "bg-lime-500/10 text-lime-700 dark:bg-lime-500/20 dark:text-lime-200"
66
+ }
67
+ };
68
+ function KpiCard({ label, value, delta, help, clickable, tone = "rose" }) {
69
+ var _a;
19
70
  const interactive = !!clickable;
71
+ const styles = (_a = toneStyles[tone]) != null ? _a : toneStyles.rose;
20
72
  return /* @__PURE__ */ jsxs(
21
73
  motion.div,
22
74
  {
23
75
  whileHover: interactive ? { y: -2, scale: 1.01 } : void 0,
24
76
  whileTap: interactive ? { scale: 0.985, y: 0 } : void 0,
25
77
  transition: interactive ? { type: "tween", duration: 0.16, ease: "easeOut" } : void 0,
26
- className: `rounded-2xl border border-white/50 bg-white/75 p-4 text-slate-900/90 backdrop-blur-sm shadow-sm transition-shadow dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-white ${interactive ? "cursor-pointer hover:shadow-lg ring-1 ring-transparent hover:ring-blue-400/60" : ""}`,
78
+ className: `rounded-2xl border border-white/50 bg-white/75 p-4 text-slate-900/90 backdrop-blur-sm shadow-sm transition-shadow dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-white ${interactive ? `cursor-pointer hover:shadow-lg ring-1 ring-transparent ${styles.ring}` : ""}`,
27
79
  children: [
28
80
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
29
- /* @__PURE__ */ jsx("span", { className: "text-slate-600 dark:text-white/80", children: label }),
81
+ /* @__PURE__ */ jsx("span", { className: "text-slate-700 dark:text-slate-50", children: label }),
30
82
  /* @__PURE__ */ jsx(
31
83
  motion.span,
32
84
  {
33
85
  initial: { opacity: 0, y: -4 },
34
86
  animate: { opacity: 1, y: 0 },
35
87
  transition: { duration: 0.2 },
36
- className: "rounded-full bg-blue-600/10 px-2 py-0.5 text-[12px] font-semibold text-blue-700 dark:bg-blue-500/15 dark:text-blue-200",
88
+ className: `rounded-full px-2 py-0.5 text-[12px] font-semibold ${styles.badge}`,
37
89
  children: delta
38
90
  }
39
91
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "framepexls-ui-lib",
3
- "version": "0.3.19",
3
+ "version": "0.3.20",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "Componentes UI de Framepexls para React/Next.",