blob: d370628b5a955895d695d1cc5c163c08a781b6d7 [file] [log] [blame]
Marc Kupietz5edb9c52025-10-05 16:41:01 +02001idsBaseFontFamily <- "Fira Sans Condensed"
2
3ids_font_available <- function(font_family) {
4 if (!requireNamespace("systemfonts", quietly = TRUE)) {
5 return(FALSE)
6 }
7 info <- tryCatch(systemfonts::font_info(font_family), error = function(e) NULL)
8 !is.null(info) && nrow(info) > 0
9}
10
11ids_resolve_font_family <- function(preferred = idsBaseFontFamily, fallback = "sans") {
12 candidates <- unique(stats::na.omit(c(preferred, idsBaseFontFamily, fallback)))
13 available <- vapply(candidates, ids_font_available, logical(1))
14 if (any(available)) {
15 return(candidates[which(available)[1]])
16 }
17
18 if (requireNamespace("sysfonts", quietly = TRUE)) {
19 try(sysfonts::font_add_google("Fira Sans Condensed", "Fira Sans Condensed"), silent = TRUE)
20 if (requireNamespace("showtext", quietly = TRUE)) {
21 try(showtext::showtext_auto(enable = TRUE), silent = TRUE)
22 }
23 candidates_after <- unique(c("Fira Sans Condensed", candidates))
24 available_after <- vapply(candidates_after, ids_font_available, logical(1))
25 if (any(available_after)) {
26 return(candidates_after[which(available_after)[1]])
27 }
28 }
29
30 fallback
31}
Marc Kupietz52144812020-12-14 23:41:56 +010032
Marc Kupietz161a86a2021-02-02 14:40:23 +010033
34#' Title
35#'
36#' @return
37#' @export
38#'
39#' @examples
Marc Kupietz556dbd52021-02-04 14:53:21 +010040idsPaletteIDS <- function() {
Marc Kupietz161a86a2021-02-02 14:40:23 +010041 c(
Marc Kupietz5edb9c52025-10-05 16:41:01 +020042 "#F18700",
43 "#1E2662",
44 "#6A7702",
45 "#C10A25",
46 "#009EE3",
47 "#FAF3DE",
48 "#A7C2D2",
49 "#E2E8A4",
50 "#CFBCBD",
51 "#BCE3FA",
52 "#5C401C",
53 "#000000",
54 "#354C32",
55 "#5C131C",
56 "#273582",
57 "#FFE3BF",
58 "#8994E1",
59 "#A3B29E",
60 "#DF9599",
61 "#79B8DB"
62 )
Marc Kupietz161a86a2021-02-02 14:40:23 +010063}
Marc Kupietza371c672020-12-18 15:56:15 +010064
Marc Kupietz161a86a2021-02-02 14:40:23 +010065#' Title
66#'
67#' @return
68#' @export
69#'
70#' @examples
71idsPaletteD3 <- function() {
72 c(
Marc Kupietz5edb9c52025-10-05 16:41:01 +020073 "#EB7C31",
74 "#1F77B4",
75 "#2CA02C",
76 "#D62728",
77 "#9467BD",
78 "#8C564B",
79 "#E377C2",
80 "#7F7F7F",
81 "#BCBD22",
82 "#17BECF",
83 "#AEC7E8",
84 "#FFBB78",
85 "#98DF8A",
86 "#FF9896",
87 "#C5B0D5",
88 "#C49C94",
89 "#F7B6D2",
90 "#C7C7C7",
91 "#DBDB8D",
92 "#9EDAE5"
93 )
Marc Kupietz161a86a2021-02-02 14:40:23 +010094}
Marc Kupietz52144812020-12-14 23:41:56 +010095
Marc Kupietz161a86a2021-02-02 14:40:23 +010096#' Title
97#'
98#' @return
99#' @export
100#'
101#' @examples
Marc Kupietz556dbd52021-02-04 14:53:21 +0100102idsPalettePoly20 <- function() {
103 c(
104 "#EF8700", "#1642FF", "#00D20D", "#FF00CB", "#162E35", "#00C8FC", "#FF004B", "#BBB96A", "#DFA2ED", "#881640", "#22D0AD", "#CF0DF7",
105 "#2E0D95", "#AFB9BD", "#FC4792", "#EBA392", "#1C7C00", "#939CFF", "#AB00A4", "#AF1C00"
106 )
107}
108
109#' Title
110#'
111#' @return
112#' @export
113#'
114#' @examples
Marc Kupietz161a86a2021-02-02 14:40:23 +0100115idsPaletteGreyscale <- function() {
116 c(
Marc Kupietz5edb9c52025-10-05 16:41:01 +0200117 "#000000", "#B2B0AD", "#737373", "#D8D7D6", "#B2B0AD", "#8C8984"
Marc Kupietz161a86a2021-02-02 14:40:23 +0100118 )
119}
Marc Kupietz52144812020-12-14 23:41:56 +0100120
Marc Kupietz556dbd52021-02-04 14:53:21 +0100121#' Title
122#'
123#' @return
124#' @export
125#'
126#' @examples
127idsPalette <- function() {
128 idsPaletteD3()
129}
130
Marc Kupietz52144812020-12-14 23:41:56 +0100131backgroundColorDark <- "#2a2a2a"
132textColorDark <- "#E0E0E3"
133lowContrastColorDark <- "#707073"
134highContrastColorDark <- "#F0F0F3"
135mediumContrastColorDark <- "#808083"
136
137backgroundColor <- "#ffffff"
138textColor <- "#383838"
139highContrastColor <- "#101013"
140lowContrastColor <- "#E0E0E3"
141mediumContrastColor <- "#404043"
142tooltipBackgroundColor <- "#ffffffe0"
143boxplotFillColor <- "#505053"
144candlestickColor <- "black"
145errorbarColor <- "black"
146
Marc Kupietza371c672020-12-18 15:56:15 +0100147#' IDS color palette
148#'
Marc Kupietz556dbd52021-02-04 14:53:21 +0100149#' @param palette \code{c("d3", "grey", "ids", "poly20")} - default: (adapted) d3 palette
Marc Kupietz52144812020-12-14 23:41:56 +0100150#'
151#' @importFrom scales manual_pal
152#' @export
153#'
154#' @references
155#'
156#' \url{https://github.com/d3/d3}
157#'
Marc Kupietz5edb9c52025-10-05 16:41:01 +0200158ids_pal <- function(palette = "default") {
Marc Kupietz556dbd52021-02-04 14:53:21 +0100159 values <- switch(tolower(palette),
Marc Kupietz5edb9c52025-10-05 16:41:01 +0200160 ids = idsPaletteIDS(),
161 gray = idsPaletteGreyscale(),
162 grey = idsPaletteGreyscale(),
163 poly20 = idsPalettePoly20(),
164 idsPaletteD3()
Marc Kupietz556dbd52021-02-04 14:53:21 +0100165 )
Marc Kupietz52144812020-12-14 23:41:56 +0100166 f <- scales::manual_pal(values)
167 attr(f, "max_n") <- length(values)
168 f
169}