@nadicodeai/design-system 0.5.2 → 0.5.3

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/DESIGN.md CHANGED
@@ -104,6 +104,14 @@ colors:
104
104
  chart-4: "#cd212a"
105
105
  chart-5: "#00838f"
106
106
  chart-6: "#6f42c1"
107
+ chart-seq-1: "#7d99f2"
108
+ chart-seq-2: "#4f6ae6"
109
+ chart-seq-3: "#2743d8"
110
+ chart-seq-4: "#1d33ad"
111
+ chart-seq-5: "#16277f"
112
+ chart-div-warm: "#d98800"
113
+ chart-div-mid: "#8f8f8f"
114
+ chart-div-cool: "#7d99f2"
107
115
  dark-canvas: "#0a0a0a"
108
116
  dark-canvas-soft: "#171717"
109
117
  dark-canvas-soft-2: "#262626"
@@ -142,6 +150,14 @@ colors:
142
150
  dark-chart-4: "#f28085"
143
151
  dark-chart-5: "#33d1cb"
144
152
  dark-chart-6: "#9575cd"
153
+ dark-chart-seq-1: "#4f6ae6"
154
+ dark-chart-seq-2: "#7d99f2"
155
+ dark-chart-seq-3: "#a9befa"
156
+ dark-chart-seq-4: "#cdd9fd"
157
+ dark-chart-seq-5: "#eef2ff"
158
+ dark-chart-div-warm: "#ffd97d"
159
+ dark-chart-div-mid: "#e6e6e6"
160
+ dark-chart-div-cool: "#cdd9fd"
145
161
 
146
162
  typography:
147
163
  display-xl:
@@ -523,6 +539,37 @@ This grayscale-only discipline is not dark-specific: it governs the whole genera
523
539
 
524
540
  Do not delete a color because the current website kernel does not consume it. Prototype usage is not palette authority; removals require an explicit palette migration decision.
525
541
 
