@cdc/dashboard 1.1.2 → 1.1.4

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.
@@ -30,9 +30,11 @@ export default function DataTable() {
30
30
  const csvData = Papa.unparse(data);
31
31
 
32
32
  const saveBlob = () => {
33
- if (navigator.msSaveBlob) {
34
- const dataBlob = new Blob([csvData], {type: "text/csv;charset=utf-8;"});
35
- navigator.msSaveBlob(dataBlob, fileName);
33
+ //@ts-ignore
34
+ if (typeof window.navigator.msSaveBlob === 'function') {
35
+ const dataBlob = new Blob([csvData], { type: "text/csv;charset=utf-8;" });
36
+ //@ts-ignore
37
+ window.navigator.msSaveBlob(dataBlob, fileName);
36
38
  }
37
39
  }
38
40
 
@@ -51,40 +53,40 @@ export default function DataTable() {
51
53
 
52
54
  // Creates columns structure for the table
53
55
  const tableColumns = useMemo(() => {
54
- const newTableColumns = []/*[{
55
- Header: '',
56
- Cell: ({ row }) => {
57
- return (
58
- <>
59
- </>
60
- )
61
- },
62
- id: 'series-label'
63
- }];*/
64
-
65
- Object.keys(data[0]).map((key) => {
66
- const newCol = {
67
- Header: key,
68
- Cell: ({ row }) => {
69
- return (
70
- <>
71
- {row.original[key]}
72
- </>
73
- );
74
- },
75
- id: key,
76
- canSort: true
77
- };
78
-
79
- newTableColumns.push(newCol);
80
- });
56
+ const newTableColumns = [];
57
+
58
+ // catch no data errors and update the table header.
59
+ if(data.length === 0) {
60
+ return [{
61
+ Header : 'No Data Found'
62
+ }];
63
+ }
64
+
65
+ else {
66
+ Object.keys(data[0]).map((key) => {
67
+ const newCol = {
68
+ Header: key,
69
+ Cell: ({ row }) => {
70
+ return (
71
+ <>
72
+ {row.original[key]}
73
+ </>
74
+ );
75
+ },
76
+ id: key,
77
+ canSort: true
78
+ };
79
+
80
+ newTableColumns.push(newCol);
81
+ });
82
+ }
81
83
 
82
84
  return newTableColumns;
83
85
  }, [config]);
84
86
 
85
87
  const tableData = useMemo(
86
- () => config.data,
87
- [config.data]
88
+ () => data,
89
+ [data]
88
90
  );
89
91
 
90
92
  // Change accessibility label depending on expanded status
@@ -134,7 +136,7 @@ export default function DataTable() {
134
136
  <table className={tableExpanded ? 'data-table' : 'data-table cdcdataviz-sr-only'} hidden={!tableExpanded} {...getTableProps()}>
135
137
  <caption className="visually-hidden">{config.table.label}</caption>
136
138
  <thead>
137
- {headerGroups.map((headerGroup) => (
139
+ {headerGroups && headerGroups.map((headerGroup) => (
138
140
  <tr {...headerGroup.getHeaderGroupProps()}>
139
141
  {headerGroup.headers.map((column) => (
140
142
  <th tabIndex="0" {...column.getHeaderProps(column.getSortByToggleProps())} className={column.isSorted ? column.isSortedDesc ? 'sort sort-desc' : 'sort sort-asc' : 'sort'} title={column.Header}>
@@ -145,24 +147,26 @@ export default function DataTable() {
145
147
  </tr>
146
148
  ))}
147
149
  </thead>
148
- <tbody {...getTableBodyProps()}>
149
- {rows.map((row) => {
150
- prepareRow(row);
151
- return (
152
- <tr {...row.getRowProps()}>
153
- {row.cells.map((cell) => (
154
- <td tabIndex="0" {...cell.getCellProps()}>
155
- {cell.render('Cell')}
156
- </td>
157
- ))}
158
- </tr>
159
- );
160
- })}
161
- </tbody>
150
+ {rows &&
151
+ <tbody {...getTableBodyProps()}>
152
+ {rows.map((row) => {
153
+ prepareRow(row);
154
+ return (
155
+ <tr {...row.getRowProps()}>
156
+ {row.cells && row.cells.map((cell) => (
157
+ <td tabIndex="0" {...cell.getCellProps()}>
158
+ {cell.render('Cell')}
159
+ </td>
160
+ ))}
161
+ </tr>
162
+ );
163
+ })}
164
+ </tbody>
165
+ }
162
166
  </table>
163
167
  </div>
164
168
  {config.table.download && <DownloadButton data={data} />}
165
169
  </section>
166
170
  </ErrorBoundary>
167
171
  );
168
- }
172
+ }
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useCallback, memo, useContext } from 'react'
1
+ import React, { useState, useEffect, memo, useContext } from 'react'
2
2
  import ReactTooltip from 'react-tooltip'
3
3
 
4
4
  import {
@@ -14,6 +14,8 @@ import Context from '../context';
14
14
 
15
15
  import ErrorBoundary from '@cdc/core/components/ErrorBoundary';
16
16
  import QuestionIcon from '@cdc/core/assets/question-circle.svg';
17
+ import Tooltip from '@cdc/core/components/ui/Tooltip'
18
+ import Icon from '@cdc/core/components/ui/Icon'
17
19
 
18
20
  const Helper = ({text}) => {
19
21
  return (
@@ -38,7 +40,7 @@ const Helper = ({text}) => {
38
40
  window.CustomEvent = CustomEvent;
39
41
  })();
40
42
 
41
- const TextField = memo(({label, section = null, subsection = null, fieldName, updateField, value: stateValue, type = "input", i = null, min = null, ...attributes}) => {
43
+ const TextField = memo(({label, section = null, subsection = null, fieldName, updateField, value: stateValue, tooltip, type = "input", i = null, min = null, ...attributes}) => {
42
44
  const [ value, setValue ] = useState(stateValue);
43
45
 
44
46
  const [ debouncedValue ] = useDebounce(value, 500);
@@ -77,7 +79,7 @@ const TextField = memo(({label, section = null, subsection = null, fieldName, up
77
79
 
78
80
  return (
79
81
  <label>
80
- <span className="edit-label column-heading">{label}</span>
82
+ <span className="edit-label column-heading">{label}{tooltip}</span>
81
83
  {formElement}
82
84
  </label>
83
85
  )
@@ -108,8 +110,6 @@ const Select = memo(({label, value, options, fieldName, section = null, subsecti
108
110
  )
109
111
  })
110
112
 
111
- const headerColors = ['theme-blue','theme-purple','theme-brown','theme-teal','theme-pink','theme-orange','theme-slate','theme-indigo','theme-cyan','theme-green','theme-amber']
112
-
113
113
  const EditorPanel = memo(() => {
114
114
  const {
115
115
  config,
@@ -203,7 +203,6 @@ const EditorPanel = memo(() => {
203
203
  </section>
204
204
  </section>
205
205
  );
206
-
207
206
  }
208
207
 
209
208
  const convertStateToConfig = (type = "JSON") => {
@@ -266,12 +265,12 @@ const EditorPanel = memo(() => {
266
265
 
267
266
  updateConfig({...config, dashboard: dashboardConfig});
268
267
  }
269
-
268
+
270
269
  return (
271
270
  <ErrorBoundary component="EditorPanel">
272
271
  {config.runtime && config.runtime.editorErrorMessage && <Error /> }
273
272
  <button className={displayPanel ? `editor-toggle` : `editor-toggle collapsed`} title={displayPanel ? `Collapse Editor` : `Expand Editor`} onClick={() => setDisplayPanel(!displayPanel) }></button>
274
- <section className={displayPanel ? 'editor-panel' : 'hidden editor-panel'}>
273
+ <section className={displayPanel ? 'editor-panel cove' : 'hidden editor-panel cove'}>
275
274
  <div className="heading-2">Configure</div>
276
275
  <section className="form-container">
277
276
  <form>
@@ -284,7 +283,14 @@ const EditorPanel = memo(() => {
284
283
  </AccordionItemHeading>
285
284
  <AccordionItemPanel>
286
285
  <TextField value={config.dashboard.title} section="dashboard" fieldName="title" label="Title" updateField={updateField} />
287
- <TextField type="textarea" value={config.dashboard.description} section="dashboard" fieldName="description" label="Description" updateField={updateField} />
286
+ <TextField type="textarea" value={config.dashboard.description} section="dashboard" fieldName="description" label="Description" updateField={updateField} tooltip={
287
+ <Tooltip style={{textTransform: 'none'}}>
288
+ <Tooltip.Target><Icon display="question" style={{marginLeft: '0.5rem'}}/></Tooltip.Target>
289
+ <Tooltip.Content>
290
+ <p>Enter supporting text to display below the data visualization, if applicable. The following HTML tags are supported: strong, em, sup, and sub.</p>
291
+ </Tooltip.Content>
292
+ </Tooltip>
293
+ }/>
288
294
  </AccordionItemPanel>
289
295
  </AccordionItem>
290
296
  <AccordionItem>
@@ -345,4 +351,4 @@ const EditorPanel = memo(() => {
345
351
  )
346
352
  })
347
353
 
348
- export default EditorPanel;
354
+ export default EditorPanel;
@@ -2,7 +2,7 @@ import React, { useContext, memo } from 'react'
2
2
 
3
3
  const Header = ({preview, setPreview, back, subEditor = null}) => {
4
4
  return (
5
- <div className="editor-heading">
5
+ <div aria-level="2" role="heading" className="editor-heading">
6
6
  {subEditor ? <div className="heading-1 back-to" onClick={back} style={{cursor: 'pointer'}}><span>&#8592;</span> Back to Dashboard</div> : <div className="heading-1">Dashboard Editor</div>}
7
7
  {!subEditor && <ul className="toggle-bar">
8
8
  <li className={preview ? 'inactive' : 'active'} onClick={() => {setPreview(false)}}>Build Layout</li>
@@ -1,6 +1,8 @@
1
1
  import React, { useContext } from 'react';
2
2
  import { useDrag } from 'react-dnd';
3
3
  import CloseIcon from '../images/icon-close.svg';
4
+ import GridIcon from '../images/icon-grid.svg';
5
+ import CodeIcon from '../images/icon-code.svg';
4
6
  import EditIcon from '../images/icon-edit.svg';
5
7
  import MoveIcon from '../images/icon-move.svg';
6
8
  import BiteIcon from '@cdc/core/assets/data-bite-graphic.svg';
@@ -9,30 +11,43 @@ import LineIcon from '@cdc/core/assets/chart-line-solid.svg';
9
11
  import PieIcon from '@cdc/core/assets/chart-pie-solid.svg';
10
12
  import UsaIcon from '@cdc/core/assets/usa-graphic.svg';
11
13
  import WorldIcon from '@cdc/core/assets/world-graphic.svg';
14
+ import AlabamaIcon from '@cdc/core/assets/alabama-graphic.svg';
12
15
 
13
16
  import Context from '../context';
14
17
 
15
18
  const iconHash = {
16
19
  'data-bite' : <BiteIcon />,
17
- 'Bar' : <BarIcon />,
20
+ 'Bar': <BarIcon />,
21
+ 'Spark Line': <LineIcon />,
22
+ 'waffle-chart' : <GridIcon />,
23
+ 'markup-include' : <CodeIcon />,
18
24
  'Line' : <LineIcon />,
19
25
  'Pie' : <PieIcon />,
20
26
  'us' : <UsaIcon />,
21
- 'world' : <WorldIcon />
27
+ 'us-county': <UsaIcon />,
28
+ 'world' : <WorldIcon />,
29
+ 'single-state': <AlabamaIcon />
22
30
  }
23
31
 
24
32
  const labelHash = {
25
- 'data-bite' : 'Data Bite',
33
+ 'data-bite': 'Data Bite',
34
+ 'waffle-chart' : 'Waffle Chart',
35
+ 'markup-include' : 'Markup Include',
26
36
  'Bar' : 'Bar',
27
37
  'Line' : 'Line',
28
38
  'Pie' : 'Pie',
29
- 'us' : 'United States',
30
- 'world' : 'World'
39
+ 'Spark Line' : 'Spark Line',
40
+ 'us': 'United States (State- or County-Level)',
41
+ 'us-county': 'United States (State- or County-Level)',
42
+ 'world' : 'World',
43
+ 'single-state': 'U.S. State'
31
44
  }
32
45
 
33
46
  const Widget = ({ data = {}, addVisualization, type }) => {
34
47
  const { rows, visualizations, config, updateConfig } = useContext(Context)
35
48
 
49
+ console.log('type', type)
50
+
36
51
  const handleWidgetMove = (item, monitor) => {
37
52
  let result = monitor.getDropResult()
38
53
 
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
2
+ <path fill="currentColor" d="M414.8 40.79L286.8 488.8C281.9 505.8 264.2 515.6 247.2 510.8C230.2 505.9 220.4 488.2 225.2 471.2L353.2 23.21C358.1 6.216 375.8-3.624 392.8 1.232C409.8 6.087 419.6 23.8 414.8 40.79H414.8zM518.6 121.4L630.6 233.4C643.1 245.9 643.1 266.1 630.6 278.6L518.6 390.6C506.1 403.1 485.9 403.1 473.4 390.6C460.9 378.1 460.9 357.9 473.4 345.4L562.7 256L473.4 166.6C460.9 154.1 460.9 133.9 473.4 121.4C485.9 108.9 506.1 108.9 518.6 121.4V121.4zM166.6 166.6L77.25 256L166.6 345.4C179.1 357.9 179.1 378.1 166.6 390.6C154.1 403.1 133.9 403.1 121.4 390.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4L121.4 121.4C133.9 108.9 154.1 108.9 166.6 121.4C179.1 133.9 179.1 154.1 166.6 166.6V166.6z"/>
3
+ </svg>
@@ -1 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path d="M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <path fill="currentColor" d="M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z">
3
+ </path>
4
+ </svg>
package/src/index.html CHANGED
@@ -1,10 +1,10 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta
6
- name="viewport"
7
- content="width=device-width, initial-scale=1, shrink-to-fit=no"
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta
6
+ name="viewport"
7
+ content="width=device-width, initial-scale=1, shrink-to-fit=no"
8
8
  />
9
9
  <style>
10
10
  body {
@@ -12,14 +12,16 @@
12
12
  display: flex;
13
13
  flex-direction: column;
14
14
  justify-content: center;
15
+ min-height: unset !important;
15
16
  }
16
17
  .react-container + .react-container {
17
18
  margin-top: 3rem;
18
19
  }
19
20
  </style>
20
- </head>
21
+ </head>
21
22
  <body>
22
- <div class="react-container" data-config="/examples/default.json"></div>
23
- <noscript>You need to enable JavaScript to run this app.</noscript>
24
- </body>
25
- </html>
23
+ <!-- <div class="react-container" data-config="/examples/default.json"></div> -->
24
+ <div class="react-container" data-config="/examples/test-example.json"></div>
25
+ <noscript>You need to enable JavaScript to run this app.</noscript>
26
+ </body>
27
+ </html>
@@ -11,6 +11,11 @@
11
11
  }
12
12
 
13
13
  .editor-panel {
14
+ //TODO: Remove after COVE refactor
15
+ &.cove {
16
+ @import "@cdc/core/styles/v2/layout/tooltip.scss";
17
+ }
18
+
14
19
  .two-col-inputs {
15
20
  display: flex;
16
21
  margin-top: 1em;
@@ -150,14 +155,14 @@
150
155
  transform: rotate(-45deg) translateY(-50%);
151
156
  transition: .1s all;
152
157
  }
153
-
158
+
154
159
  .accordion__button[aria-expanded='true']::before,
155
160
  .accordion__button[aria-selected='true']::before {
156
161
  transform: rotate(45deg) translateY(-50%);
157
162
  margin-right: 1.3em;
158
163
  transition: .1s all;
159
164
  }
160
-
165
+
161
166
  .accordion__panel {
162
167
  border-bottom: 1px solid rgba(0, 0, 0, 0.2);
163
168
  padding: 1em 1.25em 2em;
@@ -166,7 +171,7 @@
166
171
  font-size: .8em;
167
172
  }
168
173
  }
169
-
174
+
170
175
  .advanced {
171
176
  padding: 0 1em 1em;
172
177
  text-align: left;
@@ -199,17 +204,17 @@
199
204
  box-sizing: border-box
200
205
  }
201
206
  }
202
-
207
+
203
208
  @keyframes fadein {
204
209
  0% {
205
210
  opacity: 0;
206
211
  }
207
-
212
+
208
213
  100% {
209
214
  opacity: 1;
210
215
  }
211
216
  }
212
-
217
+
213
218
  .heading-2 {
214
219
  background: #565656;
215
220
  color: #fff;
@@ -219,7 +224,7 @@
219
224
  border-bottom:#565656 3px solid;
220
225
  z-index: 3;
221
226
  }
222
-
227
+
223
228
  label {
224
229
  text-transform: uppercase;
225
230
  display: block;
@@ -292,17 +297,17 @@
292
297
  }
293
298
  }
294
299
  }
295
-
300
+
296
301
  fieldset {
297
302
  display: block;
298
303
  }
299
-
304
+
300
305
  .primary-fieldset {
301
306
  padding: 0;
302
307
  margin: 0;
303
308
  border: 0;
304
309
  }
305
-
310
+
306
311
  ul.column-edit {
307
312
  list-style: none;
308
313
  li {
@@ -321,11 +326,11 @@
321
326
  }
322
327
  }
323
328
  }
324
-
329
+
325
330
  &.hidden {
326
331
  display: none;
327
332
  }
328
-
333
+
329
334
  .emove-column {
330
335
  float: right;
331
336
  text-transform: uppercase;
@@ -341,7 +346,7 @@
341
346
  cursor: pointer;
342
347
  font-weight: bold;
343
348
  }
344
-
349
+
345
350
  .edit-block {
346
351
  padding-left: 1em;
347
352
  border-left: rgba(0, 0, 0, 0.2) 4px solid;
@@ -370,7 +375,7 @@
370
375
  text-transform: none;
371
376
  font-weight: normal;
372
377
  }
373
-
378
+
374
379
  .btn {
375
380
  margin-top: 1em;
376
381
  }
@@ -378,7 +383,7 @@
378
383
  list-style: none;
379
384
  > li {
380
385
  margin-right: .3em;
381
- margin-bottom: .3em;
386
+ margin-bottom: .3em;
382
387
  }
383
388
  }
384
389
  .sort-list li > div {
@@ -389,21 +394,21 @@
389
394
  background: #F1F1F1;
390
395
  padding: .4em .6em;
391
396
  font-size: .8em;
392
- margin-bottom: .3em;
397
+ margin-bottom: .3em;
393
398
  cursor: move;
394
399
  }
395
-
400
+
396
401
  .info {
397
402
  font-size: .8em;
398
403
  line-height: 1.4em;
399
404
  font-style: italic;
400
405
  padding-top: 10px;
401
406
  }
402
-
407
+
403
408
  .react-tags__search {
404
409
  width: 100%;
405
410
  }
406
-
411
+
407
412
  .react-tags {
408
413
  position: relative;
409
414
  input.react-tags__search-input {
@@ -415,15 +420,15 @@
415
420
  display: inline
416
421
  }
417
422
  }
418
-
423
+
419
424
  .react-tags.is-focused {
420
425
  border-color: rgba(0, 0, 0, 0.7);
421
426
  }
422
-
427
+
423
428
  .react-tags__selected {
424
429
  display: inline;
425
430
  }
426
-
431
+
427
432
  .react-tags__selected-tag {
428
433
  display: inline-block;
429
434
  box-sizing: border-box;
@@ -435,67 +440,67 @@
435
440
  margin-right: .3em;
436
441
  margin-bottom: .3em;
437
442
  }
438
-
443
+
439
444
  .react-tags__selected-tag:after {
440
445
  content: '\2715';
441
446
  color: #AAA;
442
447
  margin-left: 8px;
443
448
  }
444
-
449
+
445
450
  .react-tags__selected-tag:hover,
446
451
  .react-tags__selected-tag:focus {
447
452
  border-color: #B1B1B1;
448
453
  }
449
-
454
+
450
455
  .react-tags__search {
451
456
  display: inline-block;
452
-
457
+
453
458
  /* prevent autoresize overflowing the container */
454
459
  max-width: 100%;
455
460
  }
456
-
461
+
457
462
  @media screen and (min-width: 30em) {
458
-
463
+
459
464
  .react-tags__search {
460
465
  /* this will become the offsetParent for suggestions */
461
466
  position: relative;
462
467
  }
463
-
468
+
464
469
  }
465
-
470
+
466
471
  .react-tags__search input {
467
472
  /* prevent autoresize overflowing the container */
468
473
  max-width: 100%;
469
-
474
+
470
475
  /* emove styles and layout from this element */
471
476
  margin: 0;
472
477
  outline: none;
473
478
  padding: .5em .3em;
474
-
479
+
475
480
  /* match the font styles */
476
481
  font-size: inherit;
477
482
  line-height: inherit;
478
483
  }
479
-
484
+
480
485
  .react-tags__search input::-ms-clear {
481
486
  display: none;
482
487
  }
483
-
488
+
484
489
  .react-tags__suggestions {
485
490
  position: absolute;
486
491
  top: 100%;
487
492
  left: 0;
488
493
  width: 100%;
489
494
  }
490
-
495
+
491
496
  @media screen and (min-width: 30em) {
492
-
497
+
493
498
  .react-tags__suggestions {
494
499
  width: 240px;
495
500
  }
496
-
501
+
497
502
  }
498
-
503
+
499
504
  .react-tags__suggestions ul {
500
505
  margin: 4px -1px;
501
506
  padding: 0;
@@ -505,27 +510,27 @@
505
510
  border-radius: 2px;
506
511
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
507
512
  }
508
-
513
+
509
514
  .react-tags__suggestions li {
510
515
  border-bottom: 1px solid #ddd;
511
516
  padding: 6px 8px;
512
517
  }
513
-
518
+
514
519
  .react-tags__suggestions li mark {
515
520
  text-decoration: underline;
516
521
  background: none;
517
522
  font-weight: 600;
518
523
  }
519
-
524
+
520
525
  .react-tags__suggestions li:hover {
521
526
  cursor: pointer;
522
527
  background: #eee;
523
528
  }
524
-
529
+
525
530
  .react-tags__suggestions li.is-active {
526
531
  background: #b7cfe0;
527
532
  }
528
-
533
+
529
534
  .react-tags__suggestions li.is-disabled {
530
535
  opacity: 0.5;
531
536
  cursor: auto;
@@ -541,7 +546,7 @@
541
546
  border: 1px solid gray;
542
547
  }
543
548
  }
544
-
549
+
545
550
  .viz-icon {
546
551
  background-color: #FFF;
547
552
  color: #565656;
@@ -557,7 +562,7 @@
557
562
 
558
563
  &:hover {
559
564
  background: #F2F2F2;
560
- transition: .2s all;
565
+ transition: .2s all;
561
566
  }
562
567
 
563
568
  svg {
@@ -571,7 +576,7 @@
571
576
  }
572
577
  }
573
578
  }
574
- }
579
+ }
575
580
  .editor-toggle {
576
581
  background: #F2F2F2;
577
582
  border-radius: 60px;
@@ -596,7 +601,7 @@
596
601
  }
597
602
  &.collapsed {
598
603
  left: 1em;
599
- margin-left: 0;
604
+ margin-left: 0;
600
605
  &:before {
601
606
  content: "\00bb";
602
607
  }
@@ -644,4 +649,4 @@
644
649
  }
645
650
  }
646
651
  }
647
- }
652
+ }