framepexls-ui-lib 0.3.1 → 0.3.3

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.
Files changed (71) hide show
  1. package/dist/AvatarGroup.js +1 -1
  2. package/dist/AvatarGroup.mjs +1 -1
  3. package/dist/Badge.js +12 -12
  4. package/dist/Badge.mjs +12 -12
  5. package/dist/BadgeCluster.js +1 -1
  6. package/dist/BadgeCluster.mjs +1 -1
  7. package/dist/Button.js +1 -1
  8. package/dist/Button.mjs +1 -1
  9. package/dist/Card.js +1 -1
  10. package/dist/Card.mjs +1 -1
  11. package/dist/ChartCard.js +1 -1
  12. package/dist/ChartCard.mjs +1 -1
  13. package/dist/Checkbox.js +1 -1
  14. package/dist/Checkbox.mjs +1 -1
  15. package/dist/CheckboxPillsGroup.js +3 -3
  16. package/dist/CheckboxPillsGroup.mjs +3 -3
  17. package/dist/ComboSelect.js +2 -2
  18. package/dist/ComboSelect.mjs +2 -2
  19. package/dist/DateTimeField.js +7 -4
  20. package/dist/DateTimeField.mjs +7 -4
  21. package/dist/EmptyState.js +1 -1
  22. package/dist/EmptyState.mjs +1 -1
  23. package/dist/FiltersMultiSelect.js +3 -3
  24. package/dist/FiltersMultiSelect.mjs +3 -3
  25. package/dist/Input.js +4 -4
  26. package/dist/Input.mjs +4 -4
  27. package/dist/KpiCard.js +1 -1
  28. package/dist/KpiCard.mjs +1 -1
  29. package/dist/MediaCard.js +1 -1
  30. package/dist/MediaCard.mjs +1 -1
  31. package/dist/MediaSelector.js +235 -135
  32. package/dist/MediaSelector.mjs +235 -135
  33. package/dist/MediaTile.d.mts +18 -0
  34. package/dist/MediaTile.d.ts +18 -0
  35. package/dist/MediaTile.js +146 -0
  36. package/dist/MediaTile.mjs +116 -0
  37. package/dist/MultiComboSelect.js +2 -2
  38. package/dist/MultiComboSelect.mjs +2 -2
  39. package/dist/Pagination.js +8 -6
  40. package/dist/Pagination.mjs +8 -6
  41. package/dist/Sidebar.js +9 -9
  42. package/dist/Sidebar.mjs +9 -9
  43. package/dist/Skeleton.d.mts +34 -0
  44. package/dist/Skeleton.d.ts +34 -0
  45. package/dist/Skeleton.js +92 -0
  46. package/dist/Skeleton.mjs +64 -0
  47. package/dist/StatCard.js +1 -1
  48. package/dist/StatCard.mjs +1 -1
  49. package/dist/Steps.js +2 -2
  50. package/dist/Steps.mjs +2 -2
  51. package/dist/Table.js +5 -5
  52. package/dist/Table.mjs +5 -5
  53. package/dist/Textarea.js +1 -1
  54. package/dist/Textarea.mjs +1 -1
  55. package/dist/TimePanel.js +4 -4
  56. package/dist/TimePanel.mjs +4 -4
  57. package/dist/TimePopover.js +2 -2
  58. package/dist/TimePopover.mjs +2 -2
  59. package/dist/TimeRangeField.js +7 -4
  60. package/dist/TimeRangeField.mjs +7 -4
  61. package/dist/Tooltip.js +1 -1
  62. package/dist/Tooltip.mjs +1 -1
  63. package/dist/UploadCard.js +7 -7
  64. package/dist/UploadCard.mjs +7 -7
  65. package/dist/index.d.mts +2 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.js +6 -0
  68. package/dist/index.mjs +68 -64
  69. package/dist/theme/ThemeToggle.js +2 -1
  70. package/dist/theme/ThemeToggle.mjs +2 -1
  71. package/package.json +1 -1