542
+ ## Data Visualization
543
+
544
+ ### Entity-color assignment
545
+
546
+ - **Entity-color assignment**: categorical hues (`{colors.chart-1}`…`{colors.chart-6}`) assign in fixed order to entities per page context, and the assignment follows the entity identity, never rank, sort position, or array index. One assignment map exists per surface; a filter or re-sort never repaints the entities that remain on screen. Beyond six entities, fold the tail into a single neutral "other" slot (`{colors.muted}` register), never a seventh hue.
547
+
548
+ ### Sequential ramp and diverging pair
549
+
550
+ - **Sequential ramp** (`{colors.chart-seq-1}`…`{colors.chart-seq-5}`, light→dark on the `blue-cobalto` scale: `chart-seq-1` on `blue-cobalto-500`, `chart-seq-2` on `blue-cobalto-600`, `chart-seq-3` on `blue-cobalto-700`, `chart-seq-4` on `blue-cobalto-800`, `chart-seq-5` on `blue-cobalto-900`): ordered magnitude on one hue, never nominal categories, never a rainbow. `{colors.dark-chart-seq-1}`…`{colors.dark-chart-seq-5}` remap in the `.dark` scope like the categorical set, anchor flipped so `dark-chart-seq-1` is the dimmest step (`blue-cobalto-600`) and `dark-chart-seq-5` the brightest (`blue-cobalto-100`), each clearing the 3:1 WCAG 1.4.11 data-mark floor against `{colors.dark-canvas}`.
551
+ - **Diverging pair** (`{colors.chart-div-warm}` on `amber-700`, `{colors.chart-div-mid}` on `gray-700`, `{colors.chart-div-cool}` on `blue-cobalto-500`; dark counterparts `{colors.dark-chart-div-warm}` on `amber-400`, `{colors.dark-chart-div-mid}` on `gray-300`, `{colors.dark-chart-div-cool}` on `blue-cobalto-300`, remapped in the `.dark` scope the same way): the warm and cool poles carry the sign, the neutral midpoint never carries hue. Meter tracks use a lighter step of the same ramp as their fill.
552
+
553
+ ### Meter and bullet grammar
554
+
555
+ - **Meter and bullet grammar**: cap and included-usage bars carry a positional threshold tick at the product-configured warning fraction (80% is the common default; the fraction is a consumer input, never a constant of this contract) and a cap tick at 100%. Overflow renders as a distinct segment continuing past the cap tick, never clamped away. Severity state tokens (`{colors.state-*}`) reinforce position, never act as the sole signal. The current value reads at the bar tip. Every meter carries an accessible name, and its `aria` values clamp to the meter maximum.
556
+
557
+ ### Mark specs
558
+
559
+ - **Mark specs**: bars and columns run at most 24px thick with 4px rounded data-ends anchored square at the baseline. Stacked segments and adjacent marks keep a 2px surface gap, one consistent gap width per chart. Lines run at least 2px with round joins and caps; point markers run at least 8px with a 2px surface ring. Area fills read as a light wash (roughly 10% opacity) under a full-strength line. Gridlines and axes are recessive 1px solid hairlines one step off the surface, never dashed. Chart text always carries ink tokens (`{colors.ink}`, `{colors.muted}`), never the series color. Marks render in real pixel space; a chart never scales its viewBox non-uniformly.
560
+
561
+ ### Delta and trend encoding
562
+
563
+ - **Delta and trend encoding**: a change reads as a direction glyph (▲ ▼) plus a tone token, never bare signed text and never color alone. Tone follows direction crossed with whether up is good in that context. Sparklines normalize against a meaningful baseline, never the visible min-max span alone.
564
+
565
+ ### Legends and labels
566
+
567
+ - **Legends and labels**: at two or more series, every series is identified — up to four series prefer direct labels, which then replace the legend; beyond four, or whenever direct labels are not feasible, a legend is required (ink-token text beside a color swatch; text never wears the series color). A single series is titled, not legended. Every chart names a table alternative. Tooltips enhance a chart and never gate a value.
568
+
569
+ ### Texture fallback
570
+
571
+ - **Texture fallback**: under forced-colors, print, or an accessibility setting, series distinguish by one directional line texture at 45 or 135 degrees (tone-on-tone, a darker step of the fill's own ramp), ordered with magnitude on value scales, with the arm angle carrying the diverging sign. Texture is never on by default. The two brand-locked categorical pairs (`chart-2`/`chart-4`, `chart-1`/`chart-6`) always require redundant encoding, never hue alone, restating the Chart categoricals distinguishability rule.
572
+
526
573
  ## Typography
527
574
 
528
575
  Geist Sans carries all narrative and interface copy. Geist Mono is reserved for eyebrows, labels, status tags, code, traces, and small technical metadata.
@@ -101,6 +101,14 @@
101
101
  --nc-chart-4: #cd212a;
102
102
  --nc-chart-5: #00838f;
103
103
  --nc-chart-6: #6f42c1;
104
+ --nc-chart-seq-1: #7d99f2;
105
+ --nc-chart-seq-2: #4f6ae6;
106
+ --nc-chart-seq-3: #2743d8;
107
+ --nc-chart-seq-4: #1d33ad;
108
+ --nc-chart-seq-5: #16277f;
109
+ --nc-chart-div-warm: #d98800;
110
+ --nc-chart-div-mid: #8f8f8f;
111
+ --nc-chart-div-cool: #7d99f2;
104
112
  --nc-dark-canvas: #0a0a0a;
105
113
  --nc-dark-canvas-soft: #171717;
106
114
  --nc-dark-canvas-soft-2: #262626;
@@ -139,6 +147,14 @@
139
147
  --nc-dark-chart-4: #f28085;
140
148
  --nc-dark-chart-5: #33d1cb;
141
149
  --nc-dark-chart-6: #9575cd;
150
+ --nc-dark-chart-seq-1: #4f6ae6;
151
+ --nc-dark-chart-seq-2: #7d99f2;
152
+ --nc-dark-chart-seq-3: #a9befa;
153
+ --nc-dark-chart-seq-4: #cdd9fd;
154
+ --nc-dark-chart-seq-5: #eef2ff;
155
+ --nc-dark-chart-div-warm: #ffd97d;
156
+ --nc-dark-chart-div-mid: #e6e6e6;
157
+ --nc-dark-chart-div-cool: #cdd9fd;
142
158
 
143
159
  /* Spacing */
144
160
  --nc-xxs: 4px;
@@ -98,6 +98,14 @@
98
98
  "chart-4": "#cd212a",
99
99
  "chart-5": "#00838f",
100
100
  "chart-6": "#6f42c1",
101
+ "chart-seq-1": "#7d99f2",
102
+ "chart-seq-2": "#4f6ae6",
103
+ "chart-seq-3": "#2743d8",
104
+ "chart-seq-4": "#1d33ad",
105
+ "chart-seq-5": "#16277f",
106
+ "chart-div-warm": "#d98800",
107
+ "chart-div-mid": "#8f8f8f",
108
+ "chart-div-cool": "#7d99f2",
101
109
  "dark-canvas": "#0a0a0a",
102
110
  "dark-canvas-soft": "#171717",
103
111
  "dark-canvas-soft-2": "#262626",
@@ -135,7 +143,15 @@
135
143
  "dark-chart-3": "#ffd97d",
136
144
  "dark-chart-4": "#f28085",
137
145
  "dark-chart-5": "#33d1cb",
138
- "dark-chart-6": "#9575cd"
146
+ "dark-chart-6": "#9575cd",
147
+ "dark-chart-seq-1": "#4f6ae6",
148
+ "dark-chart-seq-2": "#7d99f2",
149
+ "dark-chart-seq-3": "#a9befa",
150
+ "dark-chart-seq-4": "#cdd9fd",
151
+ "dark-chart-seq-5": "#eef2ff",
152
+ "dark-chart-div-warm": "#ffd97d",
153
+ "dark-chart-div-mid": "#e6e6e6",
154
+ "dark-chart-div-cool": "#cdd9fd"
139
155
  },
