framepexls-ui-lib 0.1.23 → 0.1.25

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 (69) hide show
  1. package/dist/AnalyticsCharts.d.mts +24 -0
  2. package/dist/AnalyticsCharts.d.ts +24 -0
  3. package/dist/AnalyticsCharts.js +307 -0
  4. package/dist/AnalyticsCharts.mjs +295 -0
  5. package/dist/AppTopbar.d.mts +5 -1
  6. package/dist/AppTopbar.d.ts +5 -1
  7. package/dist/AppTopbar.js +8 -5
  8. package/dist/AppTopbar.mjs +8 -5
  9. package/dist/BadgeCluster.js +1 -1
  10. package/dist/BadgeCluster.mjs +1 -1
  11. package/dist/Breadcrumb.js +1 -1
  12. package/dist/Breadcrumb.mjs +1 -1
  13. package/dist/Button.d.mts +1 -1
  14. package/dist/Button.d.ts +1 -1
  15. package/dist/Button.js +1 -1
  16. package/dist/Button.mjs +1 -1
  17. package/dist/CalendarPanel.js +1 -1
  18. package/dist/CalendarPanel.mjs +1 -1
  19. package/dist/Card.js +1 -1
  20. package/dist/Card.mjs +1 -1
  21. package/dist/ChartCard.js +2 -2
  22. package/dist/ChartCard.mjs +2 -2
  23. package/dist/Checkbox.d.mts +26 -0
  24. package/dist/Checkbox.d.ts +26 -0
  25. package/dist/Checkbox.js +100 -0
  26. package/dist/Checkbox.mjs +70 -0
  27. package/dist/ColumnSelector.js +1 -1
  28. package/dist/ColumnSelector.mjs +1 -1
  29. package/dist/ComboSelect.js +3 -3
  30. package/dist/ComboSelect.mjs +3 -3
  31. package/dist/DateTimeField.js +1 -1
  32. package/dist/DateTimeField.mjs +1 -1
  33. package/dist/Dialog.js +2 -2
  34. package/dist/Dialog.mjs +2 -2
  35. package/dist/Dropdown.js +1 -1
  36. package/dist/Dropdown.mjs +1 -1
  37. package/dist/EmptyState.js +1 -1
  38. package/dist/EmptyState.mjs +1 -1
  39. package/dist/FiltersMultiSelect.js +1 -1
  40. package/dist/FiltersMultiSelect.mjs +1 -1
  41. package/dist/MediaCard.js +1 -1
  42. package/dist/MediaCard.mjs +1 -1
  43. package/dist/MediaSelector.js +1 -1
  44. package/dist/MediaSelector.mjs +1 -1
  45. package/dist/Pagination.js +1 -1
  46. package/dist/Pagination.mjs +1 -1
  47. package/dist/Select.js +3 -3
  48. package/dist/Select.mjs +3 -3
  49. package/dist/Sidebar.js +7 -7
  50. package/dist/Sidebar.mjs +7 -7
  51. package/dist/StatCard.js +1 -1
  52. package/dist/StatCard.mjs +1 -1
  53. package/dist/Table.js +2 -2
  54. package/dist/Table.mjs +2 -2
  55. package/dist/TimePanel.js +1 -1
  56. package/dist/TimePanel.mjs +1 -1
  57. package/dist/TimePopover.js +3 -3
  58. package/dist/TimePopover.mjs +3 -3
  59. package/dist/TimeRangeField.js +1 -1
  60. package/dist/TimeRangeField.mjs +1 -1
  61. package/dist/Toast.js +1 -1
  62. package/dist/Toast.mjs +1 -1
  63. package/dist/UploadCard.js +2 -2
  64. package/dist/UploadCard.mjs +2 -2
  65. package/dist/index.d.mts +2 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.js +10 -0
  68. package/dist/index.mjs +86 -80
  69. package/package.json +1 -1
@@ -1,16 +1,20 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import Button from './Button.js';
3
+ import React__default from 'react';
2
4
 
3
5
  type TopbarAction = {
4
6
  label: string;
5
7
  onClick?: () => void;
6
8
  };
9
+ type ButtonColor = NonNullable<React__default.ComponentProps<typeof Button>["color"]>;
7
10
  type Props = {
8
11
  title: string;
9
12
  subtitle?: string;
10
13
  primary?: TopbarAction;
11
14
  secondary?: TopbarAction;
12
15
  actions?: TopbarAction[];
16
+ color?: ButtonColor;
13
17
  };
