diff --git a/DESCRIPTION b/DESCRIPTION index de829b4..51f71fc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,3 +29,4 @@ Suggests: tidycensus Config/testthat/edition: 3 Config/roxygen2/version: 8.0.0 +RoxygenNote: 7.3.3 diff --git a/NAMESPACE b/NAMESPACE index b3e75f9..409f60f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,6 +5,7 @@ export(add_logo_ga) export(agresti_coull_interval) export(civilytics_colors) export(civilytics_load_fonts) +export(civilytics_logo) export(civilytics_pal) export(clopper_pearson) export(countCleanr) diff --git a/R/logo.R b/R/logo.R index e38931c..c3a6d55 100644 --- a/R/logo.R +++ b/R/logo.R @@ -9,8 +9,10 @@ #' @importFrom jpeg readJPEG #' @importFrom graphics rasterImage #' @examples -#' img <- system.file("img","civilytics_logo.jpg",package="civilytics") +#' \dontrun{ +#' img <- system.file("img","Knowles_Headshot_2019_good.jpg",package="civilytics") #' plot_jpeg(img) +#' } plot_jpeg <- function(path, add=FALSE, upscale = TRUE) { jpg = readJPEG(path, native = TRUE) # read the file @@ -160,27 +162,96 @@ add_logo_ga <- function(plot_list, logo, nrow = 1, widths = NULL, margin_param = #' Get a Civilytics Logo grob #' #' Returns a ggplot object containing the Civilytics logo as a rasterGrob, -#' ready to compose with plots via [add_logo()] or [add_logo_ga()]. +#' ready to compose with plots via [add_logo()], [add_logo_ga()], or the +#' pipe-friendly [civilytics_logo()]. #' -#' @param variant Character. `"light"` (default) uses the standard dark logo -#' suitable for light backgrounds. `"dark"` uses the white logo suitable for -#' dark backgrounds (pairs with [theme_civilytics_dark()]). +#' @param type Character. `"wordmark"` (default) uses the full wordmark. +#' `"mark"` uses the compact C-pulse icon only. +#' @param variant Character. `"light"` (default) uses the dark logo for light +#' backgrounds. `"dark"` uses the reverse (light) logo for dark backgrounds +#' (pairs with [theme_civilytics_dark()]). #' #' @return A ggplot object (class `"gg"`) containing the logo grob. #' @export #' @importFrom ggplot2 ggplot theme_void annotation_custom #' @examples -#' logo <- make_logo_grob() # light background -#' logo_dark <- make_logo_grob("dark") # dark background +#' logo <- make_logo_grob() # wordmark, light +#' logo <- make_logo_grob("mark", "dark") # mark, dark #' class(logo) # "gg" "ggplot" -make_logo_grob <- function(variant = c("light", "dark")) { - variant <- match.arg(variant) - img_file <- if (variant == "dark") "civilytics_logo_white.png" else "civilytics_logo.png" +make_logo_grob <- function(type = c("wordmark", "mark"), + variant = c("light", "dark")) { + type <- match.arg(type) + variant <- match.arg(variant) + + img_file <- switch( + paste(type, variant, sep = "_"), + wordmark_light = "civilytics-wordmark.png", + wordmark_dark = "civilytics-wordmark-reverse.png", + mark_light = "civilytics-mark.png", + mark_dark = "civilytics-mark-reverse.png" + ) + + # Right-align the logo; the mark is compact so it gets a narrower slice. + xmin <- if (type == "mark") 0.93 else 0.65 + ggplot2::ggplot() + ggplot2::theme_void() + ggplot2::annotation_custom( get_png(system.file("img", img_file, package = "civilytics")), - xmin = 0.7, xmax = 1 + xmin = xmin, xmax = 1 ) } +#' Add a Civilytics logo to a ggplot (pipe-friendly) +#' +#' A convenience wrapper that creates the logo grob and attaches it below the +#' plot in one call. Designed for use with the base pipe `|>`: +#' +#' ``` +#' ggplot(mpg, aes(displ, hwy)) + +#' geom_point() + +#' theme_civilytics() |> +#' civilytics_logo() +#' ``` +#' +#' Since `|>` has lower precedence than `+`, the entire ggplot chain is piped +#' as the first argument — no parentheses needed. +#' +#' @param plot A ggplot object. +#' @param type Character. `"wordmark"` (default) or `"mark"`. Passed to +#' [make_logo_grob()]. +#' @param variant Character. `"light"` (default) or `"dark"`. Passed to +#' [make_logo_grob()]. +#' @param margin_param Numeric or `NULL`. Manual margin adjustment passed to +#' [add_logo()]. +#' +#' @return A grob (from [gridExtra::arrangeGrob()]) ready to draw with +#' [grid::grid.draw()]. +#' @export +#' +#' @examples +#' \dontrun{ +#' library(ggplot2); library(grid) +#' +#' # Pipe-friendly usage +#' ggplot(mpg, aes(displ, hwy)) + +#' geom_point() + +#' theme_civilytics() |> +#' civilytics_logo() |> +#' grid.draw() +#' +#' # Dark theme with mark +#' ggplot(mpg, aes(displ, hwy)) + +#' geom_point() + +#' theme_civilytics_dark() |> +#' civilytics_logo(variant = "dark", type = "mark") |> +#' grid.draw() +#' } +civilytics_logo <- function(plot, + type = c("wordmark", "mark"), + variant = c("light", "dark"), + margin_param = NULL) { + logo <- make_logo_grob(type = type, variant = variant) + add_logo(plot, logo, margin_param = margin_param) +} + diff --git a/R/theme.R b/R/theme.R index 675bcd2..2937fe3 100644 --- a/R/theme.R +++ b/R/theme.R @@ -33,6 +33,7 @@ #' @export #' #' @examples +#' \dontrun{ #' library(ggplot2) #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + @@ -42,6 +43,7 @@ #' geom_point() + #' scale_color_civilytics() + #' theme_civilytics() +#' } theme_civilytics <- function( font_size = 14, font_family = CV_FONT_SANS, @@ -241,6 +243,7 @@ theme_civilytics <- function( #' @export #' #' @examples +#' \dontrun{ #' library(ggplot2) #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + @@ -250,6 +253,7 @@ theme_civilytics <- function( #' geom_point() + #' scale_color_civilytics() + #' theme_civilytics_dark() +#' } theme_civilytics_dark <- function( font_size = 14, font_family = CV_FONT_SANS, diff --git a/inst/img/civilytics-mark-reverse.png b/inst/img/civilytics-mark-reverse.png new file mode 100644 index 0000000..c088f22 Binary files /dev/null and b/inst/img/civilytics-mark-reverse.png differ diff --git a/inst/img/civilytics-mark.png b/inst/img/civilytics-mark.png new file mode 100644 index 0000000..53163f6 Binary files /dev/null and b/inst/img/civilytics-mark.png differ diff --git a/inst/img/civilytics-wordmark-reverse.png b/inst/img/civilytics-wordmark-reverse.png new file mode 100644 index 0000000..1582113 Binary files /dev/null and b/inst/img/civilytics-wordmark-reverse.png differ diff --git a/inst/img/civilytics-wordmark.png b/inst/img/civilytics-wordmark.png new file mode 100644 index 0000000..c15659f Binary files /dev/null and b/inst/img/civilytics-wordmark.png differ diff --git a/inst/img/civilytics_logo.jpg b/inst/img/civilytics_logo.jpg deleted file mode 100644 index 59210ae..0000000 Binary files a/inst/img/civilytics_logo.jpg and /dev/null differ diff --git a/inst/img/civilytics_logo.pdf b/inst/img/civilytics_logo.pdf deleted file mode 100644 index f14c02e..0000000 --- a/inst/img/civilytics_logo.pdf +++ /dev/null @@ -1,720 +0,0 @@ -%PDF-1.5 %âãÏÓ -1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - Civilytics Consulting Logo - - - Adobe Illustrator CC 23.0 (Windows) - 2019-10-03T08:33:30-04:00 - 2019-10-03T08:33:30-04:00 - 2019-10-03T08:33:30-04:00 - - - - 256 - 52 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgANAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A6bpPnfzD+Y/nzWNH8uX7 6N5P8suLbUtUt1ie7vrslh6cDyrIkUSlDVlUsR3HIUVRP5kx+ffJXlC91vy1r89+lsqrdWuqpDcP GkjLH9YtpUjjbnFXkVl5oRXYHqqi/wAx/L+jeYfNXlgy+cxodxol8kj6RFcxRSXTy8DFHx5pIJHI ULXlVWNBU4qzK483eVLaeS3uNasIZ4mKSxSXMKurDYqylgQRiqrdeZPLtpefUrrVbO3vaqPq0txE ktX+yODMG+Ku22+KsG0nQfL97+bV75pg86LqhvbAW0PlmO6hkiVFAWRvTRzyj2DU4/aJJOKvP/yf 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 - - - - uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7 - xmp.did:f663c0bc-2bc8-e14f-a4eb-0ae2aefff354 - uuid:cd5f7198-b551-4996-b056-4cfbcc97d13d - proof:pdf - - uuid:dab6724e-c618-4184-9b2e-7d44879e5e5f - xmp.did:008add62-65b7-3547-8416-6472cd533b2c - uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7 - proof:pdf - - - - - saved - xmp.iid:f663c0bc-2bc8-e14f-a4eb-0ae2aefff354 - 2019-10-03T08:33:27-04:00 - Adobe Illustrator CC 23.0 (Windows) - / - - - - Basic RGB - 1 - False - False - - 6.728299 - 1.834201 - Inches - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 74.972147 - 67.919427 - 67.049664 - 90.145719 - - - RGB Red - CMYK - PROCESS - 0.000000 - 99.328601 - 100.000000 - 0.000000 - - - RGB Yellow - CMYK - PROCESS - 6.182956 - 0.000000 - 96.548408 - 0.000000 - - - RGB Green - CMYK - PROCESS - 62.658119 - 0.000000 - 100.000000 - 0.000000 - - - RGB Cyan - CMYK - PROCESS - 51.808953 - 0.000000 - 12.567329 - 0.000000 - - - RGB Blue - CMYK - PROCESS - 88.384831 - 76.852059 - 0.000000 - 0.000000 - - - RGB Magenta - CMYK - PROCESS - 27.106124 - 81.603718 - 0.000000 - 0.000000 - - - R=193 G=39 B=45 - CMYK - PROCESS - 16.891736 - 97.961390 - 92.785531 - 6.729228 - - - R=237 G=28 B=36 - CMYK - PROCESS - 0.296025 - 99.276721 - 97.207594 - 0.088502 - - - R=241 G=90 B=36 - CMYK - PROCESS - 0.000000 - 79.913020 - 96.704048 - 0.012207 - - - R=247 G=147 B=30 - CMYK - PROCESS - 0.021363 - 50.087738 - 98.608375 - 0.000000 - - - R=251 G=176 B=59 - CMYK - PROCESS - 0.000000 - 34.851605 - 87.261766 - 0.000000 - - - R=252 G=238 B=33 - CMYK - PROCESS - 4.547188 - 0.000000 - 93.218887 - 0.000000 - - - R=217 G=224 B=33 - CMYK - PROCESS - 18.875410 - 0.000000 - 98.425263 - 0.000000 - - - R=140 G=198 B=63 - CMYK - PROCESS - 50.032806 - 0.161746 - 99.304187 - 0.000000 - - - R=57 G=181 B=74 - CMYK - PROCESS - 74.663919 - 0.000000 - 99.768060 - 0.009155 - - - R=0 G=146 B=69 - CMYK - PROCESS - 86.407262 - 17.633325 - 100.000000 - 3.823911 - - - R=0 G=104 B=55 - CMYK - PROCESS - 90.328830 - 33.408102 - 98.858625 - 26.044098 - - - R=34 G=181 B=115 - CMYK - PROCESS - 76.229495 - 0.000000 - 74.920267 - 0.000000 - - - R=0 G=169 B=157 - CMYK - PROCESS - 78.408480 - 9.073014 - 45.722133 - 0.027466 - - - R=41 G=171 B=226 - CMYK - PROCESS - 69.719994 - 14.785992 - 0.000000 - 0.000000 - - - R=0 G=113 B=188 - CMYK - PROCESS - 87.487596 - 52.660406 - 0.000000 - 0.000000 - - - R=46 G=49 B=146 - CMYK - PROCESS - 99.197370 - 96.453798 - 3.418021 - 0.491341 - - - R=27 G=20 B=100 - CMYK - PROCESS - 100.000000 - 100.000000 - 26.172274 - 24.441901 - - - R=102 G=45 B=145 - CMYK - PROCESS - 74.554050 - 98.455787 - 0.982681 - 0.228885 - - - R=147 G=39 B=143 - CMYK - PROCESS - 49.448386 - 99.258411 - 1.321431 - 0.106813 - - - R=158 G=0 B=93 - CMYK - PROCESS - 34.848553 - 100.000000 - 37.164873 - 10.803387 - - - R=212 G=20 B=90 - CMYK - PROCESS - 11.926451 - 100.000000 - 49.256122 - 0.878920 - - - R=237 G=30 B=121 - CMYK - PROCESS - 0.000000 - 97.082472 - 20.383000 - 0.000000 - - - R=199 G=178 B=153 - CMYK - PROCESS - 22.882429 - 27.399099 - 39.954221 - 0.000000 - - - R=153 G=134 B=117 - CMYK - PROCESS - 39.859617 - 42.893109 - 52.553594 - 6.805523 - - - R=115 G=99 B=87 - CMYK - PROCESS - 50.441748 - 53.072399 - 60.970473 - 23.602654 - - - R=83 G=71 B=65 - CMYK - PROCESS - 57.607383 - 60.415041 - 63.701838 - 41.919583 - - - R=198 G=156 B=109 - CMYK - PROCESS - 22.659647 - 38.376439 - 63.649952 - 1.181048 - - - R=166 G=124 B=82 - CMYK - PROCESS - 31.540397 - 49.149308 - 74.108487 - 9.897001 - - - R=140 G=98 B=57 - CMYK - PROCESS - 36.243227 - 57.430381 - 83.996338 - 22.613870 - - - R=117 G=76 B=36 - CMYK - PROCESS - 39.163804 - 64.052790 - 93.292129 - 35.577935 - - - R=96 G=56 B=19 - CMYK - PROCESS - 41.574728 - 70.016021 - 97.061110 - 49.149308 - - - R=66 G=33 B=11 - CMYK - PROCESS - 47.708857 - 73.470664 - 83.718622 - 68.142211 - - - - - - Cold - 1 - - - - C=56 M=0 Y=20 K=0 - CMYK - PROCESS - 55.809867 - 0.000000 - 19.998473 - 0.000000 - - - C=51 M=43 Y=0 K=0 - CMYK - PROCESS - 51.107037 - 43.094528 - 0.000000 - 0.000000 - - - C=26 M=41 Y=0 K=0 - CMYK - PROCESS - 26.425573 - 41.297016 - 0.000000 - 0.000000 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - CMYK - PROCESS - 74.972147 - 67.919427 - 67.049664 - 90.145719 - - - R=26 G=26 B=26 - CMYK - PROCESS - 72.606999 - 66.668189 - 65.243000 - 78.234529 - - - R=51 G=51 B=51 - CMYK - PROCESS - 69.433123 - 63.234907 - 62.102687 - 58.355075 - - - R=77 G=77 B=77 - CMYK - PROCESS - 65.395588 - 58.022428 - 56.820017 - 36.655220 - - - R=102 G=102 B=102 - CMYK - PROCESS - 59.771115 - 51.183337 - 50.771338 - 20.129701 - - - R=128 G=128 B=128 - CMYK - PROCESS - 51.619744 - 43.204394 - 43.204394 - 7.547112 - - - R=153 G=153 B=153 - CMYK - PROCESS - 42.615396 - 34.741738 - 35.318530 - 0.985733 - - - R=179 G=179 B=179 - CMYK - PROCESS - 30.695048 - 24.188600 - 24.777599 - 0.000000 - - - R=204 G=204 B=204 - CMYK - PROCESS - 19.467460 - 15.017928 - 15.637445 - 0.000000 - - - R=230 G=230 B=230 - CMYK - PROCESS - 8.499275 - 6.103609 - 6.628519 - 0.000000 - - - R=242 G=242 B=242 - CMYK - PROCESS - 3.707942 - 2.462806 - 2.462806 - 0.000000 - - - - - - - Adobe PDF library 15.00 - - - - - - - - - - - - - - - - - - - - - - - - - -endstream endobj 3 0 obj <> endobj 7 0 obj <>/Properties<>>>/Thumb 10 0 R/TrimBox[0.0 0.0 484.438 132.062]/Type/Page>> endobj 8 0 obj <>stream -H‰|WÉ®$I¼×WÔ¼œð%¶+ƒÄ !Ä�h±HÌŒ4ðÿf摯ª›fÔR¿òÌÈ_ÌÌ=~øÓ�Ïþøc{þî÷?>¿>ÚÓ¯6ü™+¯Œùü¸üûo�¿>y´kög»ÆÜúßðÿnöü×ã‡?ü¥=ÿñŸÇ¯O<Ã?{šåµË­áÇ\Ï/??øÿ_m;~ý„_†C.ã~6òùáWè7>øˆ«¯þüò¸M¿ /ù™mÚqYÃF—;­¼ø{çÐïøÐ®±6Ì~ |è×¼-�g\3gY{c-í{\ÍÖóe¾|YcÖ~ —�ôsn+‹?æÕûx_Íës³7“›ÜÖíÇ>‹ã%ÎìWŸ~B€»y-ß SúÀ3ÙazÝ"”]¦…Ýju3<÷¸Òk9MTª·ø\Ž#—ŸÕôPÐÿL>be²áÆæ>؆y–—ƒ…|ÌRV«p‡Þõè'lGže=?£“‹¤Uuç¶[o+ý× ·°v�5dõ6¹Ö„*ØÉðÙÄŸðä—Çß~ƒgŒ¸ÖŽ Ï€×ŸðtÄ¢O§u€kÊ@¡ç5¶^,,I0š^átoØÔe±¦ˆ¹×JFŒ2t$Ö*ôza‰WóF~ ¤¤vFI3œº¢•i¬§l“�¨;LßõñDVõ6 -hKnô(¤­.„Ÿ�iµZV˜º[žmTŽÛÌ0­¼�>jC8ŒµQF X{.MKqšœ�ä_݆òƒÂ‰š2Á¥²e&Ù¹6űE"Æbš�³ ŸYj BU–˜ ÉT[Sp°Ç{lP¯ìÚ(˜Ä÷a‚£âÙ9dÙo”À¤ÍÖ¼¶|ë8Ë R¨J-Æ�ZmÑl€…!×€£‘÷6¯¬£ ìÀBÀ‚:t! -[W”—{ÒEÇVX -ŒHzY@1vë4év<òZ8Ç�ù2ÍöçïœýsLÁ†pɧ¬Rše!ÉëÊQ;nd£Lô¿ñ‡~xÜV.ÄšÔ_Ч—¢o0±:¿DV¶Öv eÞ¹0,JFÄ~ O¥l¶;ú`6]<28€f€ Û˜ê 1ÁvTŠ)Á šLˆJ‰»Ò¸ef§.‚ýsÔÚЃ]C]:buœÖc5‹å -9tþbWsÔЮµ]ðn*·†¬XSIÌ`�¥hÕØšÔœ‰` pTu¨ðh ä vNªÁ‚^Ïσ™ã!m>O(¼ð-C®‡jû¨r™"ê"°BV)¾ }Ì2f¤<8�h¹Aãìÿ™Úý ï~ `æ»™êb0ç ð­Àw“ë¡®µàº°Dá…åVazÔѳ°%hñ) £|Ãêž…4×ÇûZ¹˜a; ßÄþXé6Ûç—Ç’zÑÀ;@6§¬ó0œŸú˜¥,nmÐv2²kFXÌZmŸÕÛˆRÖƒ¡¢²Ì6þ@CøN„¬Ùë4Âê�jƒCû/4Œïi–dž`@4!Z“büÖÚö&e€2®¢¼™ÚLç ÓÔ„‡&Î� 0b�z‰J`©Ž0Õta¯PÓÝ;%ib´kÑZ™ÕÚ³ê”.Ée¿¤¤$U]È&qÒ®•›ð‡9ŸGìhH߆/Q8)žQWîJ v`~öZØ�¬c@¬­�Ôrv)K§SW�ëE]…¶W}Æ’h£Ö<Â*ú]SЗ9îö]lô4 uÖ„p“šÒ·|€ºKÂåC­�YÆ Ádôm•Y޵šê¤ˆR£ÄG’V5C²ÿcK‹`é!��[3”WÚYœ¥ùº%Qj5^¶¼è©Q{™ µ¹Ø94ªQ€°i -qD|fÍÊ>§�‹!z‘Ű ØY§4õ¤Õ(�“l-šÁ�%G”ø”À„«fÆÔ;G†õY4êÊ:* šòÁ,µ[ñnfÞæQ˜,­Üv Óå‹P^(ÑW¼îýààóÍÔ€+óoZ©J˜0©< õlô%PÓwj£Ô-•–¾Jâ7â…ÙöIÚØ5OØ™–ÓÆá§\xY¦òk«c܈^ã¿ø´ËË3ŽŸbòØÉl¼÷¬K‚÷šæ[u� †ô ®3ê[—V�,PÂQ 1òŒðáÎ=™YÞb×w¥Ë¹`n³b¼…ÜÒ̯žš4WR‘ ñÀíMš 1’–ä õÂÙì{øm°D�ÍÖò¶*[ï©I/‹Ó¯¬É¹†ƒ+[e“&„îu¿;‡Ô›òÅu·"áÊ3ç½q§Ù·9}r©{‘®-îã½àŒoGÿl*,é¦7Q›Yl�šl€ùVkO³kºž Y[ ‡Æf«‰‘Ìg•”y?ؤ/'g ¥Ù5ËÐŒôZ½³|ŽÐUÃû<£ -é§×K'@Ý,X.0šŠWˆå¸[j-ä(¼f'‚‹\êÔË­7ê¢f%2'BZE\R@‚/yA’ƒê+šò½®Œ¯±_m'ôºDÒ»ßÖ]aÊë©*‘\=󼞘Ê×ÚcV^–ú ­™•o柶z–©·í…Í~{Y�d8@Bôö !¦Â^bD#ü�qP˜ÿ�ãöæËc¼Üá�t5¿ß‰ýòYò+®Œßà -Ä鸒÷›——àJÏÛ5’%Æ;YlYNÙÛ(²”šš"\³PØÔÆ™Ø -‰K×4¡)5ó´Vìèb¡ñ¶uZCi£Øâk[æo³e¶¬¯ÙrVkš&[ØoÀ–ã'Ù.å¤%vºj6ksL»GPNy±Ç“-­nó¾o±eÖDj›ÈXç®0×(¶¬rÁqÜ‹.½Å]–˜õq¤®m7yBÍâ�.qÓeÜö�ò7º¼-}cËxgË¡Ž¿ðxÓ®P÷Ζ~;p/müxöÏ ¤…ßk.™ä ¤h0ï€Â'—x?|M[èRÑôÇ$ĺu°‘év{04Ì/º@ap«Wjn!�Ǭ›h¯1”&Sí4\3`R¶XÝk]Z¡¦ŽÒMõÝêðƒ‰èºh8çí!7™]WM‹°œ¸£ªJ1)ŸÒÿ^Ú‡ÛêÖ…·0Až VÙÐ…�Jñ¢ˆGÖj2êºM€p*.ÇÑJth|tÎ]÷Œ0Z[Žž� ókLîÿ¹¡éê×¥Þ¤¯ ž:œ“�·RyŽ! }Éø…8×Ú­¨]É&Ù¶x‹{d�2€9–¤)u¹XœÝ5œR8sbë ŠÁàM_N¯u팦14% %‰V -ÓOà€)a46œü*%¬ðD`ßÂw?Kl¸O�­ð‡Pc—ç}7”8¾«’§¨ /Þ P$ê!‡K(Æ$çåC%GÇãZ*©¶EI9åJÇÙDñfèn+8À怦 o†Hú Rè5™Òw²+9VÂ+ü�mßUfqœ‰#XlâPYn\Úºn•S—/+G ‰F¾ÿÄÅÀŒ0Ý¦Šœ5N£«ôb…sÄí”LîˆÊ‹ìg2Jv®¡Ô·Éªá R‰ƒ±�£k¾µJÌ혃xÍ`QÊ‡Ä ëBÓÏÐÀΡ."OêCל¬ô˜ë¿lWIvå8¼J]ÀùNïÔ÷_w ø¶ëU®lJú b0̤»[šÎΰô‹CÇÄŠE¼o&àjáM¹wß©vAÖ¶R¾Á³=hǤ1ÆPè_ÍO˜ºÜ®Ó,ý®IFÀIWøÉ^cù?.©þØêeH;¶8.Fߨä²ýG‘€tw$GŸ †žÔÉÁh,! -)„^ýµ ä0üP^i­Î¦¶M§3zš5|v—~6‡bï´Ïøº*?Èwõ±n>¥ 9‹#ýÓ³øùÚj¦âõw‰9�’¡� š[8äÕ©èÀnQ‘™Šê›©%A>Š£·]Õ:Ï‚CÁåx)ä h«t¢@ô±Z$�HYM?Ç̇¢û-Æ(pѤŸw<%Ê@½åŠ8f–ì¶2Ø·­jr´±«¡—,S�Ì(^Éi¾¿Å7…0äwªÿ VbÂ[�êÌ�ä¶òÔ@˜ÔRx]QJȯ/¹0,ߢ\\Ïr#>¨Ö§È´QÓ�1Ûœ¼ÿü‹ÿ Fóö‚9ó—ÿEã–BíæÜ’æ€IÍ -ͪæéM¢°Žå¤s œôþåõíL¬¼ïæ‘Ê2™QoŠÍŒÑ²Jû˜m2 NÂÆŠWŽ¢ Jt$!K ºÿDA"º/rou%‚½Ò³%g0åȸq›A�§œonê)ôyªÄCœ€Ý¸KwvÔ ‡�”!Y¶U/M¤©øE‡Ë9(o6¶¾@É›vA»‘,åì yx "„g(#Ñ›\­ÖzêõY^g�+ª¦ì|­ùÍ#xQ¸ðÔ>{M©ìTrù4Ù3À‡î�2±Z6¶Î"À_îœì†%qÅ1µz²Ulòë�¥$°Žö5'E!“„Üœ‰LµLjHL[â$€½e…4w�S;IòRˆ½}†O¢†„†Y«Ûs?´i©Wªìp°ÚfÁ”’H{^=-õ6㯖"Àá¼xŠó¯éÐàä ::FÄ„‰»Ž'•‡¤5Â8º,Î}šŽ)A g -ýPð�K«q´¢èÒõZÂ%»ã8FiÝSë�Çc4¸þ Ý›Õ þ´ºrÿkö;¥kÅ?í[ú7–éÕÔ$dtËòqM‹tTž¿R"£bi<¨Gð–ÛÇ™”XNGE½ e,Ï#ûï-B>ƒçˆ%]ÉÙÃW\útâ!Z�‰¶Š®íȶ§óB*Î…âB‘ÔŸ¨›'L˜Ô2”b§UÎT˜…y•¢D[l7G „ /³Äþ?!r.y/p·KOòä$œ+÷w(À7Û‹²‘ûý£q¾ª¯¹Å‰ÛœAÇIãº|ZQ£èÖkún¸¢ÛCt¯ÑÃMMŠFyŒèì�-eŠ[Ù�·óâ•÷�­+úcýƒÓؽæŽ}v -òØó4òES�«)¤KáÃù(d~k¹Hàä/g5‚)^](ÇБ¾/~"ú:ýf?+†dªkCVÊz•Ú/â!MŽ»hÀɾØ>g~�s?Õ(õ¬õϧ6”…ŸÚ¡ƒµ}4~„„¤œ‡O¾mlЩãŒ�Œ¦ËД+Øã}£ -šî—â²Ãž3C§àKÿæu‡’h¤×‰¿Y–n<ä« ˜fV†¹I­JÌH×YŽ�<;•ôÂÉ.·MY1ë!ÈÕaAÏ“RÇñ»&μ^mÑ&_öYl©~Hà°œÏF‘9†G%„žœOÔ�ÕÒ­àÁuY��ìòVÆ5ÎÓ ‘ƒ€ÕéC %'&i9]„™í•FoÊV°&C¡¿ü_FkD$k0n5„¤ƒsŽ0µhD=ߊX„=åäs:Ö–IS-y�/ó!fñlâNZAS.Q×Öòd�"½��! It„�n`BiZ¦��4¥ôxε\žìLGU¥˜œ´�åxÛZ2”b°F¡q´ôŸä™Fò9ªÌèÀa†ž¦”0¾NsÐÈ÷õ…9ž‡Öi0ìÈE¤XVôã´DŸ _Çú½¼Ë¶¸Ô ±ºÍoš·7GŠîíy¹›Æ«§3Æì ËÊ3¿ï94iùz@G¼Í³’l{ë°—µKxÓí®ðVú�½SªÞ¬÷“iÑ­ãìWØ48JêáS«ÑädÞŸa«Ç`”�é#“ -½lçz5 ÐyZvú`­Ž*÷0O8�§4�ÂÀ—&ߊDx2ä"[Å]àdë4”_:öÒHþ�¨6ýÂÂAiÏo;Ú~H�·H ýP(áÅóTvÄzL¬3}"•Ù™ÑU{ 2ƒ%3� 2ÈMÛ¨p}�âFßuÙö©Ÿ%¾þQÓ0¤™ -k9•fpXɧ¢‹½Û ’̶cç ³ƒa»­ºm˳d«Ø‹ähiå/;Gþª½àÖøvöàÈló^íO¿kÊ)îÏÐ]®Ž]^=ãäÍï=^3W�Î|´·mÞ2 òyŽÜ›K¡Õ±�ŽaC˜Ç&ûó¾K¤•Vr GÔˆ¥…”ÜûÆ«$Ëqîû¾@Ö#ÁùN}ÿuÇÉr~¿ú½ª¤©’H ´•u†ÒQ¢¸�IÍœ -x×�,áã¸u]N<ÄÉ„å¥Dç�rÝßqQã,@r -�ôshª 3µ¥ŽÓùà8ò8JoGEàÂÁŸëe#ÓTWl/ éö¸ M%¢cM«9(®5õ9÷ÃjôÃ@ÕaìH²ÐœÖ“­›)Éw_¹¼š¯÷ÊÙ�[Ó3]ŽÁ6Ãj[ÒH’Íij<à¥_’çGÍ'ZúÔ’Þ±%ÈöNï˜7!°”?ÓJV™¶LIM3J1ì&r�†¯ªF˲iJ<š¹\6uš'÷ë縞ÄL¶Ëb†;Rd*�I¿MÙÆâô¡â‘íP/ØFöðÈå_iƒv/ÆUˆ&VZã¾6°�E£ —_èòâÎZøŸdB>@y;5lˆ‚Œdäë�V©ÑÔY¥) g9¢_Ž1¾ñ$EÒ–æ?D¼‚˜`Ï)¥2¬üps‰œ•H*"~ÐjÐÂ,âz¨ìø¸ÿÔM1hô°@ü¬>¼LÙp¹EÆM‚£Û–#ç)Ëébñ€Á·K L`G~8PjúÃõŽulèlMµˆA=YMÉé$+5*zÕVHÅuÚ!Èê~óã ’ -ڌׅIz=LMT—Ví�J°À€”]LÁ³•#k'PVJÊõC;ó¹O-ÓÒV¬tsîPè¤uhhÉšã^•Çs„Œ¸Òïy,ù•ÇÒ§ €Î÷!›ž«þb€µ¶49Ÿ& «Ëóƒþ”u™Ä‹0ɪiȸnb}ryî%Î\tØ�æ'‹âÏŽ%lb• 2µ¸jµ“J€ÎÏvr(–ÿâ°wÆ~”€è=�Ýö}"8·{ü9º)ã´8{X ÕˆXˆe•­T….ÇîÌP ­v–Xœ“#14"ÇúuªFbV]º�2Qú™#Qm¨ä�ae±ßýÕé’Ĭíë@Ìç@ìÇ@ŒÏ�XÚê9Ñr ,Ms„dZ�˜¸!æA[<Äò@”_1nt} Ä~„5ÿ¿‚|º~aã ùqC¾ÿ‚|ÔOÈŸOÈ;©œ˜ïc ¶å«è¬ž¼Á1äñ"Åõ¾ù_ _ yÅ7‚ö y!Ë*ò£«ÀLñk - ¿~A~ý;äëÜ´%S -|@žzסm×Ñ<þ}ò”.Ë*rIÀ&)Ø®mH=¦9_¨¢1/š†s40ÕÊ!EÀ •¡—ü¬V¹­ÏÛ4Òà÷;@tùæ÷z`Þ�4¤� M%Øl¿8.^r>ñ¿Ó^¡ò0ǃJÄVoÞŸ¨î¿Q]o4>–ÄêÍ÷_4?þ óýóý;æ§1¿r]_Ù�%Y~w³|J Š6a} ÇÍ¥h:C$ËÔä{¸6õì’á1` Ú*=ØìŽö ù-–_Í\Ë�_aÈË$%ÉÏïˆïˆwd­ß-CkÎ4B díƒ!‡I‘"ü­¦Ž”š>“!Ùgpyk7CâØMvc©¶¤Èe£Z§ØtfZ‚>l\Ðö<ª³mkæÌÄÚ™öÏ åµˆ]ÁÙnE*AA¨Á?# ^AâÙöÚ$h<ÜÌWÿVz&b|aº»–S­;Ô¼ÿp½Åù‚ñÊlS0I\,jC•ÿÓ‹ÔLy¾¥ÞcŒƒ®r^µÌí3„Û©ÜK첟�§u¿Ž%—ÍÝD´RZ>¹¯ë•3{„sfúâP® -”EÈ–¸dÇæÌ½©–1hª†}X–¹þ¦¢©öp8ZÐ÷¹Û„ǪրX0–ÍC]P„êSaj×ÃÃT‡:˜OËœ]˜0.)Ëœm »ïmà”ÝÛÉì2{ᇇ(–?Œ etpX�/ª]ÇÊ>äF^‹¦sÈ\]y¥®I]Žh¶_[Ex¤ëÂ�‰4¾ø$½²1ÀÇJùÆí�Ʊî’typù„�®¯Ù=–)¥aq1?1I2]ÞnŠz¤ÁGÉNN²gÛ÷ƒ—‘ZÍ«�‹Ð°æœ�,RÌRB*-D1ÕºVçËø3$‰°jH^ kœÍa‚©)©û+Áô‚=¦ij+ÉŠ’£»ê5»ÊÒÈñ'žÿ°Wè–Lƒí -Sä¼+Hé`ƒ”IQ5s¨¨w×%ɰ¸wÓüÉ£ê¡}»z×!˜ßYò &¿õÝH¦¨ö‡‘œI…OiÇ[Ÿ$Yß” ’¬~Ò‚; -fÃŒ¶¡v¦½!·QžW*ÙÜ>ëÛU¾ÕR‡✧àÆYÿŸàÚd¶äªyéÍÌ÷,eÿMp9_÷™±J�ÀÖÎîØØ›W -‹gÚNxp<ŸóÄN‡¦ì¶´ËI`bK·‰�‘3š &Ÿ“¼ctå/#óŽÅ–q‹bK�;ëK¢ºï¾?Õü›»¤�"¥DƒÑñQÚ€¢I]Gvf¸H嘽üYôÐ[ŸÈ=‹ƒrÚµ:â¨óGDm¢«¾w~Þ˜ƒõ§ò†V7øÇM³·Ww -ÓÛlÊÚ¨CŒ5®x9Ü){¾EÅ8æÐÙ¹OE¤ø‘th !‚xl„fáÈ@`}¨ÔÍMåÒz×ßEúOÐýd›¦(Iêq((&ìe’’]�«ˆôÎïU+Û϶wMÉ®.¾4ê*" -XÆhWÓ¥m)ªÍ{zå@¸šjà0ÚHé¥GÆR‘«ÎèÊ*O 5Ht€ÏPkŽ�NÕ@ÉE>psµ‹5$…\«<öÓ Ò›¡sâ? R¦Û€5�ÕÝ¥†aÌ^�ã…½ØÃìßô"rJU#1 ý Î�žµí�úãÜp´Á[T¬�pØ,]Q|Ú†Û@¹"|¤aP‡n£Å =K†ärÒðMŽ`+šñ£ÿÎ×[8TAéäI<¢î|Ì<@x³Õщ�< -½P`ØÝf¿Ó¥‡;¤t¤âœüM”Íú8ñ�³':ºº†^J8¢3‚Îm$އã&¨?üøG>mß…fÒK ,ÿ°ãdC»;ŒëkIt4øu÷K‰Uœšh!¨öeŽR¥j˜ÀÄòpâÑ�SÂg›@¶\ŒX¨Š %µŽ41°§±l* Ú&š ýâ 5î?j\åQÀ1ðD-ÎK†¿/‘k—þÖ©–()ácTD‚8‰éA¬p<Ì EcÔ鯱'[*¢¡:n ïÇO-Ð Œ3iŸ²M-ÄbÞ«FŽáj>J �7UĶòlô¦ò26ã\š�ò¯U7Y#ýðó5HätBï`Øíù¢í> -n rd±áïeøº]˜àcSVóX4JDŒ—†˜aŽÞªÒzK=4%W—º¸Jrçš1ó´ç•ËôéøBJ?ØÏÐç¶’X{å&³mQ9Ñ¿ùC(€�kÿ0×”Ùî]§Bç±Ý5õ8×Ôý¾&ý¥Â^¥Ž‰Gc‹: q~f&Œã±bÈ_ )˜ %L¾)ðö²©>cÙm¯¹+ÇÞ‰þW<µÓšózº–tª'y•\Ø¥8ƒæ‘t‘9rhÚÃ:ã®K¹O¿Ÿà}ïªè?ð‡w‘µîûî�ÖõÙ#þÕÛÕÄf·É7p=„ýÅÊæ¶o1®hFºŸ©/Hø!›Ø¶Ù( ö\¬êB’ –û×)ê1£mÇåÏlÏXÕ§‹P¥@.0Õ]“AñìV$Œ¹@_è,'ZÒ©|4Bð�¼q-¸GÌÍ»º†²V›Ño<<û¾… ¸Rݤbœå|6%ÝЌҸW¥,á_¾ÜÔ‰mR~.Ø?a�‰��ª[ã“£>è1"ì»ÚçQ9D—"¹lb‘ÖÓÄÄ{�¾Åãt�AW"Q¦•ñ±6C…"šûÅ¡¡±Ä ªúCuìkW‡ÔUc@œË±˜etÃØõ¦þ”B ^…Ø`½: NÜ�çSÍ|6]»ÏŸt6‹°Úk9A -Ë¿ìò—iLp—Þ{ûؤC×U ÇÏ®÷å.«l“ -‘•†ÚÎeòPᛞc¦ æ\6·¿Å¡f“Ù—P1:qÝ÷.ªTd:Ë!<›\LG`A’—Áßj eûT9І5Ž"²¿ ù�óhìàD™t•ô”cÂ[T˜Šƒ¹ßAè©k/Pöê) Å©ËD!xéÓ‹VP›kJî·*)!¼tŒŒË|?�ïìCšHµÆ‹;¾=“‡aé1!]p+œÁJ­N­˜[%IB ™Ù‡=cþ¥WÍê‹];qQÂS*ÏÅ 3dS Oöt¿íO¤.D¦âòh®-UGaÒº†*,ìyÇò’–w™�Ô{ÉC\h´0yGUtl´ö1Y®¼µP/QTúåSh‚šË‹â[âRB ÷ؚƌeømå�¯EÙÍÈ‘®×î(êsÝw†GŠG÷‹*jB¿¶7øl¤WÕe›<ä0*Œ+i?ÀTª’š·¾ÙíSBàc¬Wx¨Æ1¼’;kCˆ×Ç•î‘J¡ÀŸ�v”õ°ðšiËéÀq°³=›U·CœÏ>Š1n�âÉo¾5 Œ-W_—=›>£Àô:¯W#(¾&ùÃw¥ðM´íG‰F…黹ÍxúZœw¾ÈŽuº¼LÉu¿4AKàñ!ÝVvé¶´®8‰ó -e®ÚƲľDUbƒÉåV>תûðrÜíX¨¢ê§•> Œ–þ”pgB¿³sy}nlB=é›x„“¤ºT–ÖµùÜYF®‡5v:©r‹}/OÉ_ŒZ;’Ç#‹…NØë™Iœ–W·Á°�öºR¬ºkæ›×Œeú>–InZÀa}eo¼é+Õª±®7¦'Á©š¤®¶åUª„éu]zã@Oƒ ž -‰kš$’ ^|“úȹþ®¯+¿¼aêkÿ—¾6)¼45¥¯cS>ö¾sʲéþ˜¬Hy3h�T³[4óªfY5·6ÛVÍCÕô;,šäž#¥šîbD‚³¢¬š†Ç1ëÓ?²™]²9½Ø�lvËæ²læ•ÍóY6C¶ú«_Õp©bQñ#“ÙÝŽÇ ØÀMœ(éSªŽuð«°”ñŒ�ü;—Ú½4(ÿ!šÖîuŽUsÞSL鬚�h^j/kf½kæ…™z4³žØP3{)èp&©™ãÑL¥B|3Žg™Šé�è¿)æô¤Ÿÿ§˜±ÙߨäÇsØÊ?­ÐâÜv iñ ýãë(ù’3rGû¸ÚrÜ­CÂÔJ Ë%�øêåù_´a瑚ë÷»š7&y€TJ¥žØÌ4tR@é¢#})cËWÔ+œ-ljj×.Ô -�?Ç-X*qpž�¡~;[ïS¾¡d¤Œˆ‹‡;åèØ;<ÿd _ÚÍ’ÛüÁ¸'Û]Q˰1ZVÀúµ‘œ H𢯢ø9Ye4˜Äì&Qá$ÇuÕt°P™ÑNÏ<<2÷PË´XOÐÄá™�Ãb˜Ÿ½Íá\,ªn�ÛÞœ�²f#U]Ná·„v,ÛÎ¥90Dm´Vü{A&·â=Ö’ên–9h@�%´œp_ÛG‡k�MZÙÜ×Gó–cKÍ=Ñ!å1!Z=ëß78ÁÉóqúq’ - åu»QÍÇíœHø»CÙñ÷Üu“Œí`z–Éni�t‰Djû�öi‚¬#Óqü´¥õ�Ê¿.kŽÒÍ~Z:!IB¤ç䕦°’Š¢�§e¿¥¦”ò-› $,×2¶&І&‡iG¿TœZO2Î%Úû°œRh£Ø—’Ð’Á)fˆ*! u2.„âcr@ù‹ˆ£w´q€­u�kòÁsEI�.|àáOÓåò’N=•Û¶tÕÁCµ -ÇÏÙXf,xÂÚ"Y܈QsÏM Xt‹4«¾Î� ¦W¡Ôú6§T‡Ó'Â=I©,Ȇ‚ï*8§åLñ˜©àýt -Ž­én~T¬÷>5™„?|¥îaؤbSµ .òiRã°ëRëYˆÀê7µƒ,Ï·”IóTÝ.¸[sêÓ;‘÷&æ4•Êc~c³;×.Z¯Ž%¦7&¬jÂÅ-„­iØòÜ÷pžøÂG -áô û‘ê̾î�¹j7𼔈cCEScÍíLä´ŠN‡­9l]glªg°Ÿúéæ,öZy°TúN'¥ë -ò^rµnç\ùVe"ÕLˆåÅGyìÁ‡­LãZïúHsÑ4ըΒFMbÖŃ8„ˆ€ScÓÖxxu3*½ûÁ2ñ§N˜ÊÔak�m„Í”˜6Öð˜â Ò°ð õ+%û¹A‹b77ØÃ¶ý&¦çù³†¬U¼ÕçPv.Ï+Káèå¶v±°èán1§«·¹ÕK5¸ÊµM/Dx÷g¡}QUj§©~N�e}«ÜB-Ý”i;C3òׯ‡’§<—dèæ\bt}Ùz•6‹¤.?q’éi©TÎ+Ý««‹]†ÚeX]p…­cÐ-yâ.Wèôĺ}ï3víŸx·ÚðÚ† æS+ó¡SË•ÛÏzp…¿Ôdý®ÝcÑŸOÕRÓåt¡~˜WèSíÌ£}F§ÞèÌh=¨LâSç²~i;¥J^/ñû/ÏunØâšJsîn>RºÈ]ªÍù<(›qXŸª]˜3”æ�ÆñÁiv¸¡!),•3^³7AbûNtg4€'U¶4h:ìj4Ä¢kÑn�¡ z&b6¯NÓ3Å7.¦Ï|€6þìü[ÁÃqmŽùšw¡²91€±Ïæ¨Üjò1;BîÉùQ"úA¢´ÎE÷<œGô¨´þÔ š*ÙÛ`äÜ·Ã_LîP'�êéÈð)(Ì‘%A°QMݺ|w oÖ»3üiÆb/†çíšÚ¯sU¸ÓŸ_›À(zÀ¹ÐWK³yáGýHuD†¨ Ô@Ôà|=ÔŸä&+î³{‹ŽtD„•V\ÔäÝJ_ìøUr8Ü·ƒ�Ôþ¡lSÙÄ84xèɦ=&ôÃÀÀ›ê˜x°é®õƒÝÉ�0 ºJ5¸#n×ëž­�Y&åóÀF$”ëçD­áY„‘qÅó¨�CEoÃ5Æ=ŒMæb;=ñ¥3.ϳ"!6[íCâq¦qã™v¦ æ;ˆ:;þ¦»ÌŽ#I’ªJ+@³¸<yVÖñàÅæìp¿hɪÊÌðxÈÙÚ”9ÿ/´Ï3Jcƒ|A÷NâÊ‚ùõ{9°ðΤ(Ú ˆ8ï†þ¬a�9•57 k²P@Ñ‚|¤;C—Óbz(aÍÍÚ\ôp4•D^†¨ Iþwó‹s‘~Í)ŒÁ29€¦»,SNwÊ"(ƒßÿK„"L²¾áû]�kVM‹+Ö;R•Tðë)Ü–o›tºL&jÿ\£ìæhvw¢�â% 7L¢š…Bò‡ÜX¿½h޾ϱ¬/?¥Ó,<$/Å  |á’ûú$æÏË0rBk¹µ~…V`ÕýÞFÎÓŽÙ?«" ×{–+†p~ø~HÂdYß+�u4Øõ•¹¾é&³„˜7/ÝØAŽóïKÿ¡²§Yò¼Y®Úƒöþ®¥qc %™/:"5·sÎà}”¨ô˜�XÔÈâÿ‚ac) -OÆ1CWD¹¼Bñ95›ð̽�QI¬ ë*n³ç1o -¿œci7ŸžÅD³²Y_T&¯,[ r;ÓrÝÈïð -2OnKûü—|K®7›o›¥Ëøe‡ÔÿÁ~T|z·¡»T¢/;EèܲöF„YÍ—]Å‘‰yB7~œÿ˜·{5�ÉdËÏÚ噟·ænèÍŸKwò2º¿64QÏg¸ôŠo %òŽM­Ð›äF/ÿ‘1&¾x®‰ü±sú7ù°{ðR®×Ó„ ©#Ô¦Ò«¹£Ë¯‰ø.Ƕ+*1kÊlŒó¦Ýª+$î³tÓº”v°]*˜$K‚ä|�ÖqlÏ[žŽoœnXM9V¶ñØÔ½NÍw?ü¢³?ƒð”¤ÁpÅÇH£yzç?s{ä¸ÐÈ9yz.쾪Ú¤ñû"ž<·´5ñ*‹}/¢b »u:®Q«]™ÎÌóêMI÷öp‡LY}ÊsZÑ_Ù°|EŠB6�ƒæ?E_rW�ß:|Œ’`f„·VåÞôpŠýñÜæžŽ«Ì¦«ðØÌ&âµ4?è°N-<Ý|áqZ§R!vGR)•±ÄË4uU޾­Hë1ÕZ �ø°Ä)†òxæi,çšõŒLDž�†ç|ŠÆçµ|Gª�`H¸I^Œêo¼¢ô¼í:}|@ëËáì·ž§0*œsN‡Dšú¸íà—\u¾'w^?qà\%)n.E¨‰4"Ϭɩ]Λ’¸eÑ æ -_shO¯ß{ûÓ˜jnkÏ*�m5,�¯•ñæ« ªõ´bàQ‰d Û€NhÒÒS\íÝWýšBã±ÍB´®8&QüJñ„c‰9¿ótÓ¶É/?ñÅþâêÎ'CO³/êG¿õ¤+òµ|­‰ØÆßžhµ½ü/�†=‹Ì',d™M*Þt{&/·Pië„•øfw£,JP^ÅSˆ™6à‰ò ,¸û_¯É�oº¶OÀˆñ¯üކç€ö¬Ô¿­ÑÏ‘O]\à1Œ¨Ã£+Ï‹�òÆò Rh³¼ N—SÛËæG>ËTÙµg¨Ä€xÃű¬¹¥kצ„5è(²æy‡¯R&f©j~˜Î¢q95O%š�A½CåTRÖV‚©Ty†�·½Mµ<µ©• -4Ÿö˜í/+½ˆCžïä¸h„œ³ƒ@E˜;–×BÙ¯°�­Èq46:�?›ô¯©K%è/;�S7N�Ÿæ‰Öxi–š©�×s:뤣¿CÊ�7ü§RžÄjkþ¸CÜ££ùqB½çÍÕ¾x«v'5Îuò­óÃ>Ûtëû �É¢n‚Ѝ£+åœn -^WW¯zöè÷±o"†BÄr}o–;û÷üËÝ‚÷¼ßx­82+Y顉\uµ1ù­œXq„(T¶ÒóQ0•ß}ƒ"ͶKgRrK#´^Tš'‹CŠh×zšDõ[OˆffDYd‚øKëš8EÖ/%õB1ìË‹egè6äÂr ˜É¯‘,9�¿ó|rñÛýásâäGÙžÁ^¾w\ý'7nã;q -iOñáò -ãÕB| Ñs6š:KŠï™ŸHâ(-ŸâÕ4{Çtãb—�?sáˆàäœl`·ü>ÃYXÖ7€¾ŽHãiM²´©NË'™5+�$2*¾,BwÞÚww;ýéÐün›½9yÒ³�;êG2Üü·»N;ÖytHû3L—dsl÷]£…Ê�éÆU¹,›RiuÛ÷‘ˆùF'Úg ܾnEouËó»íäâ? J¢ÀXÙË( \n€@ª qìåQsèZÿD;U­˜£ç±³qMRú¢"$èéªÍ¥ê´®…^„9!jöéêÿgÔnÛ‰Nh›Á7•â©Ð6³Óo5S>S�º<¡ý#& J/ÏQá6aLæúЮvÌœòEwCÄèŠ$|5ÔÓÔ²9 ¤ -²�ëæ¤±ƒñ¹Ëƹ72ý²§"æ êõæb<û§,ä„à,X_µvëOåC¼á%tÂ(~ -‹ -º·åuï‡íoHÕ™”r�à 0 ¾QIh®’Éàt–Û0!ìFÖ9Žoƒ‘Ö²užìTô&�Àèê½BµÉ–úQó<%´¤Vž½Ýˆ(ý€Ü$\åoo”ÞšB£4U£1?†°¸€ˆÒ4‘«4¤,ºŒä2Œ• q—:îb©xß±„YP²"²¿îÎV_s–tU‡ø»;!HÂø¦í@ì)Š–jGpE‚“ l#oµdÆÜ1í °IåV°0ãÉB§C#Ùï}¢BΰLÎùM.'IîǸ|3 -i÷èýË)ëäbZPñ™ë�ò¿jr|n˜;Y…MÖÖŸ‰;â“câèÄky uøÝ"#82ª£(+Û¦$Cd²8ìF1ävQ)ì€ 9-«€ÿªn½æDjÍÐv½í½yÖÃÔLOØü� -ŽloM†>+A»µ{În³î3ð9ÄáÕc‘äQÔ§-”7zЌެ /›1*A¬-Ó ­ÿ`zñò&â|&ö}1÷^½,Ië£]Ë�Xó÷ð×�Ô2¯ð§1ý9µäÚC7*gN™| Ù\ná}NGÚõ½¡\|)ÃýÆiµfpð�¦—nIƒd7i.a¥ÊÃBN,V±²z±É•Í)¯>sÆ5³ÍO­Öß®¹/÷T#hãB»ö„ðª×�n‹z—(†²Ã‘©SÆ-³Î¡U%ÿ Dtaê×2û�då>ߣöû‰üü¾š¬… q÷�ž,3|ë*Åußu±0^—‰ð}bÕ´Ø9þ)èõ¿R’§`ÐAêpûRâ¦L¹¹¤ÁøeO5AùâÕU†zR’g”\z®n]w]YfBµéO91;-µîhñ�_ÊÁHT§!Ws% �ÈT4T-»¦¡\’oÉce³Ë_BAõV1¤ø¸|ºzËfÙ�ýÃ(žÖ[ïUCåC”0ûõr«»¯Ò—»ÿKw¹$ɱë0tþVá Ø!‰?iQÞÿôËm‡ý&�UY™’Hž2}å×E%¡ö\@C8–ÐU½n­/iŽH;º60gjözI®< -‚i[0ãR…;€.ž!t¹A1’ˆðȸß`W~‚ q:óŸXToD†ŽZØî¢55™~óÆ¡îauó@¯i¥=][âŠ{…ú ØïHjݦ«ï—-Öû£(À6„16›Yƒ>9êפw÷võž’…»%ßÈgå) …¤ÏÓ†œFæfŒ -Xj\ÿ(û>º·¦�üwæ¶�¬Mê’­s«e?.ŠZPUhGÉNi í2éK}Û‡ÿƒ[‚H˱ÿEiÑ—CHós°¹ÔFø ʆû¿Ñ¥9§ëÒGÕøO®ûèÍw¥T¼“jÝýÍcavCÈs×K9¢Æ›ºGŒðTŽÀG°~¶äÝ©Aæ(äS&©~ªIR²qŒzòDõË¢»k@œäëBýüŸ –IRŸ‡$`ò½&ªÑºBˆKa“|N÷ï9r5Ö—xk€D‡ÀQÞä••(±’ž a6�Ú¥E"µrü±ŸiŸs%bv°ö=Žs[U·øßÍdÔDÞíÉt¢fÚ­èàÆ$3§’ÙW«�š^À ä›]\ \÷y&ŸÁêOŒ”^¿Ü8Cˆ0{¼‘ûª%«Ô))0€*pZ�dàþý",½¯PìÖÂÍs‷JÔd‹ 0+6ô -°m¬á« 5h^ÀìAƒ^œÖïê -qi¬Nnµæe‡Ýu'®—oœ(LôÇÔQf#yÁHj–Y5²5XC̀Жæ‰N§ .È3��‡,ôLm’gÌKÿ¥Ôõ£àЫ´º·ž=ù†êK/>“Û�æ‰�ù÷þ;RrE%ᨠçûÉ…®ZlhœÈ�icÅP¹¤.¤ŸÞOI$rï(‡°DÛÈ�KÈÄw35ÀÏ‹µ'¡t¸àV8/gèhÕl—ŠÐ$Ü‹Æíîa¨1¸nsFwbé«.Œ€�^È!æqÕ½Hy¬<0-ånÜ—Zè“ß�¼î7žžæÊÔ²{bmÝ΄²“Á-4—G¬¯)í($ÖwB=>`Ê)Ö —OhGf§”¸¦ÍÅ5ácKE6Äe|hTÑ-]Sj¢Fï¼¾FªÚ'èµÏÙê7>+Ù\ðÒŒŽíCíº‡"k±5°+@sŽ_H»5‚ŒûÕ]Maõ«¡`àRæ­ß²ÂƯ–o†ai �ÐÜá¼ÃÁC›ú…ý¨®q - ìäL€ŠûOç/­š�ÑWE4ìúî¯ Ðª®/³=³�ýéüb t Ý )dV5Üí>¸"üøÁ–}?$øÞøÒS�´ <ª‘J‚å‘°†•²Ÿ  ~@¨2QºoÞu’hÞ'GÌåOHÀ=ž›ÑA|YB*‚çMö&‚ˆ«”¹~|xøJƒî]R¶-�‡2ëÀ\€»ÈþÔ¯K¶û&|ÌïÕ-’ ?1mñò­9áî?ò±Ò’ŸîBîµ´-a�®˜ˆbÝ-ci î³Ïq@]yÜ£c:Ô…ºæd· ³UÆ€µzàÌŒß@3Ù¿×…ÙÂÜ).»j_I.› Á"ù’³­Ê¯|Yì¦>êÖ=Ø"‡xúÐÀ …ôçîЃÈ]±ûo°Þo1 1¬¡c9g‰áö¿ƒ`Ûbo·Õ³m/÷¾ØÞ’1½¤vÇe“Ú–ô'M;È�h¶«\Ð^u'µå˜ñTq§i>·Œ±Ô¨€çnŽ ²d“Bé7&ÃsàÖŸDÂÂÂâq<òËk=[´9„)AüÁdã ̞墔­Y�%{‘‰X%EpïÜZE:C‘MîNåž ÓÓÔ‰ZŸàöQÀ‰^ÜvQMD]l3àÝ£\·´=B<fHï/ãÌl%å¿zu.ÓÅä’älë ŽaGŒ=ÅूàuÖ ´Ãö´;Ê} {·O½hϺcŸ!oÐ"Yé§OvãÕ…ú«í Áµ 瘎Ò–SÚ¢xìäÙCò ÕÝ}Ê�´ -44Rh£B7±æÎ\ªÁRh ðACä`:’”E/6²Ô LS¦«ÍÜá#)€t+úlæd³$›ÁóM -*$�Ùù ?èì3N{z2`‰NWÈ;颰O Ÿt{Ëq× -Æœ Œ9íe“ÈÐþG¾�”4fTy¡©@ãôûͦڇݷîySâèjT!uô™øò�ê·îU¬µÇ§O¡Ùõœ°‘Ÿ&#¥r©PÑ(R:•7=…’¡K�…—]´Ì¾ý¾÷¿:*Ñ×m"-d=nþÕQxÖ™]|;G0¾é`1)¸a—=†Í4W›Ù¾¾-9[ìjœ%m¨Ç(ä\+4.”Þ ÊÐÓŠ†%Îù±§OwJ"ô¿['@Õ›œÁErn$QDÚ¶ žÌŠW°KË7Wö™¶Ýô� Çˆ¨Û�ƒ`¸ qkÜýB”Þ’d€Íœ­ÌôåZ$Ø«аÙýƒw òÁ3qÔˆeux8µI?îØó-ž^\+-±×”“=k<šÊ,;=Ÿ½ÝyÝ­é]nêÎù!£²™Žœ(hÚRæÍ{�åúIù\’|þíÕÍn!à<‚߀ó Ðe@Îúðlìr:]*ìªÂ1‹¤r§²Ì�bÜPåb'û�Kmã nÅ7®äo¤Vô�f‘>´øÆF�ð6çÉÞ�BwÐq!œ17‘-pº­}k6/8“éð¼HXšºz[ìDœÞ"êq^!�AØ|ç‰ôñLâË"s5ïö,Ýóx`„L=ÎåG_¨_{èQh\|Û·æ–®v…‹ZE¹ˆîªTß ™Ñ[çÊßJ x €›Z·+Л5¶.}¹_Mºã4Gþ-§íÝ m[ƒ¹Ä5lXü»¡^W)[Z�~þh¨ÅÎ ¬ -êû•`sm2‰›t/W¹Lm¶�Qâì1j­BC�x"ÒÑg*Ü�I0Œ…öcìî�ÈîŽ_iµ³ÍÒÕ®§÷»Ø:Hu\²î]=M.YZCå^)©›¯‹vcŸßm YKSžš»C%¿E £<Å¥cð̯¥²+‹£äty[Fðé›È£·ÒÇÂ×wß©Šn$aW3j ëø?«ØŒþÃ9xy±þp“­~1(~{FÒ»¯þ‹ê–Ràzÿ.xO]qP™®äÕ<§^ƲOò º8†¼p±‹ºÅç‹Ã)sˆ‹xÿ!üŒmá¾t,î,”î VX¸`DЙºNHWý´b+3/tô -²,C¸Nb{Û”÷ÑI4ÿ_R³Vö»@ÔgBO38¬Kjø’hvè&«ºŒýhRŸØ•›xêwêÊ`Ïù’_Å$†5tRÁ…r‡P†Ò~®~›TíïH�䜳äž2”e¬ Œ '@Mþ~2ù–1œ&oÿ'P¹÷²{-ÈSëw �~Öä)¦„þ2‹kã~2– N1ì-ûd+S=0bwâÔ =Ž\Ï�w§¨)/&Pa"6ë¦@õñCл3gÞVëŸ4Û§>stream -8;Yhn>7SFk#igu`GlP,B3^^np[#um^tW3'&uU]94N0I_^lK[ -7W/[/Vc>n8*U`,[/GHaY%Xt"!.EM4$3qGWW!s!Ibd)5~> -endstream endobj 11 0 obj [/Indexed/DeviceRGB 255 12 0 R] endobj 12 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 5 0 obj <> endobj 13 0 obj [/View/Design] endobj 14 0 obj <>>> endobj 9 0 obj <> endobj 6 0 obj [5 0 R] endobj 15 0 obj <> endobj xref -0 16 -0000000000 65535 f -0000000016 00000 n -0000000144 00000 n -0000046685 00000 n -0000000000 00000 f -0000065098 00000 n -0000065396 00000 n -0000046736 00000 n -0000047043 00000 n -0000065284 00000 n -0000064217 00000 n -0000064536 00000 n -0000064584 00000 n -0000065168 00000 n -0000065199 00000 n -0000065419 00000 n -trailer -<]>> -startxref -65626 -%%EOF diff --git a/inst/img/civilytics_logo.png b/inst/img/civilytics_logo.png deleted file mode 100644 index ab29a4b..0000000 Binary files a/inst/img/civilytics_logo.png and /dev/null differ diff --git a/inst/img/civilytics_logo_white.png b/inst/img/civilytics_logo_white.png deleted file mode 100644 index 0f9c9c6..0000000 Binary files a/inst/img/civilytics_logo_white.png and /dev/null differ diff --git a/inst/img/favicon.ico b/inst/img/favicon.ico deleted file mode 100644 index f0e564f..0000000 Binary files a/inst/img/favicon.ico and /dev/null differ diff --git a/inst/img/icon-192.png b/inst/img/icon-192.png deleted file mode 100644 index 781ef64..0000000 Binary files a/inst/img/icon-192.png and /dev/null differ diff --git a/inst/img/icon-32.png b/inst/img/icon-32.png deleted file mode 100644 index 696f09a..0000000 Binary files a/inst/img/icon-32.png and /dev/null differ diff --git a/inst/img/icon-512.png b/inst/img/icon-512.png deleted file mode 100644 index db5c2ca..0000000 Binary files a/inst/img/icon-512.png and /dev/null differ diff --git a/inst/img/icon.png b/inst/img/icon.png deleted file mode 100644 index 696f09a..0000000 Binary files a/inst/img/icon.png and /dev/null differ diff --git a/man/civilytics-package.Rd b/man/civilytics-package.Rd index 29400e1..854fdd1 100644 --- a/man/civilytics-package.Rd +++ b/man/civilytics-package.Rd @@ -19,10 +19,5 @@ Useful links: \author{ \strong{Maintainer}: Jared E. Knowles \email{jared@civilytics.com} -Authors: -\itemize{ - \item Jared E. Knowles \email{jared@civilytics.com} -} - } \keyword{internal} diff --git a/man/civilytics_colors.Rd b/man/civilytics_colors.Rd index b1cea73..313911e 100644 --- a/man/civilytics_colors.Rd +++ b/man/civilytics_colors.Rd @@ -1,5 +1,6 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/colors.R +\docType{data} \name{civilytics_colors} \alias{civilytics_colors} \title{Civilytics brand colors} @@ -17,3 +18,4 @@ custom properties defined on www.civilytics.com (`--cv-*` variables). civilytics_colors["accent"] civilytics_colors[c("ink", "paper")] } +\keyword{datasets} diff --git a/man/civilytics_logo.Rd b/man/civilytics_logo.Rd new file mode 100644 index 0000000..26699a8 --- /dev/null +++ b/man/civilytics_logo.Rd @@ -0,0 +1,63 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/logo.R +\name{civilytics_logo} +\alias{civilytics_logo} +\title{Add a Civilytics logo to a ggplot (pipe-friendly)} +\usage{ +civilytics_logo( + plot, + type = c("wordmark", "mark"), + variant = c("light", "dark"), + margin_param = NULL +) +} +\arguments{ +\item{plot}{A ggplot object.} + +\item{type}{Character. `"wordmark"` (default) or `"mark"`. Passed to +[make_logo_grob()].} + +\item{variant}{Character. `"light"` (default) or `"dark"`. Passed to +[make_logo_grob()].} + +\item{margin_param}{Numeric or `NULL`. Manual margin adjustment passed to +[add_logo()].} +} +\value{ +A grob (from [gridExtra::arrangeGrob()]) ready to draw with + [grid::grid.draw()]. +} +\description{ +A convenience wrapper that creates the logo grob and attaches it below the +plot in one call. Designed for use with the base pipe `|>`: +} +\details{ +``` +ggplot(mpg, aes(displ, hwy)) + + geom_point() + + theme_civilytics() |> + civilytics_logo() +``` + +Since `|>` has lower precedence than `+`, the entire ggplot chain is piped +as the first argument — no parentheses needed. +} +\examples{ +\dontrun{ +library(ggplot2); library(grid) + +# Pipe-friendly usage +ggplot(mpg, aes(displ, hwy)) + + geom_point() + + theme_civilytics() |> + civilytics_logo() |> + grid.draw() + +# Dark theme with mark +ggplot(mpg, aes(displ, hwy)) + + geom_point() + + theme_civilytics_dark() |> + civilytics_logo(variant = "dark", type = "mark") |> + grid.draw() +} +} diff --git a/man/make_logo_grob.Rd b/man/make_logo_grob.Rd index 8d57744..848f430 100644 --- a/man/make_logo_grob.Rd +++ b/man/make_logo_grob.Rd @@ -4,22 +4,26 @@ \alias{make_logo_grob} \title{Get a Civilytics Logo grob} \usage{ -make_logo_grob(variant = c("light", "dark")) +make_logo_grob(type = c("wordmark", "mark"), variant = c("light", "dark")) } \arguments{ -\item{variant}{Character. `"light"` (default) uses the standard dark logo -suitable for light backgrounds. `"dark"` uses the white logo suitable for -dark backgrounds (pairs with [theme_civilytics_dark()]).} +\item{type}{Character. `"wordmark"` (default) uses the full wordmark. +`"mark"` uses the compact C-pulse icon only.} + +\item{variant}{Character. `"light"` (default) uses the dark logo for light +backgrounds. `"dark"` uses the reverse (light) logo for dark backgrounds +(pairs with [theme_civilytics_dark()]).} } \value{ A ggplot object (class `"gg"`) containing the logo grob. } \description{ Returns a ggplot object containing the Civilytics logo as a rasterGrob, -ready to compose with plots via [add_logo()] or [add_logo_ga()]. +ready to compose with plots via [add_logo()], [add_logo_ga()], or the +pipe-friendly [civilytics_logo()]. } \examples{ -logo <- make_logo_grob() # light background -logo_dark <- make_logo_grob("dark") # dark background +logo <- make_logo_grob() # wordmark, light +logo <- make_logo_grob("mark", "dark") # mark, dark class(logo) # "gg" "ggplot" } diff --git a/man/plot_jpeg.Rd b/man/plot_jpeg.Rd index 5ad1306..2550ef4 100644 --- a/man/plot_jpeg.Rd +++ b/man/plot_jpeg.Rd @@ -21,6 +21,8 @@ a rasterImage Plot a jpeg image as a raster } \examples{ -img <- system.file("img","civilytics_logo.jpg",package="civilytics") +\dontrun{ +img <- system.file("img","Knowles_Headshot_2019_good.jpg",package="civilytics") plot_jpeg(img) } +} diff --git a/man/theme_civilytics.Rd b/man/theme_civilytics.Rd index 658cd97..7fbe383 100644 --- a/man/theme_civilytics.Rd +++ b/man/theme_civilytics.Rd @@ -64,6 +64,7 @@ automatically via [showtext] when the package is attached. Call [civilytics_load_fonts()] to reload them if needed. } \examples{ +\dontrun{ library(ggplot2) ggplot(mpg, aes(displ, hwy)) + geom_point() + @@ -74,3 +75,4 @@ ggplot(mpg, aes(displ, hwy, colour = class)) + scale_color_civilytics() + theme_civilytics() } +} diff --git a/man/theme_civilytics_dark.Rd b/man/theme_civilytics_dark.Rd index 0dd25b2..9964c31 100644 --- a/man/theme_civilytics_dark.Rd +++ b/man/theme_civilytics_dark.Rd @@ -64,6 +64,7 @@ All parameters from [theme_civilytics()] are accepted and override the dark defaults. } \examples{ +\dontrun{ library(ggplot2) ggplot(mpg, aes(displ, hwy)) + geom_point() + @@ -74,3 +75,4 @@ ggplot(mpg, aes(displ, hwy, colour = class)) + scale_color_civilytics() + theme_civilytics_dark() } +} diff --git a/tests/testthat/test_theme.R b/tests/testthat/test_theme.R index 407d7f9..21de497 100644 --- a/tests/testthat/test_theme.R +++ b/tests/testthat/test_theme.R @@ -160,20 +160,43 @@ test_that("theme_civilytics_dark uses navy for strip background", { # --- make_logo_grob ---------------------------------------------------------- -test_that("make_logo_grob returns a gg object for light variant", { - logo <- make_logo_grob("light") - expect_s3_class(logo, "gg") +test_that("make_logo_grob returns a gg object for all type/variant combos", { + for (type in c("wordmark", "mark")) { + for (variant in c("light", "dark")) { + logo <- make_logo_grob(type = type, variant = variant) + expect_s3_class(logo, "gg") + } + } }) -test_that("make_logo_grob returns a gg object for dark variant", { - logo <- make_logo_grob("dark") - expect_s3_class(logo, "gg") -}) - -test_that("make_logo_grob defaults to light variant", { +test_that("make_logo_grob defaults to wordmark light", { expect_no_error(make_logo_grob()) }) +test_that("make_logo_grob errors on invalid type", { + expect_error(make_logo_grob(type = "banner")) +}) + test_that("make_logo_grob errors on invalid variant", { - expect_error(make_logo_grob("purple")) + expect_error(make_logo_grob(variant = "purple")) +}) + +# --- civilytics_logo (pipe-friendly) ----------------------------------------- + +test_that("civilytics_logo returns a grob", { + p <- ggplot(mpg, aes(displ, hwy)) + geom_point() + theme_civilytics() + result <- suppressWarnings(civilytics_logo(p)) + expect_s3_class(result, "grob") +}) + +test_that("civilytics_logo works with pipe operator", { + p <- ggplot(mpg, aes(displ, hwy)) + geom_point() + theme_civilytics() + result <- suppressWarnings(p |> civilytics_logo()) + expect_s3_class(result, "grob") +}) + +test_that("civilytics_logo accepts type and variant params", { + p <- ggplot(mpg, aes(displ, hwy)) + geom_point() + theme_civilytics_dark() + result <- suppressWarnings(civilytics_logo(p, type = "mark", variant = "dark")) + expect_s3_class(result, "grob") })