140
156
  "fontFamily": {
141
157
  "display-xl": [
@@ -89,6 +89,14 @@
89
89
  --nc-chart-4: var(--nc-dark-chart-4);
90
90
  --nc-chart-5: var(--nc-dark-chart-5);
91
91
  --nc-chart-6: var(--nc-dark-chart-6);
92
+ --nc-chart-seq-1: var(--nc-dark-chart-seq-1);
93
+ --nc-chart-seq-2: var(--nc-dark-chart-seq-2);
94
+ --nc-chart-seq-3: var(--nc-dark-chart-seq-3);
95
+ --nc-chart-seq-4: var(--nc-dark-chart-seq-4);
96
+ --nc-chart-seq-5: var(--nc-dark-chart-seq-5);
97
+ --nc-chart-div-warm: var(--nc-dark-chart-div-warm);
98
+ --nc-chart-div-mid: var(--nc-dark-chart-div-mid);
99
+ --nc-chart-div-cool: var(--nc-dark-chart-div-cool);
92
100
  }
93
101
 
94
102
  :root {
@@ -252,6 +260,14 @@
252
260
  --color-chart-4: #cd212a;
253
261
  --color-chart-5: #00838f;
254
262
  --color-chart-6: #6f42c1;
263
+ --color-chart-seq-1: #7d99f2;
264
+ --color-chart-seq-2: #4f6ae6;
265
+ --color-chart-seq-3: #2743d8;
266
+ --color-chart-seq-4: #1d33ad;
267
+ --color-chart-seq-5: #16277f;
268
+ --color-chart-div-warm: #d98800;
269
+ --color-chart-div-mid: #8f8f8f;
270
+ --color-chart-div-cool: #7d99f2;
255
271
  --color-dark-canvas: #0a0a0a;
256
272
  --color-dark-canvas-soft: #171717;
257
273
  --color-dark-canvas-soft-2: #262626;
@@ -290,6 +306,14 @@
290
306
  --color-dark-chart-4: #f28085;
291
307
  --color-dark-chart-5: #33d1cb;
292
308
  --color-dark-chart-6: #9575cd;
309
+ --color-dark-chart-seq-1: #4f6ae6;
310
+ --color-dark-chart-seq-2: #7d99f2;
311
+ --color-dark-chart-seq-3: #a9befa;
312
+ --color-dark-chart-seq-4: #cdd9fd;
313
+ --color-dark-chart-seq-5: #eef2ff;
314
+ --color-dark-chart-div-warm: #ffd97d;
315
+ --color-dark-chart-div-mid: #e6e6e6;
316
+ --color-dark-chart-div-cool: #cdd9fd;
293
317
  --color-nadicode-muted: #888888;
294
318
  --color-nadicode-primary: #008c45;
295
319
  --color-nadicode-chart-1: #2743d8;
@@ -1060,6 +1060,94 @@
1060
1060
  "hex": "#6f42c1"
1061
1061
  }
1062
1062
  },