14
- declare function AppTopbar({ title, subtitle, secondary, primary, actions }: Props): react_jsx_runtime.JSX.Element;
18
+ declare function AppTopbar({ title, subtitle, secondary, primary, actions, color }: Props): react_jsx_runtime.JSX.Element;
15
19
 
16
20
  export { AppTopbar as default };
package/dist/AppTopbar.js CHANGED
@@ -34,18 +34,19 @@ __export(AppTopbar_exports, {
34
34
  module.exports = __toCommonJS(AppTopbar_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_Button = __toESM(require("./Button"));
37
- function AppTopbar({ title, subtitle, secondary, primary, actions }) {
37
+ function AppTopbar({ title, subtitle, secondary, primary, actions, color }) {
38
38
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "sticky top-0 z-30 border-b border-black/5 bg-white backdrop-blur-xl dark:bg-[#0b0a0a]/60", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-4 sm:px-6 xl:px-8 xl:pl-20", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex h-16 items-center justify-between", children: [
39
39
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
40
40
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-lg font-semibold tracking-tight", children: title }),
41
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-slate-500", children: subtitle })
41
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: subtitle })
42
42
  ] }) }),
43
43
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 z-10", children: [
44
44
  Array.isArray(actions) && actions.map((a, idx) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
45
45
  import_Button.default,
46
46
  {
47
47
  onClick: a.onClick,
48
- variant: "secondary",
48
+ variant: color ? "outline" : "secondary",
49
+ color,
49
50
  size: "sm",
50
51
  className: "shadow-sm",
51
52
  children: a.label
@@ -56,7 +57,8 @@ function AppTopbar({ title, subtitle, secondary, primary, actions }) {
56
57
  import_Button.default,
57
58
  {
58
59
  onClick: secondary.onClick,
59
- variant: "secondary",
60
+ variant: color ? "outline" : "secondary",
61
+ color,
60
62
  size: "sm",
61
63
  className: "shadow-sm",
62
64
  children: secondary.label
@@ -66,7 +68,8 @@ function AppTopbar({ title, subtitle, secondary, primary, actions }) {
66
68
  import_Button.default,
67
69
  {
68
70
  onClick: primary.onClick,
69
- variant: "danger",
71
+ variant: color ? "primary" : "danger",
72
+ color,
70
73
  size: "sm",
71
74
  className: "shadow-sm",
72
75
  children: primary.label
@@ -1,18 +1,19 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import Button from "./Button";
4
- function AppTopbar({ title, subtitle, secondary, primary, actions }) {
4
+ function AppTopbar({ title, subtitle, secondary, primary, actions, color }) {
5
5
  return /* @__PURE__ */ jsx("div", { className: "sticky top-0 z-30 border-b border-black/5 bg-white backdrop-blur-xl dark:bg-[#0b0a0a]/60", children: /* @__PURE__ */ jsx("div", { className: "px-4 sm:px-6 xl:px-8 xl:pl-20", children: /* @__PURE__ */ jsxs("div", { className: "flex h-16 items-center justify-between", children: [
6
6
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsxs("div", { children: [
7
7
  /* @__PURE__ */ jsx("h1", { className: "text-lg font-semibold tracking-tight", children: title }),
8
- subtitle && /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500", children: subtitle })
8
+ subtitle && /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: subtitle })
9
9
  ] }) }),
10
10
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 z-10", children: [
11
11
  Array.isArray(actions) && actions.map((a, idx) => /* @__PURE__ */ jsx(
12
12
  Button,
13
13
  {
14
14
  onClick: a.onClick,
15
- variant: "secondary",
15
+ variant: color ? "outline" : "secondary",
16
+ color,
16
17
  size: "sm",
17
18
  className: "shadow-sm",
18
19
  children: a.label
@@ -23,7 +24,8 @@ function AppTopbar({ title, subtitle, secondary, primary, actions }) {
23
24
  Button,
24
25
  {
25
26
  onClick: secondary.onClick,
26
- variant: "secondary",
27
+ variant: color ? "outline" : "secondary",
28
+ color,
27
29
  size: "sm",
28
30
  className: "shadow-sm",
29
31
  children: secondary.label
@@ -33,7 +35,8 @@ function AppTopbar({ title, subtitle, secondary, primary, actions }) {
33
35
  Button,
34
36
  {
35
37
  onClick: primary.onClick,
36
- variant: "danger",
38
+ variant: color ? "primary" : "danger",
39
+ color,
37
40
  size: "sm",
38
41
  className: "shadow-sm",
39
42
  children: primary.label
@@ -89,7 +89,7 @@ function BadgeCluster({
89
89
  transition: { duration: 0.16, ease: "easeOut" },
90
90
  className: [
91
91
  "z-[9999] w-64 max-w-[80vw] rounded-xl border border-slate-200 bg-white p-2 shadow-lg ring-1 ring-black/5",
92
- "dark:border-white/10 dark:bg-[#0e0d0e]",
92
+ "dark:border-white/10 dark:bg-[#0b0a0a]",
93
93
  usePortal ? "fixed" : "absolute",
94
94
  align === "right" ? "right-0" : "left-0"
95
95
  ].join(" "),
@@ -56,7 +56,7 @@ function BadgeCluster({
56
56
  transition: { duration: 0.16, ease: "easeOut" },
57
57
  className: [
58
58
  "z-[9999] w-64 max-w-[80vw] rounded-xl border border-slate-200 bg-white p-2 shadow-lg ring-1 ring-black/5",
59
- "dark:border-white/10 dark:bg-[#0e0d0e]",
59
+ "dark:border-white/10 dark:bg-[#0b0a0a]",
60
60
  usePortal ? "fixed" : "absolute",
61
61
  align === "right" ? "right-0" : "left-0"
62
62
  ].join(" "),
@@ -35,7 +35,7 @@ module.exports = __toCommonJS(Breadcrumb_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_react = __toESM(require("react"));
37
37
  function Breadcrumb({ items }) {
38
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { className: "mb-4 flex items-center text-sm text-slate-500", "aria-label": "Breadcrumb", children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.default.Fragment, { children: [
38
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { className: "mb-4 flex items-center text-sm text-slate-500 dark:text-slate-400", "aria-label": "Breadcrumb", children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.default.Fragment, { children: [
39
39
  i > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 20 20", className: "mx-2 h-4 w-4 opacity-50", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M7 4l6 6-6 6" }) }),
40
40
  it.href ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { className: "hover:text-slate-700", href: it.href, children: it.label }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-medium text-slate-900 dark:text-slate-100", children: it.label })
41
41
  ] }, i)) });
@@ -2,7 +2,7 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  function Breadcrumb({ items }) {
5
- return /* @__PURE__ */ jsx("nav", { className: "mb-4 flex items-center text-sm text-slate-500", "aria-label": "Breadcrumb", children: items.map((it, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
5
+ return /* @__PURE__ */ jsx("nav", { className: "mb-4 flex items-center text-sm text-slate-500 dark:text-slate-400", "aria-label": "Breadcrumb", children: items.map((it, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
6
6
  i > 0 && /* @__PURE__ */ jsx("svg", { viewBox: "0 0 20 20", className: "mx-2 h-4 w-4 opacity-50", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M7 4l6 6-6 6" }) }),
7
7
  it.href ? /* @__PURE__ */ jsx("a", { className: "hover:text-slate-700", href: it.href, children: it.label }) : /* @__PURE__ */ jsx("span", { className: "font-medium text-slate-900 dark:text-slate-100", children: it.label })
8
8
  ] }, i)) });
package/dist/Button.d.mts CHANGED
@@ -3,7 +3,7 @@ import React__default from 'react';
3
3
  declare const Button: React__default.ForwardRefExoticComponent<{
4
4
  variant?: "primary" | "secondary" | "outline" | "ghost" | "danger";
5
5
  color?: "slate" | "gray" | "zinc" | "neutral" | "stone" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose";
6
- size?: "sm" | "md" | "lg";
6
+ size?: "xs" | "sm" | "md" | "lg";
7
7
  loading?: boolean;
8
8
  leftIcon?: React__default.ReactNode;
9
9
  rightIcon?: React__default.ReactNode;
package/dist/Button.d.ts CHANGED
@@ -3,7 +3,7 @@ import React__default from 'react';
3
3
  declare const Button: React__default.ForwardRefExoticComponent<{
4
4
  variant?: "primary" | "secondary" | "outline" | "ghost" | "danger";
5
5
  color?: "slate" | "gray" | "zinc" | "neutral" | "stone" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose";
6
- size?: "sm" | "md" | "lg";
6
+ size?: "xs" | "sm" | "md" | "lg";
7
7
  loading?: boolean;
8
8
  leftIcon?: React__default.ReactNode;
9
9
  rightIcon?: React__default.ReactNode;
package/dist/Button.js CHANGED
@@ -69,7 +69,7 @@ const Button = import_react.default.forwardRef(({
69
69
  );
70
70
  }
71
71
  const base = "inline-flex items-center justify-center rounded-xl font-medium transition focus:outline-none focus-visible:ring-2 disabled:opacity-60 disabled:cursor-not-allowed";
72
- const sizes = size === "sm" ? `h-9 ${noPaddingX ? "" : "px-3"} text-sm` : size === "lg" ? `h-11 ${noPaddingX ? "" : "px-5"} text-base` : `h-10 ${noPaddingX ? "" : "px-4"} text-sm`;
72
+ const sizes = size === "xs" ? `h-8 ${noPaddingX ? "" : "px-2.5"} text-xs` : size === "sm" ? `h-9 ${noPaddingX ? "" : "px-3"} text-sm` : size === "lg" ? `h-11 ${noPaddingX ? "" : "px-5"} text-base` : `h-10 ${noPaddingX ? "" : "px-4"} text-sm`;
73
73
  const SOLID = {
74
74
  slate: "bg-slate-600 text-white hover:opacity-90 active:scale-[.98] dark:bg-slate-500",
75
75
  gray: "bg-gray-600 text-white hover:opacity-90 active:scale-[.98] dark:bg-gray-500",
package/dist/Button.mjs CHANGED
@@ -36,7 +36,7 @@ const Button = React.forwardRef(({
36
36
  );
37
37
  }
38
38
  const base = "inline-flex items-center justify-center rounded-xl font-medium transition focus:outline-none focus-visible:ring-2 disabled:opacity-60 disabled:cursor-not-allowed";
39
- const sizes = size === "sm" ? `h-9 ${noPaddingX ? "" : "px-3"} text-sm` : size === "lg" ? `h-11 ${noPaddingX ? "" : "px-5"} text-base` : `h-10 ${noPaddingX ? "" : "px-4"} text-sm`;
39
+ const sizes = size === "xs" ? `h-8 ${noPaddingX ? "" : "px-2.5"} text-xs` : size === "sm" ? `h-9 ${noPaddingX ? "" : "px-3"} text-sm` : size === "lg" ? `h-11 ${noPaddingX ? "" : "px-5"} text-base` : `h-10 ${noPaddingX ? "" : "px-4"} text-sm`;
40
40
  const SOLID = {
41
41
  slate: "bg-slate-600 text-white hover:opacity-90 active:scale-[.98] dark:bg-slate-500",
42
42
  gray: "bg-gray-600 text-white hover:opacity-90 active:scale-[.98] dark:bg-gray-500",
@@ -98,7 +98,7 @@ function CalendarPanel({
98
98
  )
99
99
  ] })
100
100
  ] }),
101
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2 text-center text-[11px] uppercase tracking-wide text-slate-500", children: dow.map((d, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "py-1", children: d }, i)) }),
101
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2 text-center text-[11px] uppercase tracking-wide text-slate-500 dark:text-slate-400", children: dow.map((d, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "py-1", children: d }, i)) }),
102
102
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2", children: grid.map((d) => {
103
103
  const inMonth = d.getMonth() === month;
104
104
  const selected = value && fmtISODate(d) === fmtISODate(value);
@@ -65,7 +65,7 @@ function CalendarPanel({
65
65
  )
66
66
  ] })
67
67
  ] }),
68
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2 text-center text-[11px] uppercase tracking-wide text-slate-500", children: dow.map((d, i) => /* @__PURE__ */ jsx("div", { className: "py-1", children: d }, i)) }),
68
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2 text-center text-[11px] uppercase tracking-wide text-slate-500 dark:text-slate-400", children: dow.map((d, i) => /* @__PURE__ */ jsx("div", { className: "py-1", children: d }, i)) }),
69
69
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-1 px-2 pb-2", children: grid.map((d) => {
70
70
  const inMonth = d.getMonth() === month;
71
71
  const selected = value && fmtISODate(d) === fmtISODate(value);
package/dist/Card.js CHANGED
@@ -34,7 +34,7 @@ __export(Card_exports, {
34
34
  module.exports = __toCommonJS(Card_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_react = __toESM(require("react"));
37
- const base = "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm dark:border-white/10 dark:bg-[#0f0d0e]";
37
+ const base = "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm dark:border-white/10 dark:bg-white/5";
38
38
  const Card = import_react.default.forwardRef(
39
39
  ({ className, children, ...rest }, ref) => {
40
40
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
package/dist/Card.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import React from "react";
4
- const base = "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm dark:border-white/10 dark:bg-[#0f0d0e]";
4
+ const base = "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm dark:border-white/10 dark:bg-white/5";
5
5
  const Card = React.forwardRef(
6
6
  ({ className, children, ...rest }, ref) => {
7
7
  return /* @__PURE__ */ jsx(
package/dist/ChartCard.js CHANGED
@@ -32,12 +32,12 @@ function ChartCard({ title, subtitle, right, children, footer, compact, classNam
32
32
  (title || subtitle || right) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: ["flex items-center justify-between gap-3 border-b border-slate-100 px-4", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: [
33
33
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
34
34
  title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold text-slate-700 dark:text-slate-100", children: title }),
35
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-slate-500", children: subtitle })
35
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: subtitle })
36
36
  ] }),
37
37
  right
38
38
  ] }),
39
39
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: ["", compact ? "p-3" : "p-4"].join(" "), children }),
40
- footer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: ["border-t border-slate-100 px-4 text-xs text-slate-500", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: footer })
40
+ footer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: ["border-t border-slate-100 px-4 text-xs text-slate-500 dark:text-slate-400", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: footer })
41
41
  ]
42
42
  }
43
43
  );
@@ -9,12 +9,12 @@ function ChartCard({ title, subtitle, right, children, footer, compact, classNam
9
9
  (title || subtitle || right) && /* @__PURE__ */ jsxs("div", { className: ["flex items-center justify-between gap-3 border-b border-slate-100 px-4", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: [
10
10
  /* @__PURE__ */ jsxs("div", { children: [
11
11
  title && /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-slate-700 dark:text-slate-100", children: title }),
12
- subtitle && /* @__PURE__ */ jsx("div", { className: "text-xs text-slate-500", children: subtitle })
12
+ subtitle && /* @__PURE__ */ jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: subtitle })
13
13
  ] }),
14
14
  right
15
15
  ] }),
16
16
  /* @__PURE__ */ jsx("div", { className: ["", compact ? "p-3" : "p-4"].join(" "), children }),
17
- footer && /* @__PURE__ */ jsx("div", { className: ["border-t border-slate-100 px-4 text-xs text-slate-500", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: footer })
17
+ footer && /* @__PURE__ */ jsx("div", { className: ["border-t border-slate-100 px-4 text-xs text-slate-500 dark:text-slate-400", compact ? "py-2" : "py-3", "dark:border-white/10"].join(" "), children: footer })
18
18
  ]
19
19
  }
20
20
  );
@@ -0,0 +1,26 @@
1
+ import React__default from 'react';
2
+
3
+ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
4
+ label?: React__default.ReactNode;
5
+ description?: React__default.ReactNode;
6
+ error?: boolean;
7
+ indeterminate?: boolean;
8
+ size?: "sm" | "md" | "lg";
9
+ tone?: "default" | "danger";
10
+ unstyled?: boolean;
11
+ className?: string;
12
+ inputClassName?: string;
13
+ };
14
+ declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
15
+ label?: React__default.ReactNode;
16
+ description?: React__default.ReactNode;
17
+ error?: boolean;
18
+ indeterminate?: boolean;
19
+ size?: "sm" | "md" | "lg";
20
+ tone?: "default" | "danger";
21
+ unstyled?: boolean;
22
+ className?: string;
23
+ inputClassName?: string;
24
+ } & React__default.RefAttributes<HTMLInputElement>>;
25
+
26
+ export { type CheckboxProps, Checkbox as default };
@@ -0,0 +1,26 @@
1
+ import React__default from 'react';
2
+
3
+ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
4
+ label?: React__default.ReactNode;
5
+ description?: React__default.ReactNode;
6
+ error?: boolean;
7
+ indeterminate?: boolean;
8
+ size?: "sm" | "md" | "lg";
9
+ tone?: "default" | "danger";
10
+ unstyled?: boolean;
11
+ className?: string;
12
+ inputClassName?: string;
13
+ };
14
+ declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> & {
15
+ label?: React__default.ReactNode;
16
+ description?: React__default.ReactNode;
17
+ error?: boolean;
18
+ indeterminate?: boolean;
19
+ size?: "sm" | "md" | "lg";
20
+ tone?: "default" | "danger";
21
+ unstyled?: boolean;
22
+ className?: string;
23
+ inputClassName?: string;
24
+ } & React__default.RefAttributes<HTMLInputElement>>;
25
+
26
+ export { type CheckboxProps, Checkbox as default };
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var Checkbox_exports = {};
31
+ __export(Checkbox_exports, {
32
+ default: () => Checkbox_default
33
+ });
34
+ module.exports = __toCommonJS(Checkbox_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = __toESM(require("react"));
37
+ function cx(...a) {
38
+ return a.filter(Boolean).join(" ");
39
+ }
40
+ const baseInput = "rounded border border-slate-300 text-blue-600 shadow-sm outline-none focus:ring-4 focus:ring-blue-300/40 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10";
41
+ const sizeMap = {
42
+ sm: "h-4 w-4",
43
+ md: "h-5 w-5",
44
+ lg: "h-6 w-6"
45
+ };
46
+ const Checkbox = import_react.default.forwardRef(
47
+ ({
48
+ label,
49
+ description,
50
+ error,
51
+ indeterminate,
52
+ size = "md",
53
+ tone = "default",
54
+ unstyled,
55
+ className,
56
+ inputClassName,
57
+ id,
58
+ ...props
59
+ }, ref) => {
60
+ const internalId = (0, import_react.useId)();
61
+ const inputRef = (0, import_react.useRef)(null);
62
+ (0, import_react.useEffect)(() => {
63
+ if (!ref) return;
64
+ if (typeof ref === "function") ref(inputRef.current);
65
+ else ref.current = inputRef.current;
66
+ }, [ref]);
67
+ (0, import_react.useEffect)(() => {
68
+ if (inputRef.current) inputRef.current.indeterminate = !!indeterminate;
69
+ }, [indeterminate]);
70
+ if (unstyled) {
71
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { ref: inputRef, id, type: "checkbox", ...props });
72
+ }
73
+ const descId = description ? `${id != null ? id : internalId}-desc` : void 0;
74
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: cx("inline-flex select-none items-start gap-2", className), children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
+ "input",
77
+ {
78
+ ref: inputRef,
79
+ id: id != null ? id : internalId,
80
+ type: "checkbox",
81
+ "aria-invalid": error ? true : void 0,
82
+ "aria-describedby": descId,
83
+ className: cx(
84
+ baseInput,
85
+ sizeMap[size],
86
+ (error || tone === "danger") && "border-blue-400 focus:ring-blue-500/30",
87
+ inputClassName
88
+ ),
89
+ ...props
90
+ }
91
+ ),
92
+ (label || description) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "leading-tight", children: [
93
+ label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm text-slate-700 dark:text-slate-200", children: label }),
94
+ description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: descId, className: "text-[12px] text-slate-500 dark:text-slate-400", children: description })
95
+ ] })
96
+ ] });
97
+ }
98
+ );
99
+ Checkbox.displayName = "Checkbox";
100
+ var Checkbox_default = Checkbox;
@@ -0,0 +1,70 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import React, { useEffect, useId, useRef } from "react";
4
+ function cx(...a) {
5
+ return a.filter(Boolean).join(" ");
6
+ }
7
+ const baseInput = "rounded border border-slate-300 text-blue-600 shadow-sm outline-none focus:ring-4 focus:ring-blue-300/40 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10";
8
+ const sizeMap = {
9
+ sm: "h-4 w-4",
10
+ md: "h-5 w-5",
11
+ lg: "h-6 w-6"
12
+ };
13
+ const Checkbox = React.forwardRef(
14
+ ({
15
+ label,
16
+ description,
17
+ error,
18
+ indeterminate,
19
+ size = "md",
20
+ tone = "default",
21
+ unstyled,
22
+ className,
23
+ inputClassName,
24
+ id,
25
+ ...props
26
+ }, ref) => {
27
+ const internalId = useId();
28
+ const inputRef = useRef(null);
29
+ useEffect(() => {
30
+ if (!ref) return;
31
+ if (typeof ref === "function") ref(inputRef.current);
32
+ else ref.current = inputRef.current;
33
+ }, [ref]);
34
+ useEffect(() => {
35
+ if (inputRef.current) inputRef.current.indeterminate = !!indeterminate;
36
+ }, [indeterminate]);
37
+ if (unstyled) {
38
+ return /* @__PURE__ */ jsx("input", { ref: inputRef, id, type: "checkbox", ...props });
39
+ }
40
+ const descId = description ? `${id != null ? id : internalId}-desc` : void 0;
41
+ return /* @__PURE__ */ jsxs("label", { className: cx("inline-flex select-none items-start gap-2", className), children: [
42
+ /* @__PURE__ */ jsx(
43
+ "input",
44
+ {
45
+ ref: inputRef,
46
+ id: id != null ? id : internalId,
47
+ type: "checkbox",
48
+ "aria-invalid": error ? true : void 0,
49
+ "aria-describedby": descId,
50
+ className: cx(
51
+ baseInput,
52
+ sizeMap[size],
53
+ (error || tone === "danger") && "border-blue-400 focus:ring-blue-500/30",
54
+ inputClassName
55
+ ),
56
+ ...props
57
+ }
58
+ ),
59
+ (label || description) && /* @__PURE__ */ jsxs("span", { className: "leading-tight", children: [
60
+ label && /* @__PURE__ */ jsx("span", { className: "text-sm text-slate-700 dark:text-slate-200", children: label }),
61
+ description && /* @__PURE__ */ jsx("div", { id: descId, className: "text-[12px] text-slate-500 dark:text-slate-400", children: description })
62
+ ] })
63
+ ] });
64
+ }
65
+ );
66
+ Checkbox.displayName = "Checkbox";
67
+ var Checkbox_default = Checkbox;
68
+ export {
69
+ Checkbox_default as default
70
+ };
@@ -61,7 +61,7 @@ function ColumnSelector({
61
61
  initial: { opacity: 0, y: 6 },
62
62
  animate: { opacity: 1, y: 0 },
63
63
  exit: { opacity: 0, y: -6 },
64
- className: "absolute right-0 z-20 mt-2 w-64 overflow-hidden rounded-2xl border border-slate-200 bg-white p-1 shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
64
+ className: "absolute right-0 z-20 mt-2 w-64 overflow-hidden rounded-2xl border border-slate-200 bg-white p-1 shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
65
65
  children: items.map(({ key, label }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
66
66
  "label",
67
67
  {
@@ -28,7 +28,7 @@ function ColumnSelector({
28
28
  initial: { opacity: 0, y: 6 },
29
29
  animate: { opacity: 1, y: 0 },
30
30
  exit: { opacity: 0, y: -6 },
31
- className: "absolute right-0 z-20 mt-2 w-64 overflow-hidden rounded-2xl border border-slate-200 bg-white p-1 shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
31
+ className: "absolute right-0 z-20 mt-2 w-64 overflow-hidden rounded-2xl border border-slate-200 bg-white p-1 shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
32
32
  children: items.map(({ key, label }) => /* @__PURE__ */ jsxs(
33
33
  "label",
34
34
  {
@@ -254,7 +254,7 @@ function ComboSelect({
254
254
  ),
255
255
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
256
256
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate font-medium", children: opt.label }),
257
- opt.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-xs text-slate-500", children: opt.sublabel }) : opt.hint ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-xs text-slate-500", children: opt.hint }) : null
257
+ opt.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: opt.sublabel }) : opt.hint ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: opt.hint }) : null
258
258
  ] })
259
259
  ] }),
260
260
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex shrink-0 items-center gap-3", children: [
@@ -301,8 +301,8 @@ function ComboSelect({
301
301
  role: "listbox",
302
302
  id: listId,
303
303
  style: dropStyle,
304
- className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0f0d0e]",
305
- children: filteredRows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-3 py-2 text-sm text-slate-500", children: noResultsText }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "max-h-[inherit] overflow-auto py-1 text-sm", children: filteredRows.map((row, i) => {
304
+ className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
305
+ children: filteredRows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-3 py-2 text-sm text-slate-500 dark:text-slate-400", children: noResultsText }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "max-h-[inherit] overflow-auto py-1 text-sm", children: filteredRows.map((row, i) => {
306
306
  if (row.kind === "section") {
307
307
  const Header = renderSectionHeader != null ? renderSectionHeader : DefaultSectionHeader;
308
308
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { "aria-hidden": true, className: "sticky top-0 z-10", children: Header(row.sec, true) }, `sec-${row.sec.key}`);
@@ -221,7 +221,7 @@ function ComboSelect({
221
221
  ),
222
222
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
223
223
  /* @__PURE__ */ jsx("div", { className: "truncate font-medium", children: opt.label }),
224
- opt.sublabel ? /* @__PURE__ */ jsx("div", { className: "truncate text-xs text-slate-500", children: opt.sublabel }) : opt.hint ? /* @__PURE__ */ jsx("div", { className: "truncate text-xs text-slate-500", children: opt.hint }) : null
224
+ opt.sublabel ? /* @__PURE__ */ jsx("div", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: opt.sublabel }) : opt.hint ? /* @__PURE__ */ jsx("div", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: opt.hint }) : null
225
225
  ] })
226
226
  ] }),
