An example of a default dark theme provider without any extra properties.
library(dash)
library(dashDaq)
library(dashHtmlComponents)
app <- Dash$new()
theme <- list(
'dark' = TRUE,
'detail' = '#007439',
'primary' = '#00EA64',
'secondary' = '#6E6E6E'
)
rootLayout <- htmlDiv(list(
daqBooleanSwitch(
on = TRUE,
id = 'darktheme-daq-booleanswitch',
className = 'dark-theme-control'
), htmlBr(),
daqToggleSwitch(
id = 'darktheme-daq-toggleswitch',
className = 'dark-theme-control'
), htmlBr(),
daqColorPicker(
value = 17,
id = 'darktheme-daq-colorpicker',
className = 'dark-theme-control'
), htmlBr(),
daqGauge(
min = 0,
max = 10,
value = 6,
color = theme[['primary']],
id = 'darktheme-daq-gauge',
className = 'dark-theme-control'
), htmlBr(),
daqGraduatedBar(
value = 4,
color = theme[['primary']],
id = 'darktheme-daq-graduatedbar',
className = 'dark-theme-control'
), htmlBr(),
daqIndicator(
value = TRUE,
color = theme[['primary']],
id = 'darktheme-daq-indicator',
className = 'dark-theme-control'
), htmlBr(),
daqKnob(
min = 0,
max = 10,
value = 6,
color = theme[['primary']],
id = 'darktheme-daq-knob',
className = 'dark-theme-control'
), htmlBr(),
daqLEDDisplay(
value = "3.14159",
color = theme[['primary']],
id = 'darktheme-daq-leddisplay',
className = 'dark-theme-control'
), htmlBr(),
daqNumericInput(
min = 0,
max = 10,
value = 4,
id = 'darktheme-daq-numericinput',
className = 'dark-theme-control'
), htmlBr(),
daqPowerButton(
on = TRUE,
color = theme[['primary']],
id = 'darktheme-daq-powerbutton',
className = 'dark-theme-control'
), htmlBr(),
daqPrecisionInput(
precision = 4,
value = 299792458,
id = 'darktheme-daq-precisioninput',
className = 'dark-theme-control'
), htmlBr(),
daqStopButton(
id = 'darktheme-daq-stopbutton',
className = 'dark-theme-control'
), htmlBr(),
daqSlider(
min = 0,
max = 100,
value = 30,
targets = list("25" = list("label" = "TARGET")),
color = theme[['primary']],
id = 'darktheme-daq-slider',
className = 'dark-theme-control'
), htmlBr(),
daqTank(
min = 0,
max = 10,
value = 5,
id='darktheme-daq-tank',
color = theme[['primary']],
className = 'dark-theme-control'
), htmlBr(),
daqThermometer(
min = 95,
max = 105,
value = 98.6,
id = 'darktheme-daq-thermometer',
className = 'dark-theme-control',
color = theme[['primary']],
), htmlBr()
))
app$layout(htmlDiv(
id = 'dark-theme-container',
style = list('padding' = '50px'),
children = list(
daqToggleSwitch(
id = 'toggle-theme',
label = list('Light', 'Dark'),
value = TRUE
),
htmlBr(),
htmlDiv(
id = 'theme-colors',
children = list(
daqColorPicker(
id = 'primary-color',
label = 'Primary color',
value = list(hex = '#00EA64')
),
daqColorPicker(
id = 'secondary-color',
label = 'Accent color',
value = list(hex = '#6E6E6E')
),
daqColorPicker(
id = 'detail-color',
label = 'Detail color',
value = list(hex = '#007439')
)
)
),
htmlDiv(
id = 'dark-theme-components',
children = list(daqDarkThemeProvider(theme = theme,
children = rootLayout)),
style = list(
'border' = 'solid 1px #A2B1C6',
'border-radius' = '5px',
'padding' = '50px',
'marginTop' = '20px'
)
)
)
))
app$callback(
output(id = "dark-theme-components", property = "children"),
params = list(input(id = "toggle-theme", property = "value"),
input(id = "primary-color", property = "value"),
input(id = "secondary-color", property = "value"),
input(id = "detail-color", property = "value")
),
turn_dark <- function(dark, p, s, d) {
if (dark) {
theme[['dark']] <- TRUE
} else {
theme[['dark']] <- FALSE
}
if (length(p) > 0) {
theme[['primary']] <- p$hex
# When rootLayout child has color property, update to p$hex
rootLayout <- lapply(
1:length(rootLayout[[1]]$children),
function(i) {
if (length(rootLayout[[1]]$children[[i]]$props$color) > 0) {
rootLayout[[1]]$children[[i]]$props$color <- p$hex
rootLayout[[1]]$children[[i]]
} else {
rootLayout[[1]]$children[[i]]
}
})
}
if (length(s) > 0) {
theme[['secondary']] <- s$hex
}
if (length(d) > 0) {
theme[['detail']] <- d$hex
}
return(daqDarkThemeProvider(theme = theme, children = rootLayout))
}
)
app$callback(
output(id = "dark-theme-components", property = "style"),
params = list(input(id = "toggle-theme", property = "value"),
state(id = "dark-theme-components", property = "style")),
switch_bg <- function(dark, currentStyle) {
if (dark) {
currentStyle[['backgroundColor']] <- '#303030'
}
else {
currentStyle[['backgroundColor']] <- 'white'
}
return(currentStyle)
}
)
app$run_server()
Our recommended IDE for writing Dash apps is Dash Enterprise’s
Data Science Workspaces,
which has typeahead support for Dash Component Properties.
Find out if your company is using
Dash Enterprise.
children
(unnamed list of unnamed list of or a singular dash component, character or numerics | unnamed list of or a singular dash component, character or numeric; optional):
The children of this component.
theme
(named list; optional):
Theme object to override with a custom theme.
theme
is a named list with keys:
dark
(logical; optional):
True for Dark mode, FALSE for Light.
detail
(character; optional):
Color used for UI details, like borders.
primary
(character; optional):
Highlight color.
secondary
(character; optional):
Supporting color.