@opendata-ai/openchart-core 7.10.0 → 8.0.0-rc.1
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/dist/index.d.ts +1154 -119
- package/dist/index.js +530 -41
- package/dist/index.js.map +1 -1
- package/dist/styles.css +2 -1
- package/dist/styles.css.map +1 -0
- package/package.json +9 -3
- package/schema/chart.schema.json +8957 -0
- package/schema/table.schema.json +861 -0
- package/schema/vizspec.schema.json +17694 -0
- package/src/accessibility/alt-text.ts +39 -1
- package/src/accessibility/aria.ts +4 -2
- package/src/colors/__tests__/colorblind.test.ts +12 -0
- package/src/colors/colorblind.ts +11 -2
- package/src/colors/contrast.ts +11 -0
- package/src/colors/index.ts +9 -1
- package/src/colors/palettes.ts +47 -0
- package/src/helpers/__tests__/deep-merge.test.ts +54 -0
- package/src/helpers/__tests__/spec-builders.test.ts +3 -3
- package/src/helpers/deep-merge.ts +29 -0
- package/src/helpers/spec-builders.ts +7 -7
- package/src/index.ts +29 -1
- package/src/labels/collision.ts +1 -0
- package/src/layout/chrome.ts +24 -0
- package/src/layout/index.ts +1 -1
- package/src/locale/__tests__/format.test.ts +347 -11
- package/src/locale/format.ts +243 -18
- package/src/locale/index.ts +10 -1
- package/src/responsive/index.ts +2 -0
- package/src/responsive/metrics.ts +74 -9
- package/src/schema/__tests__/generated-artifacts.test.ts +42 -0
- package/src/schema/__tests__/schema.test.ts +179 -0
- package/src/styles/__tests__/reduced-motion-selectors.test.ts +28 -0
- package/src/styles/animation.css +197 -168
- package/src/styles/base.css +89 -62
- package/src/styles/chrome.css +173 -179
- package/src/styles/dark.css +38 -35
- package/src/styles/graph.css +116 -111
- package/src/styles/index.css +5 -0
- package/src/styles/keyframes.css +115 -100
- package/src/styles/legend.css +14 -12
- package/src/styles/reduced-motion.css +61 -40
- package/src/styles/series-search.css +153 -0
- package/src/styles/sparkline.css +14 -12
- package/src/styles/table-animation.css +82 -80
- package/src/styles/table.css +314 -302
- package/src/styles/token-definitions.ts +199 -0
- package/src/styles/tokens.css +132 -128
- package/src/styles/tooltip.css +109 -115
- package/src/styles/you-draw-it.css +126 -0
- package/src/types/__tests__/encoding.test.ts +86 -17
- package/src/types/__tests__/spec.test.ts +16 -12
- package/src/types/encoding.ts +69 -25
- package/src/types/events.ts +12 -0
- package/src/types/index.ts +39 -3
- package/src/types/layout.ts +414 -8
- package/src/types/schema-roots.ts +32 -0
- package/src/types/spec.ts +643 -84
- package/src/types/table.ts +3 -2
package/src/styles/graph.css
CHANGED
|
@@ -1,130 +1,135 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
@layer oc.components {
|
|
2
|
+
/* ---------------------------------------------------------------------------
|
|
3
|
+
* Graph
|
|
4
|
+
* --------------------------------------------------------------------------- */
|
|
4
5
|
|
|
5
|
-
.oc-graph-wrapper {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
6
|
+
.oc-graph-wrapper {
|
|
7
|
+
position: relative;
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
background: var(--oc-bg);
|
|
10
|
+
font-family: var(--oc-font-family);
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
}
|
|
13
14
|
|
|
14
|
-
.oc-graph-canvas {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
15
|
+
.oc-graph-canvas {
|
|
16
|
+
display: block;
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
cursor: grab;
|
|
20
|
+
}
|
|
20
21
|
|
|
21
|
-
.oc-graph-canvas--dragging {
|
|
22
|
-
|
|
23
|
-
}
|
|
22
|
+
.oc-graph-canvas--dragging {
|
|
23
|
+
cursor: grabbing;
|
|
24
|
+
}
|
|
24
25
|
|
|
25
|
-
.oc-graph-chrome {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
.oc-graph-chrome {
|
|
27
|
+
position: absolute;
|
|
28
|
+
top: 0;
|
|
29
|
+
left: 0;
|
|
30
|
+
right: 0;
|
|
31
|
+
z-index: 2;
|
|
32
|
+
padding: 16px 16px 8px;
|
|
33
|
+
pointer-events: none;
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
35
|
+
& .oc-title {
|
|
36
|
+
font-size: var(--oc-title-size);
|
|
37
|
+
font-weight: var(--oc-title-weight);
|
|
38
|
+
letter-spacing: var(--oc-title-tracking);
|
|
39
|
+
color: var(--oc-text);
|
|
40
|
+
margin: 0 0 4px;
|
|
41
|
+
--_stroke: color-mix(in srgb, var(--oc-bg) 80%, transparent);
|
|
42
|
+
text-shadow:
|
|
43
|
+
-2px -2px 0 var(--_stroke),
|
|
44
|
+
2px -2px 0 var(--_stroke),
|
|
45
|
+
-2px 2px 0 var(--_stroke),
|
|
46
|
+
2px 2px 0 var(--_stroke),
|
|
47
|
+
0 -2px 0 var(--_stroke),
|
|
48
|
+
0 2px 0 var(--_stroke),
|
|
49
|
+
-2px 0 0 var(--_stroke),
|
|
50
|
+
2px 0 0 var(--_stroke);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
& .oc-subtitle {
|
|
54
|
+
font-size: var(--oc-subtitle-size);
|
|
55
|
+
color: var(--oc-text-secondary);
|
|
56
|
+
margin: 0;
|
|
57
|
+
--_stroke: color-mix(in srgb, var(--oc-bg) 80%, transparent);
|
|
58
|
+
text-shadow:
|
|
59
|
+
-1px -1px 0 var(--_stroke),
|
|
60
|
+
1px -1px 0 var(--_stroke),
|
|
61
|
+
-1px 1px 0 var(--_stroke),
|
|
62
|
+
1px 1px 0 var(--_stroke);
|
|
63
|
+
}
|
|
50
64
|
}
|
|
51
65
|
|
|
52
|
-
|
|
53
|
-
|
|
66
|
+
.oc-graph-legend {
|
|
67
|
+
position: absolute;
|
|
68
|
+
top: 8px;
|
|
69
|
+
right: 8px;
|
|
70
|
+
background: var(--oc-bg);
|
|
71
|
+
border: 1px solid var(--oc-border);
|
|
72
|
+
border-radius: var(--oc-border-radius);
|
|
73
|
+
padding: 8px 12px;
|
|
74
|
+
font-size: 12px;
|
|
54
75
|
color: var(--oc-text-secondary);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
text-shadow:
|
|
58
|
-
-1px -1px 0 var(--_stroke),
|
|
59
|
-
1px -1px 0 var(--_stroke),
|
|
60
|
-
-1px 1px 0 var(--_stroke),
|
|
61
|
-
1px 1px 0 var(--_stroke);
|
|
76
|
+
max-height: 200px;
|
|
77
|
+
overflow-y: auto;
|
|
62
78
|
}
|
|
63
|
-
}
|
|
64
79
|
|
|
65
|
-
.oc-graph-legend {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
border-radius: var(--oc-border-radius);
|
|
72
|
-
padding: 8px 12px;
|
|
73
|
-
font-size: 12px;
|
|
74
|
-
color: var(--oc-text-secondary);
|
|
75
|
-
max-height: 200px;
|
|
76
|
-
overflow-y: auto;
|
|
77
|
-
}
|
|
80
|
+
.oc-graph-legend-item {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: 6px;
|
|
84
|
+
padding: 2px 0;
|
|
85
|
+
}
|
|
78
86
|
|
|
79
|
-
.oc-graph-legend-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
87
|
+
.oc-graph-legend-swatch {
|
|
88
|
+
width: 10px;
|
|
89
|
+
height: 10px;
|
|
90
|
+
border-radius: 50%;
|
|
91
|
+
flex-shrink: 0;
|
|
92
|
+
}
|
|
85
93
|
|
|
86
|
-
.oc-graph-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
flex-shrink: 0;
|
|
91
|
-
}
|
|
94
|
+
.oc-graph-search {
|
|
95
|
+
position: absolute;
|
|
96
|
+
top: 8px;
|
|
97
|
+
left: 8px;
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
& input {
|
|
100
|
+
font-family: var(--oc-font-family);
|
|
101
|
+
font-size: var(--oc-body-size);
|
|
102
|
+
padding: 6px 10px;
|
|
103
|
+
border: 1px solid var(--oc-border);
|
|
104
|
+
border-radius: var(--oc-border-radius);
|
|
105
|
+
background: var(--oc-bg);
|
|
106
|
+
color: var(--oc-text);
|
|
107
|
+
outline: none;
|
|
97
108
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
border: 1px solid var(--oc-border);
|
|
103
|
-
border-radius: var(--oc-border-radius);
|
|
104
|
-
background: var(--oc-bg);
|
|
105
|
-
color: var(--oc-text);
|
|
106
|
-
outline: none;
|
|
107
|
-
|
|
108
|
-
&:focus {
|
|
109
|
-
border-color: var(--oc-focus);
|
|
110
|
-
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.25);
|
|
109
|
+
&:focus {
|
|
110
|
+
border-color: var(--oc-focus);
|
|
111
|
+
box-shadow: 0 0 0 2px var(--oc-focus-ring-strong);
|
|
112
|
+
}
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/* Dark mode graph overrides (darker bg for canvas-based rendering) */
|
|
116
|
-
.oc-dark .oc-graph-wrapper,
|
|
117
|
-
.oc-graph-wrapper.oc-dark {
|
|
118
|
-
--oc-bg: #0d1117;
|
|
119
|
-
}
|
|
120
115
|
|
|
121
|
-
|
|
122
|
-
.oc-dark.oc-graph-wrapper
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
116
|
+
/* Dark mode graph overrides (darker bg for canvas-based rendering) */
|
|
117
|
+
.oc-dark .oc-graph-wrapper,
|
|
118
|
+
.oc-graph-wrapper.oc-dark {
|
|
119
|
+
/* GitHub-dark canvas background, intentionally not a token */
|
|
120
|
+
--oc-bg: #0d1117;
|
|
121
|
+
}
|
|
126
122
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
/*
|
|
124
|
+
* graph-mount.ts stamps .oc-dark on both .oc-graph-wrapper and
|
|
125
|
+
* .oc-graph-container simultaneously, so the self-variant
|
|
126
|
+
* (.oc-dark.oc-graph-wrapper) and descendant variant
|
|
127
|
+
* (.oc-dark .oc-graph-legend) resolve identically.
|
|
128
|
+
*/
|
|
129
|
+
.oc-dark .oc-graph-legend,
|
|
130
|
+
.oc-dark.oc-graph-wrapper .oc-graph-legend,
|
|
131
|
+
.oc-dark .oc-graph-search input {
|
|
132
|
+
background: rgba(13, 17, 23, 0.85);
|
|
133
|
+
border-color: var(--oc-border);
|
|
134
|
+
}
|
|
130
135
|
}
|
package/src/styles/index.css
CHANGED
|
@@ -4,16 +4,21 @@
|
|
|
4
4
|
* CSS with oc- prefix for all class names.
|
|
5
5
|
* CSS custom properties for theme overrides.
|
|
6
6
|
* Dark mode via .oc-dark class on the container.
|
|
7
|
+
* Cascade layers: oc.tokens, oc.base, oc.components, oc.animation, oc.reduced-motion.
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
/* For optimal typography, load Inter: https://fonts.google.com/specimen/Inter */
|
|
10
11
|
|
|
12
|
+
@layer oc.tokens, oc.base, oc.components, oc.animation, oc.reduced-motion;
|
|
13
|
+
|
|
11
14
|
@import "./tokens.css";
|
|
12
15
|
@import "./dark.css";
|
|
13
16
|
@import "./base.css";
|
|
14
17
|
@import "./chrome.css";
|
|
15
18
|
@import "./tooltip.css";
|
|
16
19
|
@import "./legend.css";
|
|
20
|
+
@import "./series-search.css";
|
|
21
|
+
@import "./you-draw-it.css";
|
|
17
22
|
@import "./table.css";
|
|
18
23
|
@import "./table-animation.css";
|
|
19
24
|
@import "./graph.css";
|
package/src/styles/keyframes.css
CHANGED
|
@@ -1,120 +1,135 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
@layer oc.animation {
|
|
2
|
+
/* ---------------------------------------------------------------------------
|
|
3
|
+
* Animation keyframes
|
|
4
|
+
* --------------------------------------------------------------------------- */
|
|
4
5
|
|
|
5
|
-
/* Bar entrance: clip-path reveal bottom-to-top + fade in (vertical columns).
|
|
6
|
-
|
|
7
|
-
@keyframes oc-enter-bar {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
/* Bar entrance: clip-path reveal bottom-to-top + fade in (vertical columns).
|
|
7
|
+
Bars grow upward from baseline with a soft opacity fade. */
|
|
8
|
+
@keyframes oc-enter-bar {
|
|
9
|
+
from {
|
|
10
|
+
clip-path: inset(100% 0 0 0);
|
|
11
|
+
opacity: 0;
|
|
12
|
+
}
|
|
13
|
+
75% {
|
|
14
|
+
opacity: 1;
|
|
15
|
+
}
|
|
16
|
+
to {
|
|
17
|
+
clip-path: inset(0 0 0 0);
|
|
18
|
+
opacity: 1;
|
|
19
|
+
}
|
|
11
20
|
}
|
|
12
|
-
75% {
|
|
13
|
-
opacity: 1;
|
|
14
|
-
}
|
|
15
|
-
to {
|
|
16
|
-
clip-path: inset(0 0 0 0);
|
|
17
|
-
opacity: 1;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
21
|
|
|
21
|
-
/* Bar entrance: clip-path reveal left-to-right + fade in (horizontal bars).
|
|
22
|
-
|
|
23
|
-
@keyframes oc-enter-bar-h {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
/* Bar entrance: clip-path reveal left-to-right + fade in (horizontal bars).
|
|
23
|
+
Bars grow rightward from axis with a soft opacity fade. */
|
|
24
|
+
@keyframes oc-enter-bar-h {
|
|
25
|
+
from {
|
|
26
|
+
clip-path: inset(0 100% 0 0);
|
|
27
|
+
opacity: 0;
|
|
28
|
+
}
|
|
29
|
+
75% {
|
|
30
|
+
opacity: 1;
|
|
31
|
+
}
|
|
32
|
+
to {
|
|
33
|
+
clip-path: inset(0 0 0 0);
|
|
34
|
+
opacity: 1;
|
|
35
|
+
}
|
|
34
36
|
}
|
|
35
|
-
}
|
|
36
37
|
|
|
37
|
-
/* Line/area entrance: clip-path reveal left-to-right + fade in.
|
|
38
|
-
|
|
39
|
-
@keyframes oc-enter-line {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
38
|
+
/* Line/area entrance: clip-path reveal left-to-right + fade in.
|
|
39
|
+
Lines draw in following reading direction with a soft lead-in. */
|
|
40
|
+
@keyframes oc-enter-line {
|
|
41
|
+
from {
|
|
42
|
+
clip-path: inset(0 100% 0 0);
|
|
43
|
+
opacity: 0;
|
|
44
|
+
}
|
|
45
|
+
15% {
|
|
46
|
+
opacity: 1;
|
|
47
|
+
}
|
|
48
|
+
to {
|
|
49
|
+
clip-path: inset(0 0 0 0);
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
50
52
|
}
|
|
51
|
-
}
|
|
52
53
|
|
|
53
|
-
/* Point/arc entrance: scale up + fade in from center */
|
|
54
|
-
@keyframes oc-enter-point {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
/* Point/arc entrance: scale up + fade in from center */
|
|
55
|
+
@keyframes oc-enter-point {
|
|
56
|
+
from {
|
|
57
|
+
opacity: 0;
|
|
58
|
+
transform: scale(0.3);
|
|
59
|
+
}
|
|
60
|
+
to {
|
|
61
|
+
opacity: 1;
|
|
62
|
+
transform: scale(1);
|
|
63
|
+
}
|
|
62
64
|
}
|
|
63
|
-
}
|
|
64
65
|
|
|
65
|
-
/*
|
|
66
|
-
|
|
67
|
-
@keyframes oc-enter-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
/* Map feature entrance: fade in while transitioning fill from a neutral base
|
|
67
|
+
to the data-driven color stored in --oc-feature-fill. */
|
|
68
|
+
@keyframes oc-enter-map-fill {
|
|
69
|
+
from {
|
|
70
|
+
fill: var(--oc-secondary);
|
|
71
|
+
opacity: 0;
|
|
72
|
+
}
|
|
73
|
+
to {
|
|
74
|
+
fill: var(--oc-feature-fill);
|
|
75
|
+
opacity: 1;
|
|
76
|
+
}
|
|
73
77
|
}
|
|
74
|
-
}
|
|
75
78
|
|
|
76
|
-
/*
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
/* Pure opacity fade (no transform). Safe for elements with existing transforms
|
|
80
|
+
like arc groups that use translate() for positioning. */
|
|
81
|
+
@keyframes oc-enter-fade-only {
|
|
82
|
+
from {
|
|
83
|
+
opacity: 0;
|
|
84
|
+
}
|
|
85
|
+
to {
|
|
86
|
+
opacity: 1;
|
|
87
|
+
}
|
|
81
88
|
}
|
|
82
|
-
to {
|
|
83
|
-
opacity: 1;
|
|
84
|
-
transform: translateY(0);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
89
|
|
|
88
|
-
/*
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
/* Fade + subtle slide up for text, rule, tick, annotations */
|
|
91
|
+
@keyframes oc-enter-fade {
|
|
92
|
+
from {
|
|
93
|
+
opacity: 0;
|
|
94
|
+
transform: translateY(4px);
|
|
95
|
+
}
|
|
96
|
+
to {
|
|
97
|
+
opacity: 1;
|
|
98
|
+
transform: translateY(0);
|
|
99
|
+
}
|
|
93
100
|
}
|
|
94
|
-
to {
|
|
95
|
-
transform: translateY(0);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
101
|
|
|
99
|
-
/* Table
|
|
100
|
-
|
|
101
|
-
@keyframes oc-table-enter-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
102
|
+
/* Table row entrance: slide up only, no opacity (cells fade independently
|
|
103
|
+
to avoid opacity compounding between row and cell animations) */
|
|
104
|
+
@keyframes oc-table-enter-row {
|
|
105
|
+
from {
|
|
106
|
+
transform: translateY(6px);
|
|
107
|
+
}
|
|
108
|
+
to {
|
|
109
|
+
transform: translateY(0);
|
|
110
|
+
}
|
|
107
111
|
}
|
|
108
|
-
}
|
|
109
112
|
|
|
110
|
-
/*
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
/* Table bar fill entrance: clip-path grow only, no opacity
|
|
114
|
+
(preserves resting opacity: 0.15 from table.css) */
|
|
115
|
+
@keyframes oc-table-enter-bar-fill {
|
|
116
|
+
from {
|
|
117
|
+
clip-path: inset(0 100% 0 0);
|
|
118
|
+
}
|
|
119
|
+
to {
|
|
120
|
+
clip-path: inset(0 0 0 0);
|
|
121
|
+
}
|
|
115
122
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
|
|
124
|
+
/* Tooltip entrance */
|
|
125
|
+
@keyframes oc-tooltip-in {
|
|
126
|
+
from {
|
|
127
|
+
opacity: 0;
|
|
128
|
+
transform: translateY(2px);
|
|
129
|
+
}
|
|
130
|
+
to {
|
|
131
|
+
opacity: 1;
|
|
132
|
+
transform: translateY(0);
|
|
133
|
+
}
|
|
119
134
|
}
|
|
120
135
|
}
|
package/src/styles/legend.css
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
@layer oc.components {
|
|
2
|
+
/* ---------------------------------------------------------------------------
|
|
3
|
+
* Legend
|
|
4
|
+
* --------------------------------------------------------------------------- */
|
|
4
5
|
|
|
5
|
-
.oc-legend {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
6
|
+
.oc-legend {
|
|
7
|
+
font-family: var(--oc-font-family);
|
|
8
|
+
font-size: var(--oc-body-size);
|
|
9
|
+
}
|
|
9
10
|
|
|
10
|
-
.oc-legend-entry {
|
|
11
|
-
|
|
12
|
-
}
|
|
11
|
+
.oc-legend-entry {
|
|
12
|
+
cursor: default;
|
|
13
|
+
}
|
|
13
14
|
|
|
14
|
-
.oc-legend text {
|
|
15
|
-
|
|
15
|
+
.oc-legend text {
|
|
16
|
+
fill: var(--oc-legend-text);
|
|
17
|
+
}
|
|
16
18
|
}
|
|
@@ -1,46 +1,67 @@
|
|
|
1
1
|
/* ---------------------------------------------------------------------------
|
|
2
2
|
* Reduced motion
|
|
3
|
+
*
|
|
4
|
+
* Catch-all: last-declared layer beats every earlier layer regardless of
|
|
5
|
+
* specificity. No !important, no hand-maintained selector mirror.
|
|
6
|
+
*
|
|
7
|
+
* Selector list matches CSS_TOKEN_ROOT_SELECTORS in token-definitions.ts.
|
|
3
8
|
* --------------------------------------------------------------------------- */
|
|
4
9
|
|
|
5
|
-
@
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
10
|
+
@layer oc.reduced-motion {
|
|
11
|
+
@media (prefers-reduced-motion: reduce) {
|
|
12
|
+
:is(
|
|
13
|
+
.oc-root,
|
|
14
|
+
.oc-chart-root,
|
|
15
|
+
.oc-table-wrapper,
|
|
16
|
+
.oc-table-root,
|
|
17
|
+
.oc-graph-wrapper,
|
|
18
|
+
.oc-graph-root,
|
|
19
|
+
.oc-sankey-root,
|
|
20
|
+
.oc-tilemap-root,
|
|
21
|
+
.oc-barlist-root,
|
|
22
|
+
.oc-map-root
|
|
23
|
+
),
|
|
24
|
+
:is(
|
|
25
|
+
.oc-root,
|
|
26
|
+
.oc-chart-root,
|
|
27
|
+
.oc-table-wrapper,
|
|
28
|
+
.oc-table-root,
|
|
29
|
+
.oc-graph-wrapper,
|
|
30
|
+
.oc-graph-root,
|
|
31
|
+
.oc-sankey-root,
|
|
32
|
+
.oc-tilemap-root,
|
|
33
|
+
.oc-barlist-root,
|
|
34
|
+
.oc-map-root
|
|
35
|
+
)
|
|
36
|
+
*,
|
|
37
|
+
:is(
|
|
38
|
+
.oc-root,
|
|
39
|
+
.oc-chart-root,
|
|
40
|
+
.oc-table-wrapper,
|
|
41
|
+
.oc-table-root,
|
|
42
|
+
.oc-graph-wrapper,
|
|
43
|
+
.oc-graph-root,
|
|
44
|
+
.oc-sankey-root,
|
|
45
|
+
.oc-tilemap-root,
|
|
46
|
+
.oc-barlist-root,
|
|
47
|
+
.oc-map-root
|
|
48
|
+
)
|
|
49
|
+
*::before,
|
|
50
|
+
:is(
|
|
51
|
+
.oc-root,
|
|
52
|
+
.oc-chart-root,
|
|
53
|
+
.oc-table-wrapper,
|
|
54
|
+
.oc-table-root,
|
|
55
|
+
.oc-graph-wrapper,
|
|
56
|
+
.oc-graph-root,
|
|
57
|
+
.oc-sankey-root,
|
|
58
|
+
.oc-tilemap-root,
|
|
59
|
+
.oc-barlist-root,
|
|
60
|
+
.oc-map-root
|
|
61
|
+
)
|
|
62
|
+
*::after {
|
|
63
|
+
animation: none;
|
|
64
|
+
transition: none;
|
|
65
|
+
}
|
|
45
66
|
}
|
|
46
67
|
}
|