@cdc/map 2.6.0 → 2.6.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.
Files changed (61) hide show
  1. package/convert-topojson.js +70 -0
  2. package/dist/cdcmap.js +190 -0
  3. package/examples/default-county.json +105 -0
  4. package/examples/default-single-state.json +109 -0
  5. package/examples/default-usa.json +968 -0
  6. package/examples/default-world.json +1495 -0
  7. package/examples/example-city-state.json +474 -0
  8. package/examples/example-world-map.json +1596 -0
  9. package/examples/gender-rate-map.json +1 -0
  10. package/package.json +50 -50
  11. package/src/CdcMap.js +1384 -0
  12. package/src/components/CityList.js +93 -0
  13. package/src/components/CountyMap.js +556 -0
  14. package/src/components/DataTable.js +357 -0
  15. package/src/components/EditorPanel.js +2111 -0
  16. package/src/components/Geo.js +21 -0
  17. package/src/components/Modal.js +31 -0
  18. package/src/components/NavigationMenu.js +66 -0
  19. package/src/components/Sidebar.js +167 -0
  20. package/src/components/SingleStateMap.js +326 -0
  21. package/src/components/UsaMap.js +342 -0
  22. package/src/components/WorldMap.js +175 -0
  23. package/src/components/ZoomableGroup.js +47 -0
  24. package/src/data/abbreviations.js +57 -0
  25. package/src/data/color-palettes.js +200 -0
  26. package/src/data/county-map-halfquality.json +58453 -0
  27. package/src/data/county-map-quarterquality.json +1 -0
  28. package/src/data/county-topo.json +1 -0
  29. package/src/data/dfc-map.json +1 -0
  30. package/src/data/initial-state.js +60 -0
  31. package/src/data/newtest.json +1 -0
  32. package/src/data/state-abbreviations.js +60 -0
  33. package/src/data/supported-geos.js +3775 -0
  34. package/src/data/test.json +1 -0
  35. package/src/data/us-hex-topo.json +1 -0
  36. package/src/data/us-topo.json +1 -0
  37. package/src/data/world-topo.json +1 -0
  38. package/src/hooks/useActiveElement.js +19 -0
  39. package/src/hooks/useZoomPan.js +110 -0
  40. package/src/images/active-checkmark.svg +1 -0
  41. package/src/images/asc.svg +1 -0
  42. package/src/images/close.svg +1 -0
  43. package/src/images/desc.svg +1 -0
  44. package/src/images/external-link.svg +1 -0
  45. package/src/images/icon-download-img.svg +1 -0
  46. package/src/images/icon-download-pdf.svg +1 -0
  47. package/src/images/inactive-checkmark.svg +1 -0
  48. package/src/images/map-folded.svg +1 -0
  49. package/src/index.html +29 -0
  50. package/src/index.js +20 -0
  51. package/src/scss/btn.scss +69 -0
  52. package/src/scss/datatable.scss +7 -0
  53. package/src/scss/editor-panel.scss +654 -0
  54. package/src/scss/main.scss +224 -0
  55. package/src/scss/map.scss +188 -0
  56. package/src/scss/sidebar.scss +146 -0
  57. package/src/scss/tooltips.scss +30 -0
  58. package/src/scss/variables.scss +1 -0
  59. package/uploads/upload-example-city-state.json +392 -0
  60. package/uploads/upload-example-world-data.json +1490 -0
  61. package/LICENSE +0 -201
