@tensor_1/tokens 2.38.0 → 2.40.0

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": "@tensor_1/tokens",
3
- "version": "2.38.0",
3
+ "version": "2.40.0",
4
4
  "description": "UIx v2 design tokens — the --uix-* contract for house products (Tensor, POSx, SHOPx). One DTCG source -> CSS variables, Tailwind theme, and typed TS constants.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -59,6 +59,9 @@
59
59
  color: var(--uix-text-muted); font-size: var(--uix-text-meta);
60
60
  }
61
61
  .uix-chart__source { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
62
+ /* CorrelationScatter (HAR-1554): the stats caption always says "association, not cause". */
63
+ .uix-chart__stats { margin: 0; color: var(--uix-text-muted); font-size: var(--uix-text-meta); font-variant-numeric: tabular-nums; }
64
+ .uix-chart__insufficient { color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
62
65
  .uix-legend { display: flex; flex-wrap: wrap; gap: var(--uix-space-2) var(--uix-space-4); margin: 0; padding: 0; list-style: none; }
63
66
  .uix-legend__item { display: inline-flex; align-items: center; gap: var(--uix-space-2); color: var(--uix-text-hushed); font-size: var(--uix-text-meta); }
64
67
  .uix-legend__swatch { width: 10px; height: 10px; flex: none; border-radius: var(--uix-radius-xs); background: var(--legend-color, var(--uix-chart-1)); }
@@ -2,6 +2,8 @@
2
2
  @layer uix.components {
3
3
  .uix-comments { display: flex; flex-direction: column; gap: var(--uix-space-4); }
4
4
  .uix-comment { display: grid; grid-template-columns: 32px 1fr; gap: var(--uix-space-3); }
5
+ /* avatar={false}: the comment sits on a rail that already marks the row (a timeline). */
6
+ .uix-comment--bare { grid-template-columns: minmax(0, 1fr); }
5
7
  .uix-comment__body { background: var(--uix-bg-subtle); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); padding: var(--uix-space-3) var(--uix-space-3); }
6
8
  .uix-comment__meta { font-size: var(--uix-text-meta); color: var(--uix-text-muted); margin-bottom: var(--uix-space-1); }
7
9
  .uix-comment__author { font-weight: 600; color: var(--uix-text); }
@@ -0,0 +1,74 @@
1
+ /* uix insight card (HAR-1556) — a card whose headline is the answer: status (text + icon), KPIs with a
2
+ comparison and a bullet against target, the chart, an optional aside (a scatter), coverage, source and
3
+ one action. The card is an inline-size container: `data-layout="split"` puts the aside beside the
4
+ chart from 60rem (960 px) of CARD width, and stacks below that. Tones are neutral-first: only a
5
+ warning or a critical status takes a hue, and it always carries its label and icon. */
6
+ @layer uix.components {
7
+ .uix-insight {
8
+ container: uix-insight / inline-size;
9
+ display: flex; flex-direction: column; gap: var(--uix-space-4);
10
+ min-width: 0; padding: var(--uix-space-5);
11
+ border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg);
12
+ background: var(--uix-surface); color: var(--uix-text);
13
+ }
14
+ /* Inside another frame (a dashboard widget): no border, surface or outer padding of its own. */
15
+ .uix-insight--plain { padding: 0; border: 0; border-radius: 0; background: transparent; }
16
+ .uix-insight__header { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--uix-space-2) var(--uix-space-4); min-width: 0; }
17
+ .uix-insight__heading { flex: 1 1 18rem; min-width: 0; }
18
+ .uix-insight__eyebrow {
19
+ margin-bottom: var(--uix-space-1); color: var(--uix-text-muted);
20
+ font-size: var(--uix-text-eyebrow); font-weight: 600; letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase;
21
+ }
22
+ .uix-insight__headline { margin: 0; color: var(--uix-text); font-size: var(--uix-text-h3); font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
23
+ .uix-insight__sowhat { margin: var(--uix-space-1) 0 0; color: var(--uix-text-hushed); font-size: var(--uix-text-body); line-height: 1.5; overflow-wrap: anywhere; }
24
+ .uix-insight__status {
25
+ display: inline-flex; flex: none; align-items: center; gap: var(--uix-space-1);
26
+ padding: var(--uix-space-1) var(--uix-space-2); line-height: 1; border: 1px solid var(--uix-border); border-radius: var(--uix-radius-pill);
27
+ color: var(--uix-text-hushed); font-size: var(--uix-text-meta); font-weight: 600; white-space: nowrap;
28
+ }
29
+ .uix-insight__status[data-tone="warning"] { border-color: var(--uix-warning-border); color: var(--uix-warning-text); }
30
+ .uix-insight__status[data-tone="critical"] { border-color: var(--uix-danger-border); color: var(--uix-danger-text); }
31
+
32
+ .uix-insight__kpis {
33
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
34
+ gap: var(--uix-space-3) var(--uix-space-5); margin: 0;
35
+ }
36
+ .uix-insight__kpi { display: flex; flex-direction: column; gap: var(--uix-space-1); min-width: 0; }
37
+ .uix-insight__kpi dd { margin: 0; }
38
+ .uix-insight__kpi-label { order: 0; color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
39
+ .uix-insight__kpi-value { order: -1; color: var(--uix-text); font-size: var(--uix-text-h2); font-weight: 600; line-height: 1.15; letter-spacing: var(--uix-tracking-tight); }
40
+ .uix-insight__kpi-comparison { color: var(--uix-text-hushed); font-size: var(--uix-text-meta); font-weight: 600; }
41
+ .uix-insight__kpi-comparison[data-tone="positive"] { color: var(--uix-success); }
42
+ .uix-insight__kpi-comparison[data-tone="negative"] { color: var(--uix-danger-text); }
43
+ .uix-insight__kpi-comparison[data-tone="warning"] { color: var(--uix-warning-text); }
44
+ .uix-insight__kpi-target { padding-top: var(--uix-space-1); }
45
+
46
+ .uix-insight__body { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--uix-space-4); min-width: 0; }
47
+ .uix-insight__main, .uix-insight__aside { min-width: 0; }
48
+ /* Frameless at zero padding: clip with a margin, so a glyph's ink survives but a resizing chart cannot scroll the page. */
49
+ .uix-insight__body > * > .uix-chart { padding: 0; border: 0; box-shadow: none; background: transparent; overflow: clip; overflow-clip-margin: var(--uix-space-1); }
50
+ @container uix-insight (min-width: 60rem) {
51
+ .uix-insight[data-layout="split"] .uix-insight__body:has(> .uix-insight__aside) { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
52
+ }
53
+
54
+ .uix-insight__footer {
55
+ display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--uix-space-3) var(--uix-space-4);
56
+ padding-top: var(--uix-space-3); border-top: 1px solid var(--uix-border);
57
+ }
58
+ .uix-insight__meta { display: flex; flex: 1 1 16rem; flex-direction: column; gap: var(--uix-space-1); min-width: 0; color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
59
+ .uix-insight__coverage, .uix-insight__source { display: flex; flex-wrap: wrap; gap: 0 var(--uix-space-3); margin: 0; overflow-wrap: anywhere; }
60
+ .uix-insight__partial { color: var(--uix-text-hushed); }
61
+ .uix-insight__actions { display: flex; flex-wrap: wrap; gap: var(--uix-space-2); }
62
+
63
+ /* Bullet (Few): bands in neutral steps, the actual as a dark bar, the target as a tick. */
64
+ .uix-bullet { position: relative; width: 100%; min-width: 6rem; height: 12px; border-radius: var(--uix-radius-xs); background: var(--uix-bg-subtle); }
65
+ .uix-bullet__range { position: absolute; top: 0; bottom: 0; background: var(--uix-bg-active); }
66
+ .uix-bullet__range[data-band="1"] { background: var(--uix-bg-hover); }
67
+ .uix-bullet__range[data-band="2"] { background: var(--uix-bg-subtle); }
68
+ .uix-bullet__bar { position: absolute; top: 4px; left: 0; height: 4px; border-radius: var(--uix-radius-xs); background: var(--uix-text); }
69
+ .uix-bullet__target { position: absolute; top: 0; bottom: 0; width: 2px; translate: -50% 0; background: var(--uix-text); }
70
+ @media (forced-colors: active) {
71
+ .uix-bullet { border: 1px solid CanvasText; }
72
+ .uix-bullet__bar, .uix-bullet__target { background: CanvasText; }
73
+ }
74
+ }
@@ -155,6 +155,15 @@
155
155
  .uix-rich-text__suggest-emoji { font-size: var(--uix-text-h3); line-height: 1; }
156
156
  .uix-rich-text__suggest-name { font-family: var(--uix-font-mono); font-size: var(--uix-text-meta); }
157
157
 
158
+ /* @ people list: name over an optional detail line; a status note when there is no choice. */
159
+ .uix-rich-text__suggest-item--person { flex-direction: column; align-items: flex-start; gap: 0; }
160
+ .uix-rich-text__suggest-label { overflow-wrap: anywhere; }
161
+ .uix-rich-text__suggest-detail { font-size: var(--uix-text-meta); color: var(--uix-text-muted); overflow-wrap: anywhere; }
162
+ .uix-rich-text__suggest-item[aria-selected="true"] .uix-rich-text__suggest-detail { color: inherit; }
163
+ .uix-rich-text__suggest-note { padding: var(--uix-space-1) var(--uix-space-2); font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
164
+ /* A mention is one token: never typed into (it may wrap, so a long name fits 320 px). */
165
+ .uix-rich-text__content .uix-mention { cursor: default; overflow-wrap: anywhere; }
166
+
158
167
  @media (prefers-reduced-motion: reduce) {
159
168
  .uix-rich-text, .uix-rich-text__tool { transition: none; }
160
169
  }