Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
@devseed-ui/theme-provider
Advanced tools
import {
// Theme
DevseedUiThemeProvider,
GlobalStyles,
theme,
themeVal,
// Stylizing function
stylizeFunction,
// Conversions and math
unitify,
rem,
px,
val2px,
val2rem,
multiply,
divide,
add,
subtract,
min,
max,
// Global spacing and RGBA
glsp,
rgba,
// Media queries
media,
// Style helpers
antialiased,
visuallyHidden,
listReset,
truncated,
visuallyDisabled,
disabled,
unscrollableY,
unscrollableX
} from '@devseed-ui/theme-provider';
See the API reference for a description of each export.
The components of the devseed-ui library require settings to be defined through a theme using specific variables.
The theme-provider
contains the base provider with the ui-library's default theme. This can be used directly, or overridden by the user.
import { DevseedUiThemeProvider } from '@devseed-ui/theme-provider';
The DevseedUiThemeProvider
should wrap the whole application so that all components can get the correct variables from the theme.
This will apply the default ui-library theme and some global styles to normalize presentation across browsers.
...
render (
<DevseedUiThemeProvider>
{components...}
<DevseedUiThemeProvider
)
It is also possible to provide a custom theme to DevseedUiThemeProvider
using the theme
prop.
It is important that the custom theme contains a value for all variables in the theme.
const myCustomTheme = {
...
};
...
render (
<DevseedUiThemeProvider theme={myCustomTheme}>
{components...}
<DevseedUiThemeProvider
)
If a function is passed to the theme
prop, it will be called with the ui-library theme.
This allows for specific overrides and is the preferred way to provide a new theme. The returned value is used as a new theme.
const myCustomTheme = (uiLibTheme) => {
return {
...uiLibTheme,
color: {
...uiLibTheme.color,
primary: 'teal'
}
}
};
...
render (
<DevseedUiThemeProvider theme={myCustomTheme}>
{components...}
<DevseedUiThemeProvider
)
The default ui-library theme has the following values.
color: {
baseLight: '#FFFFFF'
baseDark: '#443F3F'
primary: '#CF3F02'
secondary: '#E2C044'
tertiary: '#4DA167'
quaternary: '#2E86AB'
base: color.baseDark
background: color.baseLight
surface: color.baseLight
link: color.primary
danger: '#A71D31'
warning: color.secondary
success: color.tertiary
info: color.quaternary
baseAlphaA: rgba(color.base, 0.02)
baseAlphaB: rgba(color.base, 0.04)
baseAlphaC: rgba(color.base, 0.08)
baseAlphaD: rgba(color.base, 0.16)
baseAlphaE: rgba(color.base, 0.32)
silkLight: `radial-gradient(farthest-side, ${color.baseLight}, ${rgba(color.baseLight, 0.64)})`
silkDark: `radial-gradient(farthest-side, ${color.baseDark}, ${rgba(color.baseDark, 0.64)})`
}
type: {
base: {
root: '16px'
size: '1rem'
line: '1.5'
color: color.base
family: '"Open Sans", sans-serif'
style: 'normal'
settings: 'normal'
case: 'none'
light: 300
regular: 400
medium: 600
bold: 700
weight: 300
antialiasing: true
}
heading: {
family: '"Open Sans", sans-serif'
style: 'normal'
settings: 'normal'
case: 'none'
light: 300
regular: 400
medium: 600
bold: 700
weight: 700
}
button: {
family: '"Open Sans", sans-serif'
style: 'normal'
settings: 'normal'
case: 'none'
weight: 700
}
}
shape: {
rounded: '0.25rem'
ellipsoid: '320rem'
}
layout: {
space: '1rem'
border: '1px'
min: '320px'
max: '1280px'
}
boxShadow: {
inset: `inset 0px 0px 3px 0px ${color.baseAlphaA};`
input: `0 -1px 1px 0 ${color.baseAlphaC}, 0 2px 6px 0 ${color.baseAlphaD};`
elevationA: `0 0 4px 0 ${color.baseAlphaC}, 0 2px 2px 0 ${color.baseAlphaC};`
elevationB: `0 0 4px 0 ${color.baseAlphaC}, 0 4px 4px 0 ${color.baseAlphaC};`
elevationC: `0 0 4px 0 ${color.baseAlphaC}, 0 8px 12px 0 ${color.baseAlphaC};`
elevationD: `0 0 4px 0 ${color.baseAlphaC}, 0 12px 24px 0 ${color.baseAlphaC};`
}
mediaRanges {
xsmall: [null, 543]
small: [544, 767]
medium: [768, 991]
large: [992, 1199]
xlarge: [1216, null]
}
Utilities directly related with the theme.
DevseedUiThemeProvider
[React Component]
theme
prop. See How theming works with the ui-library.GlobalStyles
[React Component]
DevseedUiThemeProvider
, so this is not used often.theme
[object]
themeVal
[function]
const Msg = styled.p`
color: ${themeVal('color.primary')};
`;
stylizeFunction(function)
[function]
tint
function provided by Polished has the following signature: tint(percentage: (number | string), color: string): string
const Msg = styled.p`
color: ${({ theme }) => tint('50%', theme.color.primary)};
`;
themeVal
const _tint = stylizeFunction(tint)
const Msg = styled.p`
color: ${tint('50%', themeVal('color.primary'))};
`;
Utilities to be used with styled-components to do conversions and math operations.
All the functions can be used directly with styled-components and themeVal
, for example:
const Msg = styled.p`
padding: ${multiply(themeVal('layout.border'), 3)}; // 3px
`;
unitify(unit)
[function]
unit
to the value. const percent = unitify('%');
percent(10) // -> 10%
rem(value)
[function]
rem
to the give value.px(value)
[function]
rem
to the give value.val2px(value)
[function]
theme.type.base.root
).val2rem(value)
[function]
theme.type.base.root
).multiply
[function]
2rem * 2 = 4rem | 2 * 2rem = 4
divide
[function]
2rem / 2 = 1rem | 2 / 2rem = 1
add
[function]
2rem + 2 = 4rem | 2 + 2rem = 4
subtract
[function]
4rem - 2 = 2rem | 4 - 2rem = 2
min
[function]
10px, 15 = 10 | 4rem, 5px = 4
max
[function]
10px, 15 = 15 | 4rem, 5px = 5
glsp(...args)
[function]
layout.space
. This allows all the components to gracefully scale based on a single setting. padding: ${glsp(2, 1 / 2)}; // 2rem 0.5rem
padding: ${glsp(2, 0.5)}; // 2rem 0.5rem
padding: ${glsp()}; // 1rem
1
.rgba(color, value)
[function]
rgba
exported by the polished
module, but modified to work with styled-components. See Stylizing function. const Msg = styled.p`
color: ${rgba(themeVal('color.primary'), 0.5)};
`;
The media queries will be available through the media
object as Up
, Only
, and Down
variations of each range defined on the theme.
For example, with the range (medium: [768, 991]
):
mediumUp
will be triggered from 768px;mediumOnly
will stay active between 768px and 991px;mediumDown
while the viewport is below or at 991px.All available options are:
media.xsmallOnly
media.xsmallDown
media.smallUp
media.smallOnly
media.smallDown
media.mediumUp
media.mediumOnly
media.mediumDown
media.largeUp
media.largeOnly
media.largeDown
media.xlargeUp
media.xlargeOnly
These can be used directly on styled-components using template literals:
const Msg = styled.p`
color: red;
${media.mediumUp`
color: blue;
`}
${media.largeUp`
color: green;
`}
`;
The helpers are to be used within a styled-component and return useful snippets of code.
antialiased
[function]
visuallyHidden
[function]
listReset
[function]
ul
and ol
) styling. Say goodbye to default padding, margin, and bullets/numbers.truncated
[function]
disabled
[function]
visuallyDisabled
[function]
disabled
, but the pointer events remain active. This is useful when, for example, paired with a tooltip that needs the hover
event to fire.unscrollableY
[function]
unscrollableX
[function]
Use directly in a styled-component:
const Msg = styled.p`
${antialiased()}
`;
FAQs
devseed UI Kit Theme
The npm package @devseed-ui/theme-provider receives a total of 121 weekly downloads. As such, @devseed-ui/theme-provider popularity was classified as not popular.
We found that @devseed-ui/theme-provider demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.