@actioneer/ads 0.5.6 → 0.5.7

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/styles.css CHANGED
@@ -31,7 +31,7 @@
31
31
  /*
32
32
  * ============================================================
33
33
  * ADS 1.0 — Design Tokens
34
- * Brand: Sage (green) · Neutrals: brand-palette grey · Typeface: Aribau Grotesk
34
+ * Palette: Ink neutrals · Typeface: Aribau Grotesk
35
35
  * ============================================================
36
36
  */
37
37
  @theme {
@@ -89,29 +89,8 @@
89
89
  --color-ink-900: #636461; /* 11 · accessible text */
90
90
  --color-ink-950: #1f1f1c; /* 12 · accessible text */
91
91
 
92
- /* ---- Brand ramp — the full 12-step Sage green (light section, solid row),
93
- same Radix roles as the neutral ramp. All 12 present: sage-850 (#417c36,
94
- step 11 = the accessible green text tone) and sage-950 (#273d23, step 12)
95
- are restored. The interactive brand (--brand #3f7a34) is step 9 (solid);
96
- its hover is step 10 (#316c26). NOTE: steps 9–12 are not a pure lightness
97
- ramp (Radix convention) — the Tailwind name order differs from role
98
- order, so read the role comment, not the number. ---- */
99
- --color-sage-50: #fbfefb; /* 1 · background */
100
- --color-sage-100: #f6fbf5; /* 2 · background */
101
- --color-sage-200: #e9f7e6; /* 3 · interactive */
102
- --color-sage-300: #dbf1d6; /* 4 · interactive */
103
- --color-sage-400: #cae8c5; /* 5 · interactive */
104
- --color-sage-500: #b6dcaf; /* 6 · border */
105
- --color-sage-600: #9ccc93; /* 7 · border */
106
- --color-sage-700: #77b76b; /* 8 · border */
107
- --color-sage-800: #3f7a34; /* 9 · solid (brand) */
108
- --color-sage-900: #316c26; /* 10 · solid (hover) */
109
- --color-sage-850: #417c36; /* 11 · accessible text */
110
- --color-sage-950: #273d23; /* 12 · accessible text */
111
-
112
92
  /* ---- Semantic accent ramps ---- */
113
- /* Success — shifted cooler (emerald/teal) so positive states stay clearly
114
- distinct from the warm Sage brand green. */
93
+ /* Success stays a semantic state color, never a product-primary hue. */
115
94
  --color-success-50: #ecfdf5;
116
95
  --color-success-100: #d1fae5;
117
96
  --color-success-500: #10b981;
@@ -138,7 +117,7 @@
138
117
 
139
118
  /* ---- Data-viz accents ---- three small ramps for charts & illustration.
140
119
  deep = text/lines · base = fills · soft = backgrounds. Separate from the
141
- semantic status ramps above; these are the "focal data" companions to Sage. */
120
+ semantic status ramps above; these carry data, not product identity. */
142
121
  --color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
143
122
  --color-cyan-base: #12b5a5;
144
123
  --color-cyan-deep: #0a7e82;
@@ -149,15 +128,15 @@
149
128
  --color-amber-base: #f3a72e;
150
129
  --color-amber-deep: #b57414;
151
130
 
152
- /* ---- Radii ---- FIVE steps only: 2 · 4 · 8 · 16 · 24 (px), plus `full`
153
- for pills/circles. xs aliases sm (4px); 2xl aliases xl (24px). */
154
- --radius-xs: 0.25rem; /* 4px */
155
- --radius-sm: 0.25rem; /* 4px */
156
- --radius-md: 0.5rem; /* 8px */
157
- --radius-lg: 1rem; /* 16px */
158
- --radius-xl: 1.5rem; /* 24px */
159
- --radius-2xl: 1.5rem; /* 24px (alias xl) */
160
- --radius-full: 9999px;
131
+ /* ---- Radii ---- TWO values only: 2px and 4px. Compact roles resolve to
132
+ 2px; every surface and formerly pill-shaped role resolves to 4px. */
133
+ --radius-xs: 0.125rem; /* 2px */
134
+ --radius-sm: 0.125rem; /* 2px */
135
+ --radius-md: 0.25rem; /* 4px */
136
+ --radius-lg: 0.25rem; /* 4px */
137
+ --radius-xl: 0.25rem; /* 4px */
138
+ --radius-2xl: 0.25rem; /* 4px */
139
+ --radius-full: 0.25rem; /* 4px */
161
140
  /* Status/indicator dots are SQUARE with a hair of softening — echoing the
162
141
  growth-mark's square cells. Never render an indicator dot as a circle
163
142
  (`rounded-full`); radio controls are the one exception (control
@@ -302,7 +281,7 @@
302
281
  --color-card: var(--card);
303
282
  --color-card-foreground: var(--card-foreground);
304
283
 
305
- /* Brand (Sage green) — used for solid fills / primary actions, not body text */
284
+ /* Compatibility action role — neutral ink, never a colored primary hue. */
306
285
  --color-brand: var(--brand);
307
286
  --color-brand-foreground: var(--brand-foreground);
308
287
  --color-brand-hover: var(--brand-hover);
@@ -361,10 +340,9 @@
361
340
 
362
341
  /* ---- Theme (light only) ---- */
363
342
  :root {
364
- /* Every semantic token below points INTO a primitive scale step
365
- (var(--color-ink-*) / var(--color-sage-*)) — the 12-step scales are the
366
- single source of truth. Only pure white (#ffffff) stays literal: it is a
367
- base surface, not a neutral scale step. */
343
+ /* Every neutral semantic token below points INTO the ink primitive scale.
344
+ Only pure white (#ffffff) stays literal: it is a base surface, not a
345
+ neutral scale step. */
368
346
  --background: var(--color-ink-100); /* step 2 · canvas */
369
347
  --foreground: var(--color-ink-950); /* step 12 */
370
348
 
@@ -384,11 +362,12 @@
384
362
  --card: #ffffff; /* pure white base */
385
363
  --card-foreground: var(--color-ink-950);
386
364
 
387
- /* Sage brand (green) — solid role. brand = sage step 9, hover = step 10. */
388
- --brand: var(--color-sage-800); /* step 9 · solid */
365
+ /* Neutral action role. The `brand` name remains as a compatibility API,
366
+ but the product has no colored primary palette. */
367
+ --brand: var(--color-ink-950); /* darkest action ink */
389
368
  --brand-foreground: #ffffff;
390
- --brand-hover: var(--color-sage-900); /* step 10 · hover */
391
- --brand-text: var(--color-sage-850); /* step 11 · accessible green text/links */
369
+ --brand-hover: var(--color-ink-900); /* lighter hover lift */
370
+ --brand-text: var(--color-ink-950); /* action text / links */
392
371
 
393
372
  /* Table interaction fills are pre-composited and opaque. Sticky edge cells
394
373
  therefore cover horizontally scrolled content while preserving the
@@ -413,7 +392,7 @@
413
392
  --input: var(--border-primary); /* form-control edge */
414
393
 
415
394
  /* Ripple — the appearance wash that radiates from a floating surface's
416
- origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft brand
395
+ origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
417
396
  tint that expands + fades once on mount; see the `.ads-ripple` layer and
418
397
  the `Ripple` component. Duration stays in the sub-300ms UI band. */
419
398
  --ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
@@ -424,7 +403,7 @@
424
403
  bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
425
404
  true hairline. Explicit `border-2`+ widths are unaffected. */
426
405
  --stroke-width: 0.5px;
427
- --ring: color-mix(in srgb, var(--color-sage-800) 50%, transparent); /* brand @ 50% */
406
+ --ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
428
407
  --overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
429
408
 
430
409
  /* Functional / domain tokens — named for their RENDER role, pointing into
@@ -445,7 +424,7 @@
445
424
  /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
446
425
  (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
447
426
  palette instead of shadcn's grey/black defaults. The sidebar reads as the
448
- neutral canvas; its active item takes Sage. A consumer that had
427
+ neutral canvas; its active item takes action ink. A consumer that had
449
428
  hard-coded these can now delete its overrides and inherit from here. */
450
429
  --sidebar: var(--surface);
451
430
  --sidebar-foreground: var(--foreground);
@@ -530,6 +509,22 @@
530
509
  display: none;
531
510
  }
532
511
 
512
+ /* Artifact widgets are positioned by GridStack; ADS cards own the visible
513
+ surface while the library content wrapper only clips during interaction.
514
+ The subtle elevation lives on the wrapper (not the inner card) because the
515
+ wrapper's own `overflow: hidden` would clip a shadow drawn on its child. */
516
+ .artifact-grid-stack > .grid-stack-item > .grid-stack-item-content {
517
+ overflow: hidden;
518
+ border-radius: var(--radius-lg);
519
+ box-shadow: var(--shadow-elevation);
520
+ }
521
+
522
+ .artifact-grid-stack > .grid-stack-placeholder > .placeholder-content {
523
+ border: 1px dashed var(--color-border-strong);
524
+ border-radius: var(--radius-sm);
525
+ background: var(--color-muted);
526
+ }
527
+
533
528
  /* BrandTexture entrance (src/components/brand-texture.tsx): a radial bloom —
534
529
  the halftone reveals from the centre out to the corners (clip-path circle)
535
530
  while gently scaling up to rest. `from{}`-only keyframe, so it settles into
@@ -718,7 +713,7 @@
718
713
  }
719
714
  ::-webkit-scrollbar-thumb {
720
715
  background: var(--border-strong);
721
- border-radius: 9999px;
716
+ border-radius: var(--radius-lg);
722
717
  border: 2px solid var(--background);
723
718
  }
724
719
  ::-webkit-scrollbar-thumb:hover {
@@ -1009,7 +1004,7 @@
1009
1004
  width: 1rem;
1010
1005
  border-bottom: 1px solid var(--border-strong);
1011
1006
  border-left: 1px solid var(--border-strong);
1012
- border-bottom-left-radius: 9px;
1007
+ border-bottom-left-radius: var(--radius-lg);
1013
1008
  }
1014
1009
  /* Let the consumer's Tailwind discover the classes ADS components use. */
1015
1010
  @source "./**/*.{js,mjs}";
package/theme.css CHANGED
@@ -2,7 +2,7 @@
2
2
  /*
3
3
  * ============================================================
4
4
  * ADS 1.0 — Design Tokens
5
- * Brand: Sage (green) · Neutrals: brand-palette grey · Typeface: Aribau Grotesk
5
+ * Palette: Ink neutrals · Typeface: Aribau Grotesk
6
6
  * ============================================================
7
7
  */
8
8
  @theme {
@@ -60,29 +60,8 @@
60
60
  --color-ink-900: #636461; /* 11 · accessible text */
61
61
  --color-ink-950: #1f1f1c; /* 12 · accessible text */
62
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 */
82
-
83
63
  /* ---- Semantic accent ramps ---- */
84
- /* Success — shifted cooler (emerald/teal) so positive states stay clearly
85
- distinct from the warm Sage brand green. */
64
+ /* Success stays a semantic state color, never a product-primary hue. */
86
65
  --color-success-50: #ecfdf5;
87
66
  --color-success-100: #d1fae5;
88
67
  --color-success-500: #10b981;
@@ -109,7 +88,7 @@
109
88
 
110
89
  /* ---- Data-viz accents ---- three small ramps for charts & illustration.
111
90
  deep = text/lines · base = fills · soft = backgrounds. Separate from the
112
- semantic status ramps above; these are the "focal data" companions to Sage. */
91
+ semantic status ramps above; these carry data, not product identity. */
113
92
  --color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
114
93
  --color-cyan-base: #12b5a5;
115
94
  --color-cyan-deep: #0a7e82;
@@ -120,15 +99,15 @@
120
99
  --color-amber-base: #f3a72e;
121
100
  --color-amber-deep: #b57414;
122
101
 
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) */
131
- --radius-full: 9999px;
102
+ /* ---- Radii ---- TWO values only: 2px and 4px. Compact roles resolve to
103
+ 2px; every surface and formerly pill-shaped role resolves to 4px. */
104
+ --radius-xs: 0.125rem; /* 2px */
105
+ --radius-sm: 0.125rem; /* 2px */
106
+ --radius-md: 0.25rem; /* 4px */
107
+ --radius-lg: 0.25rem; /* 4px */
108
+ --radius-xl: 0.25rem; /* 4px */
109
+ --radius-2xl: 0.25rem; /* 4px */
110
+ --radius-full: 0.25rem; /* 4px */
132
111
  /* Status/indicator dots are SQUARE with a hair of softening — echoing the
133
112
  growth-mark's square cells. Never render an indicator dot as a circle
134
113
  (`rounded-full`); radio controls are the one exception (control
@@ -273,7 +252,7 @@
273
252
  --color-card: var(--card);
274
253
  --color-card-foreground: var(--card-foreground);
275
254
 
276
- /* Brand (Sage green) — used for solid fills / primary actions, not body text */
255
+ /* Compatibility action role — neutral ink, never a colored primary hue. */
277
256
  --color-brand: var(--brand);
278
257
  --color-brand-foreground: var(--brand-foreground);
279
258
  --color-brand-hover: var(--brand-hover);
@@ -332,10 +311,9 @@
332
311
 
333
312
  /* ---- Theme (light only) ---- */
334
313
  :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. */
314
+ /* Every neutral semantic token below points INTO the ink primitive scale.
315
+ Only pure white (#ffffff) stays literal: it is a base surface, not a
316
+ neutral scale step. */
339
317
  --background: var(--color-ink-100); /* step 2 · canvas */
340
318
  --foreground: var(--color-ink-950); /* step 12 */
341
319
 
@@ -355,11 +333,12 @@
355
333
  --card: #ffffff; /* pure white base */
356
334
  --card-foreground: var(--color-ink-950);
357
335
 
358
- /* Sage brand (green) — solid role. brand = sage step 9, hover = step 10. */
359
- --brand: var(--color-sage-800); /* step 9 · solid */
336
+ /* Neutral action role. The `brand` name remains as a compatibility API,
337
+ but the product has no colored primary palette. */
338
+ --brand: var(--color-ink-950); /* darkest action ink */
360
339
  --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 */
340
+ --brand-hover: var(--color-ink-900); /* lighter hover lift */
341
+ --brand-text: var(--color-ink-950); /* action text / links */
363
342
 
364
343
  /* Table interaction fills are pre-composited and opaque. Sticky edge cells
365
344
  therefore cover horizontally scrolled content while preserving the
@@ -384,7 +363,7 @@
384
363
  --input: var(--border-primary); /* form-control edge */
385
364
 
386
365
  /* Ripple — the appearance wash that radiates from a floating surface's
387
- origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft brand
366
+ origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
388
367
  tint that expands + fades once on mount; see the `.ads-ripple` layer and
389
368
  the `Ripple` component. Duration stays in the sub-300ms UI band. */
390
369
  --ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
@@ -395,7 +374,7 @@
395
374
  bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
396
375
  true hairline. Explicit `border-2`+ widths are unaffected. */
397
376
  --stroke-width: 0.5px;
398
- --ring: color-mix(in srgb, var(--color-sage-800) 50%, transparent); /* brand @ 50% */
377
+ --ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
399
378
  --overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
400
379
 
401
380
  /* Functional / domain tokens — named for their RENDER role, pointing into
@@ -416,7 +395,7 @@
416
395
  /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
417
396
  (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
418
397
  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
398
+ neutral canvas; its active item takes action ink. A consumer that had
420
399
  hard-coded these can now delete its overrides and inherit from here. */
421
400
  --sidebar: var(--surface);
422
401
  --sidebar-foreground: var(--foreground);