package/dist/StatCard.mjs CHANGED
@@ -23,7 +23,7 @@ function StatCard({ title, value, hint, spark }) {
23
23
  const gid = useId();
24
24
  const color = (_a = spark == null ? void 0 : spark.color) != null ? _a : "#10b981";
25
25
  const isNumber = typeof value === "number";
26
- return /* @__PURE__ */ jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25 }, children: /* @__PURE__ */ jsxs("div", { className: "h-full group relative overflow-hidden rounded-2xl border border-slate-200 bg-white/80 p-4 shadow-sm ring-1 ring-black/5 backdrop-blur transition hover:shadow-md dark:border-white/10 dark:bg-white/5", children: [
26
+ return /* @__PURE__ */ jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25 }, children: /* @__PURE__ */ jsxs("div", { className: "h-full group relative overflow-hidden rounded-2xl border border-slate-200 bg-white/80 p-4 shadow-sm ring-1 ring-black/5 backdrop-blur transition hover:shadow-md dark:border-white/10 dark:bg-[var(--fx-surface)]", children: [
27
27
  /* @__PURE__ */ jsxs("div", { className: "relative z-10", children: [
28
28
  /* @__PURE__ */ jsx("div", { className: "text-xs font-medium text-slate-500 dark:text-slate-400", children: title }),
29
29
  /* @__PURE__ */ jsx("div", { className: "mt-1 text-2xl font-semibold tracking-tight", children: isNumber ? /* @__PURE__ */ jsx(MotionNumber, { value }) : value }),
package/dist/Steps.js CHANGED
@@ -70,7 +70,7 @@ function Steps({
70
70
  "group flex w-full items-center gap-3 rounded-xl border px-3 py-2 text-left transition",
71
71
  state === "current" && "border-blue-300/70 bg-blue-50/50 text-blue-900 dark:border-blue-300/20 dark:bg-blue-300/5 dark:text-blue-100",
72
72
  state === "done" && "border-emerald-300/50 bg-emerald-50/40 text-emerald-900 hover:bg-emerald-50 dark:border-emerald-300/20 dark:bg-emerald-300/5 dark:text-emerald-100",
73
- state === "upcoming" && "border-slate-200/80 bg-white hover:bg-slate-50 dark:border-white/10 dark:bg-white/5"
73
+ state === "upcoming" && "border-slate-200/80 bg-white hover:bg-slate-50 dark:border-white/10 dark:bg-[var(--fx-surface)]"
74
74
  ),
75
75
  "aria-current": state === "current" ? "step" : void 0,
76
76
  children: [
@@ -81,7 +81,7 @@ function Steps({
81
81
  "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[13px] font-semibold ring-1",
82
82
  state === "current" && "bg-blue-600 text-white ring-black/0",
83
83
  state === "done" && "bg-emerald-600 text-white ring-black/0",
84
- state === "upcoming" && "bg-slate-100 text-slate-700 ring-black/5 dark:bg-white/10 dark:text-slate-200"
84
+ state === "upcoming" && "bg-slate-100 text-slate-700 ring-black/5 dark:bg-[var(--fx-surface)] dark:text-slate-200"
85
85
  ),
86
86
  children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: "h-4 w-4", fill: "none", stroke: "currentColor", strokeWidth: 3, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m5 12 4 4L19 6" }) }) : i + 1
87
87
  }
package/dist/Steps.mjs CHANGED
@@ -36,7 +36,7 @@ function Steps({
36
36
  "group flex w-full items-center gap-3 rounded-xl border px-3 py-2 text-left transition",
37
37
  state === "current" && "border-blue-300/70 bg-blue-50/50 text-blue-900 dark:border-blue-300/20 dark:bg-blue-300/5 dark:text-blue-100",
38
38
  state === "done" && "border-emerald-300/50 bg-emerald-50/40 text-emerald-900 hover:bg-emerald-50 dark:border-emerald-300/20 dark:bg-emerald-300/5 dark:text-emerald-100",
39
- state === "upcoming" && "border-slate-200/80 bg-white hover:bg-slate-50 dark:border-white/10 dark:bg-white/5"
39
+ state === "upcoming" && "border-slate-200/80 bg-white hover:bg-slate-50 dark:border-white/10 dark:bg-[var(--fx-surface)]"
40
40
  ),
41
41
  "aria-current": state === "current" ? "step" : void 0,
42
42
  children: [
@@ -47,7 +47,7 @@ function Steps({
47
47
  "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[13px] font-semibold ring-1",
48
48
  state === "current" && "bg-blue-600 text-white ring-black/0",
49
49
  state === "done" && "bg-emerald-600 text-white ring-black/0",
50
- state === "upcoming" && "bg-slate-100 text-slate-700 ring-black/5 dark:bg-white/10 dark:text-slate-200"
50
+ state === "upcoming" && "bg-slate-100 text-slate-700 ring-black/5 dark:bg-[var(--fx-surface)] dark:text-slate-200"
51
51
  ),
52
52
  children: state === "done" ? /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", className: "h-4 w-4", fill: "none", stroke: "currentColor", strokeWidth: 3, children: /* @__PURE__ */ jsx("path", { d: "m5 12 4 4L19 6" }) }) : i + 1
53
53
  }
package/dist/Table.js CHANGED
@@ -57,7 +57,7 @@ function Th({
57
57
  "th",
58
58
  {
59
59
  suppressHydrationWarning: true,
60
- className: `px-4 py-3 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400 ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} ${className != null ? className : ""}`,
60
+ className: `px-4 py-3 text-[11px] font-semibold uppercase tracking-wide text-slate-600 dark:text-slate-300 ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} ${className != null ? className : ""}`,
61
61
  style: mounted ? { width: widthStyle } : void 0,
62
62
  children
63
63
  }
@@ -85,7 +85,7 @@ function SortTh({
85
85
  style: mounted ? { width: widthStyle, minWidth: `${minW}px` } : void 0,
86
86
  "aria-sort": active ? asc ? "ascending" : "descending" : "none",
87
87
  className: [
88
- "relative px-2 py-2.5 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400 select-none",
88
+ "relative px-2 py-2.5 text-[11px] font-semibold uppercase tracking-wide text-slate-600 dark:text-slate-300 select-none",
89
89
  align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left",
90
90
  className != null ? className : ""
91
91
  ].join(" "),
@@ -100,7 +100,7 @@ function SortTh({
100
100
  unstyled: true,
101
101
  type: "button",
102
102
  onClick,
103
- className: "group relative inline-flex items-center gap-1.5 rounded-lg px-2 py-1 transition hover:bg-slate-100/60 focus:outline-none focus:ring-2 focus:ring-blue-200 dark:hover:bg-white/10",
103
+ className: "group relative inline-flex items-center gap-1.5 rounded-lg px-2 py-1 transition hover:bg-slate-100/60 focus:outline-none focus:ring-2 focus:ring-blue-200 dark:hover:bg-white/10 dark:focus:ring-white/10",
104
104
  children: [
105
105
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "relative", children: [
106
106
  children,
@@ -137,7 +137,7 @@ function SortTh({
137
137
  "span",
138
138
  {
139
139
  onMouseDown: (e) => onGripDown == null ? void 0 : onGripDown(colKey, e),
140
- className: "\n absolute right-0 top-0 h-full w-2 cursor-col-resize\n bg-transparent hover:bg-slate-300/40 dark:hover:bg-white/10\n after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-slate-300 dark:after:bg-white/30\n ",
140
+ className: "\n absolute right-0 top-0 h-full w-2 cursor-col-resize\n bg-transparent hover:bg-slate-300/40 dark:hover:bg-white/10\n after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-slate-300/80 dark:after:bg-white/20\n ",
141
141
  style: { transform: "translateX(50%)" },
142
142
  title: "Arrastra para ajustar el ancho",
143
143
  "aria-label": "Redimensionar columna",
@@ -158,7 +158,7 @@ function Td({
158
158
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
159
159
  "td",
160
160
  {
161
- className: `px-4 ${className != null ? className : ""} ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} py-2`,
161
+ className: `px-4 ${className != null ? className : ""} ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} py-2 text-slate-700 dark:text-slate-200`,
162
162
  colSpan,
163
163
  children
164
164
  }
package/dist/Table.mjs CHANGED
@@ -21,7 +21,7 @@ function Th({
21
21
  "th",
22
22
  {
23
23
  suppressHydrationWarning: true,
24
- className: `px-4 py-3 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400 ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} ${className != null ? className : ""}`,
24
+ className: `px-4 py-3 text-[11px] font-semibold uppercase tracking-wide text-slate-600 dark:text-slate-300 ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} ${className != null ? className : ""}`,
25
25
  style: mounted ? { width: widthStyle } : void 0,
26
26
  children
27
27
  }
@@ -49,7 +49,7 @@ function SortTh({
49
49
  style: mounted ? { width: widthStyle, minWidth: `${minW}px` } : void 0,
50
50
  "aria-sort": active ? asc ? "ascending" : "descending" : "none",
51
51
  className: [
52
- "relative px-2 py-2.5 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400 select-none",
52
+ "relative px-2 py-2.5 text-[11px] font-semibold uppercase tracking-wide text-slate-600 dark:text-slate-300 select-none",
53
53
  align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left",
54
54
  className != null ? className : ""
55
55
  ].join(" "),
@@ -64,7 +64,7 @@ function SortTh({
64
64
  unstyled: true,
65
65
  type: "button",
66
66
  onClick,
67
- className: "group relative inline-flex items-center gap-1.5 rounded-lg px-2 py-1 transition hover:bg-slate-100/60 focus:outline-none focus:ring-2 focus:ring-blue-200 dark:hover:bg-white/10",
67
+ className: "group relative inline-flex items-center gap-1.5 rounded-lg px-2 py-1 transition hover:bg-slate-100/60 focus:outline-none focus:ring-2 focus:ring-blue-200 dark:hover:bg-white/10 dark:focus:ring-white/10",
68
68
  children: [
69
69
  /* @__PURE__ */ jsxs("span", { className: "relative", children: [
70
70
  children,
@@ -101,7 +101,7 @@ function SortTh({
101
101
  "span",
102
102
  {
103
103
  onMouseDown: (e) => onGripDown == null ? void 0 : onGripDown(colKey, e),
104
- className: "\n absolute right-0 top-0 h-full w-2 cursor-col-resize\n bg-transparent hover:bg-slate-300/40 dark:hover:bg-white/10\n after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-slate-300 dark:after:bg-white/30\n ",
104
+ className: "\n absolute right-0 top-0 h-full w-2 cursor-col-resize\n bg-transparent hover:bg-slate-300/40 dark:hover:bg-white/10\n after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-slate-300/80 dark:after:bg-white/20\n ",
105
105
  style: { transform: "translateX(50%)" },
106
106
  title: "Arrastra para ajustar el ancho",
107
107
  "aria-label": "Redimensionar columna",
@@ -122,7 +122,7 @@ function Td({
122
122
  return /* @__PURE__ */ jsx(
123
123
  "td",
124
124
  {
125
- className: `px-4 ${className != null ? className : ""} ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} py-2`,
125
+ className: `px-4 ${className != null ? className : ""} ${align === "right" ? "text-right" : align === "center" ? "text-center" : "text-left"} py-2 text-slate-700 dark:text-slate-200`,
126
126
  colSpan,
127
127
  children
128
128
  }
package/dist/Textarea.js CHANGED
@@ -39,7 +39,7 @@ var import_animations = require("./animations");
39
39
  function cx(...a) {
40
40
  return a.filter(Boolean).join(" ");
41
41
  }
42
- const baseControl = "w-full rounded-2xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus:ring-white/10";
42
+ const baseControl = "w-full rounded-2xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus:ring-white/10";
43
43
  const errorControl = "border-blue-300 focus:border-blue-300 focus:ring-blue-500/15";
44
44
  const Textarea = import_react.default.forwardRef(
45
45
  ({ className, error, tone = "default", value, onChange, unstyled, rows = 3, ...props }, ref) => {
package/dist/Textarea.mjs CHANGED
@@ -6,7 +6,7 @@ import { microTransition } from "./animations";
6
6
  function cx(...a) {
7
7
  return a.filter(Boolean).join(" ");
8
8
  }
9
- const baseControl = "w-full rounded-2xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus:ring-white/10";
9
+ const baseControl = "w-full rounded-2xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-[var(--fx-surface)] dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus:ring-white/10";
10
10
  const errorControl = "border-blue-300 focus:border-blue-300 focus:ring-blue-500/15";
11
11
  const Textarea = React.forwardRef(
12
12
  ({ className, error, tone = "default", value, onChange, unstyled, rows = 3, ...props }, ref) => {
package/dist/TimePanel.js CHANGED
@@ -85,8 +85,8 @@ function TimePopover({
85
85
  incM();
86
86
  }
87
87
  };
88
- const btn = "inline-flex h-7 w-7 items-center justify-center rounded-lg ring-1 ring-slate-200 bg-white hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5";
89
- const chip = "min-w-[56px] rounded-xl ring-1 ring-slate-200 px-2 py-1 text-center font-medium dark:ring-white/10 dark:bg-white/5";
88
+ const btn = "inline-flex h-7 w-7 items-center justify-center rounded-lg ring-1 ring-slate-200 bg-white hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]";
89
+ const chip = "min-w-[56px] rounded-xl ring-1 ring-slate-200 px-2 py-1 text-center font-medium dark:ring-white/10 dark:bg-[var(--fx-surface)]";
90
90
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
91
91
  "div",
92
92
  {
@@ -116,7 +116,7 @@ function TimePopover({
116
116
  import_Button.default,
117
117
  {
118
118
  unstyled: true,
119
- className: "rounded-xl px-2 py-1 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5",
119
+ className: "rounded-xl px-2 py-1 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]",
120
120
  onPointerDown: (e) => e.preventDefault(),
121
121
  onClick: () => onChange(hh, v),
122
122
  children: [
@@ -133,7 +133,7 @@ function TimePopover({
133
133
  import_Button.default,
134
134
  {
135
135
  unstyled: true,
136
- className: "rounded-xl px-2.5 py-1.5 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5",
136
+ className: "rounded-xl px-2.5 py-1.5 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]",
137
137
  onPointerDown: (e) => e.preventDefault(),
138
138
  onClick: () => {
139
139
  const t = /* @__PURE__ */ new Date();
@@ -52,8 +52,8 @@ function TimePopover({
52
52
  incM();
53
53
  }
54
54
  };
55
- const btn = "inline-flex h-7 w-7 items-center justify-center rounded-lg ring-1 ring-slate-200 bg-white hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5";
56
- const chip = "min-w-[56px] rounded-xl ring-1 ring-slate-200 px-2 py-1 text-center font-medium dark:ring-white/10 dark:bg-white/5";
55
+ const btn = "inline-flex h-7 w-7 items-center justify-center rounded-lg ring-1 ring-slate-200 bg-white hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]";
56
+ const chip = "min-w-[56px] rounded-xl ring-1 ring-slate-200 px-2 py-1 text-center font-medium dark:ring-white/10 dark:bg-[var(--fx-surface)]";
57
57
  return /* @__PURE__ */ jsxs(
58
58
  "div",
59
59
  {
@@ -83,7 +83,7 @@ function TimePopover({
83
83
  Button,
84
84
  {
85
85
  unstyled: true,
86
- className: "rounded-xl px-2 py-1 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5",
86
+ className: "rounded-xl px-2 py-1 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]",
87
87
  onPointerDown: (e) => e.preventDefault(),
88
88
  onClick: () => onChange(hh, v),
89
89
  children: [
@@ -100,7 +100,7 @@ function TimePopover({
100
100
  Button,
101
101
  {
102
102
  unstyled: true,
103
- className: "rounded-xl px-2.5 py-1.5 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-white/5",
103
+ className: "rounded-xl px-2.5 py-1.5 text-sm ring-1 ring-slate-200 hover:bg-slate-50 active:scale-95 dark:ring-white/10 dark:bg-[var(--fx-surface)]",
104
104
  onPointerDown: (e) => e.preventDefault(),
105
105
  onClick: () => {
106
106
  const t = /* @__PURE__ */ new Date();
@@ -191,7 +191,7 @@ function TimePopover({
191
191
  commit(n, M);
192
192
  }
193
193
  },
194
- className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-white/5"
194
+ className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-[var(--fx-surface)]"
195
195
  }
196
196
  ),
197
197
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -233,7 +233,7 @@ function TimePopover({
233
233
  if (n > 59) n = 59;
234
234
  commit(H, n);
235
235
  },
236
- className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-white/5"
236
+ className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-[var(--fx-surface)]"
237
237
  }
238
238
  ),
239
239
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -156,7 +156,7 @@ function TimePopover({
156
156
  commit(n, M);
157
157
  }
158
158
  },
159
- className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-white/5"
159
+ className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-[var(--fx-surface)]"
160
160
  }
161
161
  ),
162
162
  /* @__PURE__ */ jsx(
@@ -198,7 +198,7 @@ function TimePopover({
198
198
  if (n > 59) n = 59;
199
199
  commit(H, n);
200
200
  },
201
- className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-white/5"
201
+ className: "h-10 rounded-lg text-center text-lg ring-1 ring-slate-200 outline-none focus:ring-2 focus:ring-slate-300 dark:ring-white/10 dark:bg-[var(--fx-surface)]"
202
202
  }
203
203
  ),
204
204
  /* @__PURE__ */ jsx(
@@ -128,12 +128,15 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
128
128
  }, [open]);
129
129
  const stylePop = (() => {
130
130
  if (!anchorRect) return { visibility: "hidden" };
131
- const W = 360, GAP = 8, MARGIN = 8, H = 180;
131
+ const GAP = 8, MARGIN = 8;
132
+ const W = Math.min(420, Math.max(300, window.innerWidth - MARGIN * 2));
133
+ const H = Math.min(360, Math.max(200, Math.floor(window.innerHeight * 0.6)));
132
134
  let left = anchorRect.right - W;
133
135
  left = Math.max(MARGIN, Math.min(left, window.innerWidth - (W + MARGIN)));
134
136
  let top = anchorRect.bottom + GAP;
135
137
  if (top + H > window.innerHeight) top = Math.max(MARGIN, anchorRect.top - GAP - H);
136
- return { position: "fixed", top, left, zIndex: 1e5 };
138
+ const maxHeight = Math.min(H, window.innerHeight - top - MARGIN);
139
+ return { position: "fixed", top, left, zIndex: 1e5, width: W, maxHeight, overflowY: "auto" };
137
140
  })();
138
141
  const commit = (f, t) => {
139
142
  let f2 = f, t2 = t;
@@ -146,7 +149,7 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
146
149
  setTo(t2);
147
150
  onValueChange == null ? void 0 : onValueChange({ from: f2 ? fmtHHmm(f2.hh, f2.mm) : null, to: t2 ? fmtHHmm(t2.hh, t2.mm) : null });
148
151
  };
149
- const popover = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { "data-trf-pop": true, style: stylePop, className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[var(--fx-surface)]", children: [
152
+ const popover = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { "data-trf-pop": true, style: stylePop, className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[var(--fx-surface)]", children: [
150
153
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 px-3 py-2 text-sm", children: [
151
154
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "font-medium", children: "Selecciona horario" }),
152
155
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -239,7 +242,7 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
239
242
  {
240
243
  unstyled: true,
241
244
  type: "button",
242
- className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
245
+ className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-[var(--fx-surface)]",
243
246
  onClick: (e) => {
244
247
  e.preventDefault();
245
248
  openPopover();
@@ -95,12 +95,15 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
95
95
  }, [open]);
96
96
  const stylePop = (() => {
97
97
  if (!anchorRect) return { visibility: "hidden" };
98
- const W = 360, GAP = 8, MARGIN = 8, H = 180;
98
+ const GAP = 8, MARGIN = 8;
99
+ const W = Math.min(420, Math.max(300, window.innerWidth - MARGIN * 2));
100
+ const H = Math.min(360, Math.max(200, Math.floor(window.innerHeight * 0.6)));
99
101
  let left = anchorRect.right - W;
100
102
  left = Math.max(MARGIN, Math.min(left, window.innerWidth - (W + MARGIN)));
101
103
  let top = anchorRect.bottom + GAP;
102
104
  if (top + H > window.innerHeight) top = Math.max(MARGIN, anchorRect.top - GAP - H);
103
- return { position: "fixed", top, left, zIndex: 1e5 };
105
+ const maxHeight = Math.min(H, window.innerHeight - top - MARGIN);
106
+ return { position: "fixed", top, left, zIndex: 1e5, width: W, maxHeight, overflowY: "auto" };
104
107
  })();
105
108
  const commit = (f, t) => {
106
109
  let f2 = f, t2 = t;
@@ -113,7 +116,7 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
113
116
  setTo(t2);
114
117
  onValueChange == null ? void 0 : onValueChange({ from: f2 ? fmtHHmm(f2.hh, f2.mm) : null, to: t2 ? fmtHHmm(t2.hh, t2.mm) : null });
115
118
  };
116
- const popover = /* @__PURE__ */ jsxs("div", { "data-trf-pop": true, style: stylePop, className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[var(--fx-surface)]", children: [
119
+ const popover = /* @__PURE__ */ jsxs("div", { "data-trf-pop": true, style: stylePop, className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[var(--fx-surface)]", children: [
117
120
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 px-3 py-2 text-sm", children: [
118
121
  /* @__PURE__ */ jsx("div", { className: "font-medium", children: "Selecciona horario" }),
119
122
  /* @__PURE__ */ jsx(
@@ -206,7 +209,7 @@ function TimeRangeField({ value, onValueChange, portal = true, portalId, clearab
206
209
  {
207
210
  unstyled: true,
208
211
  type: "button",
209
- className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
212
+ className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-[var(--fx-surface)]",
210
213
  onClick: (e) => {
211
214
  e.preventDefault();
212
215
  openPopover();
package/dist/Tooltip.js CHANGED
@@ -127,7 +127,7 @@ function Tooltip({ content, placement = "top", delay = 80, offset = 8, className
127
127
  transition: import_animations.menuTransition,
128
128
  className: [
129
129
  "pointer-events-none fixed z-[2000] max-w-xs rounded-xl border border-slate-200/80 bg-slate-900/95 px-2.5 py-1.5 text-[12px] text-white shadow-xl backdrop-blur",
130
- "dark:border-white/10 dark:bg-white/10",
130
+ "dark:border-white/10 dark:bg-[var(--fx-surface)]",
131
131
  className != null ? className : ""
132
132
  ].join(" "),
133
133
  style: {
package/dist/Tooltip.mjs CHANGED
@@ -94,7 +94,7 @@ function Tooltip({ content, placement = "top", delay = 80, offset = 8, className
94
94
  transition: menuTransition,
95
95
  className: [
96
96
  "pointer-events-none fixed z-[2000] max-w-xs rounded-xl border border-slate-200/80 bg-slate-900/95 px-2.5 py-1.5 text-[12px] text-white shadow-xl backdrop-blur",
97
- "dark:border-white/10 dark:bg-white/10",
97
+ "dark:border-white/10 dark:bg-[var(--fx-surface)]",
98
98
  className != null ? className : ""
99
99
  ].join(" "),
100
100
  style: {
@@ -46,7 +46,7 @@ function UploadCard({
46
46
  multiple = true,
47
47
  disabled,
48
48
  buttonLabel = "Seleccionar",
49
- dropLabel = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-medium", children: "Arrastra y suelta archivos aqu\xED o haz clic" }),
49
+ dropLabel = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-medium text-slate-700 dark:text-slate-200", children: "Arrastra y suelta archivos aqu\xED o haz clic" }),
50
50
  note = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: "M\xE1ximo recomendado 16MB por archivo" }),
51
51
  uploads,
52
52
  className,
@@ -94,13 +94,13 @@ function UploadCard({
94
94
  var _a;
95
95
  return (_a = inputRef.current) == null ? void 0 : _a.click();
96
96
  },
97
- className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-slate-300 bg-gradient-to-b from-white/90 to-white/60 p-8 text-center transition hover:border-slate-400 hover:bg-white/80 dark:border-white/10 dark:from-white/10 dark:to-white/5",
97
+ className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-slate-300 bg-gradient-to-b from-white/90 to-white/60 p-8 text-center transition hover:border-slate-400 hover:bg-white/80 ring-1 ring-black/5 dark:border-white/10 dark:bg-[var(--fx-surface)] dark:from-white/10 dark:to-white/5 dark:hover:bg-white/10",
98
98
  children: [
99
99
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
100
100
  "svg",
101
101
  {
102
102
  viewBox: "0 0 24 24",
103
- className: "h-8 w-8 text-slate-400",
103
+ className: "h-8 w-8 text-slate-400 dark:text-slate-400",
104
104
  fill: "none",
105
105
  stroke: "currentColor",
106
106
  strokeWidth: "1.6",
@@ -123,11 +123,11 @@ function UploadCard({
123
123
  animate: { opacity: 1, y: 0 },
124
124
  exit: { opacity: 0, y: -6 },
125
125
  transition: import_animations.springSm,
126
- className: "flex items-center gap-3 rounded-xl border border-slate-200 bg-white/70 p-2 dark:border-white/10 dark:bg-white/5",
126
+ className: "flex items-center gap-3 rounded-xl border border-slate-200 bg-white/70 p-2 dark:border-white/10 dark:bg-[var(--fx-surface)]",
127
127
  children: [
128
128
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
129
129
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
130
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-sm font-medium", children: u.name }),
130
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-sm font-medium text-slate-700 dark:text-slate-100", children: u.name }),
131
131
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: [
132
132
  pct,
133
133
  "%"
@@ -142,9 +142,9 @@ function UploadCard({
142
142
  transition: import_animations.springSm
143
143
  }
144
144
  ) }),
145
- u.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-1 text-xs text-blue-600", children: u.error })
145
+ u.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-1 text-xs text-blue-600 dark:text-blue-400", children: u.error })
146
146
  ] }),
147
- u.status === "done" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5 text-emerald-600", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M5 13l4 4L19 7" }) })
147
+ u.status === "done" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5 text-emerald-600 dark:text-emerald-400", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M5 13l4 4L19 7" }) })
148
148
  ]
149
149
  },
150
150
  u.id
@@ -13,7 +13,7 @@ function UploadCard({
13
13
  multiple = true,
14
14
  disabled,
15
15
  buttonLabel = "Seleccionar",
16
- dropLabel = /* @__PURE__ */ jsx("div", { className: "text-sm font-medium", children: "Arrastra y suelta archivos aqu\xED o haz clic" }),
16
+ dropLabel = /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-slate-700 dark:text-slate-200", children: "Arrastra y suelta archivos aqu\xED o haz clic" }),
17
17
  note = /* @__PURE__ */ jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: "M\xE1ximo recomendado 16MB por archivo" }),
18
18
  uploads,
19
19
  className,
@@ -61,13 +61,13 @@ function UploadCard({
61
61
  var _a;
62
62
  return (_a = inputRef.current) == null ? void 0 : _a.click();
63
63
  },
64
- className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-slate-300 bg-gradient-to-b from-white/90 to-white/60 p-8 text-center transition hover:border-slate-400 hover:bg-white/80 dark:border-white/10 dark:from-white/10 dark:to-white/5",
64
+ className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-slate-300 bg-gradient-to-b from-white/90 to-white/60 p-8 text-center transition hover:border-slate-400 hover:bg-white/80 ring-1 ring-black/5 dark:border-white/10 dark:bg-[var(--fx-surface)] dark:from-white/10 dark:to-white/5 dark:hover:bg-white/10",
65
65
  children: [
66
66
  /* @__PURE__ */ jsx(
67
67
  "svg",
68
68
  {
69
69
  viewBox: "0 0 24 24",
70
- className: "h-8 w-8 text-slate-400",
70
+ className: "h-8 w-8 text-slate-400 dark:text-slate-400",
71
71
  fill: "none",
72
72
  stroke: "currentColor",
73
73
  strokeWidth: "1.6",
@@ -90,11 +90,11 @@ function UploadCard({
90
90
  animate: { opacity: 1, y: 0 },
91
91
  exit: { opacity: 0, y: -6 },
92
92
  transition: springSm,
93
- className: "flex items-center gap-3 rounded-xl border border-slate-200 bg-white/70 p-2 dark:border-white/10 dark:bg-white/5",
93
+ className: "flex items-center gap-3 rounded-xl border border-slate-200 bg-white/70 p-2 dark:border-white/10 dark:bg-[var(--fx-surface)]",
94
94
  children: [
95
95
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
96
96
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
97
- /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-medium", children: u.name }),
97
+ /* @__PURE__ */ jsx("div", { className: "truncate text-sm font-medium text-slate-700 dark:text-slate-100", children: u.name }),
98
98
  /* @__PURE__ */ jsxs("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: [
99
99
  pct,
100
100
  "%"
@@ -109,9 +109,9 @@ function UploadCard({
109
109
  transition: springSm
110
110
  }
111
111
  ) }),
112
- u.status === "error" && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs text-blue-600", children: u.error })
112
+ u.status === "error" && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs text-blue-600 dark:text-blue-400", children: u.error })
113
113
  ] }),
114
- u.status === "done" && /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5 text-emerald-600", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" }) })
114
+ u.status === "done" && /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5 text-emerald-600 dark:text-emerald-400", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" }) })
115
115
  ]
116
116
  },
117
117
  u.id
package/dist/index.d.mts CHANGED
@@ -18,6 +18,8 @@ export { default as ChartCard } from './ChartCard.mjs';
18
18
  export { CtrHorizontalBar, DestinoDonut, TopImpresionesBar } from './AnalyticsCharts.mjs';
19
19
  export { default as UploadCard, UploadCardProps, UploadItem } from './UploadCard.mjs';
20
20
  export { default as MediaCard, MediaCardProps } from './MediaCard.mjs';
21
+ export { default as MediaTile, MediaTileProps } from './MediaTile.mjs';
22
+ export { default as Skeleton, SkeletonBaseProps } from './Skeleton.mjs';
21
23
  export { default as MediaSelector, MediaSelectorItem, MediosAdapter } from './MediaSelector.mjs';
22
24
  export { default as StatCard } from './StatCard.mjs';
23
25
  export { default as KpiCard, KpiCardProps } from './KpiCard.mjs';
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { default as ChartCard } from './ChartCard.js';
18
18
  export { CtrHorizontalBar, DestinoDonut, TopImpresionesBar } from './AnalyticsCharts.js';
19
19
  export { default as UploadCard, UploadCardProps, UploadItem } from './UploadCard.js';
20
20
  export { default as MediaCard, MediaCardProps } from './MediaCard.js';
21
+ export { default as MediaTile, MediaTileProps } from './MediaTile.js';
22
+ export { default as Skeleton, SkeletonBaseProps } from './Skeleton.js';
21
23
  export { default as MediaSelector, MediaSelectorItem, MediosAdapter } from './MediaSelector.js';
22
24
  export { default as StatCard } from './StatCard.js';
23
25
  export { default as KpiCard, KpiCardProps } from './KpiCard.js';
package/dist/index.js CHANGED
@@ -61,6 +61,7 @@ __export(index_exports, {
61
61
  Link: () => import_Link.default,
62
62
  MediaCard: () => import_MediaCard.default,
63
63
  MediaSelector: () => import_MediaSelector.default,
64
+ MediaTile: () => import_MediaTile.default,
64
65
  Money: () => import_Money.default,
65
66
  MonthPopover: () => import_TimePopover2.MonthPopover,
66
67
  MotionProvider: () => import_MotionProvider.default,
@@ -72,6 +73,7 @@ __export(index_exports, {
72
73
  SearchInput: () => import_SearchInput.default,
73
74
  Select: () => import_Select.default,
74
75
  Sidebar: () => import_Sidebar.default,
76
+ Skeleton: () => import_Skeleton.default,
75
77
  SortTh: () => import_Table.SortTh,
76
78
  StatCard: () => import_StatCard.default,
77
79
  Steps: () => import_Steps.default,
@@ -118,6 +120,8 @@ var import_ChartCard = __toESM(require("./ChartCard"));
118
120
  var import_AnalyticsCharts = require("./AnalyticsCharts");
119
121
  var import_UploadCard = __toESM(require("./UploadCard"));
120
122
  var import_MediaCard = __toESM(require("./MediaCard"));
123
+ var import_MediaTile = __toESM(require("./MediaTile"));
124
+ var import_Skeleton = __toESM(require("./Skeleton"));
121
125
  var import_MediaSelector = __toESM(require("./MediaSelector"));
122
126
  var import_StatCard = __toESM(require("./StatCard"));
123
127
  var import_KpiCard = __toESM(require("./KpiCard"));
@@ -190,6 +194,7 @@ var import_ThemeToggle = __toESM(require("./theme/ThemeToggle"));
190
194
  Link,
191
195
  MediaCard,
192
196
  MediaSelector,
197
+ MediaTile,
193
198
  Money,
194
199
  MonthPopover,
195
200
  MotionProvider,
@@ -201,6 +206,7 @@ var import_ThemeToggle = __toESM(require("./theme/ThemeToggle"));
201
206
  SearchInput,
202
207
  Select,
203
208
  Sidebar,
209
+ Skeleton,
204
210
  SortTh,
205
211
  StatCard,
206
212
  Steps,