@agentero/design-system 0.14.0 → 0.15.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentero/design-system",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "description": "A React component library built with Tailwind CSS v4 and Radix UI primitives",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -57,6 +57,10 @@
57
57
  "types": "./src/pagination/index.d.ts",
58
58
  "import": "./src/pagination/index.js"
59
59
  },
60
+ "./progress": {
61
+ "types": "./src/progress/index.d.ts",
62
+ "import": "./src/progress/index.js"
63
+ },
60
64
  "./skeleton": {
61
65
  "types": "./src/skeleton/index.d.ts",
62
66
  "import": "./src/skeleton/index.js"
@@ -98,6 +102,7 @@
98
102
  "@radix-ui/react-accordion": "^1.2.14",
99
103
  "@radix-ui/react-avatar": "^1.1.11",
100
104
  "@radix-ui/react-dropdown-menu": "^2.1.16",
105
+ "@radix-ui/react-progress": "^1.1.12",
101
106
  "@radix-ui/react-separator": "^1.1.8",
102
107
  "@radix-ui/react-slot": "^1.2.4",
103
108
  "@radix-ui/react-switch": "^1.3.2",
@@ -0,0 +1,2 @@
1
+ export { Progress, progressRecipe } from './progress';
2
+ export type { ProgressProps } from './progress';
@@ -0,0 +1,2 @@
1
+ import { Progress as e, progressRecipe as t } from "./progress.js";
2
+ export { e as Progress, t as progressRecipe };
@@ -0,0 +1,89 @@
1
+ export declare const progressRecipe: import('tailwind-variants').TVReturnType<{
2
+ [key: string]: {
3
+ [key: string]: import('tailwind-merge').ClassNameValue | {
4
+ label?: import('tailwind-merge').ClassNameValue;
5
+ track?: import('tailwind-merge').ClassNameValue;
6
+ value?: import('tailwind-merge').ClassNameValue;
7
+ root?: import('tailwind-merge').ClassNameValue;
8
+ indicator?: import('tailwind-merge').ClassNameValue;
9
+ labelRow?: import('tailwind-merge').ClassNameValue;
10
+ };
11
+ };
12
+ } | {
13
+ [x: string]: {
14
+ [x: string]: import('tailwind-merge').ClassNameValue | {
15
+ label?: import('tailwind-merge').ClassNameValue;
16
+ track?: import('tailwind-merge').ClassNameValue;
17
+ value?: import('tailwind-merge').ClassNameValue;
18
+ root?: import('tailwind-merge').ClassNameValue;
19
+ indicator?: import('tailwind-merge').ClassNameValue;
20
+ labelRow?: import('tailwind-merge').ClassNameValue;
21
+ };
22
+ };
23
+ } | {}, {
24
+ root: string;
25
+ track: string;
26
+ indicator: string;
27
+ labelRow: string;
28
+ label: string;
29
+ value: string;
30
+ }, undefined, {
31
+ [key: string]: {
32
+ [key: string]: import('tailwind-merge').ClassNameValue | {
33
+ label?: import('tailwind-merge').ClassNameValue;
34
+ track?: import('tailwind-merge').ClassNameValue;
35
+ value?: import('tailwind-merge').ClassNameValue;
36
+ root?: import('tailwind-merge').ClassNameValue;
37
+ indicator?: import('tailwind-merge').ClassNameValue;
38
+ labelRow?: import('tailwind-merge').ClassNameValue;
39
+ };
40
+ };
41
+ } | {}, {
42
+ root: string;
43
+ track: string;
44
+ indicator: string;
45
+ labelRow: string;
46
+ label: string;
47
+ value: string;
48
+ }, import('tailwind-variants').TVReturnType<unknown, {
49
+ root: string;
50
+ track: string;
51
+ indicator: string;
52
+ labelRow: string;
53
+ label: string;
54
+ value: string;
55
+ }, undefined, unknown, unknown, undefined>>;
56
+ export type ProgressProps = {
57
+ /** Completion percentage, 0–100. Values outside the range are clamped. */
58
+ percentage: number;
59
+ /** Optional label rendered above the bar, with the percentage value on the right. */
60
+ label?: string;
61
+ /** Accessible name when no visible `label` is provided. Defaults to `'Progress'`. */
62
+ 'aria-label'?: string;
63
+ /**
64
+ * Extra classes for the bar, merged last. The fill paints with `currentColor`,
65
+ * so a text color recolors it (e.g. `text-brand-400`); sizing classes resize
66
+ * the track (e.g. `h-3`).
67
+ */
68
+ className?: string;
69
+ };
70
+ /**
71
+ * Progress shows how far a bounded task has advanced — wizard steps, upload
72
+ * status, or a split of a total. Pass `percentage` (0–100) and optionally a
73
+ * `label`, which renders above the bar with the percentage value. Built on
74
+ * Radix UI Progress, so `role="progressbar"` and `aria-value*` come wired.
75
+ *
76
+ * The fill is near-black by default and paints with `currentColor` — recolor
77
+ * it from the consumer with a plain text color class.
78
+ *
79
+ * @summary Horizontal progress bar with optional label
80
+ *
81
+ * @example
82
+ * ```tsx
83
+ * <Progress percentage={62} label="Profile completion" className="text-brand-400" />
84
+ * ```
85
+ */
86
+ export declare const Progress: {
87
+ ({ percentage, label, "aria-label": ariaLabel, className }: ProgressProps): import("react/jsx-runtime").JSX.Element;
88
+ displayName: string;
89
+ };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { tv as e } from "tailwind-variants";
3
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
4
+ import { useId as r } from "react";
5
+ import * as i from "@radix-ui/react-progress";
6
+ //#region src/progress/progress.tsx
7
+ var a = e({ slots: {
8
+ root: "flex flex-col gap-2",
9
+ track: "relative h-2 w-full overflow-hidden rounded-sm bg-neutrals-200 text-neutrals-900",
10
+ indicator: "size-full bg-current transition-transform duration-600 ease-in-out motion-reduce:transition-none",
11
+ labelRow: "flex items-center justify-between gap-2",
12
+ label: "text-sm text-text-default-base-primary",
13
+ value: "text-base text-text-default-base-primary"
14
+ } }), o = ({ percentage: e, label: o, "aria-label": s, className: c }) => {
15
+ let l = r(), u = a(), d = Math.min(100, Math.max(0, e));
16
+ return /* @__PURE__ */ n("div", {
17
+ "data-slot": "progress",
18
+ className: u.root(),
19
+ children: [o && /* @__PURE__ */ n("div", {
20
+ "data-slot": "progress-label",
21
+ className: u.labelRow(),
22
+ children: [/* @__PURE__ */ t("span", {
23
+ id: l,
24
+ className: u.label(),
25
+ children: o
26
+ }), /* @__PURE__ */ n("span", {
27
+ className: u.value(),
28
+ children: [d, "%"]
29
+ })]
30
+ }), /* @__PURE__ */ t(i.Root, {
31
+ "data-slot": "progress-track",
32
+ value: d,
33
+ "aria-labelledby": o ? l : void 0,
34
+ "aria-label": o ? void 0 : s ?? "Progress",
35
+ className: u.track({ className: c }),
36
+ children: /* @__PURE__ */ t(i.Indicator, {
37
+ "data-slot": "progress-indicator",
38
+ className: u.indicator(),
39
+ style: { transform: `translateX(-${100 - d}%)` }
40
+ })
41
+ })]
42
+ });
43
+ };
44
+ o.displayName = "Progress";
45
+ //#endregion
46
+ export { o as Progress, a as progressRecipe };
@@ -12,9 +12,16 @@ export declare const switchRecipe: import('tailwind-variants').TVReturnType<{
12
12
  thumb: string;
13
13
  };
14
14
  };
