@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.
Files changed (58) hide show
  1. package/dist/index.d.ts +1154 -119
  2. package/dist/index.js +530 -41
  3. package/dist/index.js.map +1 -1
  4. package/dist/styles.css +2 -1
  5. package/dist/styles.css.map +1 -0
  6. package/package.json +9 -3
  7. package/schema/chart.schema.json +8957 -0
  8. package/schema/table.schema.json +861 -0
  9. package/schema/vizspec.schema.json +17694 -0
  10. package/src/accessibility/alt-text.ts +39 -1
  11. package/src/accessibility/aria.ts +4 -2
  12. package/src/colors/__tests__/colorblind.test.ts +12 -0
  13. package/src/colors/colorblind.ts +11 -2
  14. package/src/colors/contrast.ts +11 -0
  15. package/src/colors/index.ts +9 -1
  16. package/src/colors/palettes.ts +47 -0
  17. package/src/helpers/__tests__/deep-merge.test.ts +54 -0
  18. package/src/helpers/__tests__/spec-builders.test.ts +3 -3
  19. package/src/helpers/deep-merge.ts +29 -0
  20. package/src/helpers/spec-builders.ts +7 -7
  21. package/src/index.ts +29 -1
  22. package/src/labels/collision.ts +1 -0
  23. package/src/layout/chrome.ts +24 -0
  24. package/src/layout/index.ts +1 -1
  25. package/src/locale/__tests__/format.test.ts +347 -11
  26. package/src/locale/format.ts +243 -18
  27. package/src/locale/index.ts +10 -1
  28. package/src/responsive/index.ts +2 -0
  29. package/src/responsive/metrics.ts +74 -9
  30. package/src/schema/__tests__/generated-artifacts.test.ts +42 -0
  31. package/src/schema/__tests__/schema.test.ts +179 -0
  32. package/src/styles/__tests__/reduced-motion-selectors.test.ts +28 -0
  33. package/src/styles/animation.css +197 -168
  34. package/src/styles/base.css +89 -62
  35. package/src/styles/chrome.css +173 -179
  36. package/src/styles/dark.css +38 -35
  37. package/src/styles/graph.css +116 -111
  38. package/src/styles/index.css +5 -0
  39. package/src/styles/keyframes.css +115 -100
  40. package/src/styles/legend.css +14 -12
  41. package/src/styles/reduced-motion.css +61 -40
  42. package/src/styles/series-search.css +153 -0
  43. package/src/styles/sparkline.css +14 -12
  44. package/src/styles/table-animation.css +82 -80
  45. package/src/styles/table.css +314 -302
  46. package/src/styles/token-definitions.ts +199 -0
  47. package/src/styles/tokens.css +132 -128
  48. package/src/styles/tooltip.css +109 -115
  49. package/src/styles/you-draw-it.css +126 -0
  50. package/src/types/__tests__/encoding.test.ts +86 -17
  51. package/src/types/__tests__/spec.test.ts +16 -12
  52. package/src/types/encoding.ts +69 -25
  53. package/src/types/events.ts +12 -0
  54. package/src/types/index.ts +39 -3
  55. package/src/types/layout.ts +414 -8
  56. package/src/types/schema-roots.ts +32 -0
  57. package/src/types/spec.ts +643 -84
  58. package/src/types/table.ts +3 -2
