@actioneer/ads 0.5.6 → 0.5.8

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 (149) hide show
  1. package/bin/ads-init.mjs +6 -0
  2. package/components/accordion.js +50 -48
  3. package/components/agent-icon.d.ts +12 -0
  4. package/components/agent-icon.js +135 -121
  5. package/components/ai-elements/chain-of-thought-icon.d.ts +10 -12
  6. package/components/ai-elements/chain-of-thought-icon.js +341 -201
  7. package/components/ai-elements/chain-of-thought.d.ts +2 -2
  8. package/components/ai-elements/chain-of-thought.js +108 -108
  9. package/components/ai-elements/chart.js +16 -14
  10. package/components/ai-elements/inline-citation.js +41 -41
  11. package/components/ai-elements/message.js +4 -4
  12. package/components/ai-elements/queue.js +7 -7
  13. package/components/ai-elements/research-activity.js +114 -114
  14. package/components/ai-elements/shimmer.d.ts +2 -2
  15. package/components/ai-elements/speech-input.js +28 -28
  16. package/components/ai-elements/task-progress.js +26 -16
  17. package/components/ai-elements/task.js +17 -17
  18. package/components/ai-elements/tool.js +6 -6
  19. package/components/ai-elements/transcript.js +6 -5
  20. package/components/ai-elements/voice.js +1 -1
  21. package/components/alert.js +10 -10
  22. package/components/answer-sources.d.ts +42 -0
  23. package/components/answer-sources.js +111 -0
  24. package/components/answer.js +115 -114
  25. package/components/assistant-ui/action-bar.js +94 -48
  26. package/components/assistant-ui/attachment.js +131 -103
  27. package/components/assistant-ui/badge.d.ts +1 -1
  28. package/components/assistant-ui/badge.js +17 -17
  29. package/components/assistant-ui/chain-of-thought.d.ts +1 -1
  30. package/components/assistant-ui/composer-add-context.js +9 -9
  31. package/components/assistant-ui/composer-deep-research.js +5 -5
  32. package/components/assistant-ui/composer-harness.js +12 -9
  33. package/components/assistant-ui/composer-trigger-popover.js +45 -34
  34. package/components/assistant-ui/composer.js +59 -59
  35. package/components/assistant-ui/error.js +14 -14
  36. package/components/assistant-ui/file.d.ts +1 -1
  37. package/components/assistant-ui/image.d.ts +1 -1
  38. package/components/assistant-ui/image.js +113 -103
  39. package/components/assistant-ui/markdown-text.js +18 -18
  40. package/components/assistant-ui/message.js +46 -45
  41. package/components/assistant-ui/quote.js +1 -1
  42. package/components/assistant-ui/reasoning.d.ts +1 -1
  43. package/components/assistant-ui/reasoning.js +66 -77
  44. package/components/assistant-ui/suggestions.js +4 -4
  45. package/components/assistant-ui/thread-context.d.ts +2 -0
  46. package/components/assistant-ui/thread.js +41 -40
  47. package/components/assistant-ui/tool-fallback.js +60 -63
  48. package/components/assistant-ui/tool-group.d.ts +1 -1
  49. package/components/assistant-ui/tool-group.js +36 -42
  50. package/components/audio-waveform.js +25 -24
  51. package/components/autocomplete.d.ts +1 -0
  52. package/components/autocomplete.js +45 -43
  53. package/components/avatar.js +30 -30
  54. package/components/badge.d.ts +1 -1
  55. package/components/breadcrumbs.js +2 -2
  56. package/components/button.d.ts +2 -2
  57. package/components/button.js +22 -20
  58. package/components/card.js +8 -8
  59. package/components/carousel.js +105 -104
  60. package/components/chart.js +9 -7
  61. package/components/checkbox.js +74 -38
  62. package/components/chip.d.ts +1 -1
  63. package/components/code-block.js +3 -3
  64. package/components/collapsible.js +67 -23
  65. package/components/connector-card.js +6 -6
  66. package/components/drawer.d.ts +15 -10
  67. package/components/drawer.js +78 -77
  68. package/components/dropdown.d.ts +3 -1
  69. package/components/dropdown.js +88 -79
  70. package/components/empty-state.d.ts +4 -4
  71. package/components/empty-state.js +7 -7
  72. package/components/field.d.ts +4 -0
  73. package/components/field.js +45 -34
  74. package/components/file-dropzone.js +12 -12
  75. package/components/index.d.ts +4 -0
  76. package/components/index.js +584 -553
  77. package/components/infinite-canvas.js +1 -1
  78. package/components/input-field.js +51 -46
  79. package/components/input.js +20 -20
  80. package/components/link.js +9 -9
  81. package/components/modal.js +105 -73
  82. package/components/navbar.d.ts +1 -1
  83. package/components/navbar.js +1 -1
  84. package/components/number-field.js +38 -29
  85. package/components/page-header.js +12 -12
  86. package/components/pagination.js +19 -19
  87. package/components/panel.js +2 -2
  88. package/components/pixel-blast-svg.js +3 -3
  89. package/components/pixel-icon.d.ts +3 -1
  90. package/components/pixel-icon.js +294 -215
  91. package/components/popover.d.ts +1 -1
  92. package/components/popover.js +66 -64
  93. package/components/progress-circle.js +36 -32
  94. package/components/progress.js +28 -24
  95. package/components/radio.js +59 -49
  96. package/components/resizable-panel.js +1 -1
  97. package/components/reveal.d.ts +2 -2
  98. package/components/ripple.d.ts +3 -3
  99. package/components/scroll-area.js +17 -16
  100. package/components/segmented.d.ts +4 -1
  101. package/components/segmented.js +26 -25
  102. package/components/select.d.ts +2 -0
  103. package/components/select.js +61 -57
  104. package/components/setting-row.js +45 -42
  105. package/components/sidebar.d.ts +2 -2
  106. package/components/sidebar.js +131 -127
  107. package/components/skeleton.js +5 -5
  108. package/components/spinner.d.ts +13 -4
  109. package/components/spinner.js +42 -42
  110. package/components/stepper.js +21 -21
  111. package/components/switch.js +52 -32
  112. package/components/table.d.ts +24 -7
  113. package/components/table.js +457 -220
  114. package/components/tabs.js +149 -137
  115. package/components/textarea.js +1 -2
  116. package/components/toast.js +66 -66
  117. package/components/tooltip.js +2 -2
  118. package/components/tree.js +62 -51
  119. package/components/typography.d.ts +2 -1
  120. package/components/typography.js +33 -32
  121. package/components/ui/button.d.ts +2 -2
  122. package/components/ui/button.js +19 -19
  123. package/components/ui/collapsible.d.ts +1 -5
  124. package/components/ui/dialog.d.ts +3 -3
  125. package/components/ui/dialog.js +95 -58
  126. package/components/ui/tooltip.d.ts +2 -2
  127. package/components/ui/tooltip.js +67 -33
  128. package/components/viz-charts.js +95 -95
  129. package/demo/components/add-to-artifact.js +341 -0
  130. package/demo/lib/artifact-library.js +134 -0
  131. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  132. package/fonts/aribau-grotesk-regular.woff2 +0 -0
  133. package/fonts.css +11 -11
  134. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
  135. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
  136. package/lib/icons.d.ts +12 -0
  137. package/lib/icons.js +107 -104
  138. package/lib/motion.d.ts +42 -39
  139. package/lib/motion.js +112 -52
  140. package/lib/spinner-mark.d.ts +9 -0
  141. package/lib/spinner-mark.js +98 -0
  142. package/llms.txt +69 -26
  143. package/manifest.json +344 -42
  144. package/package.json +1 -1
  145. package/styles.css +175 -161
  146. package/theme.css +104 -128
  147. package/components/ui/collapsible.js +0 -35
  148. package/fonts/aribau-grotesk-500.otf +0 -0
  149. package/fonts/aribau-grotesk-600.woff2 +0 -0
