@actioneer/ads 1.0.4 → 1.0.6

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 (59) hide show
  1. package/DESIGN.md +75 -75
  2. package/README.md +205 -0
  3. package/components/ai-elements/agent-trace.js +14 -14
  4. package/components/ai-elements/chain-of-thought.js +3 -3
  5. package/components/ai-elements/chart.js +3 -3
  6. package/components/ai-elements/inline-citation.js +2 -2
  7. package/components/ai-elements/message.js +1 -1
  8. package/components/ai-elements/research-activity.js +4 -4
  9. package/components/answer-sources.js +3 -3
  10. package/components/answer.js +3 -3
  11. package/components/assistant-ui/action-bar.js +2 -2
  12. package/components/assistant-ui/attachment.js +5 -5
  13. package/components/assistant-ui/badge.js +1 -1
  14. package/components/assistant-ui/branch-picker.js +1 -1
  15. package/components/assistant-ui/composer-add-context.js +7 -7
  16. package/components/assistant-ui/composer-deep-research.js +3 -3
  17. package/components/assistant-ui/composer-harness.js +1 -1
  18. package/components/assistant-ui/composer-trigger-popover.js +8 -8
  19. package/components/assistant-ui/composer.js +45 -45
  20. package/components/assistant-ui/file.js +9 -9
  21. package/components/assistant-ui/image.js +1 -1
  22. package/components/assistant-ui/markdown-text.js +1 -1
  23. package/components/assistant-ui/message-timing.js +1 -1
  24. package/components/assistant-ui/reasoning.js +10 -10
  25. package/components/assistant-ui/thread.js +1 -1
  26. package/components/assistant-ui/tool-fallback.js +2 -2
  27. package/components/assistant-ui/tool-group.js +3 -3
  28. package/components/autocomplete.js +28 -27
  29. package/components/brand-loader.d.ts +1 -1
  30. package/components/brand-loader.js +9 -9
  31. package/components/chart.js +5 -5
  32. package/components/checkbox.js +16 -16
  33. package/components/chip.js +33 -33
  34. package/components/collapsible.js +14 -12
  35. package/components/command-palette.js +37 -37
  36. package/components/connector-card.js +1 -1
  37. package/components/date-range-picker.js +2 -2
  38. package/components/dropdown.js +1 -1
  39. package/components/field.js +1 -1
  40. package/components/file-dropzone.js +2 -2
  41. package/components/infinite-canvas.js +1 -1
  42. package/components/modal.js +6 -6
  43. package/components/pagination.js +23 -23
  44. package/components/radio.js +1 -1
  45. package/components/segmented.js +23 -23
  46. package/components/selection-action-bar.js +13 -13
  47. package/components/sidebar.js +5 -5
  48. package/components/stepper.d.ts +1 -1
  49. package/components/stepper.js +4 -4
  50. package/components/switch.js +7 -7
  51. package/components/tooltip.js +1 -1
  52. package/components/tree.js +20 -20
  53. package/components/ui/button.js +21 -21
  54. package/components/ui/tooltip.js +3 -3
  55. package/llms.txt +6 -6
  56. package/manifest.json +13 -13
  57. package/package.json +1 -1
  58. package/styles.css +49 -56
  59. package/theme.css +49 -56
@@ -18,8 +18,8 @@ const b = y(
18
18
  error: "bg-danger text-danger-foreground"
19
19
  },
20
20
  size: {
21
- sm: "size-5 text-xs [&>svg]:size-3",
22
- md: "size-6 text-xs [&>svg]:size-3.5"
21
+ sm: "size-5 text-s [&>svg]:size-3",
22
+ md: "size-6 text-s [&>svg]:size-3.5"
23
23
  }
24
24
  },
25
25
  defaultVariants: { status: "upcoming", size: "md" }