15
+ reverse: {
16
+ true: {
17
+ wrapper: string;
18
+ };
19
+ };
15
20
  }, {
21
+ wrapper: string;
16
22
  root: string[];
17
23
  thumb: string;
24
+ label: string[];
18
25
  }, undefined, {
19
26
  size: {
20
27
  sm: {
@@ -26,9 +33,16 @@ export declare const switchRecipe: import('tailwind-variants').TVReturnType<{
26
33
  thumb: string;
27
34
  };
28
35
  };
36
+ reverse: {
37
+ true: {
38
+ wrapper: string;
39
+ };
40
+ };
29
41
  }, {
42
+ wrapper: string;
30
43
  root: string[];
31
44
  thumb: string;
45
+ label: string[];
32
46
  }, import('tailwind-variants').TVReturnType<{
33
47
  size: {
34
48
  sm: {
@@ -40,20 +54,39 @@ export declare const switchRecipe: import('tailwind-variants').TVReturnType<{
40
54
  thumb: string;
41
55
  };
42
56
  };
57
+ reverse: {
58
+ true: {
59
+ wrapper: string;
60
+ };
61
+ };
43
62
  }, {
63
+ wrapper: string;
44
64
  root: string[];
45
65
  thumb: string;
66
+ label: string[];
46
67
  }, undefined, unknown, unknown, undefined>>;
47
68
  export type SwitchSize = NonNullable<VariantProps<typeof switchRecipe>['size']>;
48
- export type SwitchProps = ComponentPropsWithRef<typeof SwitchPrimitive.Root> & VariantProps<typeof switchRecipe>;
69
+ export type SwitchProps = ComponentPropsWithRef<typeof SwitchPrimitive.Root> & VariantProps<typeof switchRecipe> & {
70
+ /**
71
+ * Optional text rendered beside the toggle and associated with it via
72
+ * `htmlFor`. Provide an `id` so the association resolves. Omit it to keep
73
+ * the toggle headless and supply your own `<label htmlFor>`.
74
+ */
75
+ label?: string;
76
+ };
49
77
  /**
50
78
  * Instant-effect on/off toggle built on Radix Switch. Reach for it over a
51
- * Checkbox when flipping a single boolean that applies immediately. Renders
52
- * only the toggle — pair it with a `<label htmlFor>` for an accessible name.
79
+ * Checkbox when flipping a single boolean that applies immediately.
80
+ *
81
+ * Renders only the toggle by default — pair it with a `<label htmlFor>` for an
82
+ * accessible name. Pass `label` (with an `id`) to render an associated text
83
+ * label beside the toggle; `reverse` places the label before it.
53
84
  *
54
85
  * @summary Instant-effect on/off toggle built on Radix Switch
55
86
  *
56
87
  * @example
57
88
  * <Switch checked={enabled} onCheckedChange={setEnabled} />
89
+ * @example
90
+ * <Switch id="email-notifications" label="Email" checked={on} onCheckedChange={setOn} />
58
91
  */
59
- export declare const Switch: ({ className, size, ref, ...props }: SwitchProps) => import("react/jsx-runtime").JSX.Element;
92
+ export declare const Switch: ({ className, size, reverse, label, id, ref, ...props }: SwitchProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,42 +1,61 @@
1
1
  "use client";
2
2
  import { cn as e } from "../../lib/utils.js";
3
3
  import { tv as t } from "tailwind-variants";
4
- import { jsx as n } from "react/jsx-runtime";
5
- import * as r from "@radix-ui/react-switch";
4
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
+ import { useId as i } from "react";
6
+ import * as a from "@radix-ui/react-switch";
6
7
  //#region src/switch/switch.tsx
7
- var i = t({
8
+ var o = t({
8
9
  slots: {
10
+ wrapper: "inline-flex items-center gap-2.5",
9
11
  root: [
10
- "inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors",
12
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors",
11
13
  "bg-bg-default-base-tertiary data-[state=checked]:bg-bg-default-base-inverse-primary",
12
14
  "focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring-button-primary",
13
15
  "disabled:cursor-not-allowed disabled:opacity-50"
14
16
  ],
15
- thumb: "block translate-x-0 rounded-full bg-bg-default-base-primary shadow-sm transition-transform"
17
+ thumb: "block translate-x-0 rounded-full bg-bg-default-base-primary shadow-sm transition-transform",
18
+ label: ["cursor-pointer text-sm text-text-default-base-primary select-none", "peer-disabled:cursor-not-allowed peer-disabled:opacity-50"]
16
19
  },
17
- variants: { size: {
18
- sm: {
19
- root: "h-4 w-7.5 p-0.5",
20
- thumb: "size-3 data-[state=checked]:translate-x-3.5"
20
+ variants: {
21
+ size: {
22
+ sm: {
23
+ root: "h-4 w-7.5 p-0.5",
24
+ thumb: "size-3 data-[state=checked]:translate-x-3.5"
25
+ },
26
+ md: {
27
+ root: "h-6 w-12 p-0.75",
28
+ thumb: "size-4.5 data-[state=checked]:translate-x-6"
29
+ }
21
30
  },
22
- md: {
23
- root: "h-6 w-12 p-0.75",
24
- thumb: "size-4.5 data-[state=checked]:translate-x-6"
25
- }
26
- } },
31
+ reverse: { true: { wrapper: "flex-row-reverse" } }
32
+ },
27
33
  defaultVariants: { size: "md" }
28
- }), a = ({ className: t, size: a, ref: o, ...s }) => {
29
- let c = i({ size: a });
30
- return /* @__PURE__ */ n(r.Root, {
31
- ref: o,
34
+ }), s = ({ className: t, size: s, reverse: c, label: l, id: u, ref: d, ...f }) => {
35
+ let p = i(), m = u ?? (l ? p : void 0), h = o({
36
+ size: s,
37
+ reverse: c
38
+ }), g = /* @__PURE__ */ n(a.Root, {
39
+ ref: d,
40
+ id: m,
32
41
  "data-slot": "switch",
33
- className: e(c.root(), t),
34
- ...s,
35
- children: /* @__PURE__ */ n(r.Thumb, {
42
+ className: e(h.root(), t),
43
+ ...f,
44
+ children: /* @__PURE__ */ n(a.Thumb, {
36
45
  "data-slot": "switch-thumb",
37
- className: c.thumb()
46
+ className: h.thumb()
38
47
  })
39
48
  });
49
+ return l ? /* @__PURE__ */ r("span", {
50
+ "data-slot": "switch-wrapper",
51
+ className: h.wrapper(),
52
+ children: [g, /* @__PURE__ */ n("label", {
53
+ htmlFor: m,
54
+ "data-slot": "switch-label",
55
+ className: h.label(),
56
+ children: l
57
+ })]
58
+ }) : g;
40
59
  };
41
60
  //#endregion
42
- export { a as Switch, i as switchRecipe };
61
+ export { s as Switch, o as switchRecipe };