package/theme.css CHANGED
@@ -1,14 +1,21 @@
1
1
  /* @actioneer/ads — generated by scripts/build-lib-styles.mjs. Do not edit. */
2
+ /* ADS is light-only. Redefine the `dark` variant to be class-gated instead of
3
+ Tailwind's default `@media (prefers-color-scheme: dark)`, so a stray `dark:`
4
+ utility can never activate off the OS setting while there is no dark token
5
+ set. Nothing in ADS adds `.dark`, so `dark:` styles stay dormant. */
6
+ @custom-variant dark (&:where(.dark, .dark *));
7
+
2
8
  /*
3
9
  * ============================================================
4
10
  * ADS 1.0 — Design Tokens
5
- * Brand: Sage (green) · Neutrals: brand-palette grey · Typeface: Aribau Grotesk
11
+ * Palette: Ink neutrals · Typeface: Aribau Grotesk
6
12
  * ============================================================
7
13
  */
8
14
  @theme {
9
15
  /* ---- Typography ----
10
- One brand typeface. Figures inside prose stay in Aribau Grotesk with
11
- `tabular-nums`; only literal source code steps to the mono stack. */
16
+ One brand typeface (Regular + Medium). Figures stay in Aribau Grotesk with
17
+ `tabular-nums` (enabled globally in index.css); only literal source code
18
+ steps to the mono stack. */
12
19
  --font-sans: "Aribau Grotesk", ui-sans-serif, system-ui, -apple-system,
13
20
  "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
14
21
 
@@ -40,49 +47,30 @@
40
47
  --text-2xl: 1.625rem; /* 26px — display */
41
48
  --text-2xl--line-height: 2rem;
42
49
 
43
- /* ---- Neutral ramp — the full 12-step brand palette grey (light section,
44
- solid row). A Radix-style scale: each step owns a role — 50/100 =
50
+ /* ---- Neutral ramp — a role-based neutral Gray 12-step light scale. Every
51
+ channel is equal, so the product stays neutral with no Sand/Sage cast.
52
+ The light surface steps retain subtle spacing; the solid/text end is
53
+ perceptually widened so adjacent swatches and UI roles stay distinct.
54
+ Each step owns a role — 50/100 =
45
55
  backgrounds, 200/300/400 = interactive component fills, 500/600/700 =
46
- borders & separators, 800/850 = solid, 900/950 = accessible text. All 12
47
- values are present (the earlier 11-step cut is restored: #82827f is
48
- ink-850). The `ink` name is retained so every existing reference resolves;
49
- the semantic tokens below are re-derived from these roles. ---- */
50
- --color-ink-50: #fdfdfc; /* 1 · background */
51
- --color-ink-100: #f9f9f8; /* 2 · background */
52
- --color-ink-200: #f0f0ef; /* 3 · interactive */
53
- --color-ink-300: #e8e8e7; /* 4 · interactive */
54
- --color-ink-400: #e1e1e0; /* 5 · interactive */
55
- --color-ink-500: #d9d9d8; /* 6 · border */
56
- --color-ink-600: #cececd; /* 7 · border */
57
- --color-ink-700: #bbbbb9; /* 8 · border */
58
- --color-ink-800: #8c8c89; /* 9 · solid */
59
- --color-ink-850: #82827f; /* 10 · solid */
60
- --color-ink-900: #636461; /* 11 · accessible text */
61
- --color-ink-950: #1f1f1c; /* 12 · accessible text */
62
-
63
- /* ---- Brand ramp — the full 12-step Sage green (light section, solid row),
64
- same Radix roles as the neutral ramp. All 12 present: sage-850 (#417c36,
65
- step 11 = the accessible green text tone) and sage-950 (#273d23, step 12)
66
- are restored. The interactive brand (--brand #3f7a34) is step 9 (solid);
67
- its hover is step 10 (#316c26). NOTE: steps 9–12 are not a pure lightness
68
- ramp (Radix convention) — the Tailwind name order differs from role
69
- order, so read the role comment, not the number. ---- */
70
- --color-sage-50: #fbfefb; /* 1 · background */
71
- --color-sage-100: #f6fbf5; /* 2 · background */
72
- --color-sage-200: #e9f7e6; /* 3 · interactive */
73
- --color-sage-300: #dbf1d6; /* 4 · interactive */
74
- --color-sage-400: #cae8c5; /* 5 · interactive */
75
- --color-sage-500: #b6dcaf; /* 6 · border */
76
- --color-sage-600: #9ccc93; /* 7 · border */
77
- --color-sage-700: #77b76b; /* 8 · border */
78
- --color-sage-800: #3f7a34; /* 9 · solid (brand) */
79
- --color-sage-900: #316c26; /* 10 · solid (hover) */
80
- --color-sage-850: #417c36; /* 11 · accessible text */
81
- --color-sage-950: #273d23; /* 12 · accessible text */
56
+ borders & separators, 800/850 = solid, 900/950 = accessible text. The
57
+ `ink` name is retained as the stable ADS API. ---- */
58
+ --color-ink-50: #fcfcfc; /* 1 · background */
59
+ --color-ink-100: #f9f9f9; /* 2 · background */
60
+ --color-ink-150: #f5f5f5; /* canvas */
61
+ --color-ink-200: #f0f0f0; /* 3 · interactive */
62
+ --color-ink-300: #e8e8e8; /* 4 · interactive */
63
+ --color-ink-400: #e0e0e0; /* 5 · interactive */
64
+ --color-ink-500: #d9d9d9; /* 6 · border */
65
+ --color-ink-600: #cecece; /* 7 · border */
66
+ --color-ink-700: #bbbbbb; /* 8 · border */
67
+ --color-ink-800: #8d8d8d; /* 9 · solid */
68
+ --color-ink-850: #737373; /* 10 · solid */
69
+ --color-ink-900: #555555; /* 11 · accessible text */
70
+ --color-ink-950: #202020; /* 12 · accessible text */
82
71
 
83
72
  /* ---- Semantic accent ramps ---- */
84
- /* Success — shifted cooler (emerald/teal) so positive states stay clearly
85
- distinct from the warm Sage brand green. */
73
+ /* Success stays a semantic state color, never a product-primary hue. */
86
74
  --color-success-50: #ecfdf5;
87
75
  --color-success-100: #d1fae5;
88
76
  --color-success-500: #10b981;
@@ -109,7 +97,7 @@
109
97
 
110
98
  /* ---- Data-viz accents ---- three small ramps for charts & illustration.
111
99
  deep = text/lines · base = fills · soft = backgrounds. Separate from the
112
- semantic status ramps above; these are the "focal data" companions to Sage. */
100
+ semantic status ramps above; these carry data, not product identity. */
113
101
  --color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
114
102
  --color-cyan-base: #12b5a5;
115
103
  --color-cyan-deep: #0a7e82;
@@ -120,14 +108,23 @@
120
108
  --color-amber-base: #f3a72e;
121
109
  --color-amber-deep: #b57414;
122
110
 
123
- /* ---- Radii ---- FIVE steps only: 2 · 4 · 8 · 16 · 24 (px), plus `full`
124
- for pills/circles. xs aliases sm (4px); 2xl aliases xl (24px). */
125
- --radius-xs: 0.25rem; /* 4px */
126
- --radius-sm: 0.25rem; /* 4px */
127
- --radius-md: 0.5rem; /* 8px */
128
- --radius-lg: 1rem; /* 16px */
129
- --radius-xl: 1.5rem; /* 24px */
130
- --radius-2xl: 1.5rem; /* 24px (alias xl) */
111
+ /* Demo logo indigo — source for artifact canvas wash. */
112
+ --color-brand-mark: #2e1065;
113
+
114
+ /* ---- Radii ---- FOUR values, assigned by element scale and role.
115
+ 2px = micro details; 4px = compact controls; 8px = standard controls
116
+ and floating UI; 16px = cards and large surfaces. The repeated aliases
117
+ keep the familiar Tailwind role names while capping surfaces at 16px. */
118
+ --radius-xs: 0.125rem; /* 2px · micro details */
119
+ --radius-sm: 0.25rem; /* 4px · compact controls */
120
+ --radius-md: 0.5rem; /* 8px · standard controls */
121
+ --radius-lg: 0.5rem; /* 8px · menus and panels */
122
+ --radius-xl: 1rem; /* 16px · cards and surfaces */
123
+ --radius-2xl: 1rem; /* 16px · large surfaces */
124
+ --radius-3xl: 1rem; /* 16px · capped compatibility alias */
125
+ --radius-4xl: 1rem; /* 16px · capped compatibility alias */
126
+ /* Shape-only exception for avatars, icon buttons, progress tracks, chips,
127
+ and badges. It is not part of the corner-radius scale. */
131
128
  --radius-full: 9999px;
132
129
  /* Status/indicator dots are SQUARE with a hair of softening — echoing the
133
130
  growth-mark's square cells. Never render an indicator dot as a circle
@@ -137,20 +134,17 @@
137
134
 
138
135
  /* ---- Elevation ---- ONE soft token (Claude-panel style).
139
136
  Delineate surfaces with fill color first; add this to gently lift them.
140
- Tuned quieter (2026-07-30): the ambient drop sits closer (y8→y4,
141
- blur28→16) at lower opacity (9%→6%) with a faint COOL slate tint
142
- (rgb 15 23 42, not near-black) — a hard, offset-heavy black drop read
143
- "cheap" and floated small controls (switch thumb, tab pill). */
144
- --shadow-elevation: 0 0 0 1px rgb(15 23 42 / 0.03),
145
- 0 1px 2px 0 rgb(15 23 42 / 0.04),
146
- 0 4px 16px -6px rgb(15 23 42 / 0.06);
137
+ The ambient drop sits close (y4, blur16) at low opacity and uses neutral
138
+ ink — never a cool slate tint that would reintroduce a color cast. */
139
+ --shadow-elevation: 0 0 0 1px rgb(32 32 32 / 0.03),
140
+ 0 1px 2px 0 rgb(32 32 32 / 0.04),
141
+ 0 4px 16px -6px rgb(32 32 32 / 0.06);
147
142
 
148
143
  /* Pinned-table-column smudges — whisper-soft directional casts shown only
149
144
  while content is hidden behind a sticky column (Table is scroll-aware).
150
- Deep negative spread keeps the edge feathered; same cool slate tint as
151
- the elevation token. */
152
- --shadow-table-smudge-left: 8px 0 24px -14px rgb(15 23 42 / 0.05);
153
- --shadow-table-smudge-right: -8px 0 24px -14px rgb(15 23 42 / 0.05);
145
+ Deep negative spread keeps the edge feathered; the tint is neutral ink. */
146
+ --shadow-table-smudge-left: 8px 0 24px -14px rgb(32 32 32 / 0.05);
147
+ --shadow-table-smudge-right: -8px 0 24px -14px rgb(32 32 32 / 0.05);
154
148
 
155
149
  /* ---- CTA inner glow ---- luminous inset highlight for primary buttons
156
150
  (adapted from the "AI button" Figma): a crisp top-edge catch plus a soft
@@ -164,36 +158,7 @@
164
158
  inset 0 8px 16px -8px rgb(255 255 255 / 0.45);
165
159
  /* Text fields — a whisper of inset depth so the writing surface reads
166
160
  recessed into the page (persists through hover/focus/invalid). */
167
- --inner-glow-field: inset 0 1px 2px 0 rgb(10 10 11 / 0.06);
168
-
169
- /* ---- Motion ---- strong custom curves; the built-in CSS easings are too
170
- weak. Declared here so the `ease-out` / `ease-in-out` utilities resolve
171
- to these system-wide. JS mirror: src/lib/motion.ts — keep in sync. */
172
- --ease-out: cubic-bezier(0.23, 1, 0.32, 1); /* entrances, exits, presses */
173
- --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1); /* on-screen movement / morphs */
174
- --ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1); /* side-panel and drawer slide */
175
- --ease-drawer: var(--ease-expo-out); /* backwards-compatible alias */
176
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* playful overshoot (rare) */
177
- --ease-disclosure: cubic-bezier(0.32, 0.72, 0, 1); /* height reveals — moves off the mark immediately, settles long */
178
-
179
- /* Durations — every animation/transition timing flows from these.
180
- UI animations stay under 300ms; exits run faster than enters. */
181
- --duration-fast: 0.15s; /* menu / popover / tooltip enter */
182
- --duration-normal: 0.2s; /* state transitions */
183
- --duration-disclosure: 0.28s; /* collapsible open — travels a real distance */
184
- --duration-spin: 0.8s; /* rotation loops (spinner) */
185
- --duration-pulse: 1.5s; /* breathing / shimmer loops */
186
- --duration-bloom: 0.9s; /* ambient reveals (chat texture bloom, curtain wipe) */
187
- --duration-brand-loader: 3.4s; /* BrandLoader flicker loop */
188
-
189
- /* Entrance-choreography beats — staggered delays for sequenced arrivals
190
- (e.g. chat welcome: mark → greeting → composer). */
191
- --stagger-1: 0.2s;
192
- --stagger-2: 0.3s;
193
- --stagger-3: 0.42s;
194
-
195
- /* Press feedback — every pressable element scales down on :active */
196
- --scale-press: 0.97;
161
+ --inner-glow-field: inset 0 1px 2px 0 rgb(32 32 32 / 0.06);
197
162
 