@@ -72,7 +72,7 @@ const b = y(
72
72
  {
73
73
  className: a(
74
74
  "truncate whitespace-nowrap",
75
- i === "sm" ? "text-xs" : "text-base",
75
+ i === "sm" ? "text-s" : "text-base",
76
76
  r === "upcoming" ? "text-tertiary" : "text-foreground",
77
77
  r === "error" && "text-danger"
78
78
  ),
@@ -117,7 +117,7 @@ const b = y(
117
117
  {
118
118
  className: a(
119
119
  "truncate",
120
- i === "sm" ? "text-xs" : "text-base",
120
+ i === "sm" ? "text-s" : "text-base",
121
121
  r === "upcoming" ? "text-tertiary" : "text-foreground",
122
122
  r === "error" && "text-danger"
123
123
  ),
@@ -17,27 +17,27 @@ const v = {
17
17
  }
18
18
  }, y = c.forwardRef(
19
19
  ({
20
- className: d,
20
+ className: m,
21
21
  checked: t = !1,
22
22
  onCheckedChange: e,
23
- size: f = "md",
23
+ size: d = "md",
24
24
  disabled: s,
25
25
  children: o,
26
26
  ...r
27
- }, m) => {
28
- const l = v[f], a = c.useId(), u = r["aria-label"] != null || r["aria-labelledby"] != null, b = o && !u ? a : void 0;
27
+ }, f) => {
28
+ const l = v[d], a = c.useId(), u = r["aria-label"] != null || r["aria-labelledby"] != null, b = o && !u ? a : void 0;
29
29
  return /* @__PURE__ */ p(
30
30
  "label",
31
31
  {
32
32
  className: n(
33
- "inline-flex items-center gap-2 text-xs text-foreground select-none",
33
+ "inline-flex items-center gap-2 text-m text-foreground select-none",
34
34
  s ? "cursor-not-allowed opacity-50" : "cursor-pointer"
35
35
  ),
36
36
  children: [
37
37
  /* @__PURE__ */ i(
38
38
  "button",
39
39
  {
40
- ref: m,
40
+ ref: f,
41
41
  type: "button",
42
42
  role: "switch",
43
43
  "aria-checked": t,
@@ -51,7 +51,7 @@ const v = {
51
51
  "disabled:cursor-not-allowed",
52
52
  t ? "bg-brand" : "bg-input",
53
53
  l.track,
54
- d
54
+ m
55
55
  ),
56
56
  ...r,
57
57
  children: /* @__PURE__ */ i(w, { reducedMotion: "user", children: /* @__PURE__ */ i(
@@ -116,7 +116,7 @@ function Y({
116
116
  },
117
117
  className: S(
118
118
  "relative z-50 max-w-xs rounded-sm bg-foreground px-2 py-1",
119
- "text-xs text-background",
119
+ "text-s text-background",
120
120
  "pointer-events-none select-none",
121
121
  A
122
122
  ),
@@ -12,7 +12,7 @@ const B = t.forwardRef(
12
12
  ref: n,
13
13
  role: "tree",
14
14
  "data-variant": a,
15
- className: f("group/tree flex flex-col gap-0.5 text-xs", u),
15
+ className: f("group/tree flex flex-col gap-0.5 text-m", u),
16
16
  ...m
17
17
  }
18
18
  )
@@ -24,29 +24,29 @@ const E = t.forwardRef(
24
24
  label: a,
25
25
  icon: m,
26
26
  count: n,
27
- endContent: v,
27
+ endContent: x,
28
28
  defaultExpanded: R = !1,
29
- expanded: x,
30
- onExpandedChange: g,
31
- href: w,
29
+ expanded: v,
30
+ onExpandedChange: b,
31
+ href: y,
32
32
  isActive: s,
33
- onSelect: b,
33
+ onSelect: p,
34
34
  children: l,
35
35
  ..._
36
36
  }, j) => {
37
- const o = t.Children.count(l) > 0, y = x !== void 0, [z, F] = t.useState(R), r = y ? x : z, N = (c) => {
38
- y || F(c), g == null || g(c);
37
+ const o = t.Children.count(l) > 0, N = v !== void 0, [z, F] = t.useState(R), r = N ? v : z, w = (c) => {
38
+ N || F(c), b == null || b(c);
39
39
  }, d = f(
40
40
  "group/tree-row flex h-9 w-full items-center gap-1.5 rounded-md px-2 text-left",
41
41
  "outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring",
42
42
  "[&_svg]:size-4 [&_svg]:shrink-0",
43
43
  "group-data-[variant=sidebar]/tree:border group-data-[variant=sidebar]/tree:border-transparent group-data-[variant=sidebar]/tree:text-wg11",
44
- "group-data-[variant=sidebar]/tree:[&_svg]:size-5 group-data-[variant=sidebar]/tree:[&_svg]:text-wg11",
45
- s ? "bg-fill font-normal text-foreground group-data-[variant=sidebar]/tree:border-wg4 group-data-[variant=sidebar]/tree:bg-wg2 group-data-[variant=sidebar]/tree:text-wg11" : "text-muted-foreground hover:bg-fill/60 hover:text-foreground group-data-[variant=sidebar]/tree:hover:bg-wg1 group-data-[variant=sidebar]/tree:hover:text-wg11"
46
- ), p = m ?? (o ? null : /* @__PURE__ */ e(W, { className: "text-tertiary" })), k = s && t.isValidElement(p) ? t.cloneElement(
47
- p,
44
+ "group-data-[variant=sidebar]/tree:[&_svg]:size-5",
45
+ s ? "bg-action-primary-soft font-normal text-brand-text [&_svg]:text-brand-text group-data-[variant=sidebar]/tree:border-brand group-data-[variant=sidebar]/tree:bg-action-primary-soft group-data-[variant=sidebar]/tree:text-brand-text" : "text-muted-foreground hover:bg-action-primary-soft hover:text-brand-text group-data-[variant=sidebar]/tree:hover:bg-action-primary-soft group-data-[variant=sidebar]/tree:hover:text-brand-text"
46
+ ), g = m ?? (o ? null : /* @__PURE__ */ e(W, { className: "text-tertiary" })), k = s && t.isValidElement(g) ? t.cloneElement(
47
+ g,
48
48
  { weight: "fill" }
49
- ) : p, C = /* @__PURE__ */ e(
49
+ ) : g, C = /* @__PURE__ */ e(
50
50
  V,
51
51
  {
52
52
  className: f(
@@ -55,30 +55,30 @@ const E = t.forwardRef(
55
55
  ),
56
56
  strokeWidth: 2
57
57
  }
58
- ), I = (n ?? t.Children.count(l)) > 0 && /* @__PURE__ */ e("span", { className: "shrink-0 tabular-nums text-xs text-tertiary", children: n ?? t.Children.count(l) }), h = /* @__PURE__ */ i(T, { children: [
58
+ ), I = (n ?? t.Children.count(l)) > 0 && /* @__PURE__ */ e("span", { className: "shrink-0 tabular-nums text-s text-tertiary", children: n ?? t.Children.count(l) }), h = /* @__PURE__ */ i(T, { children: [
59
59
  k,
60
60
  /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate", children: a }),
61
- v,
61
+ x,
62
62
  o && /* @__PURE__ */ i(T, { children: [
63
63
  I,
64
64
  C
65
65
  ] })
66
66
  ] });
67
67
  return /* @__PURE__ */ i("div", { ref: j, role: "treeitem", "aria-expanded": o ? r : void 0, "aria-selected": s, className: u, ..._, children: [
68
- o && b ? /* @__PURE__ */ i("div", { className: d, children: [
68
+ o && p ? /* @__PURE__ */ i("div", { className: d, children: [
69
69
  /* @__PURE__ */ i(
70
70
  "button",
71
71
  {
72
72
  type: "button",
73
73
  className: "flex min-w-0 flex-1 items-center gap-1.5 rounded-sm text-left outline-none focus-visible:ring-3 focus-visible:ring-ring",
74
- onClick: b,
74
+ onClick: p,
75
75
  children: [
76
76
  k,
77
77
  /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate", children: a })
78
78
  ]
79
79
  }
80
80
  ),
81
- v,
81
+ x,
82
82
  I,
83
83
  /* @__PURE__ */ e(
84
84
  "button",
@@ -87,11 +87,11 @@ const E = t.forwardRef(
87
87
  "aria-label": `${r ? "Collapse" : "Expand"} ${typeof a == "string" ? a : "tree item"}`,
88
88
  "aria-expanded": r,
89
89
  className: "inline-flex size-7 shrink-0 items-center justify-center rounded-sm outline-none hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring",
90
- onClick: () => N(!r),
90
+ onClick: () => w(!r),
91
91
  children: C
92
92
  }
93
93
  )
94
- ] }) : o ? /* @__PURE__ */ e("button", { type: "button", className: d, onClick: () => N(!r), children: h }) : w ? /* @__PURE__ */ e("a", { href: w, className: d, "aria-current": s ? "page" : void 0, children: h }) : /* @__PURE__ */ e("button", { type: "button", className: d, onClick: b, children: h }),
94
+ ] }) : o ? /* @__PURE__ */ e("button", { type: "button", className: d, onClick: () => w(!r), children: h }) : y ? /* @__PURE__ */ e("a", { href: y, className: d, "aria-current": s ? "page" : void 0, children: h }) : /* @__PURE__ */ e("button", { type: "button", className: d, onClick: p, children: h }),
95
95
  /* @__PURE__ */ e(M, { reducedMotion: "user", children: /* @__PURE__ */ e($, { initial: !1, children: o && r && /* @__PURE__ */ e(
96
96
  D.div,
97
97
  {
@@ -1,23 +1,23 @@
1
1
  "use client";
2
- import { jsx as i } from "react/jsx-runtime";
2
+ import { jsx as s } from "react/jsx-runtime";
3
3
  import { cva as a } from "class-variance-authority";
4
4
  import { Slot as d } from "radix-ui";
5
5
  import { cn as c } from "../../lib/cn.js";
6
6
  const u = a(
7
- "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-xs font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] duration-150 ease-out outline-none motion-reduce:transition-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
7
+ "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-m font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] duration-150 ease-out outline-none motion-reduce:transition-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
8
8
  {
9
9
  variants: {
10
10
  variant: {
11
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
11
+ default: "bg-action-primary text-action-primary-foreground hover:bg-action-primary-hover",
12
12
  destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20",
13
- outline: "border bg-background shadow-100 hover:bg-accent hover:text-accent-foreground",
14
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
15
- ghost: "hover:bg-accent hover:text-accent-foreground",
16
- link: "text-primary underline-offset-4 hover:underline"
13
+ outline: "border bg-background shadow-100 hover:border-action-primary hover:bg-action-primary-soft hover:text-action-primary-text",
14
+ secondary: "bg-action-primary-soft text-action-primary-text hover:bg-action-primary-soft/80",
15
+ ghost: "hover:bg-action-primary-soft hover:text-action-primary-text",
16
+ link: "text-action-primary-text underline-offset-4 hover:underline"
17
17
  },
18
18
  size: {
19
19
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
20
- xs: "h-6 gap-1 rounded-sm px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
20
+ xs: "h-6 gap-1 rounded-sm px-2 has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
21
21
  sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
22
22
  lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
23
23
  icon: "size-9",
@@ -32,26 +32,26 @@ const u = a(
32
32
  }
33
33
  }
34
34
  );
35
- function p({
36
- className: o,
37
- variant: e = "default",
38
- size: t = "default",
39
- asChild: r = !1,
40
- ...s
35
+ function g({
36
+ className: r,
37
+ variant: t = "default",
38
+ size: e = "default",
39
+ asChild: o = !1,
40
+ ...i
41
41
  }) {
42
- const n = r ? d.Root : "button";
43
- return /* @__PURE__ */ i(
42
+ const n = o ? d.Root : "button";
43
+ return /* @__PURE__ */ s(
44
44
  n,
45
45
  {
46
46
  "data-slot": "button",
47
- "data-variant": e,
48
- "data-size": t,
49
- className: c(u({ variant: e, size: t, className: o })),
50
- ...s
47
+ "data-variant": t,
48
+ "data-size": e,
49
+ className: c(u({ variant: t, size: e, className: r })),
50
+ ...i
51
51
  }
52
52
  );
53
53
  }
54
54
  export {
55
- p as Button,
55
+ g as Button,
56
56
  u as buttonVariants
57
57
  };
@@ -2,7 +2,7 @@
2
2
  import { jsx as t, jsxs as m } from "react/jsx-runtime";
3
3
  import * as s from "react";
4
4
  import { Tooltip as i } from "radix-ui";
5
- import { MotionConfig as x, AnimatePresence as g, motion as v } from "motion/react";
5
+ import { MotionConfig as g, AnimatePresence as x, motion as v } from "motion/react";
6
6
  import { cn as T } from "../../lib/cn.js";
7
7
  import { tooltipVariants as h } from "../../lib/motion.js";
8
8
  const u = s.createContext(!1);
@@ -54,7 +54,7 @@ function y({
54
54
  ...n
55
55
  }) {
56
56
  const a = s.useContext(u);
57
- return /* @__PURE__ */ t(i.Portal, { children: /* @__PURE__ */ t(x, { reducedMotion: "user", children: /* @__PURE__ */ t(g, { initial: !1, children: a && /* @__PURE__ */ t(
57
+ return /* @__PURE__ */ t(i.Portal, { children: /* @__PURE__ */ t(g, { reducedMotion: "user", children: /* @__PURE__ */ t(x, { initial: !1, children: a && /* @__PURE__ */ t(
58
58
  i.Content,
59
59
  {
60
60
  "data-slot": "tooltip-content",
@@ -70,7 +70,7 @@ function y({
70
70
  animate: "visible",
71
71
  exit: "hidden",
72
72
  className: T(
73
- "z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background",
73
+ "z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md bg-foreground px-3 py-1.5 text-s text-balance text-background",
74
74
  o
75
75
  ),
76
76
  children: [
package/llms.txt CHANGED
@@ -41,10 +41,10 @@ Reference semantic roles, never raw color/dimension literals (ads-lint rejects l
41
41
  - `action-primary-text` — Primary CTA role — restrained Studio teal, used sparingly.
42
42
  - `action-primary-soft` — Primary CTA role — restrained Studio teal, used sparingly.
43
43
  - `field-focus` — Primary CTA role — restrained Studio teal, used sparingly.
44
- - `brand` — Compatibility action role — neutral ink, never a colored primary hue.
45
- - `brand-foreground` — Compatibility action role — neutral ink, never a colored primary hue.
46
- - `brand-hover` — Compatibility action role — neutral ink, never a colored primary hue.
47
- - `brand-text` — Compatibility action role — neutral ink, never a colored primary hue.
44
+ - `brand` — Shared brand roles for control states, primary accents, and marks.
45
+ - `brand-foreground` — Shared brand roles for control states, primary accents, and marks.
46
+ - `brand-hover` — Shared brand roles for control states, primary accents, and marks.
47
+ - `brand-text` — Shared brand roles for control states, primary accents, and marks.
48
48
  - `fill` — Quiet fill — avatars, chips, and disabled controls
49
49
  - `fill-foreground` — Quiet fill — avatars, chips, and disabled controls
50
50
  - `table-shell` — Table surfaces: the white tray, its hairlines, and header ink.
@@ -53,8 +53,8 @@ Reference semantic roles, never raw color/dimension literals (ads-lint rejects l
53
53
  - `artifact-canvas` — The artifact sheet: white warmed by a trace of the brand mark.
54
54
  - `accent` — The active and selected wash, one step above hover.
55
55
  - `accent-foreground` — The active and selected wash, one step above hover.
56
- - `success` — Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA.
57
- - `success-foreground` — Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA.
56
+ - `success` — Grass green 700 clears AA on White and both success soft fills.
57
+ - `success-foreground` — Grass green 700 clears AA on White and both success soft fills.
58
58
  - `warning` — Amber-500 fill kept (it IS the caution signal); dark ink foreground instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1).
59
59
  - `warning-foreground` — Amber-500 fill kept (it IS the caution signal); dark ink foreground instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1).
60
60
  - `danger` — Danger and info: solid semantic fills carrying white foregrounds.
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actioneer/ads",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "importPath": "@actioneer/ads",
5
5
  "styleImport": "@import \"@actioneer/ads/styles.css\";",
6
6
  "families": [
@@ -277,7 +277,7 @@
277
277
  "text-brand",
278
278
  "border-brand"
279
279
  ],
280
- "description": "Compatibility action role — neutral ink, never a colored primary hue."
280
+ "description": "Shared brand roles for control states, primary accents, and marks."
281
281
  },
282
282
  {
283
283
  "name": "--color-brand-foreground",
@@ -286,7 +286,7 @@
286
286
  "text-brand-foreground",
287
287
  "bg-brand-foreground"
288
288
  ],
289
- "description": "Compatibility action role — neutral ink, never a colored primary hue."
289
+ "description": "Shared brand roles for control states, primary accents, and marks."
290
290
  },
291
291
  {
292
292
  "name": "--color-brand-hover",
@@ -296,7 +296,7 @@
296
296
  "text-brand-hover",
297
297
  "border-brand-hover"
298
298
  ],
299
- "description": "Compatibility action role — neutral ink, never a colored primary hue."
299
+ "description": "Shared brand roles for control states, primary accents, and marks."
300
300
  },
301
301
  {
302
302
  "name": "--color-brand-text",
@@ -306,7 +306,7 @@
306
306
  "text-brand-text",
307
307
  "border-brand-text"
308
308
  ],
309
- "description": "Compatibility action role — neutral ink, never a colored primary hue."
309
+ "description": "Shared brand roles for control states, primary accents, and marks."
310
310
  },
311
311
  {
312
312
  "name": "--color-fill",
@@ -393,7 +393,7 @@
393
393
  "text-success",
394
394
  "border-success"
395
395
  ],
396
- "description": "Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA."
396
+ "description": "Grass green 700 clears AA on White and both success soft fills."
397
397
  },
398
398
  {
399
399
  "name": "--color-success-foreground",
@@ -402,7 +402,7 @@
402
402
  "text-success-foreground",
403
403
  "bg-success-foreground"
404
404
  ],
405
- "description": "Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA."
405
+ "description": "Grass green 700 clears AA on White and both success soft fills."
406
406
  },
407
407
  {
408
408
  "name": "--color-warning",
@@ -799,8 +799,8 @@
799
799
  ],
800
800
  "default": "solid",
801
801
  "options": {
802
- "solid": "The restrained teal primary CTA; use for the one primary action on a screen, keeping teal to roughly 5–10% of the UI.",
803
- "secondary": "A standalone neutral action that must still read as a real button (e.g. Cancel beside Save) — more emphasis than outline or ghost.",
802
+ "solid": "The teal primary CTA; shares the brand palette used by checked controls and selected states.",
803
+ "secondary": "A teal outlined companion action with accessible brand text and pale-teal hover fill.",
804
804
  "outline": "Unfilled with a visible border, lighter than secondary but still clearly a button.",
805
805
  "ghost": "Unfilled and borderless — the lowest-emphasis button chrome short of link.",
806
806
  "link": "Drops all button chrome for inline text-style actions; underlines on hover, no press scale.",
@@ -5142,7 +5142,7 @@
5142
5142
  "default": "default",
5143
5143
  "options": {
5144
5144
  "default": "Neutral heads-up with no status implication, foreground-colored icon/title, no urgency signaled.",
5145
- "success": "Confirms a completed or positive outcome (e.g. saved changes), green accent.",
5145
+ "success": "Grass green confirms a completed or positive outcome.",
5146
5146
  "warning": "Flags a non-blocking risk or upcoming issue (e.g. scheduled maintenance), amber accent.",
5147
5147
  "danger": "Signals a failure or blocking problem (e.g. connection error) needing attention, red accent.",
5148
5148
  "info": "Neutral-positive announcement or tip (e.g. new feature, update available), blue accent — softer than success, less urgent than warning."
@@ -9669,7 +9669,7 @@
9669
9669
  "required": false,
9670
9670
  "derived": true,
9671
9671
  "isDefault": true,
9672
- "description": "The restrained teal primary CTA; use for the one primary action on a screen, keeping teal to roughly 5–10% of the UI."
9672
+ "description": "The teal primary CTA; shares the brand palette used by checked controls and selected states."
9673
9673
  },
9674
9674
  {
9675
9675
  "id": "state:Button:variant=secondary",
@@ -9681,7 +9681,7 @@
9681
9681
  "required": false,
9682
9682
  "derived": true,
9683
9683
  "isDefault": false,
9684
- "description": "A standalone neutral action that must still read as a real button (e.g. Cancel beside Save) — more emphasis than outline or ghost."
9684
+ "description": "A teal outlined companion action with accessible brand text and pale-teal hover fill."
9685
9685
  },
9686
9686
  {
9687
9687
  "id": "state:Button:variant=outline",
@@ -14526,7 +14526,7 @@
14526
14526
  "required": false,
14527
14527
  "derived": true,
14528
14528
  "isDefault": false,
14529
- "description": "Confirms a completed or positive outcome (e.g. saved changes), green accent."
14529
+ "description": "Grass green confirms a completed or positive outcome."
14530
14530
  },
14531
14531
  {
14532
14532
  "id": "state:Alert:variant=warning",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actioneer/ads",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Actioneer Design System 1.0 — React 19 + Tailwind v4 component library.",
5
5
  "type": "module",
6
6
  "sideEffects": [
package/styles.css CHANGED
@@ -59,13 +59,13 @@
59
59
 
60
60
  /* ---- Type scale ---- seven canonical steps: XS · S · M · L · XL · 2XL · 3XL.
61
61
  Roles follow the agent workflow. Root stays 16px so spacing is unaffected. */
62
- --text-xs: 0.625rem; /* 10px · compact chips and micro metadata */
62
+ --text-xs: 0.625rem; /* 10px · noninteractive micro metadata */
63
63
  --text-xs--line-height: 0.875rem; /* 14px */
64
- --text-s: 0.75rem; /* 12px · table headers and uppercase kickers */
64
+ --text-s: 0.75rem; /* 12px · compact controls, table headers and kickers */
65
65
  --text-s--line-height: 1rem; /* 16px */
66
- --text-m: 0.875rem; /* 14px · default body, table cells, record names */
66
+ --text-m: 0.875rem; /* 14px · body, table cells, form labels and controls */
67
67
  --text-m--line-height: 1.25rem; /* 20px */
68
- --text-l: 1rem; /* 16px · tabs, form labels, and section titles */
68
+ --text-l: 1rem; /* 16px · tabs and section titles */
69
69
  --text-l--line-height: 1.375rem; /* 22px */
70
70
  --text-xl: 1.125rem; /* 18px · metric values and subtitles */
71
71
  --text-xl--line-height: 1.5rem; /* 24px */
@@ -110,18 +110,18 @@
110
110
  --color-t11: #016159;
111
111
  --color-t12: #0f3c37;
112
112
 
113
- --color-wg1: #f5f5f3;
114
- --color-wg2: #f1f1ef;
115
- --color-wg3: #ececea;
116
- --color-wg4: #e5e5e2;
117
- --color-wg5: #dcdcd8;
118
- --color-wg6: #d1d1cc;
119
- --color-wg7: #c2c2bc;
120
- --color-wg8: #a6a69f;
121
- --color-wg9: #777771;
122
- --color-wg10: #686863;
123
- --color-wg11: #4b4b47;
124
- --color-wg12: #20201e;
113
+ --color-wg1: #f9f7f0;
114
+ --color-wg2: #f3f1e9;
115
+ --color-wg3: #efece3;
116
+ --color-wg4: #e8e5db;
117
+ --color-wg5: #dfdcd0;
118
+ --color-wg6: #d4d1c4;
119
+ --color-wg7: #c6c2b3;
120
+ --color-wg8: #aaa698;
121
+ --color-wg9: #79766a;
122
+ --color-wg10: #6b685e;
123
+ --color-wg11: #4d4b44;
124
+ --color-wg12: #21201d;
125
125
 
126
126
  /* Deprecated Neutral Grey names resolve to the canonical Warm Grey ramp.
127
127
  Keep these aliases so existing consumer utilities continue to render. */
@@ -196,16 +196,15 @@
196
196
  --color-ink-950: var(--color-wg12);
197
197
 
198
198
  /* ---- Semantic accent ramps ---- */
199
- /* Success uses the lichen lime family and stays status-only. The original
200
- soft/base/deep anchors map to 50/500/600; 100 and 400 bridge the soft fill
201
- and base, while 700 deepens the family enough for AA text on White. */
202
- --color-success-50: #e4efcf;
203
- --color-success-100: #d4e5b5;
204
- --color-success-300: #c4dc9b;
205
- --color-success-400: #b4d281;
206
- --color-success-500: #a3c765;
207
- --color-success-600: #6e8f30;
208
- --color-success-700: #516923;
199
+ /* Grass green keeps positive states distinct from primary-action teal.
200
+ Soft fills use 50/100; 700 carries accessible status text and solid fills. */
201
+ --color-success-50: #f2fbef;
202
+ --color-success-100: #e1f3d8;
203
+ --color-success-300: #b2dda0;
204
+ --color-success-400: #8acb70;
205
+ --color-success-500: #4d9f38;
206
+ --color-success-600: #3b852b;
207
+ --color-success-700: #2d6b22;
209
208
 
210
209
  --color-warning-50: #fffaeb;
211
210
  --color-warning-100: #fef0c7;
@@ -241,8 +240,8 @@
241
240
  --color-amber-base: #f3a72e;
242
241
  --color-amber-deep: #b57414;
243
242
 
244
- /* Demo logo indigo — source for artifact canvas wash. */
245
- --color-brand-mark: #2e1065;
243
+ /* Brand mark and artifact canvas wash share the product teal. */
244
+ --color-brand-mark: var(--brand);
246
245
 
247
246
  /* ---- Radii ---- four canonical steps: XS · S · M · L.
248
247
  M (6px) is the default corner radius. */
@@ -403,7 +402,7 @@
403
402
  --color-action-primary-soft: var(--action-primary-soft);
404
403
  --color-field-focus: var(--field-focus);
405
404
 
406
- /* Compatibility action role — neutral ink, never a colored primary hue. */
405
+ /* Shared brand roles for control states, primary accents, and marks. */
407
406
  --color-brand: var(--brand);
408
407
  --color-brand-foreground: var(--brand-foreground);
409
408
  --color-brand-hover: var(--brand-hover);
@@ -424,9 +423,7 @@
424
423
  --color-accent: var(--accent);
425
424
  --color-accent-foreground: var(--accent-foreground);
426
425
 
427
- /* Lichen success-700 clears AA on White and both success soft fills;
428
- success-600 is reserved for non-text marks because its 3.73:1 contrast
429
- on White does not clear body-text AA. */
426
+ /* Grass green 700 clears AA on White and both success soft fills. */
430
427
  --color-success: var(--color-success-700);
431
428
  --color-success-foreground: var(--color-white);
432
429
  /* Amber-500 fill kept (it IS the caution signal); dark ink foreground
@@ -480,8 +477,7 @@
480
477
 
481
478
  /* ---- Theme (light only) ---- */
482
479
  :root {
483
- /* Surfaces and achromatic text/actions point into WG; the primary CTA
484
- points into G. */
480
+ /* Surfaces and neutral text use WG; actions and controls share Teal. */
485
481
  --background: var(--color-wg2); /* step 2 · canvas */
486
482
  --foreground: var(--color-wg12); /* step 12 */
487
483
 
@@ -489,18 +485,18 @@
489
485
  WG9 is the tertiary/de-emphasis step for nonessential metadata. It clears
490
486
  normal-text AA on White; use Secondary when normal text on WG2 must clear
491
487
  AA. */
492
- --text-on-white-primary: var(--color-wg12); /* 16.32:1 · AAA */
493
- --text-on-white-secondary: var(--color-wg11); /* 8.76:1 · AAA */
494
- --text-on-white-tertiary: var(--color-wg9); /* 4.50:1 · AA */
495
- --text-on-warm-grey-primary: var(--color-wg12); /* 14.43:1 on WG2 · AAA */
496
- --text-on-warm-grey-secondary: var(--color-wg11); /* 7.75:1 on WG2 · AAA */
497
- --text-on-warm-grey-tertiary: var(--color-wg9); /* 3.98:1 on WG2 · large text AA */
488
+ --text-on-white-primary: var(--color-wg12); /* 16.29:1 · AAA */
489
+ --text-on-white-secondary: var(--color-wg11); /* 8.73:1 · AAA */
490
+ --text-on-white-tertiary: var(--color-wg9); /* 4.55:1 · AA */
491
+ --text-on-warm-grey-primary: var(--color-wg12); /* 14.41:1 on WG2 · AAA */
492
+ --text-on-warm-grey-secondary: var(--color-wg11); /* 7.72:1 on WG2 · AAA */
493
+ --text-on-warm-grey-tertiary: var(--color-wg9); /* 4.03:1 on WG2 · large text AA */
498
494
 
499
495
  /* Existing context-free utilities remain conservative compatibility aliases
500
496
  across WG2–WG4 and White until their call sites adopt a surface role. */
501
497
  --text-primary: var(--color-wg12); /* 12.93:1 AAA (WG4 min surf) */
502
- --text-secondary: var(--color-wg11); /* 6.94:1 AA (WG4 min surf) */
503
- --text-tertiary: color-mix(in srgb, var(--color-wg10) 80%, var(--color-wg11)); /* 4.86:1 AA (WG4) */
498
+ --text-secondary: var(--color-wg11); /* 6.93:1 AA (WG4 min surf) */
499
+ --text-tertiary: color-mix(in srgb, var(--color-wg10) 80%, var(--color-wg11)); /* 4.83:1 AA (WG4) */
504
500
 
505
501
  --surface: var(--color-wg3); /* step 3 · tinted canvas */
506
502
  --surface-foreground: var(--color-wg12);
@@ -512,25 +508,22 @@
512
508
  --card: var(--color-white); /* pure white base */
513
509
  --card-foreground: var(--color-wg12);
514
510
 
515
- /* Studio teal is deliberately isolated to the primary CTA role (roughly
516
- 5–10% of a screen). Selection controls keep using neutral `brand` below,
517
- so tabs, switches, radios, and progress never inherit CTA color. */
511
+ /* One teal action palette shared by CTAs and component interaction states. */
518
512
  --action-primary: var(--color-t9);
519
513
  --action-primary-foreground: var(--color-white);
520
514
  --action-primary-hover: var(--color-t10);
521
515
  --action-primary-text: var(--color-t11);
522
516
  --action-primary-soft: var(--color-t3);
523
517
 
524
- /* Neutral action role. The `brand` name remains as a compatibility API,
525
- and shared selection/control states intentionally remain achromatic. */
526
- --brand: var(--color-wg12); /* darkest neutral action */
527
- --brand-foreground: var(--color-white);
528
- --brand-hover: var(--color-wg11); /* lighter hover lift */
529
- --brand-text: var(--color-wg12); /* action text / links */
518
+ /* Brand aliases follow the action roles so every consumer stays in sync. */
519
+ --brand: var(--action-primary);
520
+ --brand-foreground: var(--action-primary-foreground);
521
+ --brand-hover: var(--action-primary-hover);
522
+ --brand-text: var(--action-primary-text);
530
523
 
531
524
  /* Interactive row hover/focus uses the WG2 highlight wash. */
532
525
  --table-row-hover: var(--color-wg2);
533
- --table-row-selected: var(--color-wg1);
526
+ --table-row-selected: var(--action-primary-soft);
534
527
 
535
528
  /* Quiet component fill. WG3 is the first interactive-background
536
529
  step, so this remains visible on both white cards and the step-2 canvas. */
@@ -563,7 +556,7 @@
563
556
 
564
557
  /* Stroke width — every standard UI border is exactly 1px. */
565
558
  --stroke-width: 1px;
566
- --ring: color-mix(in srgb, var(--color-wg12) 50%, transparent); /* WG12 @ 50% */
559
+ --ring: var(--brand); /* visible teal focus */
567
560
  --overlay: color-mix(in srgb, var(--color-wg12) 50%, transparent); /* WG12 @ 50% */
568
561
 
569
562
  /* Functional / domain tokens — named for their render role, pointing into
@@ -576,7 +569,7 @@
576
569
  --chart-context: var(--color-wg6); /* de-emphasised context series */
577
570
  --chart-active-bar-opacity: 0.68; /* hover lightens a bar while preserving its series hue */
578
571
  --canvas-edge: var(--border-secondary);/* infinite-canvas edges / connectors */
579
- --texture-ink: var(--color-wg12); /* brand-texture / pixel-blast marks */
572
+ --texture-ink: var(--brand); /* brand-texture / pixel-blast marks */
580
573
  --table-shell: var(--color-white); /* simplified single-surface table */
581
574
  --table-stroke: var(--color-wg3); /* table outline + row separators */
582
575
  --table-header-foreground: var(--text-tertiary); /* 12px tertiary table heading text */
@@ -595,8 +588,8 @@
595
588
  --sidebar-foreground: var(--foreground);
596
589
  --sidebar-primary: var(--brand);
597
590
  --sidebar-primary-foreground: var(--brand-foreground);
598
- --sidebar-accent: var(--muted);
599
- --sidebar-accent-foreground: var(--foreground);
591
+ --sidebar-accent: var(--action-primary-soft);
592
+ --sidebar-accent-foreground: var(--brand-text);
600
593
  --sidebar-border: var(--border);
601
594
  --sidebar-ring: var(--ring);
602
595
  --popover: var(--elevated);