@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": {
|