@@ -0,0 +1,224 @@
1
+ @import "~@cdc/core/styles/base";
2
+ @import "~@cdc/core/styles/heading-colors";
3
+ @import "variables";
4
+ @import "editor-panel";
5
+
6
+ .cdc-map-outer-container {
7
+ position: relative;
8
+ display: flex; // Needed for the main content
9
+ .loading > div.la-ball-beat {
10
+ margin-top: 20%;
11
+ }
12
+ @include breakpointClass(xs) {
13
+ div#tooltip {
14
+ display: none !important;
15
+ }
16
+ }
17
+ @include breakpointClass(md) {
18
+ .map-container.modal-background::before {
19
+ border-bottom: $lightGray 1px solid;
20
+ margin-bottom: -1px;
21
+ bottom: 1px;
22
+ }
23
+ }
24
+ }
25
+
26
+ .cdc-map-inner-container {
27
+ @import "./tooltips";
28
+ @import "./map";
29
+ @import "./sidebar";
30
+ @import "./datatable";
31
+ flex-grow: 1;
32
+ text-rendering: geometricPrecision;
33
+ color: #202020;
34
+ border: 0;
35
+ text-align: left;
36
+ max-width: 100%;
37
+ .btn {
38
+ padding: .375em .75em;
39
+ border-radius: .3em;
40
+ }
41
+
42
+ header.hidden {
43
+ display: none;
44
+ }
45
+
46
+ .no-border {
47
+ border: 0;
48
+ }
49
+
50
+ div.map-title {
51
+ margin: 0;
52
+ color: #fff;
53
+ font-size: 1.1em;
54
+ position: relative;
55
+ em {
56
+ font-style: italic;
57
+ }
58
+ strong {
59
+ font-weight: bold;
60
+ }
61
+ }
62
+
63
+ div.map-title:not(:empty) {
64
+ margin: 0 !important;
65
+ padding: .6em .8em;
66
+ border-bottom-width: 3px;
67
+ border-bottom-style: solid;
68
+ }
69
+
70
+ .map-container {
71
+ display: flex;
72
+ position: relative;
73
+ flex-direction: column;
74
+ &.modal-background {
75
+ position: relative;
76
+ &::before {
77
+ content: " ";
78
+ position: absolute;
79
+ top: 0;
80
+ left: -1em;
81
+ right: -1em;
82
+ bottom: 0;
83
+ background: rgba(0,0,0,.05);
84
+ z-index: 7;
85
+ }
86
+ .modal-content {
87
+ background: #fff;
88
+ position: absolute;
89
+ z-index: 8;
90
+ top: 50%;
91
+ left: 50%;
92
+ display: flex;
93
+ flex-direction: row;
94
+ border-radius: 5px;
95
+ transform: translate(-50%, -50%);
96
+ border: rgba(0, 0, 0, 0.3) 1px solid;
97
+ box-shadow: rgba(0, 0, 0, 0.2) 3px 3px 7px;
98
+ opacity: 1;
99
+ line-height: 1.4em;
100
+ font-size: 1rem;
101
+ border-radius: 4px;
102
+ min-width: 250px;
103
+ padding: 16px 40px 16px 20px;
104
+ width: auto;
105
+ .content {
106
+ flex-grow: 1;
107
+ }
108
+ .legend-item {
109
+ margin-right: .75em;
110
+ margin-top: 3px;
111
+ flex-shrink: 0;
112
+ }
113
+ @include breakpointClass(sm) {
114
+ transform: translate(-50%, -100%);
115
+ }
116
+ @include breakpointClass(md) {
117
+ transform: translate(-50%, -120%);
118
+ }
119
+ @include breakpointClass(lg) {
120
+ font-size: .9em;
121
+ min-width: 300px;
122
+ .legend-item {
123
+ height: 1.3em;
124
+ width: 1.3em;
125
+ }
126
+ }
127
+ strong {
128
+ font-weight: 600;
129
+ font-size: 1.2em;
130
+ }
131
+ .modal-close {
132
+ position: absolute;
133
+ right: 20px;
134
+ top: 18px;
135
+ cursor: pointer;
136
+ width: 1em;
137
+ }
138
+ span.navigation-link {
139
+ text-decoration: underline;
140
+ cursor: pointer;
141
+ color: #075290;
142
+ display: flex;
143
+ svg {
144
+ display: inline-block;
145
+ max-width: 13px;
146
+ }
147
+ }
148
+ &.capitalize p {
149
+ text-transform: capitalize;
150
+ }
151
+ }
152
+ }
153
+ }
154
+
155
+ p.subtext {
156
+ font-size: .9em;
157
+ padding: 0 .8em .8em;
158
+ em {
159
+ font-style: italic;
160
+ }
161
+ strong {
162
+ font-weight: bold;
163
+ }
164
+ }
165
+
166
+ span.legend-item {
167
+ margin-right: 5px;
168
+ border-radius: 300px;
169
+ vertical-align: middle;
170
+ display: inline-block;
171
+ height: 1em;
172
+ width: 1em;
173
+ min-width: 1em;
174
+ min-height: 1em;
175
+ max-width: 1em;
176
+ max-height: 1em;
177
+ border: rgba(0,0,0,.3) 1px solid;
178
+ }
179
+
180
+ .navigation-menu {
181
+ background: #fff;
182
+ position: relative;
183
+ line-height: 1.3em;
184
+ padding: 1em;
185
+ z-index: 6;
186
+ width: 100%;
187
+ border-top: $lightGray 1px solid;
188
+ label {
189
+ flex-grow: 1;
190
+ > div.select-heading {
191
+ font-size: 1.1em;
192
+ font-weight: 600;
193
+ margin-bottom: .75em;
194
+ }
195
+ }
196
+ form {
197
+ max-width: 400px;
198
+ display: flex;
199
+ align-items: flex-end;
200
+ }
201
+ select {
202
+ font-size: 1.2em;
203
+ display: inline-block;
204
+ vertical-align: top;
205
+ width: 100%;
206
+ }
207
+ input {
208
+ color: #fff;
209
+ font-weight: 700;
210
+ padding: .4em .65em;
211
+ font-size: .9em;
212
+ border: 0;
213
+ display: inline-block;
214
+ border-radius: 7px;
215
+ margin-left: .5em;
216
+ cursor: pointer;
217
+ }
218
+ }
219
+
220
+ [tabIndex]:focus {
221
+ outline-color: rgb(0, 95, 204)
222
+ }
223
+
224
+ }
@@ -0,0 +1,188 @@
1
+ // Map Download UI
2
+ .map-downloads {
3
+ position: relative;
4
+ z-index: 3;
5
+
6
+ .map-downloads__ui.btn-group {
7
+ transform: scale(0.8);
8
+ }
9
+
10
+ .map-downloads__ui {
11
+ position: absolute;
12
+ top: 0.5em;
13
+ left: 0.5em;
14
+ transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1);
15
+ box-shadow: 0 5px 12px -8px rgba(0, 0, 0, 0.5);
16
+ user-select: none;
17
+ height: 42px;
18
+ }
19
+ }
20
+
21
+ .map-container {
22
+ &.full-border {
23
+ border: #c2c2c2 1px solid;
24
+ }
25
+ }
26
+
27
+ header + .map-container.full-border {
28
+ border-top: 0; // When they have a header, don't add a border top
29
+ }
30
+
31
+ // World Specific Styles
32
+ .map-container.world {
33
+ &.data .geography-container {
34
+ border-bottom: $lightGray 1px solid;
35
+ }
36
+ .geography-container {
37
+ cursor: move;
38
+ }
39
+ }
40
+
41
+ @include breakpointClass(md) {
42
+ // US Specific
43
+ .map-container.us {
44
+ margin: 0 1em;
45
+ }
46
+ // Data Specific
47
+ .map-container.data {
48
+ &.side {
49
+ flex-direction: row;
50
+ }
51
+ }
52
+ }
53
+
54
+ .geography-container {
55
+ position: relative;
56
+ flex-grow: 1;
57
+ width: 100%;
58
+ overflow: hidden;
59
+ .geo-point {
60
+ transition: 0.3s all;
61
+ circle {
62
+ fill: inherit;
63
+ transition: 0.1s transform;
64
+ }
65
+ &:hover {
66
+ transition: 0.2s all;
67
+ }
68
+ }
69
+ .map-logo {
70
+ position: absolute;
71
+ bottom: 2em;
72
+ right: 1em;
73
+ z-index: 3;
74
+ width: 75px;
75
+ }
76
+ }
77
+
78
+ .single-geo {
79
+ transition: 0.2s fill;
80
+ cursor: pointer;
81
+ &:focus {
82
+ outline: 0;
83
+ }
84
+ }
85
+
86
+ // Cities and Territories
87
+ .territories {
88
+ margin: 2em 100px 2em 0;
89
+ font-size: 1.1em;
90
+ display: flex;
91
+ align-items: center;
92
+ > span {
93
+ margin-left: 1em;
94
+ margin-right: 0.5em;
95
+ }
96
+ svg {
97
+ max-width: 35px;
98
+ min-width: 25px;
99
+ margin-left: 0.5em;
100
+ transition: 0.3s all;
101
+ text {
102
+ font-size: 0.95em;
103
+ }
104
+ }
105
+ }
106
+
107
+ .zoom-controls {
108
+ display: flex;
109
+ position: absolute;
110
+ bottom: 2em;
111
+ left: 1em;
112
+ z-index: 4;
113
+ > button {
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ padding: 0.2em;
118
+ height: 1.75em;
119
+ width: 1.75em;
120
+ background: rgba(0, 0, 0, 0.65);
121
+ transition: 0.2s all;
122
+ color: #fff;
123
+ border-radius: 100%;
124
+ border: 0;
125
+ &:hover {
126
+ background: rgba(0, 0, 0, 0.8);
127
+ transition: 0.2s all;
128
+ }
129
+ &:active {
130
+ transform: scale(0.9);
131
+ }
132
+ }
133
+ > button:first-child {
134
+ margin-right: 0.25em;
135
+ }
136
+ }
137
+
138
+ @include breakpointClass(sm) {
139
+ .zoom-controls > button {
140
+ height: 2.5em;
141
+ width: 2.5em;
142
+ }
143
+ }
144
+
145
+ @include breakpointClass(md) {
146
+ .map-downloads .map-downloads__ui.btn-group {
147
+ top: 1em;
148
+ left: 1em;
149
+ transform: none;
150
+ }
151
+ .territories {
152
+ font-size: 1em;
153
+ > span {
154
+ margin-left: 0;
155
+ }
156
+ svg {
157
+ max-width: 45px;
158
+ }
159
+ }
160
+ }
161
+
162
+ .countyMapGroup {
163
+ transition: transform 1s;
164
+ will-change: transform;
165
+ transform-origin: center;
166
+ stroke: none !important;
167
+ }
168
+
169
+ // .state {
170
+ // display: none;
171
+ // }
172
+
173
+ .state {
174
+ &--inactive:hover path {
175
+ cursor: pointer;
176
+ transition: fill 0.5s;
177
+ }
178
+ }
179
+
180
+ .county--path {
181
+ fill: white;
182
+ }
183
+
184
+ .btn--reset {
185
+ position: absolute;
186
+ top: 10px;
187
+ right: 10px;
188
+ }
@@ -0,0 +1,146 @@
1
+ .map-container.world aside.side {
2
+ border-top: 0;
3
+ }
4
+ @include breakpointClass(md) {
5
+ .map-container.world aside.side {
6
+ border-top: $lightGray 1px solid;
7
+ position: absolute;
8
+ box-shadow: rgba(0, 0, 0, 0.2) 0 10px 18px;
9
+ }
10
+ }
11
+
12
+ aside {
13
+ background-color: #fff;
14
+ z-index: 6;
15
+ border-top: $lightGray 1px solid;
16
+ @include breakpointClass(md) {
17
+ &.bottom {
18
+ border: #c2c2c2 1px solid;
19
+ }
20
+ &.side {
21
+ z-index: 1;
22
+ box-sizing: content-box;
23
+ max-width: 450px;
24
+ margin-top: 2em;
25
+ margin-bottom: 2em;
26
+ align-self: flex-start;
27
+ z-index: 4;
28
+ right: 1em;
29
+ border: $lightGray 1px solid;
30
+ width: 50%;
31
+ top: 2em;
32
+ right: 1em;
33
+ }
34
+ }
35
+
36
+ .legend-section {
37
+ padding: 1em;
38
+ position: relative;
39
+ .heading-2 {
40
+ font-size: 1.3em;
41
+ padding-bottom: 0;
42
+ display: inline-block;
43
+ }
44
+ .heading-2 + p, .heading-2 + ul, p + ul, p + p {
45
+ padding-top: 1em;
46
+ }
47
+ .clear {
48
+ font-size: .75em;
49
+ color: rgba(0, 0, 0, 0.6);
50
+ position: absolute;
51
+ right: 1em;
52
+ background: rgba(0, 0, 0, 0.1);
53
+ text-transform: uppercase;
54
+ transition: .2s all;
55
+ padding: .2em .5em;
56
+ border: rgba(0,0,0,.2) 1px solid;
57
+ &:hover {
58
+ text-decoration: none;
59
+ background: rgba(0,0,0,.15);
60
+ transition: .2s all;
61
+ }
62
+ }
63
+ p {
64
+ line-height: 1.4em;
65
+ }
66
+ ul {
67
+ list-style: none;
68
+ padding: 0;
69
+ display: flex;
70
+ flex-wrap: wrap;
71
+ li {
72
+ flex-shrink: 0;
73
+ display: inline-block;
74
+ padding-right: 1em;
75
+ padding-bottom: 1em;
76
+ vertical-align: middle;
77
+ transition: .1s opacity;
78
+ display: flex;
79
+ align-items: center;
80
+ &.single-legend {
81
+ cursor: pointer;
82
+ }
83
+ .color {
84
+ flex-shrink: 0;
85
+ }
86
+ &.disabled {
87
+ opacity: .4;
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ &.side.single-column {
94
+ @include breakpointClass(md) {
95
+ width: 25%;
96
+ min-width: 200px;
97
+ .legend-section ul {
98
+ flex-direction: column;
99
+ li {
100
+ width: 100%;
101
+ &:nth-last-of-type(-n+2) {
102
+ padding-bottom: 1em;
103
+ }
104
+ &:last-child {
105
+ padding-bottom: 0;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ @include breakpointClass(sm) {
113
+ .legend-section ul {
114
+ align-items: flex-start;
115
+ justify-content: space-between;
116
+ li {
117
+ width: 48%;
118
+ padding-right: .5em;
119
+ &:nth-last-of-type(-n+2) {
120
+ padding-bottom: 0
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ .filters-section {
127
+ padding: 0 1em 1em;
128
+ .heading-3 {
129
+ font-weight: bold;
130
+ margin-bottom: .5em;
131
+ }
132
+ form {
133
+ margin-top: .5em;
134
+ line-height: 2em;
135
+ display: flex;
136
+ align-items: flex-end;
137
+ section + section {
138
+ margin-left: .75em;
139
+ }
140
+ select {
141
+ display: block;
142
+ font-size: 1em;
143
+ }
144
+ }
145
+ }
146
+ }
@@ -0,0 +1,30 @@
1
+ /* Tooltip Styles - overrides some default ones provided by <ReactTooltip /> */
2
+ .tooltip {
3
+ opacity: 1 !important;
4
+ border: rgba(0,0,0,.3) 1px solid;
5
+ box-shadow: rgba(0,0,0,.1) 3px 3px 7px;
6
+ opacity: 1;
7
+ line-height: 1.4em;
8
+ font-size: 1em;
9
+ border-radius: 4px;
10
+ padding: 8px 12px;
11
+ &:before, &:after {
12
+ display: none;
13
+ }
14
+
15
+ &.capitalize dl {
16
+ text-transform: capitalize;
17
+ }
18
+
19
+ dl dt:not(:empty)::after {
20
+ content: ":\00a0";
21
+ }
22
+
23
+ dl > div {
24
+ display: flex;
25
+ }
26
+
27
+ strong {
28
+ font-weight: 600;
29
+ }
30
+ }
@@ -0,0 +1 @@
1
+ $editorWidth: 350px;