1063
+ "chart-seq-1": {
1064
+ "$value": {
1065
+ "colorSpace": "srgb",
1066
+ "components": [
1067
+ 0.49,
1068
+ 0.6,
1069
+ 0.949
1070
+ ],
1071
+ "hex": "#7d99f2"
1072
+ }
1073
+ },
1074
+ "chart-seq-2": {
1075
+ "$value": {
1076
+ "colorSpace": "srgb",
1077
+ "components": [
1078
+ 0.31,
1079
+ 0.416,
1080
+ 0.902
1081
+ ],
1082
+ "hex": "#4f6ae6"
1083
+ }
1084
+ },
1085
+ "chart-seq-3": {
1086
+ "$value": {
1087
+ "colorSpace": "srgb",
1088
+ "components": [
1089
+ 0.153,
1090
+ 0.263,
1091
+ 0.847
1092
+ ],
1093
+ "hex": "#2743d8"
1094
+ }
1095
+ },
1096
+ "chart-seq-4": {
1097
+ "$value": {
1098
+ "colorSpace": "srgb",
1099
+ "components": [
1100
+ 0.114,
1101
+ 0.2,
1102
+ 0.678
1103
+ ],
1104
+ "hex": "#1d33ad"
1105
+ }
1106
+ },
1107
+ "chart-seq-5": {
1108
+ "$value": {
1109
+ "colorSpace": "srgb",
1110
+ "components": [
1111
+ 0.086,
1112
+ 0.153,
1113
+ 0.498
1114
+ ],
1115
+ "hex": "#16277f"
1116
+ }
1117
+ },
1118
+ "chart-div-warm": {
1119
+ "$value": {
1120
+ "colorSpace": "srgb",
1121
+ "components": [
1122
+ 0.851,
1123
+ 0.533,
1124
+ 0
1125
+ ],
1126
+ "hex": "#d98800"
1127
+ }
1128
+ },
1129
+ "chart-div-mid": {
1130
+ "$value": {
1131
+ "colorSpace": "srgb",
1132
+ "components": [
1133
+ 0.561,
1134
+ 0.561,
1135
+ 0.561
1136
+ ],
1137
+ "hex": "#8f8f8f"
1138
+ }
1139
+ },
1140
+ "chart-div-cool": {
1141
+ "$value": {
1142
+ "colorSpace": "srgb",
1143
+ "components": [
1144
+ 0.49,
1145
+ 0.6,
1146
+ 0.949
1147
+ ],
1148
+ "hex": "#7d99f2"
1149
+ }
1150
+ },
1063
1151
  "dark-canvas": {
1064
1152
  "$value": {
1065
1153
  "colorSpace": "srgb",
@@ -1477,6 +1565,94 @@
1477
1565
  ],
1478
1566
  "hex": "#9575cd"
1479
1567
  }
1568
+ },
1569
+ "dark-chart-seq-1": {
1570
+ "$value": {
1571
+ "colorSpace": "srgb",
1572
+ "components": [
1573
+ 0.31,
1574
+ 0.416,
1575
+ 0.902
1576
+ ],
1577
+ "hex": "#4f6ae6"
1578
+ }
1579
+ },
1580
+ "dark-chart-seq-2": {
1581
+ "$value": {
1582
+ "colorSpace": "srgb",
1583
+ "components": [
1584
+ 0.49,
1585
+ 0.6,
1586
+ 0.949
1587
+ ],
1588
+ "hex": "#7d99f2"
1589
+ }
1590
+ },
1591
+ "dark-chart-seq-3": {
1592
+ "$value": {
1593
+ "colorSpace": "srgb",
1594
+ "components": [
1595
+ 0.663,
1596
+ 0.745,
1597
+ 0.98
1598
+ ],
1599
+ "hex": "#a9befa"
1600
+ }
1601
+ },
1602
+ "dark-chart-seq-4": {
1603
+ "$value": {
1604
+ "colorSpace": "srgb",
1605
+ "components": [
1606
+ 0.804,
1607
+ 0.851,
1608
+ 0.992
1609
+ ],
1610
+ "hex": "#cdd9fd"
1611
+ }
1612
+ },
1613
+ "dark-chart-seq-5": {
1614
+ "$value": {
1615
+ "colorSpace": "srgb",
1616
+ "components": [
1617
+ 0.933,
1618
+ 0.949,
1619
+ 1
1620
+ ],
1621
+ "hex": "#eef2ff"
1622
+ }
1623
+ },
1624
+ "dark-chart-div-warm": {
1625
+ "$value": {
1626
+ "colorSpace": "srgb",
1627
+ "components": [
1628
+ 1,
1629
+ 0.851,
1630
+ 0.49
1631
+ ],
1632
+ "hex": "#ffd97d"
1633
+ }
1634
+ },
1635
+ "dark-chart-div-mid": {
1636
+ "$value": {
1637
+ "colorSpace": "srgb",
1638
+ "components": [
1639
+ 0.902,
1640
+ 0.902,
1641
+ 0.902
1642
+ ],
1643
+ "hex": "#e6e6e6"
1644
+ }
1645
+ },
1646
+ "dark-chart-div-cool": {
1647
+ "$value": {
1648
+ "colorSpace": "srgb",
1649
+ "components": [
1650
+ 0.804,
1651
+ 0.851,
1652
+ 0.992
1653
+ ],
1654
+ "hex": "#cdd9fd"
1655
+ }
1480
1656
  }
1481
1657
  },
1482
1658
  "spacing": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/design-system",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"