227
227
  /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [
@@ -268,8 +268,8 @@ function ComboSelect({
268
268
  role: "listbox",
269
269
  id: listId,
270
270
  style: dropStyle,
271
- className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0f0d0e]",
272
- children: filteredRows.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-slate-500", children: noResultsText }) : /* @__PURE__ */ jsx("ul", { className: "max-h-[inherit] overflow-auto py-1 text-sm", children: filteredRows.map((row, i) => {
271
+ className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
272
+ children: filteredRows.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-slate-500 dark:text-slate-400", children: noResultsText }) : /* @__PURE__ */ jsx("ul", { className: "max-h-[inherit] overflow-auto py-1 text-sm", children: filteredRows.map((row, i) => {
273
273
  if (row.kind === "section") {
274
274
  const Header = renderSectionHeader != null ? renderSectionHeader : DefaultSectionHeader;
275
275
  return /* @__PURE__ */ jsx("li", { "aria-hidden": true, className: "sticky top-0 z-10", children: Header(row.sec, true) }, `sec-${row.sec.key}`);
@@ -250,7 +250,7 @@ function DateTimeField({
250
250
  ref: popRef,
251
251
  style: stylePop,
252
252
  "data-dtf-pop": true,
253
- className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
253
+ className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
254
254
  children: [
255
255
  type !== "time" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
256
256
  import_CalendarPanel.default,
@@ -217,7 +217,7 @@ function DateTimeField({
217
217
  ref: popRef,
218
218
  style: stylePop,
219
219
  "data-dtf-pop": true,
220
- className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
220
+ className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0b0a0a]",
221
221
  children: [
222
222
  type !== "time" && /* @__PURE__ */ jsx(
223
223
  CalendarPanel,
package/dist/Dialog.js CHANGED
@@ -153,7 +153,7 @@ function DialogBase({
153
153
  ref: containerRef,
154
154
  className: cx(
155
155
  "w-full overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-xl",
156
- "dark:border-white/10 dark:bg-[#0e0d0e]",
156
+ "dark:border-white/10 dark:bg-[#0b0a0a]",
157
157
  "flex max-h-[88vh] flex-col",
158
158
  sizeToMaxW[size],
159
159
  className
@@ -232,7 +232,7 @@ function DialogFooter({
232
232
  "sticky bottom-0 z-10 flex items-center gap-2 rounded-b-3xl border-t border-slate-200",
233
233
  "bg-white px-6 py-4 text-sm",
234
234
  "[box-shadow:inset_0_8px_10px_-8px_rgba(2,6,23,0.10)]",
235
- "dark:border-white/10 dark:bg-[#0e0d0e] dark:[box-shadow:inset_0_8px_10px_-8px_rgba(255,255,255,0.08)]",
235
+ "dark:border-white/10 dark:bg-[#0b0a0a] dark:[box-shadow:inset_0_8px_10px_-8px_rgba(255,255,255,0.08)]",
236
236
  map[align]
237
237
  ),
238
238
  children
package/dist/Dialog.mjs CHANGED
@@ -113,7 +113,7 @@ function DialogBase({
113
113
  ref: containerRef,
114
114
  className: cx(
115
115
  "w-full overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-xl",
116
- "dark:border-white/10 dark:bg-[#0e0d0e]",
116
+ "dark:border-white/10 dark:bg-[#0b0a0a]",
117
117
  "flex max-h-[88vh] flex-col",
118
118
  sizeToMaxW[size],
119
119
  className
@@ -192,7 +192,7 @@ function DialogFooter({
192
192
  "sticky bottom-0 z-10 flex items-center gap-2 rounded-b-3xl border-t border-slate-200",
193
193
  "bg-white px-6 py-4 text-sm",
194
194
  "[box-shadow:inset_0_8px_10px_-8px_rgba(2,6,23,0.10)]",
195
- "dark:border-white/10 dark:bg-[#0e0d0e] dark:[box-shadow:inset_0_8px_10px_-8px_rgba(255,255,255,0.08)]",
195
+ "dark:border-white/10 dark:bg-[#0b0a0a] dark:[box-shadow:inset_0_8px_10px_-8px_rgba(255,255,255,0.08)]",
196
196
  map[align]
197
197
  ),
198
198
  children