198
163
  /* ---- Layout ---- app-frame dimensions (Sidebar / Panel) */
199
164
  --sidebar-width: 15rem; /* 240px — primary nav rail */
@@ -273,7 +238,7 @@
273
238
  --color-card: var(--card);
274
239
  --color-card-foreground: var(--card-foreground);
275
240
 
276
- /* Brand (Sage green) — used for solid fills / primary actions, not body text */
241
+ /* Compatibility action role — neutral ink, never a colored primary hue. */
277
242
  --color-brand: var(--brand);
278
243
  --color-brand-foreground: var(--brand-foreground);
279
244
  --color-brand-hover: var(--brand-hover);
@@ -284,13 +249,18 @@
284
249
  --color-fill-foreground: var(--fill-foreground);
285
250
  --color-table-shell: var(--table-shell);
286
251
 
252
+ --color-artifact-canvas: var(--artifact-canvas);
253
+
287
254
  --color-accent: var(--accent);
288
255
  --color-accent-foreground: var(--accent-foreground);
289
256
 
290
- --color-success: var(--color-success-600);
257
+ /* success-700 on white = 5.48:1 (600 was 3.77:1, failed AA). */
258
+ --color-success: var(--color-success-700);
291
259
  --color-success-foreground: #ffffff;
260
+ /* Amber-500 fill kept (it IS the caution signal); dark ink foreground
261
+ instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1). */
292
262
  --color-warning: var(--color-warning-500);