@@ -1,130 +1,135 @@
1
- /* ---------------------------------------------------------------------------
2
- * Graph
3
- * --------------------------------------------------------------------------- */
1
+ @layer oc.components {
2
+ /* ---------------------------------------------------------------------------
3
+ * Graph
4
+ * --------------------------------------------------------------------------- */
4
5
 
5
- .oc-graph-wrapper {
6
- position: relative;
7
- overflow: hidden;
8
- background: var(--oc-bg);
9
- font-family: var(--oc-font-family);
10
- width: 100%;
11
- height: 100%;
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
- display: block;
16
- width: 100%;
17
- height: 100%;
18
- cursor: grab;
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
- cursor: grabbing;
23
- }
22
+ .oc-graph-canvas--dragging {
23
+ cursor: grabbing;
24
+ }
24
25
 
25
- .oc-graph-chrome {
26
- position: absolute;
27
- top: 0;
28
- left: 0;
29
- right: 0;
30
- z-index: 2;
31
- padding: 16px 16px 8px;
32
- pointer-events: none;
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
- & .oc-title {
35
- font-size: var(--oc-title-size);
36
- font-weight: var(--oc-title-weight);
37
- letter-spacing: var(--oc-title-tracking);
38
- color: var(--oc-text);
39
- margin: 0 0 4px;
40
- --_stroke: color-mix(in srgb, var(--oc-bg) 80%, transparent);
41
- text-shadow:
42
- -2px -2px 0 var(--_stroke),
43
- 2px -2px 0 var(--_stroke),
44
- -2px 2px 0 var(--_stroke),
45
- 2px 2px 0 var(--_stroke),
46
- 0 -2px 0 var(--_stroke),
47
- 0 2px 0 var(--_stroke),
48
- -2px 0 0 var(--_stroke),
49
- 2px 0 0 var(--_stroke);
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
- & .oc-subtitle {
53
- font-size: var(--oc-subtitle-size);
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
- margin: 0;
56
- --_stroke: color-mix(in srgb, var(--oc-bg) 80%, transparent);
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
- position: absolute;
67
- top: 8px;
68
- right: 8px;
69
- background: var(--oc-bg);
70
- border: 1px solid var(--oc-border);
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-item {
80
- display: flex;
81
- align-items: center;
82
- gap: 6px;
83
- padding: 2px 0;
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-legend-swatch {
87
- width: 10px;
88
- height: 10px;
89
- border-radius: 50%;
90
- flex-shrink: 0;
91
- }
94
+ .oc-graph-search {
95
+ position: absolute;
96
+ top: 8px;
97
+ left: 8px;
92
98
 
93
- .oc-graph-search {
94
- position: absolute;
95
- top: 8px;
96
- left: 8px;
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
- & input {
99
- font-family: var(--oc-font-family);
100
- font-size: var(--oc-body-size);
101
- padding: 6px 10px;
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
- .oc-dark .oc-graph-legend,
122
- .oc-dark.oc-graph-wrapper .oc-graph-legend {
123
- background: rgba(13, 17, 23, 0.85);
124
- border-color: rgba(255, 255, 255, 0.1);
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
- .oc-dark .oc-graph-search input {
128
- background: rgba(13, 17, 23, 0.85);
129
- border-color: rgba(255, 255, 255, 0.1);
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
  }
@@ -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";
@@ -1,120 +1,135 @@
1
- /* ---------------------------------------------------------------------------
2
- * Animation keyframes
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
- Bars grow upward from baseline with a soft opacity fade. */
7
- @keyframes oc-enter-bar {
8
- from {
9
- clip-path: inset(100% 0 0 0);
10
- opacity: 0;
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
- Bars grow rightward from axis with a soft opacity fade. */
23
- @keyframes oc-enter-bar-h {
24
- from {
25
- clip-path: inset(0 100% 0 0);
26
- opacity: 0;
27
- }
28
- 75% {
29
- opacity: 1;
30
- }
31
- to {
32
- clip-path: inset(0 0 0 0);
33
- opacity: 1;
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
- Lines draw in following reading direction with a soft lead-in. */
39
- @keyframes oc-enter-line {
40
- from {
41
- clip-path: inset(0 100% 0 0);
42
- opacity: 0;
43
- }
44
- 15% {
45
- opacity: 1;
46
- }
47
- to {
48
- clip-path: inset(0 0 0 0);
49
- opacity: 1;
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
- from {
56
- opacity: 0;
57
- transform: scale(0.3);
58
- }
59
- to {
60
- opacity: 1;
61
- transform: scale(1);
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
- /* Pure opacity fade (no transform). Safe for elements with existing transforms
66
- like arc groups that use translate() for positioning. */
67
- @keyframes oc-enter-fade-only {
68
- from {
69
- opacity: 0;
70
- }
71
- to {
72
- opacity: 1;
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
- /* Fade + subtle slide up for text, rule, tick, annotations */
77
- @keyframes oc-enter-fade {
78
- from {
79
- opacity: 0;
80
- transform: translateY(4px);
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
- /* Table row entrance: slide up only, no opacity (cells fade independently
89
- to avoid opacity compounding between row and cell animations) */
90
- @keyframes oc-table-enter-row {
91
- from {
92
- transform: translateY(6px);
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 bar fill entrance: clip-path grow only, no opacity
100
- (preserves resting opacity: 0.15 from table.css) */
101
- @keyframes oc-table-enter-bar-fill {
102
- from {
103
- clip-path: inset(0 100% 0 0);
104
- }
105
- to {
106
- clip-path: inset(0 0 0 0);
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
- /* Tooltip entrance */
111
- @keyframes oc-tooltip-in {
112
- from {
113
- opacity: 0;
114
- transform: translateY(2px);
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
- to {
117
- opacity: 1;
118
- transform: translateY(0);
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
  }
@@ -1,16 +1,18 @@
1
- /* ---------------------------------------------------------------------------
2
- * Legend
3
- * --------------------------------------------------------------------------- */
1
+ @layer oc.components {
2
+ /* ---------------------------------------------------------------------------
3
+ * Legend
4
+ * --------------------------------------------------------------------------- */
4
5
 
5
- .oc-legend {
6
- font-family: var(--oc-font-family);
7
- font-size: var(--oc-body-size);
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
- cursor: default;
12
- }
11
+ .oc-legend-entry {
12
+ cursor: default;
13
+ }
13
14
 
14
- .oc-legend text {
15
- fill: var(--oc-legend-text);
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
- @media (prefers-reduced-motion: reduce) {
6
- .oc-table-sort-btn::before,
7
- .oc-table-sort-btn::after,
8
- .oc-table-search input,
9
- .oc-table-pagination button {
10
- transition: none;
11
- }
12
-
13
- /* Disable all chart entrance animations */
14
- .oc-animate .oc-mark-rect rect,
15
- .oc-animate .oc-mark-bar rect,
16
- .oc-animate .oc-mark-arc,
17
- .oc-animate .oc-mark-line,
18
- .oc-animate .oc-mark-area,
19
- .oc-animate circle.oc-mark-point,
20
- .oc-animate circle.oc-mark-circle,
21
- .oc-animate .oc-mark-text text,
22
- .oc-animate .oc-mark-rule line,
23
- .oc-animate .oc-mark-tick line,
24
- .oc-animate .oc-mark-label,
25
- .oc-animate .oc-annotation,
26
- .oc-animate .oc-sankey-node rect,
27
- .oc-animate .oc-sankey-link path {
28
- animation: none;
29
- }
30
-
31
- /* Disable all table entrance animations */
32
- .oc-table-wrapper.oc-animate > .oc-chrome,
33
- .oc-table-wrapper.oc-animate thead,
34
- .oc-table-wrapper.oc-animate tbody tr,
35
- .oc-table-wrapper.oc-animate tbody td,
36
- .oc-table-wrapper.oc-animate td.oc-table-heatmap,
37
- .oc-table-wrapper.oc-animate td.oc-table-category,
38
- .oc-table-wrapper.oc-animate .oc-table-bar-fill,
39
- .oc-table-wrapper.oc-animate .oc-table-sparkline > svg,
40
- .oc-table-wrapper.oc-animate .oc-table-sparkline-dot,
41
- .oc-table-wrapper.oc-animate .oc-table-sparkline-labels,
42
- .oc-table-wrapper.oc-animate .oc-table-search,
43
- .oc-table-wrapper.oc-animate .oc-table-pagination {
44
- animation: none;
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
  }