@cdc/core 4.22.10 → 4.22.11
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/README.md +1 -1
- package/components/AdvancedEditor.js +52 -67
- package/components/ErrorBoundary.jsx +10 -11
- package/components/GlobalContext.jsx +2 -6
- package/components/LegendCircle.jsx +3 -4
- package/components/Loading.jsx +14 -12
- package/components/Waiting.jsx +14 -5
- package/components/elements/Button.jsx +34 -45
- package/components/elements/Card.jsx +1 -1
- package/components/inputs/InputCheckbox.jsx +32 -35
- package/components/inputs/InputGroup.jsx +38 -17
- package/components/inputs/InputSelect.jsx +27 -23
- package/components/inputs/InputText.jsx +9 -25
- package/components/inputs/InputToggle.jsx +29 -33
- package/components/managers/DataDesigner.jsx +87 -64
- package/components/ui/Accordion.jsx +18 -30
- package/components/ui/Icon.jsx +34 -35
- package/components/ui/LoadSpin.jsx +6 -11
- package/components/ui/Modal.jsx +40 -44
- package/components/ui/Overlay.jsx +12 -23
- package/components/ui/OverlayFrame.jsx +1 -5
- package/components/ui/Tooltip.jsx +8 -28
- package/data/colorPalettes.js +29 -266
- package/data/dataDesignerTables.js +107 -107
- package/data/themes.js +13 -13
- package/helpers/DataTransform.js +92 -92
- package/helpers/cacheBustingString.js +3 -3
- package/helpers/events.js +5 -6
- package/helpers/fetchRemoteData.js +31 -33
- package/helpers/getViewport.js +15 -15
- package/helpers/numberFromString.js +7 -7
- package/helpers/updatePaletteNames.js +15 -17
- package/helpers/useDataVizClasses.js +38 -35
- package/helpers/validateFipsCodeLength.js +41 -56
- package/package.json +2 -2
- package/styles/_data-table.scss +32 -27
- package/styles/_global.scss +29 -24
- package/styles/_mixins.scss +12 -12
- package/styles/_reset.scss +85 -16
- package/styles/_variables.scss +5 -5
- package/styles/base.scss +99 -48
- package/styles/heading-colors.scss +6 -2
- package/styles/loading.scss +62 -60
- package/styles/v2/base/_file-selector.scss +2 -2
- package/styles/v2/base/_general.scss +1 -1
- package/styles/v2/base/_reset.scss +2 -2
- package/styles/v2/base/index.scss +4 -4
- package/styles/v2/components/accordion.scss +13 -13
- package/styles/v2/components/button.scss +3 -3
- package/styles/v2/components/card.scss +1 -1
- package/styles/v2/components/data-designer.scss +7 -6
- package/styles/v2/components/editor.scss +52 -51
- package/styles/v2/components/guidance-block.scss +6 -6
- package/styles/v2/components/input/_input-check-radio.scss +7 -7
- package/styles/v2/components/input/_input-group.scss +2 -2
- package/styles/v2/components/input/_input-slider.scss +2 -3
- package/styles/v2/components/input/index.scss +6 -6
- package/styles/v2/components/loadspin.scss +1 -1
- package/styles/v2/components/modal.scss +2 -2
- package/styles/v2/components/overlay.scss +4 -4
- package/styles/v2/layout/_alert.scss +8 -8
- package/styles/v2/layout/_component.scss +1 -1
- package/styles/v2/layout/_data-table.scss +12 -11
- package/styles/v2/layout/_progression.scss +8 -6
- package/styles/v2/layout/index.scss +5 -5
- package/styles/v2/main.scss +7 -7
- package/styles/v2/themes/_color-definitions.scss +77 -24
- package/styles/v2/themes/index.scss +1 -1
- package/styles/v2/utils/_animations.scss +2 -2
- package/styles/v2/utils/_breakpoints.scss +53 -12
- package/styles/v2/utils/_variables.scss +5 -5
- package/styles/v2/utils/index.scss +8 -8
- package/styles/waiting.scss +22 -23
|
@@ -1,43 +1,41 @@
|
|
|
1
|
-
import Papa from 'papaparse'
|
|
1
|
+
import Papa from 'papaparse'
|
|
2
2
|
|
|
3
3
|
export default async function (url) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
url = new URL(url)
|
|
4
|
+
try {
|
|
5
|
+
// Using URL Object to get pathname without URL paramaters on regex.
|
|
6
|
+
url = new URL(url)
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const path = url.pathname
|
|
9
|
+
const regex = /(?:\.([^.]+))?$/
|
|
10
|
+
const ext = regex.exec(path)[1]
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
let data = []
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
14
|
+
if ('csv' === ext) {
|
|
15
|
+
data = await fetch(url.href)
|
|
16
|
+
.then(response => response.text())
|
|
17
|
+
.then(responseText => {
|
|
18
|
+
const parsedCsv = Papa.parse(responseText, {
|
|
19
|
+
header: true,
|
|
20
|
+
dynamicTyping: true,
|
|
21
|
+
skipEmptyLines: true
|
|
22
|
+
})
|
|
23
|
+
return parsedCsv.data
|
|
24
|
+
})
|
|
25
|
+
}
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
27
|
+
if ('json' === ext) {
|
|
28
|
+
data = await fetch(url.href).then(response => response.json())
|
|
29
|
+
}
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
return data
|
|
32
|
+
} catch {
|
|
33
|
+
// If we can't parse it, still attempt to fetch it
|
|
34
|
+
try {
|
|
35
|
+
let response = await (await fetch(url)).json()
|
|
36
|
+
return response
|
|
34
37
|
} catch {
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
let response = await (await fetch(url)).json()
|
|
38
|
-
return response
|
|
39
|
-
} catch {
|
|
40
|
-
console.error(`Cannot parse URL: ${url}`);
|
|
41
|
-
}
|
|
38
|
+
console.error(`Cannot parse URL: ${url}`)
|
|
42
39
|
}
|
|
40
|
+
}
|
|
43
41
|
}
|
package/helpers/getViewport.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export default function getViewport(size) {
|
|
2
|
-
|
|
2
|
+
let result = 'lg'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const viewports = {
|
|
5
|
+
lg: 1200,
|
|
6
|
+
md: 992,
|
|
7
|
+
sm: 768,
|
|
8
|
+
xs: 576,
|
|
9
|
+
xxs: 350
|
|
10
|
+
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
if (size > 1200) return result
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
14
|
+
for (let viewport in viewports) {
|
|
15
|
+
if (size <= viewports[viewport]) {
|
|
16
|
+
result = viewport
|
|
18
17
|
}
|
|
18
|
+
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
}
|
|
20
|
+
return result
|
|
21
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export default function numberFromString(value = '', state = null) {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
// Only do this to values that are ONLY numbers - without this parseFloat strips all the other text
|
|
3
|
+
if (typeof value === 'string' && state?.legend?.type === 'category') return value
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
let nonNumeric = /[^\d.-]/g
|
|
6
|
+
if (false === Number.isNaN(parseFloat(value)) && null === String(value).match(nonNumeric)) {
|
|
7
|
+
return parseFloat(value)
|
|
8
|
+
}
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
return value
|
|
11
11
|
}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
+
export function updatePaletteNames(colorPalettes) {
|
|
2
|
+
// this function adds REVERSE keyword to each palette
|
|
3
|
+
delete colorPalettes.qualitative9 // delete palette before reversing
|
|
4
|
+
let palettereversed = {}
|
|
5
|
+
for (const [paletteName, hexCodeArr] of Object.entries(colorPalettes)) {
|
|
6
|
+
const paletteStr = String(paletteName)
|
|
1
7
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
let palette = paletteStr.concat('reverse'); // add to the end of the string "reverse"
|
|
12
|
-
palettereversed[palette] = [...hexCodeArr].reverse(); // reverses arrays elements and create new keys on object
|
|
13
|
-
}else{
|
|
14
|
-
palettereversed = {...colorPalettes}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return {...palettereversed,...colorPalettes}
|
|
18
|
-
}
|
|
8
|
+
if (!paletteStr.endsWith('reverse')) {
|
|
9
|
+
let palette = paletteStr.concat('reverse') // add to the end of the string "reverse"
|
|
10
|
+
palettereversed[palette] = [...hexCodeArr].reverse() // reverses arrays elements and create new keys on object
|
|
11
|
+
} else {
|
|
12
|
+
palettereversed = { ...colorPalettes }
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return { ...palettereversed, ...colorPalettes }
|
|
16
|
+
}
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
export default function useDataVizClasses(config) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
2
|
+
let lineDatapointClass = ''
|
|
3
|
+
let barBorderClass = ''
|
|
4
|
+
|
|
5
|
+
if (config.lineDatapointStyle === 'hover') {
|
|
6
|
+
lineDatapointClass = ' chart-line--hover'
|
|
7
|
+
}
|
|
8
|
+
if (config.lineDatapointStyle === 'always show') {
|
|
9
|
+
lineDatapointClass = ' chart-line--always'
|
|
10
|
+
}
|
|
11
|
+
if (config.barHasBorder === 'false') {
|
|
12
|
+
barBorderClass = ' chart-bar--no-border'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let innerContainerClasses = ['cove-component__inner']
|
|
16
|
+
let contentClasses = ['cove-component__content']
|
|
17
|
+
|
|
18
|
+
config.title && innerContainerClasses.push('component--has-title')
|
|
19
|
+
config.subtext && innerContainerClasses.push('component--has-subtext')
|
|
20
|
+
config.biteStyle && innerContainerClasses.push(`bite__style--${config.biteStyle}`)
|
|
21
|
+
config.general?.isCompactStyle && innerContainerClasses.push(`component--isCompactStyle`)
|
|
22
|
+
|
|
23
|
+
!config.visual?.border && contentClasses.push('no-borders')
|
|
24
|
+
config.visualizationType === 'Spark Line' && contentClasses.push('sparkline')
|
|
25
|
+
config.visual?.borderColorTheme && contentClasses.push('component--has-borderColorTheme')
|
|
26
|
+
config.visual?.accent && contentClasses.push('component--has-accent')
|
|
27
|
+
config.visual?.background && contentClasses.push('component--has-background')
|
|
28
|
+
config.visual?.hideBackgroundColor && contentClasses.push('component--hideBackgroundColor')
|
|
29
|
+
|
|
30
|
+
// ! these two will be retired.
|
|
31
|
+
config.shadow && innerContainerClasses.push('shadow')
|
|
32
|
+
config?.visual?.roundedBorders && innerContainerClasses.push('bite--has-rounded-borders')
|
|
33
|
+
|
|
34
|
+
let sparkLineStyles = {
|
|
35
|
+
width: '100%',
|
|
36
|
+
height: '100px'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return { innerContainerClasses, contentClasses, barBorderClass, lineDatapointClass, sparkLineStyles }
|
|
37
40
|
}
|
|
@@ -1,67 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* validateFipsCodeLength
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* When stateOrData is an object...
|
|
5
|
-
* This is used for validating maps fips codes during runtime where we
|
|
5
|
+
* This is used for validating maps fips codes during runtime where we
|
|
6
6
|
* In this scenario a user is able to choose the column their Fips Codes are in.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* When stateOrData is an array...
|
|
9
9
|
* The user hasn't chose which column has their FIPS codes in it. We still
|
|
10
10
|
* want to present the FIPS Codes in a friendly format so we attempt to add leading zeros.
|
|
11
|
-
*
|
|
12
|
-
* @param {object|array} stateOrData
|
|
11
|
+
*
|
|
12
|
+
* @param {object|array} stateOrData
|
|
13
13
|
* @returns {object|array} stateOrData
|
|
14
14
|
*/
|
|
15
15
|
export default function validateFipsCodeLength(stateOrData) {
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
stateOrData?.forEach(dataPiece => {
|
|
54
|
-
|
|
55
|
-
if (dataPiece[fipsCol]) {
|
|
56
|
-
|
|
57
|
-
// specific to county fips codes.
|
|
58
|
-
if (!isNaN(parseInt(dataPiece[fipsCol])) && dataPiece[fipsCol].length === 4) {
|
|
59
|
-
dataPiece[fipsCol] = 0 + dataPiece[fipsCol]
|
|
60
|
-
}
|
|
61
|
-
dataPiece[fipsCol] = dataPiece[fipsCol].toString()
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return stateOrData;
|
|
16
|
+
// FIPS are within obj.
|
|
17
|
+
if (!Array.isArray(stateOrData)) {
|
|
18
|
+
if (stateOrData.general.geoType === 'us-county' || stateOrData.general.geoType === 'single-state' || (stateOrData.general.geoType === 'us' && stateOrData?.data)) {
|
|
19
|
+
stateOrData?.data.forEach(dataPiece => {
|
|
20
|
+
if (dataPiece[stateOrData.columns.geo.name]) {
|
|
21
|
+
if (!isNaN(parseInt(dataPiece[stateOrData.columns.geo.name])) && dataPiece[stateOrData.columns.geo.name].length === 4) {
|
|
22
|
+
dataPiece[stateOrData.columns.geo.name] = 0 + dataPiece[stateOrData.columns.geo.name]
|
|
23
|
+
}
|
|
24
|
+
dataPiece[stateOrData.columns.geo.name] = dataPiece[stateOrData.columns.geo.name].toString()
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Only includes data - get column name from somewhere else
|
|
31
|
+
if (Array.isArray(stateOrData)) {
|
|
32
|
+
let columns = Object.keys(stateOrData[0])
|
|
33
|
+
|
|
34
|
+
let potentialColumnNames = ['fips', 'FIPS', 'fips codes', 'FIPS CODES', 'Fips Codes', 'fips Codes', 'Fips codes', 'FIPS Codes']
|
|
35
|
+
|
|
36
|
+
const fipsCol = columns.filter(columnName => potentialColumnNames.includes(columnName))
|
|
37
|
+
|
|
38
|
+
if (!fipsCol.length) return // no column name to reference, leave the fips alone.
|
|
39
|
+
|
|
40
|
+
stateOrData?.forEach(dataPiece => {
|
|
41
|
+
if (dataPiece[fipsCol]) {
|
|
42
|
+
// specific to county fips codes.
|
|
43
|
+
if (!isNaN(parseInt(dataPiece[fipsCol])) && dataPiece[fipsCol].length === 4) {
|
|
44
|
+
dataPiece[fipsCol] = 0 + dataPiece[fipsCol]
|
|
45
|
+
}
|
|
46
|
+
dataPiece[fipsCol] = dataPiece[fipsCol].toString()
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return stateOrData
|
|
67
52
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdc/core",
|
|
3
|
-
"version": "4.22.
|
|
3
|
+
"version": "4.22.11",
|
|
4
4
|
"description": "Core elements of the CDC Open Visualization project",
|
|
5
5
|
"author": "Daniel Immke <npm@daniel.do>",
|
|
6
6
|
"homepage": "https://github.com/CDCgov/cdc-open-viz#readme",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"resolutions": {
|
|
31
31
|
"@types/react": "17.x"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "9768d1ea0e2383044977d988e33531bcdfe33ea6"
|
|
34
34
|
}
|
package/styles/_data-table.scss
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
.collapsed + .table-container {
|
|
1
|
+
.collapsed + .table-container {
|
|
2
|
+
border-bottom: none;
|
|
3
|
+
}
|
|
2
4
|
.table-container {
|
|
3
5
|
overflow-x: auto;
|
|
4
6
|
border-right: 1px solid $lightGray;
|
|
@@ -8,13 +10,13 @@
|
|
|
8
10
|
|
|
9
11
|
div.data-table-heading {
|
|
10
12
|
background: rgba(0, 0, 0, 0.05);
|
|
11
|
-
padding: .5em .7em;
|
|
13
|
+
padding: 0.5em 0.7em;
|
|
12
14
|
border: $lightGray 1px solid;
|
|
13
15
|
border-bottom: 0;
|
|
14
16
|
cursor: pointer;
|
|
15
17
|
background-image: url(~@cdc/core/assets/icon-minus.svg);
|
|
16
18
|
background-size: 15px 15px; // Need to define both for IE11
|
|
17
|
-
background-position: right .7em center;
|
|
19
|
+
background-position: right 0.7em center;
|
|
18
20
|
background-repeat: no-repeat;
|
|
19
21
|
&:focus {
|
|
20
22
|
z-index: 2;
|
|
@@ -23,7 +25,7 @@ div.data-table-heading {
|
|
|
23
25
|
&.collapsed {
|
|
24
26
|
background-image: url(~@cdc/core/assets/icon-plus.svg);
|
|
25
27
|
background-size: 15px 15px; // Need to define both for IE11
|
|
26
|
-
background-position: right .7em center;
|
|
28
|
+
background-position: right 0.7em center;
|
|
27
29
|
background-repeat: no-repeat;
|
|
28
30
|
border-bottom: $lightGray 1px solid;
|
|
29
31
|
}
|
|
@@ -39,7 +41,7 @@ table.data-table {
|
|
|
39
41
|
overflow: auto;
|
|
40
42
|
appearance: none;
|
|
41
43
|
* {
|
|
42
|
-
box-sizing: border-box
|
|
44
|
+
box-sizing: border-box;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
thead {
|
|
@@ -67,14 +69,14 @@ table.data-table {
|
|
|
67
69
|
top: 0;
|
|
68
70
|
bottom: 0;
|
|
69
71
|
right: 0;
|
|
70
|
-
touch-action:none;
|
|
72
|
+
touch-action: none;
|
|
71
73
|
}
|
|
72
74
|
tr {
|
|
73
75
|
text-align: left;
|
|
74
76
|
}
|
|
75
77
|
th,
|
|
76
78
|
td {
|
|
77
|
-
padding: .5em 1.3em .5em .7em;
|
|
79
|
+
padding: 0.5em 1.3em 0.5em 0.7em;
|
|
78
80
|
line-height: normal;
|
|
79
81
|
position: relative;
|
|
80
82
|
text-align: left;
|
|
@@ -88,7 +90,7 @@ table.data-table {
|
|
|
88
90
|
th.sort {
|
|
89
91
|
background-color: darken($mediumGray, 10%);
|
|
90
92
|
background-repeat: no-repeat;
|
|
91
|
-
background-position: right .5em center;
|
|
93
|
+
background-position: right 0.5em center;
|
|
92
94
|
background-size: 10px 5px;
|
|
93
95
|
}
|
|
94
96
|
|
|
@@ -104,7 +106,7 @@ table.data-table {
|
|
|
104
106
|
|
|
105
107
|
th:last-child,
|
|
106
108
|
td:last-child {
|
|
107
|
-
border-right: 0
|
|
109
|
+
border-right: 0;
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
|
|
@@ -112,21 +114,21 @@ table.data-table {
|
|
|
112
114
|
tr {
|
|
113
115
|
width: 100%;
|
|
114
116
|
&:hover {
|
|
115
|
-
background: rgba(0, 0, 0, 0.05)
|
|
117
|
+
background: rgba(0, 0, 0, 0.05);
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
tr {
|
|
121
|
-
border-bottom: solid 1px #
|
|
123
|
+
border-bottom: solid 1px #e5e5e5;
|
|
122
124
|
min-width: 100%; // Needed to fill content up
|
|
123
125
|
&:last-child {
|
|
124
|
-
border-bottom: 0
|
|
126
|
+
border-bottom: 0;
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
td {
|
|
129
|
-
padding: .3em .7em;
|
|
131
|
+
padding: 0.3em 0.7em;
|
|
130
132
|
border-right: 1px solid rgba(0, 0, 0, 0.1);
|
|
131
133
|
}
|
|
132
134
|
|
|
@@ -138,17 +140,19 @@ table.data-table {
|
|
|
138
140
|
&:last-child {
|
|
139
141
|
border-right: 0 !important;
|
|
140
142
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
th {
|
|
146
|
+
flex-grow: 1;
|
|
144
147
|
}
|
|
145
148
|
|
|
146
149
|
td {
|
|
147
150
|
position: relative;
|
|
151
|
+
flex-grow: 1;
|
|
148
152
|
}
|
|
149
153
|
|
|
150
154
|
td a {
|
|
151
|
-
padding: .3em .7em;
|
|
155
|
+
padding: 0.3em 0.7em;
|
|
152
156
|
position: absolute;
|
|
153
157
|
top: 0;
|
|
154
158
|
bottom: 0;
|
|
@@ -178,16 +182,17 @@ table.data-table {
|
|
|
178
182
|
h3 {
|
|
179
183
|
font-size: 1.3rem;
|
|
180
184
|
font-weight: 600;
|
|
181
|
-
margin-bottom: .3rem;
|
|
185
|
+
margin-bottom: 0.3rem;
|
|
182
186
|
}
|
|
183
187
|
}
|
|
184
188
|
tr:hover {
|
|
185
189
|
background: #fff;
|
|
186
190
|
}
|
|
187
|
-
th,
|
|
191
|
+
th,
|
|
192
|
+
td {
|
|
188
193
|
width: 50%;
|
|
189
194
|
&::before {
|
|
190
|
-
content:
|
|
195
|
+
content: '\00a0';
|
|
191
196
|
}
|
|
192
197
|
}
|
|
193
198
|
}
|
|
@@ -201,18 +206,18 @@ table.data-table {
|
|
|
201
206
|
margin: 0 1rem 0 0;
|
|
202
207
|
display: flex;
|
|
203
208
|
li + li {
|
|
204
|
-
margin-left: .3rem;
|
|
209
|
+
margin-left: 0.3rem;
|
|
205
210
|
}
|
|
206
211
|
button {
|
|
207
212
|
background: $mediumGray;
|
|
208
|
-
padding: .6rem .8rem;
|
|
213
|
+
padding: 0.6rem 0.8rem;
|
|
209
214
|
&:hover {
|
|
210
215
|
background: lighten($mediumGray, 5%);
|
|
211
216
|
}
|
|
212
217
|
}
|
|
213
218
|
button.btn-next {
|
|
214
219
|
&::before {
|
|
215
|
-
content:
|
|
220
|
+
content: ' ';
|
|
216
221
|
background-image: url(~@cdc/core/assets/icon-caret-filled-up.svg);
|
|
217
222
|
background-size: 10px 5px;
|
|
218
223
|
width: 10px;
|
|
@@ -223,7 +228,7 @@ table.data-table {
|
|
|
223
228
|
}
|
|
224
229
|
button.btn-prev {
|
|
225
230
|
&::before {
|
|
226
|
-
content:
|
|
231
|
+
content: ' ';
|
|
227
232
|
background-image: url(~@cdc/core/assets/icon-caret-filled-up.svg);
|
|
228
233
|
background-size: 10px 5px;
|
|
229
234
|
width: 10px;
|
|
@@ -234,7 +239,7 @@ table.data-table {
|
|
|
234
239
|
}
|
|
235
240
|
button[disabled] {
|
|
236
241
|
background: $mediumGray;
|
|
237
|
-
opacity: .3;
|
|
242
|
+
opacity: 0.3;
|
|
238
243
|
cursor: default;
|
|
239
244
|
&:hover {
|
|
240
245
|
background: $mediumGray;
|
|
@@ -247,9 +252,9 @@ table.data-table {
|
|
|
247
252
|
color: #fff;
|
|
248
253
|
float: right;
|
|
249
254
|
text-decoration: none;
|
|
250
|
-
transition: .3s all;
|
|
255
|
+
transition: 0.3s all;
|
|
251
256
|
margin: 1em 0;
|
|
252
257
|
&:hover {
|
|
253
|
-
transition: .3s all;
|
|
258
|
+
transition: 0.3s all;
|
|
254
259
|
}
|
|
255
260
|
}
|