293
- --color-warning-foreground: #ffffff;
263
+ --color-warning-foreground: var(--color-ink-950);
294
264
  --color-danger: var(--color-danger-600);
295
265
  --color-danger-foreground: #ffffff;
296
266
  --color-info: var(--color-info-600);
@@ -332,18 +302,20 @@
332
302
 
333
303
  /* ---- Theme (light only) ---- */
334
304
  :root {
335
- /* Every semantic token below points INTO a primitive scale step
336
- (var(--color-ink-*) / var(--color-sage-*)) — the 12-step scales are the
337
- single source of truth. Only pure white (#ffffff) stays literal: it is a
338
- base surface, not a neutral scale step. */
305
+ /* Every neutral semantic token below points INTO the ink primitive scale.
306
+ Only pure white (#ffffff) stays literal: it is a base surface, not a
307
+ neutral scale step. */
339
308
  --background: var(--color-ink-100); /* step 2 · canvas */
340
309
  --foreground: var(--color-ink-950); /* step 12 */
341
310
 
342
- /* Text levels: primary ink-950, secondary ink-900, tertiary ink-800.
343
- Primary + secondary clear AA for body copy; tertiary is AA-large only. */
344
- --text-primary: var(--color-ink-950); /* ~16:1 AAA */
345
- --text-secondary: var(--color-ink-900); /* ~5.3:1 AA */
346
- --text-tertiary: var(--color-ink-800); /* ~3:1 AA-large */
311
+ /* Text levels: primary ink-950, secondary ink-900, tertiary a tuned grey.
312
+ All three clear AA (4.5:1) for body copy on every surface they land on.
313
+ Tertiary is NOT an ink step: ink-800 (#8d8d8d) was AA-large only (2.7:1
314
+ on muted) but is used at 13px in 200+ places, so it is pinned to the
315
+ lightest grey that still passes 4.5:1 on bg/card/surface/muted. */
316
+ --text-primary: var(--color-ink-950); /* ~16:1 AAA */
317
+ --text-secondary: var(--color-ink-900); /* ~7.1:1 AAA */
318
+ --text-tertiary: #686868; /* ~4.55:1 AA (min surf) */
347
319
 
348
320
  --surface: var(--color-ink-200); /* step 3 · tinted canvas */
349
321
  --surface-foreground: var(--color-ink-950);
@@ -355,11 +327,12 @@
355
327
  --card: #ffffff; /* pure white base */
356
328
  --card-foreground: var(--color-ink-950);
357
329
 
358
- /* Sage brand (green) — solid role. brand = sage step 9, hover = step 10. */
359
- --brand: var(--color-sage-800); /* step 9 · solid */
330
+ /* Neutral action role. The `brand` name remains as a compatibility API,
331
+ but the product has no colored primary palette. */
332
+ --brand: var(--color-ink-950); /* darkest action ink */
360
333
  --brand-foreground: #ffffff;
361
- --brand-hover: var(--color-sage-900); /* step 10 · hover */
362
- --brand-text: var(--color-sage-850); /* step 11 · accessible green text/links */
334
+ --brand-hover: var(--color-ink-900); /* lighter hover lift */
335
+ --brand-text: var(--color-ink-950); /* action text / links */
363
336
 
364
337
  /* Table interaction fills are pre-composited and opaque. Sticky edge cells
365
338
  therefore cover horizontally scrolled content while preserving the
@@ -367,56 +340,59 @@
367
340
  --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
368
341
  --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
369
342
 
370
- /* Quiet fill */
371
- --fill: var(--color-ink-50); /* step 1 · lightest recessed fill */
343
+ /* Quiet component fill. Radix step 3 is the first interactive-background
344
+ step, so this remains visible on both white cards and the step-2 canvas. */
345
+ --fill: var(--color-ink-200); /* step 3 · default component fill */
372
346
  --fill-foreground: var(--color-ink-950);
373
347
 
374
- --accent: var(--color-ink-200); /* step 3 */
348
+ --accent: var(--color-ink-400); /* step 5 · active / selected wash */
375
349
  --accent-foreground: var(--color-ink-950);
376
350
 
377
- /* Borders — a three-level scale, primary (strongest) → tertiary (faintest). */
378
- --border-primary: var(--color-ink-600); /* #cececd · strongest */
379
- --border-secondary: var(--color-ink-400); /* #e1e1e0 · default */
380
- --border-tertiary: var(--color-ink-200); /* #f0f0ef · faintest */
351
+ /* Borders use consecutive Radix steps 5–7. This avoids the old 3→5→7 jump:
352
+ tertiary stays quiet but visible at 0.5px, secondary is the Radix subtle
353
+ border step, and primary is the default interactive-control edge. */
354
+ --border-primary: var(--color-ink-600); /* step 7 · #cecece · strongest */
355
+ --border-secondary: var(--color-ink-500); /* step 6 · #d9d9d9 · default */
356
+ --border-tertiary: var(--color-ink-400); /* step 5 · #e0e0e0 · faintest */
381
357
  /* Legacy aliases point into the scale so existing utilities keep resolving. */
382
358
  --border: var(--border-secondary); /* default hairline / separator */
383
359
  --border-strong: var(--border-primary); /* emphasized / hover / selected */
384
360
  --input: var(--border-primary); /* form-control edge */
385
361
 
386
362
  /* Ripple — the appearance wash that radiates from a floating surface's
387
- origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft brand
363
+ origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
388
364
  tint that expands + fades once on mount; see the `.ads-ripple` layer and
389
- the `Ripple` component. Duration stays in the sub-300ms UI band. */
365
+ the `Ripple` component. */
390
366
  --ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
391
- --ripple-duration: 300ms;
392
367
 
393
368
  /* Stroke width — ADS hairlines are 0.5px, not the Tailwind 1px default.
394
369
  The single-width border utilities are overridden to this token at the
395
370
  bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
396
371
  true hairline. Explicit `border-2`+ widths are unaffected. */
397
372
  --stroke-width: 0.5px;
398
- --ring: color-mix(in srgb, var(--color-sage-800) 50%, transparent); /* brand @ 50% */
373
+ --ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
399
374
  --overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
400
375
 
401
376
  /* Functional / domain tokens — named for their RENDER role, pointing into
402
377
  the ink scale. Components pass these into non-CSS renderers (Recharts,
403
378
  React Flow, the Paper/WebGL texture) so no component carries a raw ink-*
404
379
  value. Same DS pattern as the data-viz --color-chart-* palette. */
405
- --chart-axis: var(--color-ink-200); /* axis lines + de-emphasised marks */
406
- --chart-grid: var(--color-ink-50); /* gridlines */
407
- --chart-track: var(--color-ink-100); /* funnel / progress track */
408
- --chart-context: var(--color-ink-300); /* de-emphasised context series */
409
- --canvas-edge: var(--color-ink-300); /* infinite-canvas edges / connectors */
380
+ --chart-axis: var(--border-tertiary); /* axis lines + de-emphasised marks */
381
+ --chart-grid: var(--color-ink-200); /* quieter than axes, visible on white */
382
+ --chart-track: var(--color-ink-200); /* funnel / progress track */
383
+ --chart-context: var(--color-ink-500); /* de-emphasised context series */
384
+ --canvas-edge: var(--border-secondary);/* infinite-canvas edges / connectors */
410
385
  --texture-ink: var(--color-ink-950); /* brand-texture / pixel-blast marks */
411
386
  --table-shell: var(--color-ink-200); /* recessed table tray (lighter than muted) */
412
- --table-scroll-hint: rgb(15 23 42 / 0.04); /* right-edge "more columns" wash */
387
+ --table-scroll-hint: rgb(32 32 32 / 0.04); /* right-edge "more columns" wash */
413
388
  --surface-inverse: var(--color-ink-950); /* dark hero / inverse surface base */
414
389
  --surface-inverse-soft: var(--color-ink-900); /* dark hero gradient falloff */
390
+ --artifact-canvas: color-mix(in srgb, var(--color-brand-mark) 7%, #ffffff);
415
391
 
416
392
  /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
417
393
  (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
418
394
  palette instead of shadcn's grey/black defaults. The sidebar reads as the
419
- neutral canvas; its active item takes Sage. A consumer that had
395
+ neutral canvas; its active item takes action ink. A consumer that had
420
396
  hard-coded these can now delete its overrides and inherit from here. */
421
397
  --sidebar: var(--surface);
422
398
  --sidebar-foreground: var(--foreground);
@@ -465,7 +441,7 @@
465
441
  pointer-events: none;
466
442
  transform-origin: var(--ripple-origin, center);
467
443
  background: radial-gradient(125% 125% at var(--ripple-origin, center), var(--ripple-tint), transparent 62%);
468
- animation: ads-ripple-wave var(--ripple-duration, 300ms) var(--ease-out) forwards;
444
+ animation: ads-ripple-wave 300ms ease-out forwards;
469
445
  will-change: transform, opacity;
470
446
  }
471
447
  @media (prefers-reduced-motion: reduce) {
@@ -1,35 +0,0 @@
1
- "use client";
2
- import { jsx as o } from "react/jsx-runtime";
3
- import { Collapsible as t } from "radix-ui";
4
- function a({
5
- ...l
6
- }) {
7
- return /* @__PURE__ */ o(t.Root, { "data-slot": "collapsible", ...l });
8
- }
9
- function r({
10
- ...l
11
- }) {
12
- return /* @__PURE__ */ o(
13
- t.CollapsibleTrigger,
14
- {
15
- "data-slot": "collapsible-trigger",
16
- ...l
17
- }
18
- );
19
- }
20
- function n({
21
- ...l
22
- }) {
23
- return /* @__PURE__ */ o(
24
- t.CollapsibleContent,
25
- {
26
- "data-slot": "collapsible-content",
27
- ...l
28
- }
29
- );
30
- }
31
- export {
32
- a as Collapsible,
33
- n as CollapsibleContent,
34
- r as CollapsibleTrigger
35
- };
Binary file
Binary file