From ef468310849391a055fdc0046dfab77e58e2f3d7 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Fri, 5 Mar 2021 15:21:46 +0100 Subject: [PATCH 01/71] Resize sidebar when session is initialized. --- inst/semantic.dashboard.js | 2 +- inst/semantic.dashboard.min.js | 2 +- srcjs/sidebar.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/semantic.dashboard.js b/inst/semantic.dashboard.js index c333c4c..05d6af1 100644 --- a/inst/semantic.dashboard.js +++ b/inst/semantic.dashboard.js @@ -3,7 +3,7 @@ */ const initialize_sidebar = (closable, pushable, overlay, dimPage) => { transitionLeftRight = overlay ? 'overlay' : 'uncover'; - $(document).ready(function() { + $(document).on('shiny:sessioninitialized', function(event) { $('.ui.sidebar') .sidebar({ context: $('.bottom.segment'), diff --git a/inst/semantic.dashboard.min.js b/inst/semantic.dashboard.min.js index 81a0c97..1035d5f 100644 --- a/inst/semantic.dashboard.min.js +++ b/inst/semantic.dashboard.min.js @@ -1 +1 @@ -const initialize_sidebar=(t,i,e,n)=>{transitionLeftRight=e?"overlay":"uncover",$(document).ready((function(){let e;$(".ui.sidebar").sidebar({context:$(".bottom.segment"),closable:t,dimPage:n,defaultTransition:{computer:{left:transitionLeftRight,right:transitionLeftRight,top:"overlay",bottom:"overlay"},mobile:{left:transitionLeftRight,right:transitionLeftRight,top:"overlay",bottom:"overlay"}}}),$("#toggle_menu").click((function(){$(window).resize()})),i&&$(".ui.sidebar").sidebar("attach events","#toggle_menu"),$("#uisidebar .item").tab({onVisible:function(t){e&&$(this).trigger("hidden"),$(window).resize(),$(this).trigger("shown"),e=this,prefix="shiny-tab-",Shiny.setInputValue("uisidebar",this.id.substring(prefix.length),{priority:"event"})}})}))}; \ No newline at end of file +const initialize_sidebar=(i,t,e,n)=>{transitionLeftRight=e?"overlay":"uncover",$(document).on("shiny:sessioninitialized",(function(e){let o;$(".ui.sidebar").sidebar({context:$(".bottom.segment"),closable:i,dimPage:n,defaultTransition:{computer:{left:transitionLeftRight,right:transitionLeftRight,top:"overlay",bottom:"overlay"},mobile:{left:transitionLeftRight,right:transitionLeftRight,top:"overlay",bottom:"overlay"}}}),$("#toggle_menu").click((function(){$(window).resize()})),t&&$(".ui.sidebar").sidebar("attach events","#toggle_menu"),$("#uisidebar .item").tab({onVisible:function(i){o&&$(this).trigger("hidden"),$(window).resize(),$(this).trigger("shown"),o=this,prefix="shiny-tab-",Shiny.setInputValue("uisidebar",this.id.substring(prefix.length),{priority:"event"})}})}))}; \ No newline at end of file diff --git a/srcjs/sidebar.js b/srcjs/sidebar.js index c333c4c..05d6af1 100644 --- a/srcjs/sidebar.js +++ b/srcjs/sidebar.js @@ -3,7 +3,7 @@ */ const initialize_sidebar = (closable, pushable, overlay, dimPage) => { transitionLeftRight = overlay ? 'overlay' : 'uncover'; - $(document).ready(function() { + $(document).on('shiny:sessioninitialized', function(event) { $('.ui.sidebar') .sidebar({ context: $('.bottom.segment'), From 632a9f6c77144fdd7a9d41270add0f60d8ab7e4e Mon Sep 17 00:00:00 2001 From: Dominik Krzeminski Date: Fri, 5 Mar 2021 14:38:10 +0000 Subject: [PATCH 02/71] quick fix in sidebar option --- DESCRIPTION | 2 +- R/semantic_dashboard.R | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5dcc3b8..d87badd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: semantic.dashboard Type: Package Title: Dashboard with Fomantic UI Support for Shiny -Version: 0.2.0 +Version: 0.2.1 Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "aut"), person("Dominik", "Krzeminski", email = "dominik@appsilon.com", role = "cre"), person("Krystian", "Igras", role = "aut"), diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index f8b4e48..78ea5db 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -165,6 +165,7 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv display_type <- ifelse(center, "labeled icon", "") uncover_class <- ifelse(isTRUE(visible) & isFALSE(overlay), "uncover", "") + if (side %in% c("top", "bottom")) uncover_class <- "" overlay_class <- ifelse(isTRUE(visible) & isTRUE(overlay), "overlay", "") inverted_value <- get_inverted_class(inverted) From 252355ba42fef05c2a3cf4ea863c001d2180942c Mon Sep 17 00:00:00 2001 From: pawelchabros Date: Tue, 6 Apr 2021 17:01:04 +0200 Subject: [PATCH 03/71] box inside tabBox can be reopened --- R/box.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/R/box.R b/R/box.R index 77316fe..d97f84f 100644 --- a/R/box.R +++ b/R/box.R @@ -29,6 +29,7 @@ box <- function(..., title = NULL, color = "", ribbon = TRUE, title_side = "top } else { id } + title_id <- sub("box_", "title_", box_id) label <- if (!is.character(title)) { NULL } else { @@ -40,18 +41,19 @@ box <- function(..., title = NULL, color = "", ribbon = TRUE, title_side = "top } shiny::div(class = title_class, minimize_button, title) } + icon_selector <- glue::glue("'#{title_id} > .label > .icon'") js_script <- glue::glue("$('#{box_id}').accordion({{ - selector: {{ trigger: '.title .icon' }}, - onOpening: function() {{ $('#{box_id}').find('.label .icon').removeClass('{expand_icon}').addClass('{collapse_icon}'); }}, - onClosing: function() {{ $('#{box_id}').find('.label .icon').removeClass('{collapse_icon}').addClass('{expand_icon}'); }} + selector: {{ trigger: {icon_selector} }}, + onOpening: function() {{ $({icon_selector}).removeClass('{expand_icon}').addClass('{collapse_icon}'); }}, + onClosing: function() {{ $({icon_selector}).removeClass('{collapse_icon}').addClass('{expand_icon}'); }} }});") column(width = width, shiny::div(class = paste("ui segment raised", color), shiny::div(id = box_id, class = "ui accordion", - shiny::div(class = "title", style = "cursor: auto", label), + shiny::div(id = title_id, class = "title", style = "cursor: auto", label), shiny::div(class = "content active", shiny::div(...)) ) ), - if (collapsible) shiny::singleton(shiny::tags$script(paste0("$(document).ready(function() { ", js_script, " })"))) + if (collapsible) shiny::singleton(shiny::tags$script(shiny::HTML(paste0("$(document).ready(function() {", js_script, " })")))) ) } From 017920ad3f1d6e980c2c3249032582f9705d1a33 Mon Sep 17 00:00:00 2001 From: pawelchabros Date: Wed, 7 Apr 2021 16:56:31 +0200 Subject: [PATCH 04/71] `selected` argument moved to `menuItem`; working now --- R/menu_item.R | 22 ++++++++++++++++------ R/tab.R | 12 ++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/R/menu_item.R b/R/menu_item.R index 3a761db..e654fd6 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -32,7 +32,7 @@ validate_tab_name <- function(name) { #' @export #' @examples #' menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")) -menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE) { +menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE, selected = FALSE) { sub_items <- list(...) if (!is.null(href) + (!is.null(tabName) + (length(sub_items) > 0) != 1)) { stop("Must have either href, tabName, or sub-items (contained in ...).") @@ -55,11 +55,21 @@ menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newta } if (length(sub_items) == 0) { - shiny::tags$a(class = "item", href = href, icon, text, - `data-tab` = data_tab, - `data-toggle` = if (isTabItem) "tab", - `data-value` = if (!is.null(tabName)) tabName, - target = target) + shiny::tags$a( + class = "item", href = href, icon, text, + `data-tab` = data_tab, + `data-toggle` = if (isTabItem) "tab", + `data-value` = if (!is.null(tabName)) tabName, + target = target, + if (selected) shiny::singleton(shiny::tags$script(shiny::HTML(glue::glue(" + $(function() {{ + ['.dashboard-sidebar > a', '.tab-content > div'].forEach(function(tag) {{ + $(`${{tag}}[data-tab]`).removeClass('active'); + $(`${{tag}}[data-tab=\"{data_tab}\"]`).addClass('active'); + }}) + }}) + ")))) + ) } else { shiny::tags$div(class = "item", shiny::tags$div(class = "header", text), diff --git a/R/tab.R b/R/tab.R index c4b6232..3e9529b 100644 --- a/R/tab.R +++ b/R/tab.R @@ -30,16 +30,8 @@ tabItem <- tab_item #' tabItems( #' tabItem(tabName = "tab1", "Tab 1"), #' tabItem(tabName = "tab2", "Tab 2")) -tab_items <- function(..., selected = 1){ - tabs <- list(...) - if (round(selected) < 1 | round(selected) > length(tabs) | !is.numeric(selected)){ - warning("Wrong tabItem selected, switched to first one!") - selected_tab <- 1 - } else { - selected_tab <- selected - } - tabs[[selected_tab]]$attribs$class <- paste(tabs[[selected_tab]]$attribs$class, "active") - shiny::tags$div(class = "tab-content", tabs) +tab_items <- function(...){ + shiny::tags$div(class = "tab-content", list(...)) } #' @describeIn tab_items Create a panel with tabs (alias for \code{tab_items} for compatibility with \code{shinydashboard}) From ab563df811a10fe9ca00562890bcfb94a8345a6b Mon Sep 17 00:00:00 2001 From: pawelchabros Date: Thu, 8 Apr 2021 12:40:22 +0200 Subject: [PATCH 05/71] documentation corrected (@param selected moved from tab to menuItem) --- R/menu_item.R | 1 + R/tab.R | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/R/menu_item.R b/R/menu_item.R index e654fd6..b168703 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -28,6 +28,7 @@ validate_tab_name <- function(name) { #' @param tabName Id of the tab. Not compatible with href. #' @param href A link address. Not compatible with tabName. #' @param newtab If href is supplied, should the link open in a new browser tab? +#' @param selected If TRUE, this menuItem will start selected. #' @return A menu item that can be passed \code{\link[semantic.dashboard]{sidebarMenu}} #' @export #' @examples diff --git a/R/tab.R b/R/tab.R index 3e9529b..f8aca51 100644 --- a/R/tab.R +++ b/R/tab.R @@ -23,7 +23,6 @@ tabItem <- tab_item #' Create a panel with tabs. #' @description Create a panel with tabs. #' @param ... Tabs. -#' @param selected Which tab should be active on start. #' @return A panel with tabs that can be passed to \code{\link[semantic.dashboard]{dashboardBody}} #' @export #' @examples From a7276f6f200fe11595eb5ef0ff40c3788f82ac42 Mon Sep 17 00:00:00 2001 From: pawelchabros Date: Fri, 9 Apr 2021 11:01:43 +0200 Subject: [PATCH 06/71] documentation corrected; `selected` works also with `menuSubItem` --- R/menu_item.R | 6 ++++-- man/menu_item.Rd | 32 +++++++++++++++++++++++++++++--- man/sidebar_menu.Rd | 5 ++++- man/tab_items.Rd | 6 ++---- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/R/menu_item.R b/R/menu_item.R index b168703..958f041 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -64,7 +64,7 @@ menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newta target = target, if (selected) shiny::singleton(shiny::tags$script(shiny::HTML(glue::glue(" $(function() {{ - ['.dashboard-sidebar > a', '.tab-content > div'].forEach(function(tag) {{ + ['.dashboard-sidebar a', '.tab-content > div'].forEach(function(tag) {{ $(`${{tag}}[data-tab]`).removeClass('active'); $(`${{tag}}[data-tab=\"{data_tab}\"]`).addClass('active'); }}) @@ -93,10 +93,12 @@ menuSubItem <- menu_item #' @param ... Menu items. #' @return A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSidebar}} #' @export +#' @details +#' It's possible to set selected menu item by setting `selected = TRUE` in `menuItem`. #' @examples #' sidebarMenu( #' menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), -#' menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")) +#' menuItem(tabName = "table_tab", text = "My table", icon = icon("smile"), selected = TRUE) #' ) sidebar_menu <- function(..., id = "uisidebar") { c(as.list(environment()), list(...)) diff --git a/man/menu_item.Rd b/man/menu_item.Rd index 3b92fc6..323fcb4 100644 --- a/man/menu_item.Rd +++ b/man/menu_item.Rd @@ -6,11 +6,35 @@ \alias{menuSubItem} \title{Create a menu item.} \usage{ -menu_item(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE) +menu_item( + text, + ..., + icon = NULL, + tabName = NULL, + href = NULL, + newtab = TRUE, + selected = FALSE +) -menuItem(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE) +menuItem( + text, + ..., + icon = NULL, + tabName = NULL, + href = NULL, + newtab = TRUE, + selected = FALSE +) -menuSubItem(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE) +menuSubItem( + text, + ..., + icon = NULL, + tabName = NULL, + href = NULL, + newtab = TRUE, + selected = FALSE +) } \arguments{ \item{text}{Text to show for the menu item.} @@ -24,6 +48,8 @@ menuSubItem(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE) \item{href}{A link address. Not compatible with tabName.} \item{newtab}{If href is supplied, should the link open in a new browser tab?} + +\item{selected}{If TRUE, this menuItem will start selected.} } \value{ A menu item that can be passed \code{\link[semantic.dashboard]{sidebarMenu}} diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index 2225388..31eb49b 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -20,6 +20,9 @@ A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSideb \description{ Create a sidebar menu with menu items. } +\details{ +It's possible to set selected menu item by setting `selected = TRUE` in `menuItem`. +} \section{Functions}{ \itemize{ \item \code{sidebarMenu}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) @@ -28,6 +31,6 @@ Create a sidebar menu with menu items. \examples{ sidebarMenu( menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), - menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")) + menuItem(tabName = "table_tab", text = "My table", icon = icon("smile"), selected = TRUE) ) } diff --git a/man/tab_items.Rd b/man/tab_items.Rd index 8514414..05b3879 100644 --- a/man/tab_items.Rd +++ b/man/tab_items.Rd @@ -5,14 +5,12 @@ \alias{tabItems} \title{Create a panel with tabs.} \usage{ -tab_items(..., selected = 1) +tab_items(...) -tabItems(..., selected = 1) +tabItems(...) } \arguments{ \item{...}{Tabs.} - -\item{selected}{Which tab should be active on start.} } \value{ A panel with tabs that can be passed to \code{\link[semantic.dashboard]{dashboardBody}} From dc16f8f9c8b5d4fa339e30ca56a6773db701d4e1 Mon Sep 17 00:00:00 2001 From: dokato Date: Fri, 30 Apr 2021 09:45:49 +0100 Subject: [PATCH 07/71] Update DESCRIPTION --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index d87badd..634ac16 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -3,10 +3,11 @@ Type: Package Title: Dashboard with Fomantic UI Support for Shiny Version: 0.2.1 Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "aut"), - person("Dominik", "Krzeminski", email = "dominik@appsilon.com", role = "cre"), + person("Dominik", "Krzeminski", email = "dominik@appsilon.com", role = "aut"), person("Krystian", "Igras", role = "aut"), person("Michał", "Maj", role = "ctb"), person("Michał", "Drzazga", role = "ctb"), + person("Developers", "Appsilon", email = "dev+shinysemantic@appsilon.com", role = "cre"), person(family = "Appsilon", role = "cph")) Description: It offers functions for creating dashboard with Fomantic UI. BugReports: https://github.com/Appsilon/semantic.dashboard/issues From 918cc03d32d7d1af2ab3420ca350c02fdb1aedea Mon Sep 17 00:00:00 2001 From: dokato Date: Fri, 30 Apr 2021 09:51:17 +0100 Subject: [PATCH 08/71] Update DESCRIPTION --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 634ac16..c41e92c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -7,7 +7,7 @@ Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "a person("Krystian", "Igras", role = "aut"), person("Michał", "Maj", role = "ctb"), person("Michał", "Drzazga", role = "ctb"), - person("Developers", "Appsilon", email = "dev+shinysemantic@appsilon.com", role = "cre"), + person("Developers", "Appsilon", email = "dev+semanticdash@appsilon.com", role = "cre"), person(family = "Appsilon", role = "cph")) Description: It offers functions for creating dashboard with Fomantic UI. BugReports: https://github.com/Appsilon/semantic.dashboard/issues From eb0cf6787cee5bd6846944f7bffe9d6c411e5cd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 23:31:19 +0000 Subject: [PATCH 09/71] Bump hosted-git-info from 2.8.8 to 2.8.9 in /tools Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9. - [Release notes](https://github.com/npm/hosted-git-info/releases) - [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md) - [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9) Signed-off-by: dependabot[bot] --- tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index aff25c6..4aeb4bb 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -1942,9 +1942,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "iconv-lite": { From 7ba769c9e1124bdcc05b035a58fe3abea02ec786 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 23:55:28 +0000 Subject: [PATCH 10/71] Bump lodash from 4.17.20 to 4.17.21 in /tools Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21) Signed-off-by: dependabot[bot] --- tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index aff25c6..b35e750 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -2457,9 +2457,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "make-iterator": { From 72eb6b51127a5192c3f82f4cd27b0b69710fa86a Mon Sep 17 00:00:00 2001 From: Pawel Przytula Date: Sun, 31 Oct 2021 17:55:40 +0100 Subject: [PATCH 11/71] Changed dev@appsilon.com to support+opensource@appsilon.com --- DESCRIPTION | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c41e92c..afa5ccd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -7,7 +7,7 @@ Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "a person("Krystian", "Igras", role = "aut"), person("Michał", "Maj", role = "ctb"), person("Michał", "Drzazga", role = "ctb"), - person("Developers", "Appsilon", email = "dev+semanticdash@appsilon.com", role = "cre"), + person("Developers", "Appsilon", email = "support+opensource@appsilon.com", role = "cre"), person(family = "Appsilon", role = "cph")) Description: It offers functions for creating dashboard with Fomantic UI. BugReports: https://github.com/Appsilon/semantic.dashboard/issues diff --git a/README.md b/README.md index 534dcbb..3212d2b 100644 --- a/README.md +++ b/README.md @@ -119,4 +119,4 @@ Appsilon Appsilon is the **Full Service Certified RStudio Partner**. Learn more at [appsilon.com](https://appsilon.com). -Get in touch [dev@appsilon.com](dev@appsilon.com) +Get in touch [support+opensource@appsilon.com](support+opensource@appsilon.com) From ae732aead93f9d2d2640ce8e6bb27d77bef6b335 Mon Sep 17 00:00:00 2001 From: Jakub Sobolewski Date: Tue, 9 Nov 2021 10:01:23 +0100 Subject: [PATCH 12/71] Fix CRAN check NOTE --- DESCRIPTION | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index afa5ccd..aee0821 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,7 +12,6 @@ Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "a Description: It offers functions for creating dashboard with Fomantic UI. BugReports: https://github.com/Appsilon/semantic.dashboard/issues Encoding: UTF-8 -LazyData: TRUE License: MIT + file LICENSE Imports: utils, @@ -25,5 +24,8 @@ Suggests: testthat, lintr, shinydashboard, - covr -RoxygenNote: 7.1.1 + covr, + knitr +RoxygenNote: 7.1.2 +VignetteBuilder: + knitr From c89c8aedf621e6ba326f7163d0544924016393c4 Mon Sep 17 00:00:00 2001 From: Jakub Sobolewski Date: Tue, 9 Nov 2021 10:24:13 +0100 Subject: [PATCH 13/71] Fix invalid URL note --- vignettes/intro.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/intro.Rmd b/vignettes/intro.Rmd index 12e0b23..bdd18f1 100644 --- a/vignettes/intro.Rmd +++ b/vignettes/intro.Rmd @@ -28,9 +28,9 @@ Dashboards provide a solution. They allow the developer to intuitively structure # Why Semantic Dashboard? -Semantic Dashboard offers an alternative look of your dashboard based on the [Fomantic UI](fomantic-ui.com/). Historically, we built this package around *Semantic UI* +Semantic Dashboard offers an alternative look of your dashboard based on the [Fomantic UI](https://fomantic-ui.com/). Historically, we built this package around *Semantic UI* library, but it got deprecated and now (since December 2019) we base on the well-supported -and maintained community fork called [Fomantic UI](fomantic-ui.com/). +and maintained community fork called [Fomantic UI](https://fomantic-ui.com/). It relies and uses components from the mother package [shiny.semantic](https://github.com/Appsilon/shiny.semantic/). From a6e6f3fa7ed6c0d5b1af5f78e017631ebbaa4e7e Mon Sep 17 00:00:00 2001 From: Jakub Sobolewski Date: Tue, 9 Nov 2021 10:51:32 +0100 Subject: [PATCH 14/71] Add rmarkdown to DESCRIPTION --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index aee0821..0f6d6c7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -25,7 +25,8 @@ Suggests: lintr, shinydashboard, covr, - knitr + knitr, + rmarkdown RoxygenNote: 7.1.2 VignetteBuilder: knitr From e227ebdba65d17130893c18edb273002ea572eab Mon Sep 17 00:00:00 2001 From: Jakub Sobolewski Date: Thu, 18 Nov 2021 10:40:02 +0100 Subject: [PATCH 15/71] Update CI to check package on R-oldrel and R-devel --- .github/workflows/main.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5569b8c..be04eba 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,20 +12,23 @@ jobs: fail-fast: false matrix: config: - - { os: windows-latest, r: '3.6'} - - { os: macOS-latest, r: '3.6'} - - { os: ubuntu-18.04, r: '3.6', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} + - {os: macOS-latest, r: 'release'} + - {os: windows-latest, r: 'release'} + - {os: ubuntu-18.04, r: 'devel', http-user-agent: 'release', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} + - {os: ubuntu-18.04, r: 'release', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} + - {os: ubuntu-18.04, r: 'oldrel', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} env: R_REMOTES_NO_ERRORS_FROM_WARNINGS: true CRAN: ${{ matrix.config.cran }} steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - uses: r-lib/actions/setup-r@master with: r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} - uses: r-lib/actions/setup-pandoc@master @@ -42,12 +45,9 @@ jobs: - name: Install system dependencies if: runner.os == 'Linux' - env: - RHUB_PLATFORM: linux-x86_64-ubuntu-gcc - run: | - Rscript -e "remotes::install_github('r-hub/sysreqs')" - sysreqs=$(Rscript -e "cat(sysreqs::sysreq_commands('DESCRIPTION'))") - sudo -s eval "$sysreqs" + uses: r-lib/actions/setup-r-dependencies@v1 + with: + extra-packages: rcmdcheck - name: Install vctrs if: runner.os == 'Windows' @@ -71,6 +71,6 @@ jobs: path: check - name: Test coverage - if: matrix.config.os == 'macOS-latest' && matrix.config.r == '3.6' + if: matrix.config.os == 'ubuntu-18.04' && matrix.config.r == 'release' run: | Rscript -e 'covr::codecov(token = "${{secrets.CODECOV_TOKEN}}")' From 5360c23f1671d34f2c4cd631dddd84957a921a2f Mon Sep 17 00:00:00 2001 From: Jakub Sobolewski Date: Thu, 18 Nov 2021 10:40:11 +0100 Subject: [PATCH 16/71] Add markdown to DESCRIPTION to fix vignette not building error Solution based on discussion in yihui/knitr#1864 --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0f6d6c7..0252037 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,7 +26,8 @@ Suggests: shinydashboard, covr, knitr, - rmarkdown + rmarkdown, + markdown RoxygenNote: 7.1.2 VignetteBuilder: knitr From 501ca70c45a62a517589756e5eebe6177d9b206d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:10:33 +0000 Subject: [PATCH 17/71] Bump minimist from 1.2.5 to 1.2.6 in /tools Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index e0869ba..deaacc2 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -2558,9 +2558,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mixin-deep": { From 86711def5cecf01f836975288d73ece6ca6473a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Apr 2022 12:06:15 +0000 Subject: [PATCH 18/71] Bump copy-props from 2.0.4 to 2.0.5 in /tools Bumps [copy-props](https://github.com/gulpjs/copy-props) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/gulpjs/copy-props/releases) - [Changelog](https://github.com/gulpjs/copy-props/blob/master/CHANGELOG.md) - [Commits](https://github.com/gulpjs/copy-props/compare/2.0.4...2.0.5) --- updated-dependencies: - dependency-name: copy-props dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index deaacc2..65939ec 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -734,13 +734,21 @@ "dev": true }, "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } } }, "core-util-is": { From 6c94a669203257d754b2fdcc30062068b4bc93eb Mon Sep 17 00:00:00 2001 From: Filip Stachura Date: Fri, 22 Apr 2022 19:32:00 +0200 Subject: [PATCH 19/71] Script running examples. --- .gitignore | 2 ++ run_example.sh | 4 ++++ 2 files changed, 6 insertions(+) create mode 100755 run_example.sh diff --git a/.gitignore b/.gitignore index 674991a..e536448 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS_Store + # History files .Rhistory .Rapp.history diff --git a/run_example.sh b/run_example.sh new file mode 100755 index 0000000..e6250f5 --- /dev/null +++ b/run_example.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +cd examples/$1 +R -e 'shiny::runApp()' From a4530ba55ed6d563b2389e1c4cdf78623ca9a9b5 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 4 May 2022 22:07:38 +0200 Subject: [PATCH 20/71] Feature: Include validate_session_object to valide session --- R/utils.R | 15 +++++++++++++++ tests/testthat/test-utils.R | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/R/utils.R b/R/utils.R index ae73d25..e03727f 100644 --- a/R/utils.R +++ b/R/utils.R @@ -23,3 +23,18 @@ interlace_dividers <- function(elements) { random_id_generator <- function(values = 0:9, id_length = 30) { paste0(sample(values, id_length, TRUE), collapse = "") } + +# Check that an object is a ShinySession object, and give an informative error. +# The default label is the caller function's name. +validate_session_object <- function(session, label = as.character(sys.call(sys.parent())[[1]])) { + if (missing(session) || + !inherits(session, c("ShinySession", "MockShinySession", "session_proxy"))) + { + stop(call. = FALSE, + sprintf( + "`session` must be a 'ShinySession' object. Did you forget to pass `session` to `%s()`?", + label + ) + ) + } +} diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index eaf179c..155b03b 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -31,3 +31,7 @@ test_that("test random_id_generator", { expect_true(nchar(random_id_generator(id_length = 3)) == 3) }) +test_that("validate_session_object", { + session <- character(1) + expect_error(validate_session_object(session)) +}) From b949b2e3753288918697f27d9880da2c49c54142 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 4 May 2022 22:09:24 +0200 Subject: [PATCH 21/71] Feature: Add function update_tab_items - Include js script --- R/menu_item.R | 37 +++++++++++++++++++++++++++++++++++++ inst/updateTabItems.js | 6 ++++++ 2 files changed, 43 insertions(+) create mode 100644 inst/updateTabItems.js diff --git a/R/menu_item.R b/R/menu_item.R index 958f041..430ae21 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -107,3 +107,40 @@ sidebar_menu <- function(..., id = "uisidebar") { #' @describeIn sidebar_menu Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) #' @export sidebarMenu <- sidebar_menu + +#' Change the selected tab on the client +#' @param session The session object passed to function given to shinyServer +#' @param tab The name of the tab that should be selected +#' @examples +#' if (interactive()) { +#' ui <- dashboardPage( +#' dashboardSidebar( +#' sidebarMenu( +#' menuItem("Tab 1", tabName = "tab1"), +#' menuItem("Tab 2", tabName = "tab2") +#' ) +#' ), +#' dashboardBody( +#' tabItems( +#' tabItem(tabName = "tab1", h2("Tab 1")), +#' tabItem(tabName = "tab2", h2("Tab 2")) +#' ) +#' ) +#' ) +#' +#' server <- function(input, output, session) { +#' update_tab_items(tab = "tab2") +#' } +#' +#' shinyApp(ui, server) +#' } +#' @export +update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { + validate_session_object(session) + session$sendCustomMessage("update_tab", tab) +} + +#' @describeIn update_tab_items Change the selected item on the client (alias for \code{update_tab_items} for +#' compatibility with \code{shinydashboard}) +#' @export +updateTabItems <- update_tab_items diff --git a/inst/updateTabItems.js b/inst/updateTabItems.js new file mode 100644 index 0000000..6fb382c --- /dev/null +++ b/inst/updateTabItems.js @@ -0,0 +1,6 @@ +/* update_tab_items */ +Shiny.addCustomMessageHandler('update_tab', + function(custom_tab) { + $(`#uisidebar [data-value='${custom_tab}']`).click(); + } +) From e4c197084af55c3023cfb35fafe2959563f27daf Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 4 May 2022 22:09:44 +0200 Subject: [PATCH 22/71] Refactor: Load js dependencies for update_tab_items --- R/deps.R | 3 ++- R/semantic_dashboard.R | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/R/deps.R b/R/deps.R index cd05f37..edf146c 100644 --- a/R/deps.R +++ b/R/deps.R @@ -9,8 +9,9 @@ get_dashboard_dependencies <- function() { "semantic.dashboard", as.character(utils::packageVersion("semantic.dashboard")), c(file = system.file(package = "semantic.dashboard")), - script = "semantic.dashboard.min.js", + script = c("semantic.dashboard.min.js", "updateTabItems.js"), stylesheet = "semantic.dashboard.min.css" ) ) } + diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 78ea5db..b14ebde 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -180,7 +180,8 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv display_type, ifelse(visible, "visible", ""), inverted_value, "menu sidebar", uncover_class, overlay_class, class), ..1[-1], - shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")) + shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), + shiny::tags$script(src = "src/updateTabItems.js") ) } From 4576cd0bb735ac5b3b77639db04c1ada5985e34f Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 4 May 2022 22:10:00 +0200 Subject: [PATCH 23/71] Refactor: Add new functions to NAMESPACE --- NAMESPACE | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index d941fde..cbf1cbf 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -47,6 +47,8 @@ export(tab_item) export(tab_items) export(taskItem) export(task_item) +export(updateTabItems) +export(update_tab_items) export(valueBox) export(valueBoxOutput) export(value_box) From 8972a758b30b4d3066a857c8697c37746434f194 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 4 May 2022 22:11:08 +0200 Subject: [PATCH 24/71] Docs: Add update_tab_items docs --- man/update_tab_items.Rd | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 man/update_tab_items.Rd diff --git a/man/update_tab_items.Rd b/man/update_tab_items.Rd new file mode 100644 index 0000000..c2e5ec9 --- /dev/null +++ b/man/update_tab_items.Rd @@ -0,0 +1,49 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/menu_item.R +\name{update_tab_items} +\alias{update_tab_items} +\alias{updateTabItems} +\title{Change the selected tab on the client} +\usage{ +update_tab_items(session = shiny::getDefaultReactiveDomain(), tab) + +updateTabItems(session = shiny::getDefaultReactiveDomain(), tab) +} +\arguments{ +\item{session}{The session object passed to function given to shinyServer} + +\item{tab}{The name of the tab that should be selected} +} +\description{ +Change the selected tab on the client +} +\section{Functions}{ +\itemize{ +\item \code{updateTabItems}: Change the selected item on the client (alias for \code{update_tab_items} for +compatibility with \code{shinydashboard}) +}} + +\examples{ +if (interactive()) { + ui <- dashboardPage( + dashboardSidebar( + sidebarMenu( + menuItem("Tab 1", tabName = "tab1"), + menuItem("Tab 2", tabName = "tab2") + ) + ), + dashboardBody( + tabItems( + tabItem(tabName = "tab1", h2("Tab 1")), + tabItem(tabName = "tab2", h2("Tab 2")) + ) + ) + ) + + server <- function(input, output, session) { + update_tab_items(tab = "tab2") + } + + shinyApp(ui, server) +} +} From 1dc50d71d33a44529112f4c88d72b746ff0f8e7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 03:28:25 +0000 Subject: [PATCH 25/71] Bump terser from 5.5.1 to 5.14.2 in /tools Bumps [terser](https://github.com/terser/terser) from 5.5.1 to 5.14.2. - [Release notes](https://github.com/terser/terser/releases) - [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md) - [Commits](https://github.com/terser/terser/commits) --- updated-dependencies: - dependency-name: terser dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 100 +++++++++++++++++++++++++++++----------- 1 file changed, 74 insertions(+), 26 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index 65939ec..2c99ba1 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -28,6 +28,55 @@ "js-tokens": "^4.0.0" } }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -3507,24 +3556,6 @@ "urix": "^0.1.0" } }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -3739,21 +3770,38 @@ } }, "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } } } }, From a1f02627f55d276d3c83038ee4b35a0136aceb93 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:08:18 +0200 Subject: [PATCH 26/71] Remove docs from the main branch. --- docs/404.html | 170 -------- docs/CHANGELOG.html | 297 -------------- docs/LICENSE-text.html | 173 -------- docs/articles/imgs/dash1.png | Bin 45128 -> 0 bytes docs/articles/index.html | 169 -------- docs/articles/intro.html | 241 ----------- .../empty-anchor.js | 15 - docs/authors.html | 189 --------- docs/bootstrap-toc.css | 60 --- docs/bootstrap-toc.js | 159 -------- docs/docsearch.css | 148 ------- docs/docsearch.js | 85 ---- docs/index.html | 252 ------------ docs/link.svg | 12 - docs/pkgdown.css | 367 ----------------- docs/pkgdown.js | 108 ----- docs/pkgdown.yml | 7 - docs/pull_request_template.html | 173 -------- docs/reference/box.html | 260 ------------ docs/reference/column.html | 191 --------- docs/reference/dashboard_body.html | 221 ----------- docs/reference/dashboard_header.html | 303 -------------- docs/reference/dashboard_page.html | 273 ------------- docs/reference/dashboard_sidebar.html | 296 -------------- docs/reference/dropdown_menu.html | 237 ----------- docs/reference/dropdown_menu_output.html | 204 ---------- docs/reference/figures/compare.png | Bin 60435 -> 0 bytes docs/reference/figures/hexsticker.png | Bin 28819 -> 0 bytes .../reference/get_dashboard_dependencies.html | 179 --------- docs/reference/icon.html | 190 --------- docs/reference/index.html | 373 ------------------ docs/reference/light_semantic_palette.html | 184 --------- docs/reference/menu_item.html | 223 ----------- docs/reference/menu_item_output.html | 195 --------- docs/reference/message_item.html | 215 ---------- docs/reference/notification_item.html | 212 ---------- docs/reference/render_dropdown_menu.html | 212 ---------- docs/reference/render_menu.html | 203 ---------- docs/reference/render_value_box.html | 220 ----------- docs/reference/semantic.dashboard.html | 175 -------- docs/reference/semantic_palette.html | 184 --------- docs/reference/sidebar_menu.html | 218 ---------- docs/reference/sidebar_menu_output.html | 195 --------- docs/reference/tab_box.html | 282 ------------- docs/reference/tab_item.html | 192 --------- docs/reference/tab_items.html | 210 ---------- docs/reference/task_item.html | 214 ---------- docs/reference/validate_tab_name.html | 184 --------- docs/reference/value_box.html | 232 ----------- docs/reference/value_box_output.html | 215 ---------- 50 files changed, 9317 deletions(-) delete mode 100644 docs/404.html delete mode 100644 docs/CHANGELOG.html delete mode 100644 docs/LICENSE-text.html delete mode 100644 docs/articles/imgs/dash1.png delete mode 100644 docs/articles/index.html delete mode 100644 docs/articles/intro.html delete mode 100644 docs/articles/intro_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/authors.html delete mode 100644 docs/bootstrap-toc.css delete mode 100644 docs/bootstrap-toc.js delete mode 100644 docs/docsearch.css delete mode 100644 docs/docsearch.js delete mode 100644 docs/index.html delete mode 100644 docs/link.svg delete mode 100644 docs/pkgdown.css delete mode 100644 docs/pkgdown.js delete mode 100644 docs/pkgdown.yml delete mode 100644 docs/pull_request_template.html delete mode 100644 docs/reference/box.html delete mode 100644 docs/reference/column.html delete mode 100644 docs/reference/dashboard_body.html delete mode 100644 docs/reference/dashboard_header.html delete mode 100644 docs/reference/dashboard_page.html delete mode 100644 docs/reference/dashboard_sidebar.html delete mode 100644 docs/reference/dropdown_menu.html delete mode 100644 docs/reference/dropdown_menu_output.html delete mode 100644 docs/reference/figures/compare.png delete mode 100644 docs/reference/figures/hexsticker.png delete mode 100644 docs/reference/get_dashboard_dependencies.html delete mode 100644 docs/reference/icon.html delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/light_semantic_palette.html delete mode 100644 docs/reference/menu_item.html delete mode 100644 docs/reference/menu_item_output.html delete mode 100644 docs/reference/message_item.html delete mode 100644 docs/reference/notification_item.html delete mode 100644 docs/reference/render_dropdown_menu.html delete mode 100644 docs/reference/render_menu.html delete mode 100644 docs/reference/render_value_box.html delete mode 100644 docs/reference/semantic.dashboard.html delete mode 100644 docs/reference/semantic_palette.html delete mode 100644 docs/reference/sidebar_menu.html delete mode 100644 docs/reference/sidebar_menu_output.html delete mode 100644 docs/reference/tab_box.html delete mode 100644 docs/reference/tab_item.html delete mode 100644 docs/reference/tab_items.html delete mode 100644 docs/reference/task_item.html delete mode 100644 docs/reference/validate_tab_name.html delete mode 100644 docs/reference/value_box.html delete mode 100644 docs/reference/value_box_output.html diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index 02301dc..0000000 --- a/docs/404.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - -Page not found (404) • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -Content not found. Please use links in the navbar. - -
- - - -
- - - -
- - -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - - - diff --git a/docs/CHANGELOG.html b/docs/CHANGELOG.html deleted file mode 100644 index 0b03632..0000000 --- a/docs/CHANGELOG.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - - -Change Log • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
- -

All notable changes to this project will be documented in this file.

-

The format is based on Keep a Changelog.

-
-

-Unreleased -

-
-

-Added

-
-
-

-Changed

-
-
-

-Fixed

-
-
-

-Removed

-
-
-
-

-[0.2.0] -

-
-

-Added

-
    -
  • -title, titleWidth, left, center, right, show_menu_button and menu_button_label parameters for dashboardHeader -
  • -
  • -overlay and dim_page parameters for dashboardSidebar -
  • -
  • -margin param for dashboardPage -
  • -
  • -fluid param for tabItem -
  • -
  • -class param for dashboardPage, dashboardBody, dashboardSidebar and dashboardHeader -
  • -
  • -dashboardPage, dashboardBody, dashboardSidebar and dashboardHeader have now built-in CSS classes of syntax dashboard-<component> e.g. dashboard-page. Thanks to that it’s easy to write selectors for DOM nodes related to them
  • -
-
-
-

-Changed

-
    -
  • -

    Main content will shrink, not move when sidebar is opened and overlay = FALSE

    -

    Fixed

    -
  • -
  • Issues with layout responsiveness

  • -
  • Issues with sidebar position and overflow

  • -
-
-
-
-

-[0.1.5] - 2020-03-30

-
-

-Added

-
    -
  • option for collapsible icon
  • -
  • themes support
  • -
  • conditionPanel
  • -
  • logo in top panel
  • -
-
-
-

-Changed

-
    -
  • extended sidebar options
  • -
  • width values for semantic classes forces
  • -
  • README
  • -
-
-
-

-Fixed

-
    -
  • collapsible box
  • -
  • dashboard body without left margin
  • -
-
-
-
-

-0.1.0 - 2018-01-02

-
-

-Added

-
    -
  • box
  • -
  • sidebarMenu
  • -
  • dashboardBody
  • -
  • dashboardHeader
  • -
  • dashboardPage
  • -
  • dashboardSidebar
  • -
  • menuItem
  • -
  • renderValueBox
  • -
  • tabItem
  • -
  • tabItems
  • -
  • valueBox
  • -
  • valueBoxOutput
  • -
  • dropdownMenu
  • -
  • dropdownMenuOutput
  • -
  • infoBox
  • -
  • infoBoxOutput
  • -
  • messageItem
  • -
  • notificationItem
  • -
  • renderDropdownMenu
  • -
  • renderInfoBox
  • -
  • tabBox
  • -
  • taskItem
  • -
-
-
-
- -
- - - -
- - - -
- - -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - - - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html deleted file mode 100644 index 02c6e85..0000000 --- a/docs/LICENSE-text.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - -License • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
YEAR: 2016
-COPYRIGHT HOLDER: Appsilon Sp. z o.o.
-
-
- -
- - - -
- - - -
- - -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - - - diff --git a/docs/articles/imgs/dash1.png b/docs/articles/imgs/dash1.png deleted file mode 100644 index fe8cc51a5065ea6381eef379f512bf7bb58975c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45128 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 z 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 - - - - - - - -Articles • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

All tutorials

-

- -
-
Build your first semantic.dashboard
-
-
-
-
-
- - -
- - -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - - - diff --git a/docs/articles/intro.html b/docs/articles/intro.html deleted file mode 100644 index 780838d..0000000 --- a/docs/articles/intro.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -Build your first semantic.dashboard • SHINY.SEMANTIC - - - - - - - - - - -
-
- - - - -
-
- - - - -
-

-What is a dashboard?

-

R Shiny is an excellent tool for interactive data visualizations. However, fitting a large number of graphs onto just one Shiny page may prove to be a challenge. In our experience, virtually all projects with new KPIs being introduced along the way result in inadequate and not readable final reports.

-

Dashboards provide a solution. They allow the developer to intuitively structure their reports by breaking them down into sections, panels and tabs. This makes it much easier for the final user to navigate through the data.

-
-
-

-Why Semantic Dashboard?

-

Semantic Dashboard offers an alternative look of your dashboard based on the Fomantic UI. Historically, we built this package around Semantic UI library, but it got deprecated and now (since December 2019) we base on the well-supported and maintained community fork called Fomantic UI.

-

It relies and uses components from the mother package shiny.semantic.

-
-
-

-Semantic Dashboard

-

Basic dashboard structure is presented below.

-
library(shiny)
-library(semantic.dashboard)
-
-ui <- dashboardPage(
-  dashboardHeader(),
-  dashboardSidebar(),
-  dashboardBody()
-)
-
-server <- shinyServer(function(input, output, session) {
-
-})
-
-shinyApp(ui, server)
-

Each dashboardPage consists of three elements: header, sidebar, and body.

-
-

-Editing header

-

Here is one example of how to make header more interesting:

-
dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE)
-

Now let’s add also a notification on the right:

-
  dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE,
-                  dropdownMenu(type = "notifications",
-                               taskItem("Project progress...", 50.777, color = "red")))
-
-
-

-Editing Sidebar and Body

-

In the sidebar we can define the references to the subpages that will be displayed in the content. For example:

-
  dashboardSidebar(
-    size = "thin", color = "teal",
-    sidebarMenu(
-      menuItem(tabName = "main", "Main"),
-      menuItem(tabName = "extra", "Extra")
-    )
-  )
-

PRACTICE Try to add icons to the menuItem. The content of the app can be defined ike this. Note that we refer to exactly the same tabName as in the sidebar.

-
  dashboardBody(
-    tabItems(
-      selected = 1,
-      tabItem(
-        tabName = "main",
-        box(h1("main"), title = "A b c", width = 16, color = "orange")
-      ),
-      tabItem(
-        tabName = "extra",
-          h1("extra")
-      )
-    )
-  )
-

Note that we used box here with color set to orange. The list of all Fomantic color you may find here: semantic_palette.

-
-
-
-

-Full code

-

The effect and complete code for this example is presented below.

-

dashboard

-
library(shiny)
-library(semantic.dashboard)
-
-ui <- dashboardPage(
-  dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE,
-                  dropdownMenu(type = "notifications",
-                               taskItem("Project progress...", 50.777, color = "red"))),
-  dashboardSidebar(
-    size = "thin", color = "teal",
-    sidebarMenu(
-      menuItem(tabName = "main", "Main"),
-      menuItem(tabName = "extra", "Extra")
-    )
-  ),
-  dashboardBody(
-    tabItems(
-      selected = 1,
-      tabItem(
-        tabName = "main",
-        box(h1("main"), title = "A b c", width = 16, color = "orange")
-      ),
-      tabItem(
-        tabName = "extra",
-          h1("extra")
-      )
-    )
-  )
-)
-
-server <- function(input, output, session) {}
-
-shinyApp(ui, server)
-
-
- - - -
- - - -
- -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - diff --git a/docs/articles/intro_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/intro_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd..0000000 --- a/docs/articles/intro_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/authors.html b/docs/authors.html deleted file mode 100644 index 75a563d..0000000 --- a/docs/authors.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -Authors • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
    -
  • -

    Filip Stachura. Author. -

    -
  • -
  • -

    Dominik Krzeminski. Maintainer. -

    -
  • -
  • -

    Krystian Igras. Author. -

    -
  • -
  • -

    Michał Maj. Contributor. -

    -
  • -
  • -

    Michał Drzazga. Contributor. -

    -
  • -
  • -

    Appsilon. Copyright holder. -

    -
  • -
- -
- -
- - - -
- - -
-

Site built with pkgdown 1.5.1.

-
- -
-
- - - - - - - - diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a85941..0000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573..0000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1..0000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504c..0000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 8cd1023..0000000 --- a/docs/index.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - -Dashboard with Fomantic UI Support for Shiny • SHINY.SEMANTIC - - - - - - - - - - -
    -
    - - - - -
    -
    - - -

    -
    - -

    R-CMD-checkcodecov cranlogs total

    -

    Dashboard with Semantic UI Support for Shiny.

    -

    Are you fed up with ordinary shinydashboard look?

    -

    Give your app a new fresh look with Fomantic UI support.

    -
    library(shiny)
    -library(shinydashboard) # <-- Change this line to: library(semantic.dashboard)
    -
    -ui <- dashboardPage(
    -  dashboardHeader(title = "Basic dashboard"),
    -  dashboardSidebar(sidebarMenu(
    -      menuItem(tabName = "home", text = "Home", icon = icon("home")),
    -      menuItem(tabName = "another", text = "Another Tab", icon = icon("heart"))
    -  )),
    -  dashboardBody(
    -    fluidRow(
    -      box(plotOutput("plot1", height = 250)),
    -      box(
    -        title = "Controls",
    -        sliderInput("slider", "Number of observations:", 1, 100, 50)
    -      )
    -    )
    -  )
    -)
    -
    -server <- function(input, output) {
    -  set.seed(122)
    -  histdata <- rnorm(500)
    -  output$plot1 <- renderPlot({
    -    data <- histdata[seq_len(input$slider)]
    -    hist(data)
    -  })
    -}
    -
    -shinyApp(ui, server)
    -

    Semantic dashboards comparison

    -

    semantic.dashboard offers basic functions for creating dashboard with Fomantic UI.

    -
    -

    -How to install?

    -

    Install shiny.semantic library first. Here you can find how.

    -

    You can install a stable version semantic.dashboard from CRAN repository:

    -
    install.packages("semantic.dashboard")
    -

    The development version can be installed from GitHub using remotes.

    -
    remotes::install_github("Appsilon/semantic.dashboard")
    -

    To install previous version you can run:

    -
    remotes::install_github("Appsilon/semantic.dashboard", ref = "0.1.0")
    -
    -
    -

    -Example

    -

    You can find examples in the examples/ folder of the GitHub repository.

    -

    You can check documentation for tutorials.

    -
    -
    -

    -How to contribute?

    -

    If you want to contribute to this project please submit a regular PR, once you’re done with new feature or bug fix. Please check development/README.md first! It contains useful information that will help you run your dev environment for semantic.dashboard.

    -
    -
    -

    -Changes in documentation

    -

    Both repository README.md file and an official documentation page are generated with Rmarkdown, so if there is a need to update them, please modify accordingly a README.Rmd file and use “Knit”.

    -

    Documentation is rendered with pkgdown. Just run pkgdown::build_site() after rendering new README.md.

    -
    -
    -

    -Troubleshooting

    -

    We used the latest versions of dependencies for this library, so please update your R environment before installation.

    -

    However, if you encounter any problems, try the following:

    -
      -
    1. Up-to-date R language environment
    2. -
    3. Installing specific dependent libraries versions -
        -
      • shiny.semantic
      • -
      -
    4. -
    -
    -
    -

    -Future enhacements

    -
      -
    • Release of a stable 1.0.0 version
    • -
    • Closer integration with shinydashboard
    • -
    -
    -
    -

    -Appsilon

    -

    -

    Appsilon is the Full Service Certified RStudio Partner. Learn more at appsilon.com.

    -

    Get in touch dev@appsilon.com

    -
    -
    - -
    - - -
    - - -
    - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 88ad827..0000000 --- a/docs/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index c01e592..0000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,367 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -img { - max-width: 100%; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - margin-left: -30px; - display:inline-block; - width: 30px; - height: 30px; - visibility: hidden; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -.hasAnchor:hover a.anchor { - visibility: visible; -} - -@media (max-width: 767px) { - .hasAnchor:hover a.anchor { - visibility: hidden; - } -} - - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top;} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top;} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre { - word-wrap: normal; - word-break: normal; - border: 1px solid #eee; -} - -pre, code { - background-color: #f8f8f8; - color: #333; -} - -pre code { - overflow: auto; - word-wrap: normal; - white-space: pre; -} - -pre .img { - margin: 5px 0; -} - -pre .img img { - background-color: #fff; - display: block; - height: auto; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.message { color: black; font-weight: bolder;} -.error { color: orange; font-weight: bolder;} -.warning { color: #6A0366; font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 7e7048f..0000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,108 +0,0 @@ -/* http://gregfranko.com/blog/jquery-best-practices/ */ -(function($) { - $(function() { - - $('.navbar-fixed-top').headroom(); - - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); - }); - - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); - } - - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } - - return(haystack.length); - } - - /* Clipboard --------------------------*/ - - function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); - $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); - } - - if(ClipboardJS.isSupported()) { - $(document).ready(function() { - var copyButton = ""; - - $(".examples, div.sourceCode").addClass("hasCopyButton"); - - // Insert copy buttons: - $(copyButton).prependTo(".hasCopyButton"); - - // Initialize tooltips: - $('.btn-copy-ex').tooltip({container: 'body'}); - - // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { - text: function(trigger) { - return trigger.parentNode.textContent; - } - }); - - clipboardBtnCopies.on('success', function(e) { - changeTooltipMessage(e.trigger, 'Copied!'); - e.clearSelection(); - }); - - clipboardBtnCopies.on('error', function() { - changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); - }); - }); - } -})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml deleted file mode 100644 index 3e5dae0..0000000 --- a/docs/pkgdown.yml +++ /dev/null @@ -1,7 +0,0 @@ -pandoc: 2.7.3 -pkgdown: 1.5.1 -pkgdown_sha: ~ -articles: - intro: intro.html -last_built: 2021-01-15T12:33Z - diff --git a/docs/pull_request_template.html b/docs/pull_request_template.html deleted file mode 100644 index 70524f4..0000000 --- a/docs/pull_request_template.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - -Title • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    - -

    Short description (with a reference to an issue).

    -
    - -
    - - - -
    - - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/box.html b/docs/reference/box.html deleted file mode 100644 index 2199ef4..0000000 --- a/docs/reference/box.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - -Create a box. — box • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a box with additional UI elements.

    -
    - -
    box(
    -  ...,
    -  title = NULL,
    -  color = "",
    -  ribbon = TRUE,
    -  title_side = "top right",
    -  collapsible = TRUE,
    -  width = 8,
    -  id = NULL,
    -  collapse_icon = "minus",
    -  expand_icon = "plus"
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ...

    UI elements to include within the box.

    title

    Label of the box.

    color

    Color of the box. One of c("", "red", "orange", "yellow", -"olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")

    ribbon

    Should label be presented as ribbon.

    title_side

    Side of a label. One of c("top", "bottom", "top left", -"top right", "bottom left", "bottom right") if ribbon = FALSE, or one of -c("top left", "top right") if ribbon = TRUE

    collapsible

    Should minimize button be added to label.

    width

    Width of the box.

    id

    ID of the box.

    collapse_icon

    Icon class to be used for collapsing (when collapsible = TRUE).

    expand_icon

    Icon class to be used for expanding (when collapsible = TRUE).

    - -

    Value

    - -

    A box that can be passed to dashboardBody

    - -

    Examples

    -
    box(title = "Sample box", color = "blue", width = 11, - "This is a box content" -)
    #> <div class="eleven wide column"> -#> <div class="ui segment raised blue"> -#> <div id="box_645358447164415312856458594103" class="ui accordion"> -#> <div class="title" style="cursor: auto"> -#> <div class="ui top right ribbon label blue"> -#> <i class="minus icon" style="cursor: pointer;"></i> -#> Sample box -#> </div> -#> </div> -#> <div class="content active"> -#> <div>This is a box content</div> -#> </div> -#> </div> -#> </div> -#> <script>$(document).ready(function() { $('#box_645358447164415312856458594103').accordion({ -#> selector: { trigger: '.title .icon' }, -#> onOpening: function() { $('#box_645358447164415312856458594103').find('.label .icon').removeClass('plus').addClass('minus'); }, -#> onClosing: function() { $('#box_645358447164415312856458594103').find('.label .icon').removeClass('minus').addClass('plus'); } -#> }); })</script> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/column.html b/docs/reference/column.html deleted file mode 100644 index ad93c0f..0000000 --- a/docs/reference/column.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - -Create a column. — column • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a column with additional UI elements.

    -
    - -
    column(width, ...)
    - -

    Arguments

    - - - - - - - - - - -
    width

    Width of the column. Between 1 and 16.

    ...

    UI elements to include within the column.

    - -

    Value

    - -

    A column that can be passed to dashboardPage

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dashboard_body.html b/docs/reference/dashboard_body.html deleted file mode 100644 index fd990c5..0000000 --- a/docs/reference/dashboard_body.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - -Create a body of a dashboard. — dashboard_body • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a body of a dashboard with tabs and other additional UI elements.

    -
    - -
    dashboard_body(..., class = "")
    -
    -dashboardBody(..., class = "")
    - -

    Arguments

    - - - - - - - - - - -
    ...

    UI elements to include within the body.

    class

    CSS class to be applied to the container of dashboardBody. Note it's not the <body> tag.

    - -

    Value

    - -

    A tab that can be passed to dashboardPage

    -

    Functions

    - - -
      -
    • dashboardBody: Create a body of a dashboard (alias for dashboard_body for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if(interactive()){ - - library(shiny) - library(semantic.dashboard) - - ui <- dashboardPage( - dashboardHeader(color = "blue"), - dashboardSidebar(side = "left", size = "thin", color = "teal", - sidebarMenu( - menuItem(tabName = "tab1", "Tab 1"), - menuItem(tabName = "tab2", "Tab 2"))), - dashboardBody(tabItems( - tabItem(tabName = "tab1", p("Tab 1")), - tabItem(tabName = "tab2", p("Tab 2")))) - ) - - server <- function(input, output) { - } - - shinyApp(ui, server) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dashboard_header.html b/docs/reference/dashboard_header.html deleted file mode 100644 index 0038d7e..0000000 --- a/docs/reference/dashboard_header.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - -Create a header of a dashboard. — dashboard_header • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a header of a dashboard with other additional UI elements. - Hint: use shiny::tagList() if you want to add multiple elements in left / center or right.

    -
    - -
    dashboard_header(
    -  ...,
    -  left = NULL,
    -  center = NULL,
    -  right = NULL,
    -  title = NULL,
    -  titleWidth = "thin",
    -  logo_align = "center",
    -  logo_path = "",
    -  color = "",
    -  inverted = FALSE,
    -  disable = FALSE,
    -  show_menu_button = TRUE,
    -  menu_button_label = "Menu",
    -  class = ""
    -)
    -
    -dashboardHeader(
    -  ...,
    -  left = NULL,
    -  center = NULL,
    -  right = NULL,
    -  title = NULL,
    -  titleWidth = "thin",
    -  logo_align = "center",
    -  logo_path = "",
    -  color = "",
    -  inverted = FALSE,
    -  disable = FALSE,
    -  show_menu_button = TRUE,
    -  menu_button_label = "Menu",
    -  class = ""
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ...

    UI elements to include within the header. They will be displayed on the right side.

    left

    UI element to put on the left of the header. It will be placed after (to the right) the title and menu button (if they exist).

    center

    UI element to put in the center of the header.

    right

    UI element to put to the right of the header. It will be placed before elements defined in ... (if there are any).

    title

    Dashboard title to be displayed in the upper left corner. If NULL, will not display any title field. Use "" for an empty title.

    titleWidth

    Title field width, one of c(NULL, "very thin", "thin", "wide", "very wide")

    logo_align

    Where should logo be placed. One of c("left", "center")

    logo_path

    Path or URL of the logo to be shown in the header.

    color

    Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -One of c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")

    inverted

    If FALSE sidebar will be white and text will be colored. \ -If TRUE text will be white and background will be colored. Default is FALSE.

    disable

    If TRUE, don't display the header.

    show_menu_button

    If FALSE, don't display the menu button. Default is TRUE.

    menu_button_label

    Text of the menu button. Default is "Menu".

    class

    CSS class to be applied to the container of dashboardHeader.

    - -

    Value

    - -

    A header that can be passed to dashboardPage

    -

    Functions

    - - -
      -
    • dashboardHeader: Create a header of a dashboard (alias for dashboard_header for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if(interactive()) { - - library(shiny) - library(semantic.dashboard) - - ui <- dashboardPage( - dashboardHeader(color = "blue", inverted = TRUE), - dashboardSidebar(side = "left", size = "thin", color = "teal", - sidebarMenu( - menuItem(tabName = "tab1", "Tab 1"), - menuItem(tabName = "tab2", "Tab 2"))), - dashboardBody(tabItems( - tabItem(tabName = "tab1", p("Tab 1")), - tabItem(tabName = "tab2", p("Tab 2")))) - ) - - server <- function(input, output) { - } - - shinyApp(ui, server) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dashboard_page.html b/docs/reference/dashboard_page.html deleted file mode 100644 index 45bcd2c..0000000 --- a/docs/reference/dashboard_page.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - -Create a dashboard. — dashboard_page • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a page with menu item sidebar and body containing tabs and other additional elements.

    -
    - -
    dashboard_page(
    -  header,
    -  sidebar,
    -  body,
    -  title = "",
    -  suppress_bootstrap = TRUE,
    -  theme = NULL,
    -  margin = TRUE,
    -  class = "",
    -  sidebar_and_body_container_class = ""
    -)
    -
    -dashboardPage(
    -  header,
    -  sidebar,
    -  body,
    -  title = "",
    -  suppress_bootstrap = TRUE,
    -  theme = NULL,
    -  margin = TRUE,
    -  class = "",
    -  sidebar_and_body_container_class = ""
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    header

    Header of a dashboard.

    sidebar

    Sidebar of a dashboard.

    body

    Body of a dashboard.

    title

    Title of a dashboard.

    suppress_bootstrap

    There are some conflicts in CSS styles between -FomanticUI and Bootstrap. For the time being it's better to suppress Bootstrap. -If TRUE bootstrap dependency from shiny will be disabled.

    theme

    Theme name or path. For possible options see semanticPage.

    margin

    If TRUE, margin to be applied to the whole dashboard. -Defaults to TRUE.

    class

    CSS class to be applied to the page container (<body> tag).

    sidebar_and_body_container_class

    CSS class to be applied to the div containing -dashboardSidebar and dashboardBody.

    - -

    Value

    - -

    Dashboard.

    -

    Functions

    - - -
      -
    • dashboardPage: Create a dashboard (alias for dashboard_page for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if(interactive()){ - - library(shiny) - library(semantic.dashboard) - - ui <- dashboardPage( - dashboardHeader(color = "blue"), - dashboardSidebar(side = "left", size = "thin", color = "teal", - sidebarMenu( - menuItem(tabName = "tab1", "Tab 1"), - menuItem(tabName = "tab2", "Tab 2"))), - dashboardBody(tabItems( - tabItem(tabName = "tab1", p("Tab 1")), - tabItem(tabName = "tab2", p("Tab 2")))) - ) - - server <- function(input, output) { - } - - shinyApp(ui, server) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dashboard_sidebar.html b/docs/reference/dashboard_sidebar.html deleted file mode 100644 index 8952e8a..0000000 --- a/docs/reference/dashboard_sidebar.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - -Create a sidebar of a dashboard. — dashboard_sidebar • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a pushable sidebar of a dashboard with menu items and other additional UI elements.

    -
    - -
    dashboard_sidebar(
    -  ...,
    -  side = "left",
    -  size = "thin",
    -  color = "",
    -  inverted = FALSE,
    -  closable = FALSE,
    -  pushable = TRUE,
    -  center = FALSE,
    -  visible = TRUE,
    -  disable = FALSE,
    -  overlay = FALSE,
    -  dim_page = FALSE,
    -  class = ""
    -)
    -
    -dashboardSidebar(
    -  ...,
    -  side = "left",
    -  size = "thin",
    -  color = "",
    -  inverted = FALSE,
    -  closable = FALSE,
    -  pushable = TRUE,
    -  center = FALSE,
    -  visible = TRUE,
    -  disable = FALSE,
    -  overlay = FALSE,
    -  dim_page = FALSE,
    -  class = ""
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ...

    UI elements to include within the sidebar.

    side

    Placement of the sidebar. One of c("left", "right", "top", "bottom")

    size

    Size of the sidebar. One of c("", "thin", "very thin", "wide", "very wide")

    color

    Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -One of c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")

    inverted

    If FALSE sidebar will be white and text will be colored. \ -If TRUE text will be white and background will be colored. Default is FALSE.

    closable

    If TRUE allow close sidebar by clicking in the body. Default to FALSE

    pushable

    If TRUE the menu button is active. Default to TRUE

    center

    Should label and icon be centerd on menu items. Default to FALSE

    visible

    Should sidebar be visible on start. Default to TRUE

    disable

    If TRUE, don't display the sidebar.

    overlay

    If TRUE, opened sidebar will cover the tab content. Otherwise it is displayed next to the content. -Relevant only for sidebar positioned on left or right. Default to FALSE

    dim_page

    If TRUE, page content will be darkened when sidebr is open. Default to FALSE

    class

    CSS class to be applied to the container of dashboardSidebar.

    - -

    Value

    - -

    A sidebar that can be passed to dashboardPage

    -

    Functions

    - - -
      -
    • dashboardSidebar: Create a sidebar of a dashboard (alias for dashboard_sidebar for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if(interactive()){ - - library(shiny) - library(semantic.dashboard) - - ui <- dashboardPage( - dashboardHeader(color = "blue"), - dashboardSidebar(side = "left", size = "thin", color = "teal", - sidebarMenu( - menuItem(tabName = "tab1", "Tab 1"), - menuItem(tabName = "tab2", "Tab 2"))), - dashboardBody(tabItems( - tabItem(tabName = "tab1", p("Tab 1")), - tabItem(tabName = "tab2", p("Tab 2")))) - ) - - server <- function(input, output) { - } - - shinyApp(ui, server) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dropdown_menu.html b/docs/reference/dropdown_menu.html deleted file mode 100644 index 8dbf291..0000000 --- a/docs/reference/dropdown_menu.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - - -Create a dropdown menu. — dropdown_menu • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a dropdown menu with additional UI elements.

    -
    - -
    dropdown_menu(..., type = "messages", icon = NULL, show_counter = TRUE)
    -
    -dropdownMenu(..., type = "messages", icon = NULL, show_counter = TRUE)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - -
    ...

    UI elements to include within the dropdown menu.

    type

    Type of the displayed items.

    icon

    Icon of the dropdown menu. If not specyfied created based on type agrument.

    show_counter

    If true circular label with counter is going to be shown for dropdown.

    - -

    Value

    - -

    A dropdown menu that can be passed to dashboardHeader

    -

    Functions

    - - -
      -
    • dropdownMenu: Create a dropdown menu (alias for dropdown_menu for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    dropdownMenu(icon = icon("warning sign"), taskItem("Project progress...", 50.777, color = "red"))
    #> <button class="ui icon top right inline item dropdown button" style="margin-right: 0"> -#> <i class="warning sign icon"></i> -#> <div class="ui circular mini label" style="">1</div> -#> <div class="menu"> -#> <div class="item" style="min-width: 200px;"> -#> <div class="ui active progress red" data-percent="50.777" data-total="100"> -#> <div class="bar"> -#> <div class="progress"></div> -#> </div> -#> <div class="label">Project progress...</div> -#> </div> -#> </div> -#> </div> -#> <script>$('.ui.dropdown').dropdown();</script> -#> <script>$('.progress').progress();</script> -#> </button>
    dropdownMenu(type = "notifications", notificationItem("This is notification!", color = "red"))
    #> <button class="ui icon top right inline item dropdown button" style="margin-right: 0"> -#> <i class="warning sign icon"></i> -#> <div class="ui circular mini label" style="">1</div> -#> <div class="menu"> -#> <div class="item"> -#> <div class="ui label red"> -#> <i class="small warning icon"></i> -#> This is notification! -#> </div> -#> </div> -#> </div> -#> <script>$('.ui.dropdown').dropdown();</script> -#> <script>$('.progress').progress();</script> -#> </button>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/dropdown_menu_output.html b/docs/reference/dropdown_menu_output.html deleted file mode 100644 index ec688eb..0000000 --- a/docs/reference/dropdown_menu_output.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - -Create a dropdown menu output. — dropdown_menu_output • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    UI-side function for dynamic dropdownMenu.

    -
    - -
    dropdown_menu_output(outputId)
    -
    -dropdownMenuOutput(outputId)
    - -

    Arguments

    - - - - - - -
    outputId

    Id of the output.

    - -

    Value

    - -

    A dropdown menu that can be passed to dashboardHeader

    -

    Functions

    - - -
      -
    • dropdownMenuOutput: Create a dropdown menu output (alias for dropdown_menu_output for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if (FALSE) { -dropdownMenuOutput("dropdown") - -output$dropdown <- renderDropdownMenu({ - dropdownMenu(messageItem("Michał", "Test message", color = "teal"), - messageItem("Marek", "Another test!", icon = "warning", color = "red")) -}) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/figures/compare.png b/docs/reference/figures/compare.png deleted file mode 100644 index f0b33554ed84751d294af4b0d091c88c30412d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60435 zcmagE19WE15;hv!nb@9K6MJH3Cbn(cwkEc1+sPZ-wr$^hIA`7UpY`9{YrWZ>uI|0N ztE-->uIf-Z8Bur`Y#1OQAb4>xq2EA2pvhmqA5aiqEgR^O-+_SeM%@%t9DeIM6WZ8W z8<|=d5<0lr7!n$~m>K~AxvVs#n>yig#g%{Rqji9d_1Q6G&T_eoUQQy3Q%=yD zeU4M7z0}0}cuuc^wN}>pj8x8R5`B1HZ6^o`R8Dk!4KNgtsrgPxEUkyCE zr@iKZFn)r{X?N=lcw=afmNnm`I0_d3crxG_Tr5xebM`{+-<^3WKrKp?& zmpvMUYl;Bl!G@RCL6db*F`)s{3K%sy-dmATgp~ zKTEYEOlm*fl;rX!Ia#8CKfh(j6yw!SIQEj|Ct3`AHRyBt<0R+`=4K?Sat2e)Dhn1? z%&a@X85kPYB+4opHad>Ei)WP%UnXL=MKNvjV@0tX>!&F$n0KX^Cz(zy>gcEevZL54Z6Oj zX{AQn*`0=z?w0F)8s+v(Bbch762$Y&n5o{LWZsJ zPWCes2~=pyV+wHJCE8nc&UtO}YS3zf7dg^e>gMy0>`mG55-b%cc7r@35rRqHjpjO- zx@pr4av5=+O#krZ(&Z~|r8A#;yvwscc7)IuTQMrRK`8)YtVb3pvMA`7?Tw|jq$9J; zY(*|;CkBXk7Fp_5NUz=PE4(8GjSNPgK*|cNbvh&0wQt5{?kGQO2LLf6xH!i2mQ5+6 zsrv!e`qf33{vAhND3W!il`X-PEiK6&{a8?lOxRtrDkKbxQu9*NdTZ;m#o&a=uA@BH zYI-L0WnaAf$81PKM2(i#C?|LF4YY6;>a}_!pem_*xXI%?=nLh31J9%wzqp z${eRUNxNG$4csoNd+GTeK|0Hq&>hzL#r*W2g&6s06#DgsbU_$hCq7n5cG?BA5<%w z4Dad}$2N#}+Ekolx6~l4W@yRcJhg#=z%l%BgvR)HPa0kP!i0b!Fwk?i!eAVSJ8epb z_=qEMR+|Ee)lQw1#%oxncUDl2>FSjWOEecU8}B2-9C`z6M`kAQ+}jaA8a*Keb3nV! zPAO6~e^J_UN};kCEc-KcbC<_El;x z*;SaRA`}CA3yhGCE)Q_wM@wjNHfg0w9fSwEDpGv0&>X~KlRRyZdI#s#eqq@>k1l>= zNTf(4#Byh_P6x@1nj#DMlD(D1pzpK3X^Q~9!N&+0{aHhb58Wjo5HM)j4yO&riEWrh&j12q-Jtegx4A|aD0SR`fPM}yfK9m zlDtJI4}`$y(v5X3>ULCAwz4K82%!pd8VJQCcg)A3W1KGEGz!MflZ*VJGK3L{Y=6>o z`u+H6nQk7Zf`mH{!IbDc8)$&;c4`CJl5+Y>kTpko>o@6|8WBiM49K(7j7< z#grFE2|{4v#VzVm1$vE2MEp{e5dS=E6u!?grwM@<(L7o2W}0yk{7N`IS16$~ zbmQN#`iOs+HOgk3xdd&A{Mfxx*KVR3gx!=2ztQLi9c6Qll2I})I>OkYJr8<3&n+hF zC|`yAB;D@K=32?kLA$Zb`&@64$1!Nsb){hPmrR6GY9@DU= zB##DJk08;7UYuC6f3QXI!yBdb$S~%_*k*Lu4lBNoOf;06AR~3>r%M6?|DiQT-9zbm zP=V^_6XI;k^otv9AeR#zeU3_(2oZjrvgO;cM%@WvW84Wf2xN1lVhzcBqr{H z9kgOki?uDWW;M0WGPsUDmF5C?A=-$j6)KiT^ivWS1cCA|q5a-iQ& zrDg<}03U3A(H2%D`~hN8PDH7;2PvenzzgV?5nL84YP#Obl*Nh93%!x6XDyvnxsE${n;x_L)V% z;%Hll9Pw0*A`~vTCzyI9{cB103)~0km4WmXL+%1`8)(m+3 z=4j>|ZdY3xD%)(nnZ#^1;ma{ba-Sn}i>D|S|1_3~1kB0xAjVN~B$zPc9+Uv|B?$?u z5(0f$8G><7wTIWjlryH@1sPuw9=iF5jL?)RJ8+bJ1|#^Q_NW;;qPY*juiyD6rd0&WINF&~bhjd=mkE-#_Cxga1*7V`X} zrC~Dqg|%!CvdE9p$1g^hY$&GgkN2#yqq{Ut#K|PBd=C`j3)IY%Q*r&h9^wadA49W@ zhk;)aJEW{ncf`*0388uu6ZtQwW<=6}h51G+>$-|SYOX2?u;*ZCs=I=%G-xH=$+c|a z-jxEkqw5H#Ez#Ud_*+aaye?4~% zPXKJg#tH@xNtNb)=gTksVW?K027RlE2vXVzMLtKy`dgQD$#b;fA}#(;R|U?EW{A|X z800sD9~-1m zSNX_dUIyPxppNs-D-r@3%QUmkut?qVakM6d96ee3{NT78NxZEIu%&cM%ovK2U zJvu)VA4Dfm7*pv$9PL1u7?{O}riRG&0&M1Bgj}*aL@WohqZMI|N?00)E+~PjlJn-HH%@Ztg8+$U;$u@Uppxa&Pc!I;ivU=)@dI%BBbfB^j!%z#d;C ztua1r0-s;v_%wf|@km!P^37Q z07Jpvh`CTS$^z(4z|L#kAAzKGObN$r8x`z+^fLIv(G*;dN`E$u_SQ&wNM0vIxls_ly6l(TZmrDT zQxQlUT`@B;AjQ83kMQW!E2T)k>k>mJ_#2J(UMxrjWvTaDqcWJ^P-k_h)bA9XWQ#c- z4)_*qMO0@AmQ|X${-7=YOq(vl@UDAcyCx5j*HtH?c6HZ;JVHf$BXD~43SLT{l4O0} z4%&w1lre6KAy zu@~rA?o}27abvjfdrxG1@4=Un<+Z(vIw6S1H$3g06qP|vkh(fNvmP_=Ki(sd65Dv= z#TS~9st+et9|_cd&0p5}wl~~4pWCEucR~kq@~$2TV9W0O90Y;;ZrhOj7PjH%jU41m zcij)mOojKtw(TO2)}Jp7;M$w{$+Vd0cd`|ub}PQ(S91ixh@8*N9N@=K_J$B9Ls?O5 z0~szeMF^TkN|9YPZOS;=iN{0niCj#l4uncRBPmkb$G~(B$yDAYo|NMvY9!MCj8Mjt z7lZC2URF>5l(S+O`b$r%AE*T57YJ4;4lYHk;9btBXy7+Hwy9EDiuFB0Ml2#kER<1P zyQ11(4`ADKjC1UBr|gR04QN6*?3~V9N@A^e8Gl?D@L^yL(Vv=Xrp_3wrgKAcEtT8} zHH1%rIgm@}#{KR5I@s`MS?za>{c)r~=`7CcvjyhcBrJUNXz_2Hfke6#wQ%6Li)}=* z#6WT@wsC{8_|wbIoJZ01V+St3DdR`eE5K95f*Yf7){L zfU+#e`G*1PcoD39>~BD+$`(Q9wkCR}sbuWk77(Q!-=|7^njhPk#Wi1%n*_j2m@}%t z7xG7O{DB>b_)CZc4@HVEW2 znu6c^Y8G+ZBx%UVN@Zn|H#47yP!Be(pWgzWqwzn7p=ZyR#%A%AKb$J;#}GL~9UfhT zz4-+3`wsGpNpfQqG(UDRfK?lLeRr z$3v*sIE0B*^S&H^k(9a1uNE!*&|2n)xMUz0{z2bOqM;ZTAsK&6OqV0gRJ5+q%$Ts1 zct^b;#D2*RprLFL#RQd=@w_<2efNOCkUfyvA{@Jcr+uc}1TEhA;8EU~4jwHpOkOTX z&eX+Uc)ME^i{4!FpG)n}?eE^EA67#lL09#NA*7ZV!7{YAsnd0=4az+j>41`NWc?ki z)GN8H57Mi6UAjs@-bNi|<=T^o^7qfAO{1^gt#?``UMxM(w}pB=aK}09#~e}2h1!Bhj>75JmwVDQ;0bC?NrIOcrkNoDlery(4LinlNNNPQ zmX@&2Ybt9Il@R0B4^$C^;>%&WW7!@C2mi1fI|IW4gWcJH6ba1s@<-Q%q<1)C>sxR>ltZp=@d3~C8#gX<>>urL!`H*S}Bx3V47-Kj4JL1s&Bo{F_uft zQ%cy7a}GHI!>I0*oE0swxE66JLcBKdW(OFrX`z1bQm%NTy$Z#5U$X-nA7`a&S9I=RiL`O{gEgn~|{gU|cYyXFu#)#=*@!*fg z?_kGPumC)JRsRbgmI73;L!GQrwPP}*fG3cMc%cg|%%yCGJ`W!e^-V^hS^94+ zPgj1yZq7|06ng~8(#`pxr4niAE1l9|yw-Qqwb6;_xiM+U-uNm|yd5Xm_c+CJKF%5F zm%VbLUEw9UyEJeWnCHkNrF^C>^k8K2rv-ewOH>ezZHZDoU{*^#991wGZ&;9q7dHEm zj3D)e%6Ic)YgAOnf7UN*eOS#maXr>baZIa56kGXn(2qFAchw_;UAcNK5SRCe^*Dts z7nFvj?mSR*@J7y?8!OZ^pjdl;+V=dZbBgTqyZPNwgEPc;6X#^8+MMM1utAh#f+MudPUy$BBDli?lj>Cp01{T47MFaoB-tmkRdLP^^GPCk`FzOVMhp44ZH-&FCU|ox5 zqY4GaC4}cX2?#%&UCM?gLyC*n`$HU)FSIlcY<-p2%LH*qVIBsy|!PQ(yuOJre$Lz7fa5bRB(bZWWEE}IBZ*G$k~0`}BBeZstibBaK7N#-7@3 z=j?Ylz3=Mb(xLKnhkKVaG-ZBP3tV76skRZvBCjITmRpVPD3MD2H}JpaE82c^_nq(q zkn8OiT8(qg{3Wr!^F%&iD%j;xqxb@7aToC`C`l{KjtkgOKDmokX~3Y}EKjF5Hu!VH zN4JvHtG+X~3d4}=??Y8!HwJGIq4mo^IF4=@l*{vjhWJ!Vs58cYb4QyNA7o-%`r$x( z8)3{i1=)LMtnmz@I3`l8EVt$@2F6w$i>ymk=7K4+*F|6iHETDBkbkWV?;}9iuKpEE~ z+6Mj2Qie;nHBkTCSw@3W1mcD!wl0N{hcyF^Mx5IW-C}S^5GdY>o49?Pi)dirPP6ikB{8l_$hpLMX%?kqU6-C z*Mhs9JuH`aEv}i-gkP{-&3XY9hA63ibf(8k$CkVdLFM`P`Vr+@D7upb^LNId*wE5@ zUJSzE4@uJvA&NC+cjT@YD1Kr~N*uNd_H`2lG%KRbt0dfbi#h*{*fygg92tK8aNS%-X*w+HH(6x~}p z$noQ2{pRkU^r`6)irD4wS8$99M>bdbMA!8^-Y7Kd&YLh7<}QfaiSr2R zYfhB`iOACV}Z>NLA)7Fdf z5XH{0RPbieqvW#Y@duhNGm?F7Vyzrb5Q>-{&FY4isQJ259on5d5FEmv?+dRaGVNeP zrEZdrp4@M)H@6zE@52XK`0uA%o#M>)4XTJ)8c<4;m7hg{iu)pNj|Us@SbxOkCcrw> z-(iezkr%Z+3Q2c>z_r}e>DI~kSGBk@90uR)B#z4^tTK#c#n3Y{g*UR%sj~^l%nt2= zSR5zQ9$`OR9x*7!y}eGODaHvVIs=7VA75ens-KNMAa95H_p|I~{eXag155=4<-`RA z|C84JO6I0}#`1{u$$blyl^2dJ^#>QmWm2Gk{Vj~!03%$CWEQA|C#CfQDUBWX4MVi2 zVQXtrZ@yGXde;s8k&%IgoVIxB@Yq zQEi#tA~ncSo;4Clvfitb83PXBCLV~=YV z`&d}5gog~b)eLYbK})5}+hEI9Z8vkD5hsf*E;%}^WqCa#bt?AtH(Q~3hY<`W{Ic{W zcJqBI^UU~7hCj2)i7hhbV9+#r&?rLRi*o~*EQF4$;`NAxUu_9Kt51^v1u?ZjY?ij2V{Xe{D<;Qc7;CyA z8sV>QkPhO~!jSvG2nduE?F_D8*?K}CaUlT(mzA@1R~5zikD+Teze9Eg_O1TxpK;74 zJ_gy~zkL#mOAORfrQOCU$IVq$Q}z|TqZWx~YwM+`iX@H;Rb&G7sMvL|*|&Y5dIk0g zUA(-rq5Q(~jb2=Nq9^TFjn5q)UM~7NJygsu^$lxOXhQxeZ{SK_WnTdT`R~$#^^HMT z=VKXzc(DTW3jy^wd*rTNyl8udx_V(eT4e_bA0OrP!n- z=Xo!gboQR6O|Q{v-9D4`R+ea<2h82UNd3u7o~8z;zzkl`)M&ns%LH9*Rmq<72o|Z<@H#;f`UhUS}jdnj;t-c9)To zVhT)CXEaV#+d<tnE z>G_I&dTQ1HM1#X>(QMh!RzLZNQl3VZ_t~JvQ$s_81{xZAAnNn=va9QaF%pMuA}%RO z`QRFzx6o?670om)JzeAA-%aD|b2Mh?dcEKR%FWCB`tIJrL0o3$#KZZj>2$7e&4WJ# zeDCsd$`@1P;^PHHL?E&}ZlJ%UyTBAr7}N(v4ZgRcFgrt@}!tAAi1HZf7e%8E`^RrT%T z^^*GrKmtd=+YW#`J}+L6ArdT>FG3I(7f&8HnwgnVsn!7&jl$jD{QO{RX=wqsL?qxH z+l}U%cz@iSoaFnIGBP4RoX8;I<;_IE<7BYg6Z_iCf0q4ne`^25PCGlhY84uG4vvI> zcgiklOeYG9dGMwi6j6h%L@Tue1{%61ox{EmV9vq8fv&BsE%|t{Zfyc_EAqnW{n5T3 zN|9N8cRV{}x7{1)cWykH+2G>lrZyObr=I`b8wgA5WBC4ZKQLHpI!g{~BUoqJ^>z~u zUj24GM9@^=l=RT@b=!v4)YNp~#pCn+@vHaOguz!kpLSqjb)LUEg*SYDt%$~F|4Z{| zZe8f{;;X8v$e5YymU!9P{v%y!Jr;|VcwL_#TwgkAwAtyI&gFcOs(b%6zUX&>gm7a5 zy*9qLx3|;9nyX;XqsU8bP0jXxlD5&u+cPOSIl9Hyr#C~x!%4Wg+r?g+o7sWzUABDn zF4bomC1tXBr40;7-(MexR#$PTsj0tI&E;u37*?w*qv3SDjqOXPXd8J*Nx^)+BoWPG zwMHKjsI#+kV8z|VGvX6ciyDS)kYZ%XE$)BnT*IiAIZE>;qXK9#G!2n32%|Jl;~|!~W%EbVdeV znR3-Z=j#P1Arn*F#d_Opv+XXirM$ent+O*d`Vrmz=axSr`l{E-9HracQI9O&yTiOb zulL8BWrb!2r=!H$#nu+k9^a4Rt7Ko4J_7!}Ab4Pgv~kSHK^*)`G8q{evPN3T|IBm0 zRW|ni=0@-CXd0K-Bl&Bo(_f1zlujGW7Vwv7hrGP}Vl>)@_owGzG{IyFvoX8J6T@tw z^zPTbkTNpHer*u?>5v8M?W%Pb+A2O8+Q8Sm`oHjv-F64es4nG88FXq? zB-$Tuzr3@h8htXWNdN%oJBl729-i-8(PN^)rFhCaA&o}0aiwm-e2v;{ZkZQ}- zM!l+pdid{8C()IfZNI;82o6F}Ah}g(t2LqF^{j4EOjee@@qMOTf4$W)JkoVEk#=C^ za-LR6WjJ($LmWv%C);P|NQy(rC)&Y@%^LeymE~e z6u_reAD8$SfE=wh(cd0U8jt*;Z2x#UU0PW|H^)Fi0_win?ptnmW&YBl{j=q|{=q>e zkEbh?S0`Ir;H@t(CZ(nhUt80V$>bjXQZ3j01m%y!mG>|CYX1TcTyB?`ub0MufmN<> z_+JcwLPVrjd4QQ}v{VOzK)?micfI)y8xV7GrD?V~p+&TaM&ldeU*7*I_*ai6?Z(|1 zyx;GYH@-%rXnz5S_CHpcf0s>I9qb^lN|8HKt92fQX_kWow2t7T$>aR5J>}>qhl-%3b z%{NRq=QSS>4-X(rRtuF_vRvhpg$f)xIyxG)`jDd|llG2|(2x*9Qqq9W_e<}A6)rBW zzl84kOYc$e@FE);SaNc598MQ1`VC8)@|;-A=5#jNUAZ5Y^vhLh{O0BqzLwEHE6b-z z;{d{a-H-YO&NUv-b{~&jpI_ETz{ZB*%S5tUuGIIethA2p(njJ`wES(`-|AFUFX|mD zy{9vI+)ZZkp&1z&>&@mRj8*=2IQE`g`vSFBzoMM5e<N~{whMfze>|LL zoZkI)C&a>k+>AHR|8Z|FaFw{%v>tW-eWkY1?9R5a0(dMJzw7G>mET|E-ttUC%l~=7 z_ka6^fc*Q$|2F)$@;{XSH2m+F|4{xr_P>??56Xe1zI0JhTg~}7l9o;TfVH8G@k^R) zO@+4on$>nn%`LpaYMU%$mt){*qvHdj(bqrMvDVMtORi;O%$`|#tE;|33NuB2Gk?#i zy2U=a9GyfPnl$$WZT0qs!8nVAWB=RqD$0|GC}*L%$M+J-k~0Q_*z`Qah`(6?;G@?; z2k6}{=#y$TKV|L1u`8AMDX+V=Zz(})zc$>dW_iJG@#pJjsWakIobZW(Hx7b%S>Zwvk z`^?8uVSQ2cvypvW-n4KNt&CBBBKUxR6<+$0%ey<{mr9pu{GY>8GKB}Kos8t z6Nwpt?K0V1R{?5dnPPtww^Yiph0M~>S{7oQ+!G==TImdBF$eM^Mx{3=j?4NFD7r5c^uk;5E(jdJ=u+mY8?bY z+$U9b&y=ET)+gg#4b>5~dBd6!59>5k($L;p`V`&h7>XPcXW@ zR~P;E{Atv?qW5rZ%D07*jpfNXu`t<d85jq7^{gC*`9=`@3;VQUO;U_3F%?t z(0E^l%twXkzJl*Y*5$bNg~mjtaVE^3BAYqNBYCZkIeLmhzHOgd066$m^$urd6sN6i z5L5IS?6WtL3sFDvZmbY``otJwZS{=;zo90e!Y`(QBU1_>+;)7Oro)nI(GBZNR@J-Ku5J zMd0pjeZJ`FU1rKOc`p6L(81u1(J(58=c{GVT`X! z)06?BjxbFPgX1N{U%(+$r8%14kz_>pSW82aY)xQK+&h|S*ku5M24$uJ+x8`H&f8Tq zT%-Gq!xdPowIEhe)!Tsm4V?Kv=fg@P)s+Ew#*!-uAl-Y-D;8V>#he^pH9|xQ*Cj*bP zTze>c{ura_Qa{029o?}U#`O^(Yv+n{Ch@+v4Vyfc+VkyiC}Y%7<6_zxK!VU{d6(jp zRDK_c@C-D9p*N^~N}H#lTdTyy9MvRbyvO}fKTtzuQ@r(PQSF=^OG}C-g_mhO{#d4J zA1P>Oek7E4<7%;ypn^mPJSN`e@_356WNeI{7TTVkgm-OM8+4~HM205Aceq@=i#bfo zV?(!;D7r>}dUPu}eJwYUIyVO=#lCYSheeW-?2CJotzn2gPl*_4Bp2WGA(2%vfJnxn zOJ6nvV+oKkl*JBcQRuG$k^8Qb`aq$DkPE~?q0++VAF}Y^vQP#zRA+0xBSd1pgxqy$ z*F1KatjHC0ZPw@J;yTxh=?!LoAh7Yer!x&oWgL0^lU%$AI0=Sb(Jwbp%6R;;2xi?` z6?n51Atq@eDC1c8Vn`}V)_P`Ko9j;AQ{oKW_8+71 z_5qXnv(P5;(TG|lGD17hjkr>}qZ@e^GF;vj{o(GBBm4-%11pB8O^1MnA^8Hkk3JQq zIC{RG-FW%MIPwy zBjgMO)_JTc>JW@{B3osU_{ID<4_0s2g7_r*Jar`+l)@dQs=}cf^7f-sKWqQjD>DxQ z`hbI2w<{oKrH_f)U9zgGADHF7>3$4O`e3 zc;wr6&u^>^I83Z_C4h^<4)tSZzON*y0|j6`0g6qT82@3=;{+_$ypc(N5sm2j=ka26 zs(n}$+C=+sg#3~5 z#gt)utvB^7uJ$*+PGm<8TyREOQrFE~A?|}u$(1?U2u4SAWgInfW+Nu^hr!&TaP)vm z4<5<4G{qly;s!Hpp;EorhpmoKCJNCPh|M=r#@_6&eB@*a=Y>Lfk&f5dmiigqa4pZ< z*Qt&rI^8a|Z-ua1$Fn|43Aal%Zg`-J7-1{>RJ*DtIxg26QaGoh%(LL{m<-r=pno6Z za(z@+ru4tJf-O`^7~=W{?9JuMdebVWDA6@8UeHja1$4ZMEu{gXWOSvhj|04U%oomR z@g-1YGl5HY_Eb`G*`SrO6RNl}S&z#@IYdI6nhi6Dy<1B7zmE4zRBm~bFdrO%!7%KlSwF9m|!_${OwRu zp?(j;k6&`EsytT!VpDkZbv1#najsrUN@Z7L0G(a5wUaKO0YMV9+s0<_x{xG~|i3DvL< z2bVYb_(Ub~;7{GL@iy=bx*&9a>5rJm$c|?x7xr0CYK+U*pI-cJD=16(9irj@P~=E6hgHZl+)9JgQT=#~=L@d3j;+6Q)Ati`f&+Ywg9GB%))>{%0u`EOqF z54hyp+%7DS-LrCc8jd%mfp~{1T@>KVIwKRnaO|9asAuTTYJyx6M)|Aj=)QWcAAI_+*B2(x#1ZsaW#5njXgYs%zCywM_;R*rTk{yN07ZSrkV);i?@#`{{g~aQbo5<*FR;fa3uLyEg}xzl@~7nfyY_M>qzsR(@aZozBX5NI^&Qq8+|odtYoQL z!6!-?aba;BVx#aC=iJb8%2j=d+KqUo$< zqW9M+WK7Db-)et1>k-*`-W_4Vd1UlZ<;?Lk*G%sjMa+Xue3ytEN}DYSr65V$k4?4vV>r6V zsBeuAJW=_>t2@*fKWHxBkw&W){gz}r)MQWSvGq}x2GK|!9U2nFW%tlUsbIt99)ACZ zU@iXJEp@D-8pB)@_$0fEK5u-_0qwQa$7bx$(b&m44l`Q%0yblxCRF6}6J1gKFMfnZ zZHz=j4vBRpn@hPjG1H6$EvmO&Nfo0WFsq)4Esb{()*Pm_HGkiX7^$jHCC|8mK`3i!Vvfd4l9xAH%f|1|vXnEz1zJNCbo z|9?tLyh;nJ+1K@Bp%1TBukc^Uf6t#lnmPHeDH9Xt`uv;nfcZZg{_m9kbS3^z<^SIG ze<(My#`fl|EWa1q&?-~7mYV5N8FsGa7^KTmIocgr)T7I;h}q=7qU|Xus(X8THrsx} z;9n6ur4~CSOgMH7!l*Y!7x)5z|L9 z{Qz63H1?G3o+wUrVz$@;JtC4mA*V*wuA>lu=4CH9?DDb^6O)t*P19#;k$Gjvk(;|E z+oP;^lvg{eEiULg?l5l(fGCekH}9bK?xSkSx+0#`uFPwh<14%lLqz=e=PRnGU!(FB zhMQqg7TQB--Pox2F|}CpH;oTQR+4R3=ZXj}_M^_q-Nw~05`=fRXd-SsWR%xgzW`I|27^(isdW>0vwK)h;424 z%RxyE>~ggg$@QsHjfsnmfc8JKWmg7L7zvv(NP93V;5GN-Txa4cmZp+1=K0dGJI^l1 ziRBHG-4a*8eehpeAu$=L6$QzZ)syqQm+uT0|xXBz!W!s0H$&e_WaZIXx; z2e7dp#}?f@VJ%S{0ZMPm(W;0MbPs0rQcy<-b0$Qk{or(lD2g0JlO z{XbE^Kg7KWo{I{Jk!SsC{#cx2q`Xu6oag7J4|DvzotH9)TO62^Mp~alJT0OstS7=B zZHF@uponl8L&=h|`4x(wuXiM8T<)$(sKcTR%C>{^*a+Io+8YV){#XoZpo$qKriWs) zY$UG5gqW+bcvXo1NDF`#A(_82B|;-?QVm~YGCjeaL7nSnN?!Adu6AS&&Un1Q3#6Rm zoisR(o=>>Z7pvHTQaY2g&J3QLs;2;Qe8JAC$AvSf&y_7TNq(3;ZDirG?e+t~li_bm zC1j=0qCRapI6)?r%$fl`%cn1YQ^Dn8KZcT+VKNZj$F-$v-Jhe1C~|M3zj#Bil;ZB6 zVOVK&Z3dd5g(DVIhs^MMaWdMd75ty9@ZKeCa#N%$Bx;aHci{?s%~4ULMe+vLZdh#l zo2nib=cvK_l5$G&(U7~g^j>bYr1TlQvxv@oB|w^Y`;z!L#oRliL%RZl`q*!WY~1JCf4mj+noWBp}8 zV%5oLgN{L8Znv9WYdo(^wXj$tlv|s6tM|LwSzSR@n~p3ID_`U2l`cs{jroPFn8*K) z5wE2>h~L%QmWx?;+sBh%IrvN3hYAEVTmov+IoDF5$8aa|X8{BMxeH)mK&cV-PkNvKe4dzaeo zci+@5lKVxeo8lMF9MPkpds#0r8DS3@K8MC}B|y~|(ZTLrQV#u2wCqDICvr@9Q=h@7 zuY&>9bce6fU zlg_6z=^)aMiE?MZVy7161rK&Vf1*i7iy3~ZqDtKvF8imhWogrEC7?zGOBYWW%S3Mm zKYD83p}8F3B|XUovzRV?w(xO+uHlE)oOUK%LPuOPeM#(T{h+Ju%SNz!w+!CLp6ks{ zqmQSaGuf<>0E#NRH`mu^y|G{+<+G9M&?hi0=Uzq*KZt5dzX)D)#ij7C3*&n?XrXlpIzCwkCpXV~RO9?M>BbOf5gmb%D- z>cc8b78}*JoqH~)fy}a2Wu)E|FAnPONw$F18@*Y>#A9)mvU2Px|8*mpgwC<&3F#wu zhpN`;sCgoBElM=+!!Y3Hiw}TQO-&asy0HOmzMyqtW{wuaM6~Z_ zldTmZOX|$7U2Tw%U9T}8vZ7O;eA;#D0`mV}9kHr3)1oaN^;-CJI!ZmaIJabs8MwZq z)&fY9(1KdvQEkrbmY?asVwvV^V*Q?#jSU1=e>LYmU66z9!mna-?D>7rfgg5$Y4390 zr}w zz1O<0FiVtrWYwZj~b6)txNO5~IivKFsz5AzRltbYDj)KUEp z!!)W~><1Wk^XHgbv~rnE#l|BtpQMDv z#j(|!{O;}@9%djVO^KTh$fYoMg%$5rfLP?V^WK}~m6bGw0?NtB$>rgqi>@IIO8HKQ z)+pe7_jX21u^!s2lH3>cihWc6VQ^?@a%rhGRLxmox~e0Zr_~kfwAtIYi9kC$g4P72 zTisbooG6ezxq)&ExZa;=H5Z1S6A&Lf2MRc^q$I_Dd+{+`@!7`pxfmA>ZEcUpNMimE zm*RwjY5Q{2V)T2H*Ozi?eyyx{gY@F*)29s~7jIfuu@o8&1*E1@qquBV+bY(ol{EN3 z%>toWqRQS%vDm0Nrv{^#*ssPQ^YUmihgYYq@*B><6*@*?HF!N85xaJm{{yq-tSGGVry(PqT30NJ+x+km@U=!DbaDmN(zV;SJ3t1szPULC0wZ1E z^4~7>BsDo>RVecy26Ts z`~$7w^qT(0vuDpfd3k-WtHUxhG*ksW*gfNH&gcLGaw1lwd^nlxy;NaW?w*LKUc z?nF>U+n#c8a6kdE52_zlD)H!P5WpBsRFir(ysN2kc?t+ZGnL44rykqJY^14Fg|#uP zDJX{2=ey#_DJZ%@=P^1q24&-86!@64hh^pEzh-C8xq5nD^gGG@Dw2aG??h{;|3iWZ z3fr^CGN}?+u890jUwU}`sNV_BoPhaa+E6KORJm20bnZ=dZx5GEvqS}T?C8aA4`!wp zUg;&Dn#82@Gz6|)yB5adzyX>*DjJ&4G}6gkh5FL4lnTFiZ+M<MLQlZ2|#lJZ8 zU2oFiHAM55pP!G~11;tw`z`AJ4Ee_X{$NV62vjbp1m9h;)*o8jcHAAaQ7$!e<8?at z-9ncGcle>zVxJhP4YI7b#2obVAZ|LHYrFo7)pt(H+w=u4EbD5E>(H{=lr7U})HfG& zwnPPPPW$VQh)4A}8S+|Of#q?g%vPxrq>lm@payoyBz#%G{mWCy>%G``(}&$*y#e{> z*)1A*%%Gepw^|YmWmK_UEt?z6eRF!IH8cezOsKP$W9`+N}Q zadGfU%DI^k{3Iafq)8S4bxH8Nv@f^w@&IA+~t9yOv_NIs164i{B9xIh>E9=?opY4Zv+%?4A`(AiKIkEd47! zt;MIWkjakIcV}h2#;s5566p&gM|zPMo3hXK){{vdhT%6HJ*OhOeOV;eNrt7r)ueKo zq~bwrxB#xN?%i27gFZyKBbTKpusPeVP;7LoJ%ar-V%;D%Eif750>vfPYxs3e^#Lsh z2S=uARfM27QJ#9;Da>|`%k`})*tyY;8$zIsY-(*PM6KNcKx~lsK#Cj3Ds$_vS|MBBEH=j%wDa+eg#Aq_zDQ9 zMbjG{%=Npw-2A<4b=|RrrfuuVS>9H9F--?9F=bII%Tu_E#&Zk2G3L~}lwQNhET)X% zLhbr-mlUH;&{`jFTMqRYW2=;l>&~g!T_%oAJRVcim{Wp;)&hJ#8C7JyFnRVIbUifj6nCOo2c|-r_eP7A;#`Yz@EvY&; z$2BVdn!`=pO%2af&ik?_mJv2lVO|#?_3z*emX|SMfg@w5{ljZqj1hZQmUe05NvbQq zF=){Nqc1bQVHsN``uEo}Zn9PSV0kq3H}wpw6873{uYJ8o z;CYU&R)i!ayxa6$51`GmT}hbvZt6?nysbQb$+|m5>A6WOQx}iJ4mmx&mt=wf3>{4Agta=fAt7VS;V~il0s2`cl#ptHPRP+2bMeTfpq4fCAxGBr|^;ABr)1exx4}H=)E8OjPOs#G; z=Le=e_r4TwH*zz~lDVel!foGcE%y#Q&UI_6vW|Nk5VNi0R^n6j@OH(xzFGQBcyO+Y z>8v!d%{}{v`Flysjt6aT)M#{{c<-EJbvbfne9F7WTXTjBPcwF6#;Slll9O_3Delak zM~|t%*?Z%}f+^_-U0<5AWD^8&oevhM-o1Ml#%_3Ht#T93#KeSNt(pWhtJhzG12K78 zduE4$r1__ZLldKR>El8za`(Aq8tt{6_h(DgPZq5b)hW4X&!J=S1az?xWGMJ^m|IZR z$Rp*nbJ^^*^JtG(Mb^L9zmpAy>QidY-TT2P{EfS^o}KJhU{vAzya(t4rU!vhd?q?B zahQAQ**d?bw-dweYBtK#kN1XsR8*<%e!CREkjdq&xhJJzxmxa>Iely9^B8US5|tjECR0uT3L( zwc8Q*xs!J?@r@YIx*v9;E3>K_r(GDe>&OH*x90mvXpPab?l{|)({Uf;_ogQHBWVfo z7p7UFa2$l&acKI|JhhtPU1)Xj*|Mp}e zUSS=o8Ibrr8?GzLsm!A}#prdbKl0u)c8+-$n+&B^vXP%GjUYw@mLe5Y#owKY1;8R7?e z%ghnSM@++FBW^=KJlrmFU3puyW4+3jY7ubUxE*&L*66A~w{%%#kI3rPkg7+nB?&$R zmqV9$V>=B+25tC#pIMR9_jw*iYA}8faTSes8RK`a#X}!w3;$1`*G9~h$WWnKeQqK) zbMPb@m8ve0a`|lpZNDe$Y-LV)`Pi0h(;hsDCe~hgiR z82RQIXhsw5(~rME=Ne^1)6hXkzIV^Yvi3}q*mQ>fXcn;aJo$sIZ%*cLd?Zp)q$BM6(!ujiZrPC9v{Pz|HfX|i%xK3L-*!k>sZ~d z{R|e~BGnw1>Ous@{1lRgG1x1wZ<|2p@gS3a8C~ zsXy-kC5MSuHMaEg>5hu=;n6J{&b7&cxUqfFxu>x25d8tn4TLCgwTwH=g~YAK_cE`0 zh~|Nk&z)fJ-UIyG^S&-4WWOM!oK6YpD9|Qn!*#w%E;w&y3X%dB0WSn#v== z-tL62rl*nU9fw~Y%vmZR+Bp7NkaI(qWCxWW1QtK?>hXDz_&9tUTQ0Y zVmQyM$3lM>^X?Vm#?2W@f8sT&UT10F_gN=({Jp-^`mO%vgyk;5w`0fOWLJdJX+Ecx znf8=e-hs0?W4+wEN4D`IfUSfoPP0V$XkrZB(Oh|)t8H{1a#&e?B@!_nt%okrhoU*E6NUkRi zXXj3z4;UFURM52emPPsXi&{sRy?vX{Gt3*!fZ|2nw=_OZ}_<7U# z?7etDrPlgfsvPUIU!n2EW=ebq&8gKEih+OlJGB1-kzh%PU_fZQhHN<&ze2S_gD&%? zPG#pF7G^(grMg-)iYIzK$750lclNXpNjt+Z#6(-rlz8}QMxTc+4&dS#O`Z3N^HL~(*Yufx zzCVo{E8F#v&)}F2$>|dTrkEqiN4$M8C4#)ZHB;B;7P+j-Nmw#^kE_H9Pj+mhcORTe zdCBE>!S0bCwt8&`gC8cadN$D6oB32VQ)TBTXMS53EzYmo2^4=>(%tB<1^qZKcS+_7 zl=d`MBwMx^BF^0xbQRtqL>YMz8l&7*FfMa51S+g{X-?OvzGk4b{0&&mx8`YT+d|AI z0g}Og$VK!(hgHm@x^#5#%ES+fF%jFK1RB>Od=r!X1hb5_4_BF^URJLLs!2-+u$&f@ z=Nv^DElJl<`h~W2sfdXm%mj`bXNpwhw9Qyx?Ai8h+8+ z8~mp-ENOS}f4Eo`8foUQx2sV)aQS#o7~ko*6z%5r@U)QUNqtbi(4Y;WxXfFElbwot zZ3=2!+OtYhRHzpWA**g;NL8}$P zdNRJdChN93QNJ78DTB!asqXU{ok_{wRnolwEoNh8$z17^eGXGf2+>O~p;MatlnvVLG5XwR~z%Y8()@xG6w_LHWp zlH+iQv1oPON-9Q-Jfm8;L2E@wV&v$FK}Wmq-VoKVPX}xfGb{r2Ujvn#yvPG9-(I>e zb&Ny0l@lMgUT!5^ZXM^tsQcYg`r$C!`H6@$tr@IhpFxHCkTO$NOr-P`&BXnbszOn@ z)t7%YsAZ%?y!D%R`#ntzyF=@uh&4h(pBstNs-FIEMQc}nqUqC`b-Lovye8=nT@03K;zS0eKcQxX_IDXzt+R{=a`M|T~ z&c^P@j*@8jPHSsxf(|?Pb&2Pzk7)EMGqbWxmmC%&=Yo%QS>k_Ei1=4{ zc?0#G{zp=B@19Hef4%2__rR`_aL~Ge;WgXuEH`&2yvWNdvpWe5j*9Y5Nuhe6(>UIq2s8zqoaCp3AzPO#~Spf(+=>gy34xczj3h--%%;rB!B(WduKPzZ+GvXcVe_C z|D;Yqvp4G^w_D?n3WC{{Rr8%)BEF;=woHu2{5{8s-Jk0)H{ZlJJG95x$U+ST&{I1IJE^a6=x*{MyZ7HNx_sBh4F zDxgoTrsrN@{6hCD{$1+DQW=jfepiaO0aso=8&2HaKgPQC8RwchCHZe>6|^$*+*iBk z2Qikc;oO}xf(CA_%v{YBR05qY1X=4Rp9ZFJ!)aOV7OHu5j1MUlU0w$#jjW#UGrojB zHht93qVe^hXir;Ma?8R=w_2X5dMjRV!H~f>%|0UGDl--eMUoYrbL8|m^)zE=J9%il zl(yRAtTOd2)2?8q0M{??CDW6O_;4qBHtS~sUPn+*o4vy`Xfi=&Q$&FITo z^nHFz@S^&J1OxDP7-rQSJ9Ub;sEn0j3z@*naiz9N{ zKPH1sh?Y*mKDvO*mMBrCW3qwCV$*ZlVlu{orT2UoO2XshXpT>@{H=cQ zCNuq{?t_D`aDBH~J`#|;9M zQoq_WZUhC*PA5Ov)kvCSwg3F($W%Xh`Z$kvv0IphrP-jrQw_5pobqP@7Ypw-IIf3O z4_Q6K32)rCuTvj8Y*J@WU`~DJX^k-m{~9m0Aa}NSUDk8iD2gjI_gtK}%X( z`6Jz>Dp3O~Y3_KF6j52c2f>z!07fWa!Nj%Fk zF>rHd-yW)~iI~rE_N`2I4vqTrNu_shT{`#0^+M0DYuiUDpMz7#c#{@Brd>8TnY&y< z1Eyi-x~SY7k)cw5`>}Fa9W6oruE~FC0b*#-H9V&%Q7G5b`+IxPFu4+ta0ZBpz>*S9 zk9P;-zZ}GJYNkRC2>d&P=rHh^t#?a-mmEHiUV&|ei3a#*-m<$9?XU=u-`xytZZd{ z$DNu-xj^5bXk^wqoW_g)D zu$dhGqe|J-t-8wb_su37W(sn0$pHb^D5$6mp=FgdvfaYQMjo0!`!a|2xszvSW@wn0 z#DTc!2d~->?85&3esh0+{|$~?-Dj}y;RH&X>$T0z^LAFp=sX+ZtyhMdwbGBSkBy9s zSWAXLQ#>i3vvPBD^94M-kcx^5*dWu(%c4!+tr}&uV7*#}))wOEmQQx`qGkpZ-(j}RvPu&6n0)j$Ab%`6! zz=lJiYH?T5b1KCK{fiMJl`|nqL1AI3U%!%Ezj1^03(hG@*QKRqs+c~2W82goW1&*x z{Ok_4^uya{4WcaV9(8ndz`_BD{dHq=Q&vjq+uB=YPGx}`uHX@%_c$54G`)$~g#oaY zeEm91#d$$iUQscEh)u8d2g;0J!G&5N#)v2DjEMgi;WTV=g;p&FI$5T*OWv!aT_)}2 z6%}-hjIUtlZfwBVEBkFN*6`AJdRj9}OQgx1h{K5b=FOX6myNdD{qoz3899r<$0(Lr zBmv8%E%x=HWc|m>Xce2WBw(1J|9&Vb2U>msvK9d@tqTaqEr6Zr9zRw-+*#>mC>f0p zrjt(xwBCpS#reF{QGXlff?Lb2UISUbP+73{0>j$3U?I>gFI(g66yC1$h?~1rk4n+Rn#)oL*c^4}YL*&>TQvFi~9EjXs#I6h3`uZVok`1O9Co zy1Iim0LNdaA0?UV;h6(>=}2LX?3* z(00$-bSK04{#)jgwTaoX9ykR^E2nk}NAN zZPH@ZpKkKEURd(x9PffT0Mjcg3>p3DyWPgb zp>OX=FB;9c>N67>&8cv4bB{cuyl;JUxa6|Av5|iK!U=XK-Ok>WFC8VNAP}*EB*s(~y%tS93Wo0t21%!@w4om<%BY#!42(Jq%qznNXh|jye%l$=@!# z#_B24W{mTuHS8Q|yScQ%+ux+5Po zGrxAQqg$jXtEiZMbmT}uPCgHt5AEoXt=Z_)+}QY{WZXUj&NMcVN_-K_BD7ntQmZ!8 z1b10h{2)WsCDgD{^)T^1nB9D^yei_soKFrXGGKFXSTG=A2*|u9?$}q;DWo%3ZaUd$w*rm4zH&OG^4y)ZRCx>cwwzhgF zm}Ay(QN=3zBA97`_2o3mHL6~FzrhCL1px_3CMXW0fNe?tmeio(4_@!_*!4m%t|1Mtj9%p!ec@f`c|Z5cDO-`btc^t7}v z4X06ynQ(e(i4NFDSm$OqH}K+TM6NJnDI+5V&>~D#i68?I-rQN65O+iUgMjS3R5aP$}q&)6!dITpLjyB7;fPkkPRLf_RQf*tXu0LE0% z($Gli>!)SPWf;R4F4q1WwTT%{Wu)e;2aJ1RE-S(i9nwmQG8&fLG<&eCC zGK-Ct~?Uxmq@<6#CL zLoNivHxl6tlwaJ$exA@xozVUIuCi+7XhSQj!RO%*t~gIfx!(GbYwPOLQBl2s89)SQ zA!hAl(-(Uq*w-gdK(vH8eEzzdX5h>sCughYmj^1jw0N zK_rom$UL}KT8%(P0b?nDZy}2%7*XX z=Lv8Y zwiN3+&3f&tV-h+m;-MEM57Fv;A-2X}hI6I`YP@jl zA`8s`uiG5~;)b}@RiA}Pht$lIHR3f0)Lzq~f2gpRR#lwd?WJ!p@gB%~ER=M%MZ(gX zq(^wj=cw!@U$z*wl#HTIkoe&ht4%tq`OY_QdY&5d2BlqdS1@+4mh>}B#=}%9Ic!Ag zYuV;jW+$x+^ECUy6`nU3q)be*Av=5NZ|-jH@3MqfPO%`- zzB_d_Hru#U-!kHK`2&ugmE)0?lKE2S!RXj;KeA?4$uhIsS*_Zxs_F0$W$2z1Z{+_l z91D4_U34iV^z>n1V!(quF2zNf(2Jd<`xqH1+TGYIxU0*Xt!&skq2><-o85Q_%snH8 zg_+*Y~QL9-%cD@oxaZv@5KfD2v{O=_gC$wH5mu62;A!)6WUQ3r2QSfvipW9BC~O4f^Js;BKROp?4M z6KPl!EQ(Il0>%z|NLr!_!2vRnWDp;v!Mbhi?xHU;RmSSHM+{ZvfC@|k;&ZQ(X;qS| zE6V%U13}2=q@kn%?M()}MK&V}B6S+j>9QT%&PSy%cVs9R?FJ)9KxVZ(OzA>j>)j^P zsgnI;smr%pKs8(NQM@7g9PTu&kRVmKjP>2A^5(IIr=}faBB}wxJq5DA7A>nyU+l<- zz>IOJj{`cSZGlr0YUbh78yTHXKW@t>PRr=BFRfTR*RTw9IV*-F*Ej1FmGw4E9^2WA zIQUYg+qnv`a+(>rXrFCie2|e>ptWI2j!p<~kvcPKaq&P(u|m@cUL>`J;WqtI zHsds=rlv(kLsFo|3Tpn|cnvjrKHn$CpXlS)%Z_*<=30>hq;1j?F~xXmOiP1TwK-Q3 zUnRS9y~g*Tr;(ET_0(9HA=ohR)dgd1YjxeTEd?PoCobK?LDICH1El>7T}kIS)B{*~ zPRZamrj;IY1~@2ZIzL=U?3l#!QG8`$As^CnfxI(QR6Dr5IgZLPC`kAwhT6~~MA-A9 zEbZJTAO1O5-OL`MRF;Wp)VvS(YUy+(gHrKe6`y-uEX*wO@bHjyM3r9ECPR0A=3N}0 z$Pz5y#9d7?Z^tiMNO2dw-6e#jUjb=UT zV95sBAacVz;pt4GhwASjR@iU0a~hwNC}w@}_U`}H;8`Ythx*xaJw<ZjjYIn8hxg&b9HzV?xRiEz2cL&{80HNCf&VY{HDggJ)mvsz|Pc7 zMv+|F6KXB`uI4eHr5x7Aolu+A)c75Omkmi4#zPI0Yn?SJmQkbI1q0V(YG`vzahFp( zJOVsL#Ez70(~SMLHbY2Rxq@4cL$dLlU6O=(uOy}RN!?O8O)%U_pLDys{1`{Lg<5v} z22G)OE|KcYCx?MNwG)yO8LHi=gU;b8i}j`0x>dpOVUFIs72-lEouY*q`TJzXA7XvR zGEbR}tyH$~ONxky%*an*&|g7fDFGE)u%DmAoIx2(LrO|cUWDm@I*sM;p)xT9F9fw$ zj>~bzK&C1*Dlu$izHue$tSDXa-0z5}ddeAKXNl1a&G2 zGGobbVI!#uAQ1ftzP!Tb5bPz4A>4oQ^2%guZ*3KUS|jlx{1!ln)M`-SNt_v#f%?4= zgu!A_T>aTAKOkCwN3gIdS);fQrCB^w%N6K15cU^`i|Dw|px{Q=I!ADtW*;3LiFDXl zSoALULC? zi6EC5L_=AY5f(;R_50gJgYI|_kVbBSGB8yPe~pTQAV^nHyf8bP z49<9{N`;Dws-k2lRr0(?*e{8=0?^;2CiER5ak=Mz`}Sx_cJ4Hk5RQ5i{oynewkaKW($ z$*-c)8CA;lUT0By*fYmebm1C7YyP(cd7 zUt5iQ7)j)FUywOX=kmVrB8&qFV;=OEUC7K$LAd5pEO^8M3jF&502M@h&VLGd5UY#9 z;6j<_&)@SO;+{X>1*v8ZM19Z=OBz95?#ktJRrDvN{Oi}LVEELuw8Bs}sC)04G81mW zh{<{X7q{PN!iV>ngH3Qgf&pu|w^*Nplo9~Wq&vvB8X(33iFuLb+^hB|Zh6SzEi4XZ zOvMp_=My*r*;Ua{fJ!0=C{nUjeZVEA1>`1*+a`qkcuDO9SuB3U^2}r(V&j*7R-g~L z&`Bj0@mv!5T|ZPvX1#WRgKRIP#I)$K4Hu0;Mqi}Y{Vm&=l7d1XM&22*{kbWw!_>UI zst6u${PEm~C)A#>#kA2JjlN`R`iZyx8qz?XV%9Lgm=rN0`3~n#!&gB4h1-NiBS>ob zw51SWgCrhcb;$2c?>~nBtBo%GLJ$93r)FSCIFH(EyN|$?$`zxPj$cr&osR+47$%1S zk}V6$EZ3hH>o5}ry=j(9rck1wpdbLaA_Gdd@DL;I*ZJDagz3jz9d&0U5@5gQ;NVk& z6qWzNg$q3}M=s0%{tMv%P_E8QP2JDv7mh>q4ZAKZ%84(87*RxtNGsfmkw=+`zIt^I z!Dq(CL~GATIDq_C3;_+1TVS)MieQMK8J2+#3~D@AuB*&Y#6IS!+S4R-jr{c>=LoQ5 z2|Ch;W=}vt=l}8JN9f=vG@E<|8!4&hn3G8t2sFi9^{2s`AdICOGdYV|KK8hX7`#~& zlJmgs?fqHjP9X$M5?wWzZ6+QVV+Uwq32YrOZ8n{@uz!&kFt|7NgSkH$ik+5~RSJf; z4#2ok02>*F;49n^mHeB0SY|7d`(Y@9J{ZVHKunww<9r~Lot+&(PDVy{3}`0;j>26O z@P{K2x`hWWxF32IXhkiptp{LUcNVlrM4p0O(p@3BAXPRjPaLf)O=py}In5$|6ks`p; z)AOCX`!?dEQ&T_P`*Sjs!l+nE9+Fmc>c+4QNb|k&y6H8F>q#^SSARlR~TGT;gF?+`t$@#xW?|^P7AjS{6zc|RP)G&mX=cV$Sofm0J=!`VtJBv7lpUL2O_|hQV0@NuKyd+@$S&%u= zfRC5UUV}b|ROl~Cjg5_!%btK}hU6|lxn)2zh&{-H3$>a96f2Gm9e9=&oiCtL9Yljr zsO+&d=Ur}(j~_>(*TyR3A*b3{Ur!5OIs~rjWdMxjHJmwsy_^QnQt=#+F7l88WsPBq zs-mr|;H>(1AkMmy!jxt}?9>8am(n7x9%)Ld3J$8eDmf_7VlBeF~Og8 zQ4WTlx`hEH)BdcI@pKs1DixrW_nOW8*YozTkEBmv^eDTT=a2PaCzs`csFvu6bO`1f^n=imdZo8p zKcGK3|H9XST7I8Vc)imZQ)3-Ao&}vP1KQO8pJ4vAk34n$&@H4p$zN}vn?{DmCDv2^4W6Qm0$ab=bp5 z^diUo4PmP?0-&X{lu8z1YPmdA_uKHGf%%VQ&Jz0i3lwUW6zpX^EA(lKMTbRgZK6)_ zHc$gdz+TYok)1v+H(k%@hkeC<`O;2lOkS{?% z%K~LjM&S{(*=64FY~Zrnm=@mraGA`60a&)K-J}7@fbEnR=k#17yNR{x!)&XbM4{l2 z-ObGc0G~!eCV+sa7#S}yjRBifEXdE#49G;rnsFc5Xf*mo;bnS zEWz0KEToiALMsc2rB_7d6k6Y`(SbNJ0KJGZ_F}-6WkDGdJb)zhp~@+MRT#p0v9Fzm z;=TY7g5q!akiN>RSb_=t)RE1)+6K9XTtK1ou|2SLNJR@b|BH{09Q2MFwL*kl0E!qP zoT2#|&>l@CWTv}ffsQw3-Pc9N-~_oj2oMBXo%r~BNU)!63s=n7`h44d{w|W!q`Zof zl9crC>FwQ~<2zB9aN3Om$1fR&EI2jTz{0`;65n3E^4VD)LO?X+Hqp}4XZGzvS9>xv z)l!4>1~h*8ujv&lZS$n0q_!Y;90~!3I0inILdf$bQwS^{4^&25k=p=^d_{<&nYlSb zK(K^`ge2kXfvPWr@dSV_{K|JZ^9iCGtbAXUgAIHz4N#OIJQ=QbssK@{;v1EmV#@xp z4td22PXvO3Xb8785el$i5Y#|#xD2Sg2B69T52>NVarf?1z;i%4H2`2waBy%E19m%8xnO*8La;gnh2C_!9dl%tJF51Cb zVlQ8&T40ddok4C0m8i$nL_jGOKx#ot@31_`0>3RW83S`m`c|2kNDg)gwS{sPK^16C z;02%!wBD+K=X@{bo%!3^0&x?%$j;|7#^dwc1M_J<8~6etuflRQ+9+<|fb z@c(e7()#=NU--PHP)HFCw`f0n0?+=)0+9w@4rBtT+VjbYZl|#g0MkV<0w1WW0HC7{ z9VyWDB~O#jQAOf0h{)h^6|fhXz(4Q+3m8D|*&sD(1uH2Jnj%_J0PfrpH+PA)Ky+d; zK2)GfC)(N8)(6{z9pbph`}cz#{>xw$#+V$C8UvD2^^FZgY}*UHFFLrwLQFTTFwN!n0&lBdB94xR<6QRjCs$YRL*^$}kV;EzqSGoTQ3 zVi~l{F9R|%GNA8#S?VV^N}&LdBjl8OLy-=Na=KJ3of^8Ut4p{yrx3YiXsHSSW@%GG z(UhE=CEpxEWVH7J6QQf}?6}i8jKt3y@3F*pbs@e(wT$+H4EC-oU zf%vT34$CYf=cVij3t!V;?~pv&PJrsz+6Dgvo=8v#z1B|9=Pmr|mE4;*ae!TD6)Dn1 zWhnGQEw7c)+HWwJ8;2kYm6esko3MvK@t_?VA*0K!=Beh(6-t-W-f*|r(FG{~>GKW4M<@gCHXO8Tm@z1c;SHBc2b1WP=AZ_BC@5%v84rziKG3h|ODrGRS0n++jpb~cB#0v*oe%c+j|1(b zGNNz+*himxSvFv`a`Tl?PYh;@3gJQj3O&2(+_8<r0=_V+=t0m-iF4{)1*bdV6Bd*G=}P(b#lNmJpHa>+OyZ25!P z84tm{4@1bL5cL5DgmeZ_h9OB5Srt zkcCLT4M2t=s664pO5LzL>{?A%Kt8e)VQ4`yvTp#RXO|1W=M10OAM16Xa!nh_nfm?1PNwW>TGg3jfV_mM_UUkQ@SQ07+$8eNvse zS^OpB1-W5W_E17m zv7Cr4Rs1e|#T|M1n_#)EX!Hxvep#DNs23?__2Y)(;H1nX82yS}{Ji$x~A=98Xk$Jl@EffXbez-LTYUGle zgS!Ft-Y350PPwXU+nn-cFOLHF48D(Q@f6M)@(c%@M&OMnwV5hARf(!oH4-0;-<2r7 z|6uUlD|G8+=z;vi>ZCx#!vztmy`K&|6Wa#vwc_^qt()n)>-NX{v?DKH+s1q=#_P_e zs0lT_zKIrFiw})p>KV}G&+a`(-Bq%?+xIS7ZJ}ZzYpJgTD3=ojNHm694-XIJHEBEt z1Uk^Gn9j7G8+k{mc4SA1r^Z^SkTN88nCqSXO57YLLw6O{x$9a#^c&v|*&7{QDl<`x z|9I+>JUZDW_Zh##qMRDXfp-fO@37)KW7nOAQ~4*Q+K+83ag9B9k+af4Kj*yV$J;Tx`53Z~EaSOIjS7!xTlv_p z=&e3KtRNjjnEL&!OSetZW=CX|rDHv-%H<)uGjB1)==R zE_Y+W#kG_cBV+oQ?br_<*0Q0D$7~jhhr<#3OSS%)q?@;Ua=WY-uW>!!6>v^zd*>PQ zs7PV$Rb(ngWjM_^^zK1Dc7?12FVl_^kHZPd7z7q^gyS>S+<8ezNzA8pT>l49jB?CdTG)3(O%;l%1VDkE~=h# zp_91d=$agtc+am?c6+;LWJSi@@Q8}@jO&J~y{Gvr;M*mw~Z-!+hUv#>|u(nrQ?(-Y*9jfTv3 zds0Qnet-S4(cOGzlR&w-7kYL1IYlgs__$vpGj8(oc2He~^*tZPeqVw6-rQ0nhfCM} zdPZeE3hNj=`x8}{@zNK0-DCz58;AC@?we|pzKo7fUD^q=I}_pwiq1z^Lw;2qgSLbiGd%s4U+a9G-PA(^2^K8 z{#R>X0*&SScKZ^Nj3rZLEJ;ElWr!pqWlTt>D3PI%%*q_4QX!d=DU=~YW=Rr~%*j;d zA#)j$vmd|y|MQ*mecxH@oON1O$?(3z;qM!V^XWG0?oGvY&sI7{w9(mn3(GU>w(PvBRwHpUwKHM#g z;i9t^?caB@)cy!xnJ2>~$D%%iqUmRx8C;1LTSu+GN^WlX^TyTr@lwQ(CHI>wD|eG` zB&;|Mg+%6g{`L>iD5^F-J;#&ATNo32ZMivr-o9O=!fGh{v?}$ooX7SrdiVRkT+Lj{ zcQ*-{Km@#D5?iS9+FlB;bTvNCozKG1}xTD~Ed)fut34!(b1)oDCR-`M^P;k~cc1dS7ru&H24f@rg z&3l(GM4e*MJAHjL8EI7rLm>7pPf`uxo>bnMS8AEuB??I z>*7v*M?Ffb%V%3pA0}gs71fJ-mJ>N+wV7MelSR1lWYW?Jr*sq{;=Y36;yd>MJ#2W3T(QoTFPnk&najeqPO zohy((al`D9P-EWAEc?dqTRc+kxzf{}j*EKsZ2K*#(}ty=rM7Kxinp=LrA^r-$>r6O zHt5!Hr~8>~+QgZ2IPY(;r%& zPfc8zNN+UF=;yD=wktX{n*Z{_7Z=NvCz8UAw>F-U${j!Z%ta4=7HirZYTAcv<@HM zD=w6t{P=Rg-R1k&M!6gYhdb2L`dby86+aRYOU>0Q>${h_ZvJ|>Z;zI`UrB1tjCNGa zcZvP4%oryQ&z@Yl^e)FWvo>JnQioF4WNcic&8lnZ?zS6`_pMm3^laXoo0j;p_-uFT z;rI+@FVDT^K}$L>8y+Xps=OeRoo_czN-KHhTU+9s7W^eQE!plOZChpIMRS`DbuYt$ z-Zy=3x;ggQ-J=;)9PP_&bIdD0{pXzjaO6&rXfDmML;C8uQHdQ1{JXi!&+ILn(|IZU zV=1FxSfYPRNzpHr67lEZe+HWrDvl;uefyMTpts(65DJc$f`ZRI5571vDR!@Hw)WN+ z$Je@4qbtKVSY@5Hlb3s%hkl)D>DK--l@@kZ`lDe&Sl-174oN$|cjt=BS2iy`K#VCL zZJMb&cES5|h0m&X0R2QN+xRHTz94FO%1Hm<$rD~LFF6_l#0t0|<5OYMyC99vN#5uF zKO*;EebrjdeX6WX_gTNHTxD{GP)F3(CgbfNJ$iwJhj@E$Rrbk3$~w&DbsGK@lR+xF z>ijYpNm`99kq!+m{J2W`^LXop0!`r~6bu@QicAADyb|?0B+l-g zFs!dL+?$_UXE1R!SIc34#zb4vi@d}E*Jqb*UNkTh45Z;r@%|9c-Bwp#=kDpnxS3jT zn3kqECUiYRznjP4@}H0Hze@+*fCVzG<0t-RV%lf2>7P&j^@acRoyHZlkDD}3@cNoC z1qRw4<-M25u#4A>>!Y{I+wDxeykm2*Crc{d9DWj*viP%)Hlq2PoDN-wX5U9zrd)oy zj*gT=C!M%1O++*Q>{C>%&u6$;{)}b2@YWeSUf!SKbe)${IfZ>QztGbx+w(ph>EbL;MdCsiI-{Z43O;fCMqx6J3A{e=azK$!2@5EvdoQlYzFq?uDs8%wdlN= zSftfT>6L0<>D`Kox$3FUU-R)kRIM+wzLVeo@9UAQ^}Zw)i4KTn=?1wpf)8m>RibEU zxQzf>o=7>-0N8y8IA-yqSwVWvc{5SAxE3o-U0te##`jpAr%FFEQO#y4&Vi|@3c}%M z-PijOw=g?V8D&u}w0n02;8#X2u2ASX;$OXD29K;@WhJP_ubr{_!1fhHRWh@6`;V)s zr91e}Rx-%F1=@D+?%i@{yHzfSSY*gCUS2EigvP*`nXAk!EadVf z(gNd^L4oZ7l2P6+e}22DMT$`Z$sX=0lOsr6%UpwEP#=1)ukP%T(3zC%Zjt6!N?@|E zu&{S>@>5DM%?b?UKoK9NUvp}uGPk`r=cARH{$=0Ywr+`nCcE;EfXz%2J%@`sDC>X- zm;n$0p(z#PGRRKMd1jOIlz~Pu7+5qj_;gMbKh}>tNpam(WiE!UgcT;DZ!EAPyjT`)y?X1~%2XWe}f|3i#kAu z)`x?agpEr>APa%ehEuQj`aVag?Zjdc>Feu+1Gxr!`Ag;hwx4u$pF+*2!W)&h81l=B8O-m1IgXyY z6n!cn+{kqUtBBEC+($1e8%swTZlmDy6Vw3)auP55LPA58FJ0P=YoyCHpaYZwx?w#o zO96##E`>~dN+c4X9H?n8|B>eACZYZdy+xT}ny1j1*9=6;Crfb+!H3r|g+2>VerZ}1 zw`J?sBYmk&ii(dc#1C{asjZoeWCpu*{t~KL5GsBZ=oS<$orS2T^Hdp>te9eJ3I%s& zZf=J2W9-82IpJ&)I&#o4FoYVg7VFAc@0XS?vOVG%dn#U|nIoxf3=6Z7bbTn=xvn7! z^UyOfI=kqL>W!HT(gMX%vP}09m%F~KjNeXvd0_B??q8E-r%R?S_)sBLr*$zj8L;+s z2YQ!U5LOsKb>y%=%`|{KUR?!TV4Bhhp--sV1M#Q@>*rQ=~FUZ!y zgaJaAL2SJg%>>46+d`n$m|-_M$tD~GTR&g4w(A>8XJuXJlfuF_i*wv|sXBM=T>W>P zduvbOM~1>>Bm1+dXxY3&LPA`tOJ+XoxsD;vbzaL$OW$T2|$;`|&s72S5l$@`= zzP<)G=IbSU-bUG#);Rx=UCNy5w1ZFRD9eV!v07Xilid)3;lsyIoqFN?6^p+>A8)|L z!pmEjzcLkVR9X4g1v#sJ$kv`M54b{@C(m%g+*)@yUnt*!-H1O_YXAIe_P>AOzyHp^ zf7FWl&K+oNZu718+_ukD`uf$`TH(~Uch`3o;~yR zv-D4&w;-wC+ey6pQ)w+--FLj=+M9yj3f9^*Gu3@9ma*Nic43%ljSn-P$Gfe!S6tRX z6}`jvN8G_5>gvqle***AG*W`}$Ef-LzSRHWhO9zBo3g<88U-7xA6_3u{C1$h1DtU) zK*R^#ehR?^p(3=g%*)F+AfRWu-UbvTx&uoUPrutLB>FcZ$fW|YT}cRT(U#m4O}Js( z6kwdtafE5pCi1OYqofUN@&DjjZep{w{>w2Lyx}u6Y4)W?b7?AI8h0 zR;;3`DzVkN?!$*S&OIIh5Dox1H3cUyH9c+mcPm(-GrUmx+58trnhFaF%G=uVk2C?^ zCC)XPZx7nLBtX+1|LhqBDxm#OC0CZMuGk&lu_=T@f<}S5e`x4D${7l-PxGQ$#0U3` zN#DS9Su3 zefm5H8p~7pDcoo?a-$0uG4{{NaR~0nqm5WwMOO=Vv*^MweJ1*ls{#iSKcP)xy{&pno=p0^ES32OP0-I z#HO_kZ?%v38eA^XA{HEIIaC&zpo!g41b4T_eE93@{iu7niAVE9){TXD7Y&V1HsNU+ z0&z_v_KPzXY_$Ha$s^q*(ja4kL0o?SoOt4(`+_JKjo$u#9qU2}vtVxf8kM>HaM4g; zo>g0Mq4;|qLQX|XnId>;FZGblv+JSfp#aad&+IL=05gpYnw_^}f_>@2w~faWwdO{e z*2CZS+JtZA;J5{O1<^g4P1e=1q=}YOh7Gm=%7N`TRG?l03knLPnxIYKLCAscL`yj- zz+eZbmMMPy5ivQbrFDu&ASLP;NB#Tv@~WydxLBCj%ZJl1i$$UV#7*c$D5$8OBEkIa z`^p|WW@>geZGZ8S4WdzQU+yAID6x(@B+efsWKmEc1<9l}qtWU)zF;&95HManwQAnXOwu zL6l2}aLI8JQj;yhWW7-LRmp*UjS{wlly2(RuWBf3qWb5Ze|%*}js2^It0?=y(e!GH zg_>tFX%@aZV9i3MoTjXck{wGbC}?+I?%C?GGT$b7t{VdmZX;t#qo}J2W<3vm$4RYl z3@X?rbDa?{_ZA@!8401eID^|rV)(+Tf6VN%QCJMG8#Dt-4Po&6D9;)a??6trW7n?l zQ0bJT3(UPIPeM>q6*NvfQ~@?i^*kq`-!NGNNX6PY2^vLQR&ImJYba z;B>XP(GB8!i9%H5INpwMCnUwe(Gk)a#MC09HebZSF;XKWQBqL2>GJ!(4o7<-zyctVOfbt;dfa--1epTR?ysD_M!+D95oZBocCkit6h1(4MVYo%{tQR~+m$$s5n- zX-Wz;(hW4E|L-E+Zku&4!^2rG+t^H_B|qQJos{w|^Kp%hjcf<)xk+(Qj}Z0~YjZxv z8LjTGLz6-{Pi5t5sy5S)PYz+`gs)cWTa;vJYH8g>Z|T_ui0_E$6i7MIm`+|-mj!he zi>W-sUQGLJDK4b2-y(xAVkXJx9`XQogA5j!*Q&kA%T2L=e9;O&r~3-gVjW2UBL{~S zr>>^vjrp;*wynp>^SmVD(cVD=}h-8#QQz zABqTlP7YtdBq%6Y=OryI-J@CmF;*^=c$NoUW_Ex`c99)z%Ck8O``AA)z#||K7`u(Q z#%!zd2dar+{R0{;Ul~~P)aJA@sV$c1MIwq+c-cn8obz`=gM%yABpj-Ub2-rd>7e5< zBcXrWQ#U`+$-3**6ZzxE-|y}G_4DTohuJtHu0Gx7-W>!cyb^gYA*>ZLNW+Z~K9~@s z6WPc^RZ1_f)u>akVPWgSYA8_5<7q`$miME0Jf_yxwF+O?VY$$cXO@(-GtyFLP zt;l;rM^Iw*MJPn~r;VCqi^QCf$gxS<8b(7M%}~9b%iX?7fyk1uwQ}F=)NpERiHL}Z zI!u$8bi{}1NJ66tv|K2{k-u_fAJl@r?d^KA(dQ*N=pgdf(9rOPgt}AM0Rn*qm{w%* zB!o$DdzZf!Fu}i~GZ$YVs-~#1!T&SJTbZLjAFbiW)Tqij;l8|}AgE^E`Fq1%R1t4>ZoTPHw z55&N_?L`$jP(Vg_8~0aPS-FnOWA2{I=_-k{IBcPBG4H`jj?DK`=Ag+U9@O{;=IrcTtV$>_die&NC!Xc<3FjpipJ8fGNt z5A&`uM+cIf*oE=xJD`VoD?Qu)abLP-6MW$<3ywO(Zsq0mKk={3pwOw{Reru*_RoLC zI&8x1f1{q^Kh)uWBQQnUe}ASEh4Crl6Wf32FaPVCd-)B&^fa}VBP9MMi_;YJZ1lz? zE2>x}Y!TkxJ-%ZBW`e+pf)vTmp6#R(DT0ZCl|Y7T>EtAPwVxWLfV7DIAlQ+xjDe*@ zpy@dA<)H)`KbjSom+yG`=!D?Ir|7r_o1yG8#4c`092_6S-LDE=_v&X;0O|?6b&Gf= z8Lg+RU+lwZRc*`8ya^8`VKVuT^+y!<`XLsF-141*xQ3}I56J|oNc@J`5uBCBeWjt0 zCg=!8Ee}deQ}Z+Bvdu^HE@MlcCo%wgdvA<=!BiQ9D&#~QUj-9SMne4uB>#LQ`LvdA zEoY36$;*>4^r$geor{R7b~iiJK_>(ljs-BvEhOx|PS55weaq6%|KdBKM)HYMzYh{n&Hev}34yTeM5m+Ko)ax1^+m#0?o;R#fZwwXw|e)%0*syrjT0MlQ#m;C;Ir zOrfw{oS%n84L5>YrlO+Zd27>_T*}d7%ULMtaplyFysRDv@Kg32+$u-dN3@m+3f0zHbx~3+`&Jm!%h3A@NOluJ~W1DYnuJ35L#P~8b^ zIRF|#zC(xDp%EsL5*jUI8W0d+(~wALJVH7xS)0nazBkF)!sfjchNX4qwSw&!9B6OX zIoEmReEH?!rDn%nvzRZSIa_Wm8kAC%ots;Qvzm!nED>(JuL zI6dsztZ1Uv24!Vshm<`cB9aU*b+?z>n&S=W!%3Ntpb@45K|&>@*8U3%*Kv4TC!Qoa z6@hh!I%PZCAe+)18YgiVhf7f;g=T>om5V2;)p3Q)984h1?#Ys`8a9 z)3RqL31_r_mLqsYJJB%4~+&y!OggO7!3L8lf01Hb?W(YRX zo2ndWF_48UyPi^mCf)VPNcKtP05PB%qan5DTx39N0tytYBM6U!fS2SAUl@6`9l%3d zT-z%I%9vV2Alea!J*0dY3tZ=)A8RY(8T-UYMn*O`fP9Wrj)rGF(nhhP9FoWAQU*3F zm_TEvhfa!V`a=X@0O&ykLRnwT4tieYdFAfo$5wwjTUxdt;+&eA>WzvCBnt~1?w<4( zHY{KyG6{%+r|R}Mp!8`S37OmmXnXB}x*`)^87l&^j2&ccglhT@XSftCfk7ksx$&V1rt; zf9u~n;5h7lkT`DusNYsspNEW}nx6h0)SaIoj3Z(GbJT%uLklkNdEr6sa7^y?QYk`VkYXh!;iKDv_24 z-o7mn`<#J<=!2SuM#0nbFobVYkfrk=eFca|+&@H&cf-PbVA$i+(`oUX#PPz|!naVC zfM)&QadPuBm`ILet#mkV`|Zjg-|fSu8JtEBmVNkHM%*nLq>;g|A~q)G^?}e?jOWd! zIGp6W5V7g$yVp2V?dZ7)RHw+L9d=QG6bM6y|-6#|zd2q~R0XeCy=0>MjIE-XLli6{v}< zwGkWm9(v5$I-?;2VPSZ8@2>gnnnsB7)lg`Qv}!~2sa=F?L>SEj{0eX2jtr969`mil zs`H}B0YHt7J{8===p`mLHUV_*@MTm0Z*XjGqVvpe6dVz8%S0j# z!h+fjR&=?I*7E8;;q5Um5Tw-+(0yx}a9X7p*Xl ztE<~-+(w?U18!NExVakhO$4a4fXXK!U&e2U=$<0D`;G8W609g&V24EiT>))YKi^iCz*qLuvjS`w$aNi1m z)PPZove6C>^n3u+Mp$KHR3o5HoSiDrJH$&zCA%OC{DjCE^f8f5f&9Ua@zxRaQ{%71 zBh%E;@dXu@aIWYY;gDc91Hk|uO=y%))%gY?db(5fI1w$NozGF6b>fb|4S_F<>}(mE zUqA!aeJI2x$>V$Vp*E@v@czZk(QKpcd+@DW8k(A>e>#ES zcMs^q`k$R$QjJujLQBrsk>&jRFrPzT)SxmnkgQ9c%pDpSIFhK2a8mq)RGLG>k%-&aH_T`kRUuWOyTD8pGX3%VUV4>d&oTl?u|%m;AKNlZXd~Io&68HC~^H9 zPB(HxhRf}lWazDV{aetky6+&fLxC+5%P=)RUzKf9J8BqgmBB$)jx>yz$q2rMpd%Da zOiVIFC<2FnOf&1lL|QQszlpde4hV;C`yphgIIE`O9E2HVyZx@nY6w==yU|h+NENjH z7W4w&t3#`aeTl9~IJnqBrU*owZW?=lbDHk;VKAHiRyCLqg8(%E?i$D3PI?tRh^M_) ze|Zt?lrJN3x*;5}_De?DRxfNkj?DsEgrZy|B!JVE+O>oejW~!+`Q*tHaMU3PiOL~Y z2$h+kW)adeDZSSSb7URO>z3A*gX%$yN#y{paezS`UXnnN-jX>Vw=`w*#fZHJ$5^P91 zgP%{21%E=vmXK|SHi3l!u<`~~Gh4-1QNTI%)uEx!kJU)t(o%p(Hwbw}MMcHnC7jA& z0tYN{`$a@YnHTCg2(||hEo!>hq#Om%ID`U#6QmNP6e-zOAd3k~w-pd=;3RImt>n3q|9@r?mO0E?HY31j4H8rN57W*vbEMR zGP*;cM1TgaqsWzTi?r-w6sV&jDSX)P`lA+o7Z2 z4;x8p0(*NN+PnP*>tweXpF2u*>MR0bKT@z&A_~pa$gLjto zD-3JYsKg%NTZljMqhEjtCV^{u`!rW;a^>!wl@UMZ+z^}Hi;N_rt&R66Z3aA4&x^8c z+x#yrz^lPO0m<*7ywc419I^cf)Fn4_&78Lir%jwFduNude(6=~msL?hnxz?Rk=oRi z;#AbsWF54kZv9r<93Xy52Tbo|Ci-5b8@|3@6&E%7<5GZn%rJdI>ZpE3&kmzEA3XFk zwQHvG*Guz$>Y}eIR82o#;GLjfC8W3KVR(1|vYoA93kai6BEh6Apt>8(P+xz)FA-RA z+@?~#v#kP%AHtp2RumNW^$nf@m=Cp!qN(R}wn1f~RLuHlWw_Ru-U%Fx}E zqHL5g!()CWm)bN;nFHmty@OVYrxyQQcD&NWT@bylyT|hmrM2Ijt1RJg0kshj0yY)l zR*Bw&rNQY534E|hRJWCUF2=Y}0jbYh6wby;q>XUjihnd6Sio7q2x6I4cpk?2q;af9 zZ=&%?EPv6o*uK!Yg;c(41M5_q>7Vu~cM;|>!Rgl3&sOKcR5Aio6W<`TGPrmhh#``b z-%^#!b0a>$$usTOz}RMvfjOcNNLxf zljCoQGy9*~}$&Qf>BrVU(_@^mvxfv2ud1~_gj(hK=ab3WsW0=0bLQn$(AFLqK0 zwN-GqnRI5vxb|NIWw2lRA?@UC`jjn#X?eL62dm1paGz{QOwF6UK_6=z#UdocOz`=R}G3$6bcl13-)L3 zLiWpZMgA&b{HBQKg~XX8#_ZAhn^3I%Mw2Zf-UU1iR}GcHIudvsWsv*u|Gr?;DJUr5 z^XNcLsU~i^`uYh^7;y(F18M2$iYP|TLX~K+i1gvZoS^ef?ggcEh;iJ8>pqAn<|y|5 zlyO$_{eYA6jqTgF*GpQYrl-FJvWr6+j7rKBRO7a{%L|7e<^R6jBFNUyxRRJxsTr)} z(LaOE0*nfA$SdakYq#!ZrU3*ARTeMcLjV-8#CQ*<7acqPDtWAS_RS#1M_6y~>})qD zhK}UKseq4%Y*Hb)X`lI~f7Gv<)>u~<9uj#2&%fTB64iTqHgeofI?`s?eFyxKQo<1< zBTlFTFrx*0g6&ObLJaiu!md6?&Ogi6^kOeZG;K{}Q?3;-E3M;=-Z*_cGp*`TTBD_X z-y2G1X6AB45{ML$Cm=8vl8WqTZ!ZTfimKQfTB#reh#-x=?`n4|t$lus?R`-)>V=M| zINh|pd3xBe|48&8N|0Ym5yVWi_5$P+*uDD*pnq@;Uj>iyujAL;e+E1u>bG61(N&F* zt+uykYA80F{r=Uq?Kn4Cxi<621@2FK$uh z56k`Hbdgwtrx$joq_uDsQ+PwD&cNMQ8YVz5pM+6|~KQzs+B00bO zVOJR$cSAx(qH9wc=cdhVOYkJa|V;=SE zgc~yUtFO0#55z%{@KxSqgk7<9|ZR7A&@!b048>J47j#~2M?Bi z{78@A1$t)pDM7_x$t~%1o^#QF-qn)7Hq_wm=-o@!*4Bq@T5+)OREbx?S->MAk!bwL zBhNSu4^Gg6Jtpi?hHjKk3buCt)kCpvD*w9W)ARH9TgY;jUg?8QzjccS<5-X+kjjI` zD5rkft_P}(pcT0?l0Gbq|B1i0;i=pmb7HNSY48pFjzfWXBw9qe?Ye>dg)n{iz<%Wq zJ0kc{%`Y6bxe{0*QriUF;(^WTKsdUXQamzLO%Rl~# ze{7ny6!?ts=|^!1ug!lo{f#!2{60JG4NRL~eab;h{Q;Jk**YRdY(PcaQ?n)FKEOZ3 z@OYp;BE2X&zX?L}bDRDA=xJMOVjE$HSpDesT($w+bRMb2aC7QrLLiMOi9oaowUnb& zbk!G}&PsIf35HmkP>!Hu7=f)|Oa~()qc?N~_C9N7J?9O0g3&$zzW_7%pnAdlA|n2> z#|#UZ`DX0}(6X#JZNzYn4mNEnBPK(+dxiH0y`o4BusriA!3S5IRD%! z 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 - - - - - - - -Get the semantic.dashboard dependencies — get_dashboard_dependencies • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    To add dependencies in the future follow the htmlDependency help.

    -
    - -
    get_dashboard_dependencies()
    - - -

    Value

    - -

    semantic.dashboard dependencies

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/icon.html b/docs/reference/icon.html deleted file mode 100644 index 7c25fb6..0000000 --- a/docs/reference/icon.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - -Create Semantic UI icon tag (alias for <code>icon</code> for compatibility with <code>shinydashboard</code>) — icon • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    This creates an icon tag using Semantic UI styles.

    -
    - -
    icon(type, ...)
    - -

    Arguments

    - - - - - - - - - - -
    type

    A name of an icon. Look at http://semantic-ui.com/elements/icon.html for all possibilities.

    ...

    Other arguments to be added as attributes of the tag (e.g. style, class etc.)

    - - -

    Examples

    -
    icon("dog")
    #> <i class="dog icon"></i>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index 774c26c..0000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - - -Function reference • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    Dashboard skeleton

    -

    -
    -

    dashboard_body() dashboardBody()

    -

    Create a body of a dashboard.

    -

    dashboard_header() dashboardHeader()

    -

    Create a header of a dashboard.

    -

    dashboard_page() dashboardPage()

    -

    Create a dashboard.

    -

    dashboard_sidebar() dashboardSidebar()

    -

    Create a sidebar of a dashboard.

    -

    column()

    -

    Create a column.

    -

    box()

    -

    Create a box.

    -

    dropdown_menu() dropdownMenu()

    -

    Create a dropdown menu.

    -

    dropdown_menu_output() dropdownMenuOutput()

    -

    Create a dropdown menu output.

    -

    render_dropdown_menu() renderDropdownMenu()

    -

    Create a dropdown menu output.

    -

    Other UI elements

    -

    All functions that generate UI elements.

    -
    -

    value_box() valueBox() infoBox()

    -

    Create a valueBox.

    -

    value_box_output() valueBoxOutput() infoBoxOutput()

    -

    Create a value box output.

    -

    menu_item() menuItem() menuSubItem()

    -

    Create a menu item.

    -

    menu_item_output() menuItemOutput()

    -

    Create a menu item output.

    -

    message_item() messageItem()

    -

    Create a message item.

    -

    notification_item() notificationItem()

    -

    Create a notification item.

    -

    render_value_box() renderValueBox() renderInfoBox()

    -

    Create a value box output.

    -

    render_menu() renderMenu()

    -

    Create a menu output.

    -

    render_dropdown_menu() renderDropdownMenu()

    -

    Create a dropdown menu output.

    -

    sidebar_menu() sidebarMenu()

    -

    Create a sidebar menu.

    -

    sidebar_menu_output() sidebarMenuOutput()

    -

    Create a sidebar menu output.

    -

    tab_box() tabBox()

    -

    Create a tab box.

    -

    tab_item() tabItem()

    -

    Create a tab.

    -

    tab_items() tabItems()

    -

    Create a panel with tabs.

    -

    task_item() taskItem()

    -

    Create a task item.

    -

    Constants

    -

    They contain the supported values of certain inputs.

    -
    -

    light_semantic_palette

    -

    Semantic light colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables

    -

    semantic_palette

    -

    Semantic colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables

    -
    - - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/light_semantic_palette.html b/docs/reference/light_semantic_palette.html deleted file mode 100644 index fd7143b..0000000 --- a/docs/reference/light_semantic_palette.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - -Semantic light colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables — light_semantic_palette • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Semantic light colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables

    -
    - -
    light_semantic_palette
    - - -

    Format

    - -

    An object of class character of length 13.

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/menu_item.html b/docs/reference/menu_item.html deleted file mode 100644 index 1790f49..0000000 --- a/docs/reference/menu_item.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - -Create a menu item. — menu_item • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a menu item corresponding to a tab.

    -
    - -
    menu_item(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE)
    -
    -menuItem(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE)
    -
    -menuSubItem(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    text

    Text to show for the menu item.

    ...

    This may consist of menuSubItems.

    icon

    Icon of the menu item. (Optional)

    tabName

    Id of the tab. Not compatible with href.

    href

    A link address. Not compatible with tabName.

    newtab

    If href is supplied, should the link open in a new browser tab?

    - -

    Value

    - -

    A menu item that can be passed sidebarMenu

    -

    Functions

    - - -
      -
    • menuItem: Create a menu item (alias for manu_item for compatibility with shinydashboard)

    • -
    • menuSubItem: Create a menu item (alias for manu_item for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home"))
    #> <a class="item" href="#shiny-tab-plot_tab" data-tab="shiny-tab-plot_tab" data-toggle="tab" data-value="plot_tab"> -#> <i class="home icon"></i> -#> My plot -#> </a>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/menu_item_output.html b/docs/reference/menu_item_output.html deleted file mode 100644 index 984d414..0000000 --- a/docs/reference/menu_item_output.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - -Create a menu item output. — menu_item_output • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    UI-side function for dynamic manuItem.

    -
    - -
    menu_item_output(outputId)
    -
    -menuItemOutput(outputId)
    - -

    Arguments

    - - - - - - -
    outputId

    Id of the output.

    - -

    Value

    - -

    A menu item that can be passed to sidebarMenu

    -

    Functions

    - - -
      -
    • menuItemOutput: Create a menu item output (alias for menu_item_output for compatibility with shinydashboard)

    • -
    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/message_item.html b/docs/reference/message_item.html deleted file mode 100644 index e356579..0000000 --- a/docs/reference/message_item.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - -Create a message item. — message_item • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a message item.

    -
    - -
    message_item(from, message, ..., icon = "user")
    -
    -messageItem(from, message, ..., icon = "user")
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - -
    from

    Who the message is from.

    message

    Text of the message.

    ...

    Additional UI elements to include within the dropdown menu.

    icon

    Additional icon.

    - -

    Value

    - -

    A message item that can be passed to dropdownMenu

    -

    Functions

    - - -
      -
    • messageItem: Create a message item (alias for message_item for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    messageItem("Marek", "Another test!", icon = "warning")
    #> <a class="item"> -#> <span class="description">Another test!</span> -#> <span class="text"> -#> <i class="warning icon"></i> -#> Marek -#> </span> -#> </a>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/notification_item.html b/docs/reference/notification_item.html deleted file mode 100644 index ee9cea9..0000000 --- a/docs/reference/notification_item.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - -Create a notification item. — notification_item • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a notification item.

    -
    - -
    notification_item(text, icon = "warning", color = "")
    -
    -notificationItem(text, icon = "warning", color = "")
    - -

    Arguments

    - - - - - - - - - - - - - - -
    text

    Text of the notification.

    icon

    Additional icon.

    color

    Color of the notification item. One of -c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", -"violet", "purple", "pink", "brown", "grey", "black")

    - -

    Value

    - -

    A notification item that can be passed to dropdownMenu

    -

    Functions

    - - -
      -
    • notificationItem: Create a notification item (alias for notification_item for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    notificationItem("This is notification!", color = "red")
    #> <div class="item"> -#> <div class="ui label red"> -#> <i class="small warning icon"></i> -#> This is notification! -#> </div> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/render_dropdown_menu.html b/docs/reference/render_dropdown_menu.html deleted file mode 100644 index 1dab7e7..0000000 --- a/docs/reference/render_dropdown_menu.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - -Create a dropdown menu output. — render_dropdown_menu • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Server-side function for dynamic dropdownMenu.

    -
    - -
    render_dropdown_menu(expr, env = parent.frame(), quoted = FALSE)
    -
    -renderDropdownMenu(expr, env = parent.frame(), quoted = FALSE)
    - -

    Arguments

    - - - - - - - - - - - - - - -
    expr

    dropdownMenu.

    env

    The environment in which to evaluate expr.

    quoted

    Is expr a quoted expression (with quote())? This is useful if you want to save an expression in a variable.

    - -

    Value

    - -

    A dynamic dropdown menu that can be assigned to output.

    -

    Functions

    - - -
      -
    • renderDropdownMenu: Create a dropdown menu output (alias for render_dropdown_menu for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    if (FALSE) { -dropdownMenuOutput("dropdown") - -output$dropdown <- renderDropdownMenu({ - dropdownMenu(messageItem("Michał", "Test message", color = "teal"), - messageItem("Marek", "Another test!", icon = "warning", color = "red")) -}) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/render_menu.html b/docs/reference/render_menu.html deleted file mode 100644 index 76df4e1..0000000 --- a/docs/reference/render_menu.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - -Create a menu output. — render_menu • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Server-side function for dynamic sidebarMenu.

    -
    - -
    render_menu(expr, env = parent.frame(), quoted = FALSE)
    -
    -renderMenu(expr, env = parent.frame(), quoted = FALSE)
    - -

    Arguments

    - - - - - - - - - - - - - - -
    expr

    menu.

    env

    The environment in which to evaluate expr.

    quoted

    Is expr a quoted expression (with quote())? This is useful if you want to save an expression in a variable.

    - -

    Value

    - -

    A dynamic menu that can be assigned to output.

    -

    Functions

    - - -
      -
    • renderMenu: Create a menu output (alias for render_menu for compatibility with shinydashboard)

    • -
    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/render_value_box.html b/docs/reference/render_value_box.html deleted file mode 100644 index 37ee400..0000000 --- a/docs/reference/render_value_box.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - -Create a value box output. — render_value_box • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Server-side function for dynamic valueBox.

    -
    - -
    render_value_box(expr, env = parent.frame(), quoted = FALSE)
    -
    -renderValueBox(expr, env = parent.frame(), quoted = FALSE)
    -
    -renderInfoBox(expr, env = parent.frame(), quoted = FALSE)
    - -

    Arguments

    - - - - - - - - - - - - - - -
    expr

    ValueBox.

    env

    The environment in which to evaluate expr.

    quoted

    Is expr a quoted expression (with quote())? -This is useful if you want to save an expression in a variable.

    - -

    Value

    - -

    A dynamic valueBox that can be assigned to output.

    -

    Functions

    - - -
      -
    • renderValueBox: Create a value box output (alias for render_value_box)

    • -
    • renderInfoBox: Create a value box output (alias for render_value_box)

    • -
    - -

    Examples

    -
    if (FALSE) { -valueBoxOutput("value_box") - -output$value_box <- renderValueBox({ - valueBox( - value = 33.45, - subtitle = "Simple valuebox", - icon = icon("bar chart"), - color = "purple", - width = 5) -}) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/semantic.dashboard.html b/docs/reference/semantic.dashboard.html deleted file mode 100644 index d3b57ba..0000000 --- a/docs/reference/semantic.dashboard.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - -semantic.dashboard — semantic.dashboard • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    semantic.dashboard

    -
    - - - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/semantic_palette.html b/docs/reference/semantic_palette.html deleted file mode 100644 index 82214bf..0000000 --- a/docs/reference/semantic_palette.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - -Semantic colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables — semantic_palette • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Semantic colors -https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables

    -
    - -
    semantic_palette
    - - -

    Format

    - -

    An object of class character of length 13.

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/sidebar_menu.html b/docs/reference/sidebar_menu.html deleted file mode 100644 index 4e23904..0000000 --- a/docs/reference/sidebar_menu.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - -Create a sidebar menu. — sidebar_menu • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a sidebar menu with menu items.

    -
    - -
    sidebar_menu(..., id = "uisidebar")
    -
    -sidebarMenu(..., id = "uisidebar")
    - -

    Arguments

    - - - - - - - - - - -
    ...

    Menu items.

    id

    The sidebar id class also used for update input on server side. Default is uisidebar

    - -

    Value

    - -

    A sidebar menu that can be passed dashboardSidebar

    -

    Functions

    - - -
      -
    • sidebarMenu: Create a sidebar menu (alias for sidebar_menu for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    sidebarMenu( - menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), - menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")) - )
    #> $id -#> [1] "uisidebar" -#> -#> [[2]] -#> <a class="item" href="#shiny-tab-plot_tab" data-tab="shiny-tab-plot_tab" data-toggle="tab" data-value="plot_tab"> -#> <i class="home icon"></i> -#> My plot -#> </a> -#> -#> [[3]] -#> <a class="item" href="#shiny-tab-table_tab" data-tab="shiny-tab-table_tab" data-toggle="tab" data-value="table_tab"> -#> <i class="smile icon"></i> -#> My table -#> </a> -#>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/sidebar_menu_output.html b/docs/reference/sidebar_menu_output.html deleted file mode 100644 index 6373c73..0000000 --- a/docs/reference/sidebar_menu_output.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - -Create a sidebar menu output. — sidebar_menu_output • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    UI-side function for dynamic sidebarMenu.

    -
    - -
    sidebar_menu_output(outputId)
    -
    -sidebarMenuOutput(outputId)
    - -

    Arguments

    - - - - - - -
    outputId

    Id of the output.

    - -

    Value

    - -

    A sidebar menu that can be passed to dashboardSidebar

    -

    Functions

    - - -
      -
    • sidebarMenuOutput: Create a sidebar menu output (alias for sidebar_menu_output for compatibility with shinydashboard)

    • -
    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/tab_box.html b/docs/reference/tab_box.html deleted file mode 100644 index 45362e6..0000000 --- a/docs/reference/tab_box.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - - -Create a tab box. — tab_box • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a tab box with additional UI elements.

    -
    - -
    tab_box(
    -  tabs,
    -  title = NULL,
    -  color = "",
    -  ribbon = TRUE,
    -  title_side = "top right",
    -  collapsible = TRUE,
    -  width = 8,
    -  id = NULL,
    -  ...
    -)
    -
    -tabBox(
    -  tabs,
    -  title = NULL,
    -  color = "",
    -  ribbon = TRUE,
    -  title_side = "top right",
    -  collapsible = TRUE,
    -  width = 8,
    -  id = NULL,
    -  ...
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    tabs

    Tabs to include within the box.

    title

    Label of the box.

    color

    Color of the box. One of c("", "red", "orange", "yellow", -"olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")

    ribbon

    Should label be presented as ribbon.

    title_side

    Side of a label. One of c("top", "bottom", "top left", -"top right", "bottom left", "bottom right") if ribbon = FALSE, or one of -c("top left", "top right") if ribbon = TRUE

    collapsible

    Should minimize button be added to label.

    width

    Width of the box.

    id

    ID of the box.

    ...

    other elements of the box.

    - -

    Value

    - -

    A box that can be passed to dashboardBody

    -

    Functions

    - - -
      -
    • tabBox: Create a tab box (alias for tab_box for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    tabBox(title = "Sample tab box", color = "blue", width = 5, - tabs = list( - list(menu = "First Tab", content = "This is first tab"), - list(menu = "Second Tab", content = "This is second tab") - ))
    #> <div class="five wide column"> -#> <div class="ui segment raised blue"> -#> <div id="box_750512081470292169253906552817" class="ui accordion"> -#> <div class="title" style="cursor: auto"> -#> <div class="ui top right ribbon label blue"> -#> <i class="minus icon" style="cursor: pointer;"></i> -#> Sample tab box -#> </div> -#> </div> -#> <div class="content active"> -#> <div> -#> <div id="menu-fmmyucmrwtkdbirslsqj" class="ui menu sem top attached tabular"> -#> <a class="item active" data-tab="tab-aaglvijbfglzvnegslqe">First Tab</a> -#> <a class="item " data-tab="tab-qmfaamrewkadgwxbhisi">Second Tab</a> -#> </div> -#> <div class="ui tab bottom attached grid segment active" data-tab="tab-aaglvijbfglzvnegslqe">This is first tab</div> -#> <div class="ui tab bottom attached grid segment " data-tab="tab-qmfaamrewkadgwxbhisi">This is second tab</div> -#> </div> -#> </div> -#> </div> -#> </div> -#> <script>$(document).ready(function() { $('#box_750512081470292169253906552817').accordion({ -#> selector: { trigger: '.title .icon' }, -#> onOpening: function() { $('#box_750512081470292169253906552817').find('.label .icon').removeClass('plus').addClass('minus'); }, -#> onClosing: function() { $('#box_750512081470292169253906552817').find('.label .icon').removeClass('minus').addClass('plus'); } -#> }); })</script> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/tab_item.html b/docs/reference/tab_item.html deleted file mode 100644 index 610abaf..0000000 --- a/docs/reference/tab_item.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - -Create a tab. — tab_item • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -
    - -
    tab_item(tabName, ..., fluid = TRUE)
    -
    -tabItem(tabName, ..., fluid = TRUE)
    - -

    Arguments

    - - - - - - - - - - - - - - -
    tabName

    Id of the tab.

    ...

    UI elements to include within the tab.

    fluid

    Controls whether tab width should be 100

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/tab_items.html b/docs/reference/tab_items.html deleted file mode 100644 index 02a23f0..0000000 --- a/docs/reference/tab_items.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - -Create a panel with tabs. — tab_items • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a panel with tabs.

    -
    - -
    tab_items(..., selected = 1)
    -
    -tabItems(..., selected = 1)
    - -

    Arguments

    - - - - - - - - - - -
    ...

    Tabs.

    selected

    Which tab should be active on start.

    - -

    Value

    - -

    A panel with tabs that can be passed to dashboardBody

    -

    Functions

    - - -
      -
    • tabItems: Create a panel with tabs (alias for tab_items for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    tabItems( - tabItem(tabName = "tab1", "Tab 1"), - tabItem(tabName = "tab2", "Tab 2"))
    #> <div class="tab-content"> -#> <div role="tabpanel" style="height: 100%;" class="ui tab tab-pane container fluid active" id="shiny-tab-tab1" data-tab="shiny-tab-tab1"> -#> <div class="ui padded grid">Tab 1</div> -#> </div> -#> <div role="tabpanel" style="height: 100%;" class="ui tab tab-pane container fluid" id="shiny-tab-tab2" data-tab="shiny-tab-tab2"> -#> <div class="ui padded grid">Tab 2</div> -#> </div> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/task_item.html b/docs/reference/task_item.html deleted file mode 100644 index 1565732..0000000 --- a/docs/reference/task_item.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - -Create a task item. — task_item • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a task item.

    -
    - -
    task_item(text, value, color = "")
    -
    -taskItem(text, value, color = "")
    - -

    Arguments

    - - - - - - - - - - - - - - -
    text

    Progress bar label.

    value

    Progress bar value.

    color

    Color of the task item. One of c("", "red", "orange", -"yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", -"brown", "grey", "black")

    - -

    Value

    - -

    A task item that can be passed to dropdownMenu

    -

    Functions

    - - -
      -
    • taskItem: Create a task item (alias for taks_item for compatibility with shinydashboard)

    • -
    - -

    Examples

    -
    taskItem("Project progress...", 50.777, color = "red")
    #> <div class="item" style="min-width: 200px;"> -#> <div class="ui active progress red" data-percent="50.777" data-total="100"> -#> <div class="bar"> -#> <div class="progress"></div> -#> </div> -#> <div class="label">Project progress...</div> -#> </div> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/validate_tab_name.html b/docs/reference/validate_tab_name.html deleted file mode 100644 index 37e3785..0000000 --- a/docs/reference/validate_tab_name.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - -Valid tab name should not containt dot character '.'. — validate_tab_name • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Valid tab name should not containt dot character '.'.

    -
    - -
    validate_tab_name(name)
    - -

    Arguments

    - - - - - - -
    name

    Tab name to validate.

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/value_box.html b/docs/reference/value_box.html deleted file mode 100644 index d155ee6..0000000 --- a/docs/reference/value_box.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - - -Create a valueBox. — value_box • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create a valueBox with additional UI elements.

    -
    - -
    value_box(subtitle, value, icon = NULL, color = "blue", width = 5, size = "")
    -
    -valueBox(subtitle, value, icon = NULL, color = "blue", width = 5, size = "")
    -
    -infoBox(subtitle, value, icon = NULL, color = "blue", width = 5, size = "")
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    subtitle

    Label of the valueBox.

    value

    Value of the valueBox.

    icon

    Icon of the valueBox.

    color

    Color of the valueBox. One of c("", "red", "orange", "yellow", -"olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")

    width

    Width of the valueBox.

    size

    Size of value. One of c("mini", "tiny", "small", "", "large", "huge"). -Default is "".

    - -

    Value

    - -

    A valueBox that can be passed to dashboardBody

    -

    Functions

    - - -
      -
    • valueBox: Create a valueBox (alias for value_box)

    • -
    • infoBox: Create a valueBox (alias for value_box)

    • -
    - -

    Examples

    -
    valueBox("Unread Mail", 44, icon("mail"), color = "blue", width = 5, size = "tiny")
    #> <div class="five wide column"> -#> <div class="ui fluid card blue"> -#> <div class="ui statistic tiny"> -#> <div class="value"> -#> <i class="mail icon"></i> -#> 44 -#> </div> -#> <div class="label">Unread Mail</div> -#> </div> -#> </div> -#> </div>
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/value_box_output.html b/docs/reference/value_box_output.html deleted file mode 100644 index 0c7c653..0000000 --- a/docs/reference/value_box_output.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - -Create a value box output. — value_box_output • SHINY.SEMANTIC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    UI-side function for dynamic valueBox.

    -
    - -
    value_box_output(outputId, width = 5)
    -
    -valueBoxOutput(outputId, width = 5)
    -
    -infoBoxOutput(outputId, width = 5)
    - -

    Arguments

    - - - - - - - - - - -
    outputId

    Id of the output.

    width

    Width of the valueBox.

    - -

    Value

    - -

    A value box that can be passed to dashboardBody

    -

    Functions

    - - -
      -
    • valueBoxOutput: Create a valueBox output (alias for value_box_output)

    • -
    • infoBoxOutput: Create a valueBox output (alias for value_box_output)

    • -
    - -

    Examples

    -
    if (FALSE) { -valueBoxOutput("value_box") - -output$value_box <- renderValueBox({ - valueBox( - value = 33.45, - subtitle = "Simple valuebox", - icon = icon("bar chart"), - color = "purple", - width = 5) -}) -}
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.5.1.

    -
    - -
    -
    - - - - - - - - From f63ed45eee77bab3e10b6c914f437a6c86da474c Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:17:09 +0200 Subject: [PATCH 27/71] Add docs to .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e536448..42726c5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ vignettes/*.pdf *.knit.md .Rproj.user +/docs/ From 6b36f6eace4f41f257563deba4c7b602d643e078 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:26:15 +0200 Subject: [PATCH 28/71] Add missing documentation keywords. --- DESCRIPTION | 2 +- R/deps.R | 1 + R/menu_item.R | 1 + R/semantic_dashboard.R | 1 + man/dashboard_body.Rd | 4 ++-- man/dashboard_header.Rd | 4 ++-- man/dashboard_page.Rd | 4 ++-- man/dashboard_sidebar.Rd | 4 ++-- man/dropdown_menu.Rd | 4 ++-- man/dropdown_menu_output.Rd | 4 ++-- man/get_dashboard_dependencies.Rd | 1 + man/menu_item.Rd | 6 +++--- man/menu_item_output.Rd | 4 ++-- man/message_item.Rd | 4 ++-- man/notification_item.Rd | 4 ++-- man/render_dropdown_menu.Rd | 4 ++-- man/render_menu.Rd | 4 ++-- man/render_value_box.Rd | 6 +++--- man/semantic.dashboard.Rd | 1 + man/sidebar_menu.Rd | 4 ++-- man/sidebar_menu_output.Rd | 4 ++-- man/tab_box.Rd | 4 ++-- man/tab_item.Rd | 4 ++-- man/tab_items.Rd | 4 ++-- man/task_item.Rd | 4 ++-- man/update_tab_items.Rd | 4 ++-- man/validate_tab_name.Rd | 1 + man/value_box.Rd | 6 +++--- man/value_box_output.Rd | 6 +++--- 29 files changed, 55 insertions(+), 49 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0252037..eab4c11 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -28,6 +28,6 @@ Suggests: knitr, rmarkdown, markdown -RoxygenNote: 7.1.2 +RoxygenNote: 7.2.1 VignetteBuilder: knitr diff --git a/R/deps.R b/R/deps.R index edf146c..b70917f 100644 --- a/R/deps.R +++ b/R/deps.R @@ -3,6 +3,7 @@ #' @description To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} help. #' #' @return semantic.dashboard dependencies +#' @keywords internal get_dashboard_dependencies <- function() { list( htmlDependency( diff --git a/R/menu_item.R b/R/menu_item.R index 430ae21..ef70e7a 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -14,6 +14,7 @@ icon <- function(type, ...) { #' Valid tab name should not containt dot character '.'. #' @param name Tab name to validate. +#' @keywords internal validate_tab_name <- function(name) { if (grepl(".", name, fixed = TRUE)) { stop("tabName must not have a '.' in it.") diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index b14ebde..7929c95 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -4,6 +4,7 @@ #' @import htmltools #' @import glue #' @import checkmate +#' @keywords internal NULL #' Create a header of a dashboard. diff --git a/man/dashboard_body.Rd b/man/dashboard_body.Rd index bc72d97..b2f45c5 100644 --- a/man/dashboard_body.Rd +++ b/man/dashboard_body.Rd @@ -22,9 +22,9 @@ Create a body of a dashboard with tabs and other additional UI elements. } \section{Functions}{ \itemize{ -\item \code{dashboardBody}: Create a body of a dashboard (alias for \code{dashboard_body} for compatibility with \code{shinydashboard}) -}} +\item \code{dashboardBody()}: Create a body of a dashboard (alias for \code{dashboard_body} for compatibility with \code{shinydashboard}) +}} \examples{ if(interactive()){ diff --git a/man/dashboard_header.Rd b/man/dashboard_header.Rd index 2a49d85..8ad275a 100644 --- a/man/dashboard_header.Rd +++ b/man/dashboard_header.Rd @@ -79,9 +79,9 @@ Create a header of a dashboard with other additional UI elements. } \section{Functions}{ \itemize{ -\item \code{dashboardHeader}: Create a header of a dashboard (alias for \code{dashboard_header} for compatibility with \code{shinydashboard}) -}} +\item \code{dashboardHeader()}: Create a header of a dashboard (alias for \code{dashboard_header} for compatibility with \code{shinydashboard}) +}} \examples{ if(interactive()) { diff --git a/man/dashboard_page.Rd b/man/dashboard_page.Rd index 034b9bc..a9d31a0 100644 --- a/man/dashboard_page.Rd +++ b/man/dashboard_page.Rd @@ -60,9 +60,9 @@ Create a page with menu item sidebar and body containing tabs and other addition } \section{Functions}{ \itemize{ -\item \code{dashboardPage}: Create a dashboard (alias for \code{dashboard_page} for compatibility with \code{shinydashboard}) -}} +\item \code{dashboardPage()}: Create a dashboard (alias for \code{dashboard_page} for compatibility with \code{shinydashboard}) +}} \examples{ if(interactive()){ diff --git a/man/dashboard_sidebar.Rd b/man/dashboard_sidebar.Rd index 24aab97..dfaf455 100644 --- a/man/dashboard_sidebar.Rd +++ b/man/dashboard_sidebar.Rd @@ -75,9 +75,9 @@ Create a pushable sidebar of a dashboard with menu items and other additional UI } \section{Functions}{ \itemize{ -\item \code{dashboardSidebar}: Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} for compatibility with \code{shinydashboard}) -}} +\item \code{dashboardSidebar()}: Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} for compatibility with \code{shinydashboard}) +}} \examples{ if(interactive()){ diff --git a/man/dropdown_menu.Rd b/man/dropdown_menu.Rd index 74689a6..3934067 100644 --- a/man/dropdown_menu.Rd +++ b/man/dropdown_menu.Rd @@ -26,9 +26,9 @@ Create a dropdown menu with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{dropdownMenu}: Create a dropdown menu (alias for \code{dropdown_menu} for compatibility with \code{shinydashboard}) -}} +\item \code{dropdownMenu()}: Create a dropdown menu (alias for \code{dropdown_menu} for compatibility with \code{shinydashboard}) +}} \examples{ dropdownMenu(icon = icon("warning sign"), taskItem("Project progress...", 50.777, color = "red")) dropdownMenu(type = "notifications", notificationItem("This is notification!", color = "red")) diff --git a/man/dropdown_menu_output.Rd b/man/dropdown_menu_output.Rd index c8679a4..ee3b062 100644 --- a/man/dropdown_menu_output.Rd +++ b/man/dropdown_menu_output.Rd @@ -20,9 +20,9 @@ UI-side function for dynamic dropdownMenu. } \section{Functions}{ \itemize{ -\item \code{dropdownMenuOutput}: Create a dropdown menu output (alias for \code{dropdown_menu_output} for compatibility with \code{shinydashboard}) -}} +\item \code{dropdownMenuOutput()}: Create a dropdown menu output (alias for \code{dropdown_menu_output} for compatibility with \code{shinydashboard}) +}} \examples{ \dontrun{ dropdownMenuOutput("dropdown") diff --git a/man/get_dashboard_dependencies.Rd b/man/get_dashboard_dependencies.Rd index 2a2cb88..88e763f 100644 --- a/man/get_dashboard_dependencies.Rd +++ b/man/get_dashboard_dependencies.Rd @@ -12,3 +12,4 @@ semantic.dashboard dependencies \description{ To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} help. } +\keyword{internal} diff --git a/man/menu_item.Rd b/man/menu_item.Rd index 323fcb4..a401635 100644 --- a/man/menu_item.Rd +++ b/man/menu_item.Rd @@ -59,11 +59,11 @@ Create a menu item corresponding to a tab. } \section{Functions}{ \itemize{ -\item \code{menuItem}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +\item \code{menuItem()}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) -\item \code{menuSubItem}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) -}} +\item \code{menuSubItem()}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +}} \examples{ menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")) } diff --git a/man/menu_item_output.Rd b/man/menu_item_output.Rd index a269a62..993f0ec 100644 --- a/man/menu_item_output.Rd +++ b/man/menu_item_output.Rd @@ -20,6 +20,6 @@ UI-side function for dynamic manuItem. } \section{Functions}{ \itemize{ -\item \code{menuItemOutput}: Create a menu item output (alias for \code{menu_item_output} for compatibility with \code{shinydashboard}) -}} +\item \code{menuItemOutput()}: Create a menu item output (alias for \code{menu_item_output} for compatibility with \code{shinydashboard}) +}} diff --git a/man/message_item.Rd b/man/message_item.Rd index 4680710..a4eceae 100644 --- a/man/message_item.Rd +++ b/man/message_item.Rd @@ -26,9 +26,9 @@ Create a message item. } \section{Functions}{ \itemize{ -\item \code{messageItem}: Create a message item (alias for \code{message_item} for compatibility with \code{shinydashboard}) -}} +\item \code{messageItem()}: Create a message item (alias for \code{message_item} for compatibility with \code{shinydashboard}) +}} \examples{ messageItem("Marek", "Another test!", icon = "warning") } diff --git a/man/notification_item.Rd b/man/notification_item.Rd index b7c74ed..dd38395 100644 --- a/man/notification_item.Rd +++ b/man/notification_item.Rd @@ -26,9 +26,9 @@ Create a notification item. } \section{Functions}{ \itemize{ -\item \code{notificationItem}: Create a notification item (alias for \code{notification_item} for compatibility with \code{shinydashboard}) -}} +\item \code{notificationItem()}: Create a notification item (alias for \code{notification_item} for compatibility with \code{shinydashboard}) +}} \examples{ notificationItem("This is notification!", color = "red") } diff --git a/man/render_dropdown_menu.Rd b/man/render_dropdown_menu.Rd index a879f43..9a5a53e 100644 --- a/man/render_dropdown_menu.Rd +++ b/man/render_dropdown_menu.Rd @@ -24,9 +24,9 @@ Server-side function for dynamic dropdownMenu. } \section{Functions}{ \itemize{ -\item \code{renderDropdownMenu}: Create a dropdown menu output (alias for \code{render_dropdown_menu} for compatibility with \code{shinydashboard}) -}} +\item \code{renderDropdownMenu()}: Create a dropdown menu output (alias for \code{render_dropdown_menu} for compatibility with \code{shinydashboard}) +}} \examples{ \dontrun{ dropdownMenuOutput("dropdown") diff --git a/man/render_menu.Rd b/man/render_menu.Rd index 49fdc7f..2a6fd13 100644 --- a/man/render_menu.Rd +++ b/man/render_menu.Rd @@ -24,6 +24,6 @@ Server-side function for dynamic sidebarMenu. } \section{Functions}{ \itemize{ -\item \code{renderMenu}: Create a menu output (alias for \code{render_menu} for compatibility with \code{shinydashboard}) -}} +\item \code{renderMenu()}: Create a menu output (alias for \code{render_menu} for compatibility with \code{shinydashboard}) +}} diff --git a/man/render_value_box.Rd b/man/render_value_box.Rd index 8375a4a..202c98e 100644 --- a/man/render_value_box.Rd +++ b/man/render_value_box.Rd @@ -28,11 +28,11 @@ Server-side function for dynamic valueBox. } \section{Functions}{ \itemize{ -\item \code{renderValueBox}: Create a value box output (alias for \code{render_value_box}) +\item \code{renderValueBox()}: Create a value box output (alias for \code{render_value_box}) -\item \code{renderInfoBox}: Create a value box output (alias for \code{render_value_box}) -}} +\item \code{renderInfoBox()}: Create a value box output (alias for \code{render_value_box}) +}} \examples{ \dontrun{ valueBoxOutput("value_box") diff --git a/man/semantic.dashboard.Rd b/man/semantic.dashboard.Rd index 91726f9..eecaa1c 100644 --- a/man/semantic.dashboard.Rd +++ b/man/semantic.dashboard.Rd @@ -6,3 +6,4 @@ \description{ semantic.dashboard } +\keyword{internal} diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index 31eb49b..f0e0724 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -25,9 +25,9 @@ It's possible to set selected menu item by setting `selected = TRUE` in `menuIte } \section{Functions}{ \itemize{ -\item \code{sidebarMenu}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) -}} +\item \code{sidebarMenu()}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) +}} \examples{ sidebarMenu( menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), diff --git a/man/sidebar_menu_output.Rd b/man/sidebar_menu_output.Rd index 47de9fc..b0dd6fb 100644 --- a/man/sidebar_menu_output.Rd +++ b/man/sidebar_menu_output.Rd @@ -20,6 +20,6 @@ UI-side function for dynamic sidebarMenu. } \section{Functions}{ \itemize{ -\item \code{sidebarMenuOutput}: Create a sidebar menu output (alias for \code{sidebar_menu_output} for compatibility with \code{shinydashboard}) -}} +\item \code{sidebarMenuOutput()}: Create a sidebar menu output (alias for \code{sidebar_menu_output} for compatibility with \code{shinydashboard}) +}} diff --git a/man/tab_box.Rd b/man/tab_box.Rd index d99425b..57311d7 100644 --- a/man/tab_box.Rd +++ b/man/tab_box.Rd @@ -59,9 +59,9 @@ Create a tab box with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{tabBox}: Create a tab box (alias for \code{tab_box} for compatibility with \code{shinydashboard}) -}} +\item \code{tabBox()}: Create a tab box (alias for \code{tab_box} for compatibility with \code{shinydashboard}) +}} \examples{ tabBox(title = "Sample tab box", color = "blue", width = 5, tabs = list( diff --git a/man/tab_item.Rd b/man/tab_item.Rd index 7613b11..dca054c 100644 --- a/man/tab_item.Rd +++ b/man/tab_item.Rd @@ -24,9 +24,9 @@ Create a tab panel with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{tabItem}: Create a tab (alias for \code{tab_item} for compatibility with \code{shinydashboard}) -}} +\item \code{tabItem()}: Create a tab (alias for \code{tab_item} for compatibility with \code{shinydashboard}) +}} \examples{ tab_item(tabName = "tab1", "Tab 1") } diff --git a/man/tab_items.Rd b/man/tab_items.Rd index 05b3879..b89864f 100644 --- a/man/tab_items.Rd +++ b/man/tab_items.Rd @@ -20,9 +20,9 @@ Create a panel with tabs. } \section{Functions}{ \itemize{ -\item \code{tabItems}: Create a panel with tabs (alias for \code{tab_items} for compatibility with \code{shinydashboard}) -}} +\item \code{tabItems()}: Create a panel with tabs (alias for \code{tab_items} for compatibility with \code{shinydashboard}) +}} \examples{ tabItems( tabItem(tabName = "tab1", "Tab 1"), diff --git a/man/task_item.Rd b/man/task_item.Rd index 9fb4b7e..5e84c06 100644 --- a/man/task_item.Rd +++ b/man/task_item.Rd @@ -26,9 +26,9 @@ Create a task item. } \section{Functions}{ \itemize{ -\item \code{taskItem}: Create a task item (alias for \code{taks_item} for compatibility with \code{shinydashboard}) -}} +\item \code{taskItem()}: Create a task item (alias for \code{taks_item} for compatibility with \code{shinydashboard}) +}} \examples{ taskItem("Project progress...", 50.777, color = "red") } diff --git a/man/update_tab_items.Rd b/man/update_tab_items.Rd index c2e5ec9..65e4540 100644 --- a/man/update_tab_items.Rd +++ b/man/update_tab_items.Rd @@ -19,10 +19,10 @@ Change the selected tab on the client } \section{Functions}{ \itemize{ -\item \code{updateTabItems}: Change the selected item on the client (alias for \code{update_tab_items} for +\item \code{updateTabItems()}: Change the selected item on the client (alias for \code{update_tab_items} for compatibility with \code{shinydashboard}) -}} +}} \examples{ if (interactive()) { ui <- dashboardPage( diff --git a/man/validate_tab_name.Rd b/man/validate_tab_name.Rd index 17eca2f..61aa3f8 100644 --- a/man/validate_tab_name.Rd +++ b/man/validate_tab_name.Rd @@ -12,3 +12,4 @@ validate_tab_name(name) \description{ Valid tab name should not containt dot character '.'. } +\keyword{internal} diff --git a/man/value_box.Rd b/man/value_box.Rd index de74d62..fcb6771 100644 --- a/man/value_box.Rd +++ b/man/value_box.Rd @@ -35,11 +35,11 @@ Create a valueBox with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{valueBox}: Create a valueBox (alias for \code{value_box}) +\item \code{valueBox()}: Create a valueBox (alias for \code{value_box}) -\item \code{infoBox}: Create a valueBox (alias for \code{value_box}) -}} +\item \code{infoBox()}: Create a valueBox (alias for \code{value_box}) +}} \examples{ valueBox("Unread Mail", 44, icon("mail"), color = "blue", width = 5, size = "tiny") } diff --git a/man/value_box_output.Rd b/man/value_box_output.Rd index 1631b57..36147dd 100644 --- a/man/value_box_output.Rd +++ b/man/value_box_output.Rd @@ -25,11 +25,11 @@ UI-side function for dynamic valueBox. } \section{Functions}{ \itemize{ -\item \code{valueBoxOutput}: Create a valueBox output (alias for \code{value_box_output}) +\item \code{valueBoxOutput()}: Create a valueBox output (alias for \code{value_box_output}) -\item \code{infoBoxOutput}: Create a valueBox output (alias for \code{value_box_output}) -}} +\item \code{infoBoxOutput()}: Create a valueBox output (alias for \code{value_box_output}) +}} \examples{ \dontrun{ valueBoxOutput("value_box") From 6d4d24db5fa77361e3bf6829fe243ddca5a0df33 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:35:14 +0200 Subject: [PATCH 29/71] Add styles and move to Bootstrap 5. --- _pkgdown.yml => pkgdown/_pkgdown.yml | 15 +++++++--- pkgdown/extra.css | 44 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) rename _pkgdown.yml => pkgdown/_pkgdown.yml (91%) create mode 100644 pkgdown/extra.css diff --git a/_pkgdown.yml b/pkgdown/_pkgdown.yml similarity index 91% rename from _pkgdown.yml rename to pkgdown/_pkgdown.yml index 8709ff4..1fc8421 100644 --- a/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -1,10 +1,12 @@ -title: SHINY.SEMANTIC +title: semantic.dashboard template: - params: - bootswatch: yeti + bootstrap: 5 + bootswatch: pulse + bslib: + pkgdown-nav-height: 100px navbar: - type: inverse + bg: primary left: - icon: fa-home href: index.html @@ -52,6 +54,7 @@ reference: - title: Other UI elements desc: All functions that generate UI elements. contents: + - '`icon`' - '`infoBox`' - '`infoBoxOutput`' - '`menuItem`' @@ -92,3 +95,7 @@ reference: contents: - '`light_semantic_palette`' - '`semantic_palette`' + +- title: Other + contents: + - '`update_tab_items`' diff --git a/pkgdown/extra.css b/pkgdown/extra.css new file mode 100644 index 0000000..b067801 --- /dev/null +++ b/pkgdown/extra.css @@ -0,0 +1,44 @@ +.navbar { + background-color: #3FAD61 !important; +} + +#navbar > ul.navbar-nav > li.nav-item a:hover { + background-color: #3FAD61 !important; +} + +.navbar-dark .navbar-nav .active>.nav-link { + background-color: #3FAD61 !important; + color: #fff; +} + +.navbar-dark input[type="search"] { + background-color: #fff !important; + color: #444 !important; +} + +nav .text-muted { + color: #d8d8d8 !important; +} + +a { + color: #3FAD61; +} + +a:hover { + color: #2d7e46; +} + +button.btn.btn-primary.btn-copy-ex { + background-color: #3FAD61; + border-color: #3FAD61; +} + +.app-preview { + margin: 1.5em 0.75em; + padding: 0.25em; + box-shadow: + 0 3.9px 4.6px rgba(0, 0, 0, 0.08), + 0 12.3px 8.4px rgba(0, 0, 0, 0.056), + 0 18.8px 19.2px rgba(0, 0, 0, 0.037), + 0 22px 40px rgba(0, 0, 0, 0.019); +} From 6e21253a2a48f4d1de3973483d38c207439cad90 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:36:49 +0200 Subject: [PATCH 30/71] Add search url. --- pkgdown/_pkgdown.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 1fc8421..1dd4c4f 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -5,6 +5,8 @@ template: bslib: pkgdown-nav-height: 100px +url: https://appsilon.github.io/semantic.dashboard/ + navbar: bg: primary left: From ed3acedb6f9a44f997962c3475988f1f8c5d80bf Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 10:40:08 +0200 Subject: [PATCH 31/71] Add favicon. --- pkgdown/favicon/favicon-16x16.png | Bin 0 -> 719 bytes pkgdown/favicon/favicon-32x32.png | Bin 0 -> 1757 bytes pkgdown/favicon/favicon.ico | Bin 0 -> 15406 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pkgdown/favicon/favicon-16x16.png create mode 100644 pkgdown/favicon/favicon-32x32.png create mode 100644 pkgdown/favicon/favicon.ico diff --git a/pkgdown/favicon/favicon-16x16.png b/pkgdown/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..7983adefd321c025654afa8de288173579eef1d1 GIT binary patch literal 719 zcmV;=0xPx%iAh93R5(vvlTA+(Q51%sb7yQRw1rYA1Vt14{zx?HPNa3`T7Cc+e~9A`G0Mh; zic8(`B?~tuCML#!27!oQkWwh6Oxro;&P)S(GnvfXd(V5`_nh|#|1F9CM_=79nm|1j zQ83=Z_~Qix`=ELlB;m#pklS$}LdjlNRV2K{thRv=>{fVYPwZ>-#bnVKc?jIGdtsJ1 zIc{b4E9c9%19?2f(LT-eW-S2$f`bwA{ zW^nLi?B)HI2&SzOXm1h+hQm^$eY!W^^v6!fPm3ZuhQGm!-@0&nPZ)7RR7>OhFbH0($Gzw zExnF|+YGcJ#gKuTm=c$BBUGC;F7=+_&;Ay!xb!45tn93_R9=hpYa|qjCDzo#XAs2Zk~QuI10OTv_GI_F7we)FzRCYjC<}m`2lQzvVO7)yK!pWeTZY z&SZxP2zdAFVESlC89*nsPhn>&UUPyFuDbQRvK*bX-1{zs2#2=#efI zI&&uNc9L|HR2zF_5@~9U8aw_Tg;b7u%csAihu`&Wl1_sCW*tB9`CThF#9B9(%z6Yt z$q|ccEfIOa(mrNfT2`+rj&X3rcBKvkvpas>i)KfJJI^Odfh!LQv~;6zg>t<@KGjXa zB=FT|@1Vw~@`}Zt3k=@ddr#(Va6C+h1}?prECoiawToig70&}Aa{=lt-g`Q4_rkok z5pDCg$2j&m#p#KXs(2VQQ1uqar{?YSMfVRA{spftC2BcEm-qkx002ovPDHLkV1nxQ BTVntK literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon-32x32.png b/pkgdown/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0b074a818890b934f4448a901ab185e9a234ee51 GIT binary patch literal 1757 zcmV<31|s>1P)Px*mq|oHR9HuqS6OcpR}}v4%-Bwh?Kp{vvk;cBrEFy>Q431!q%9Aql_&_RK9mOf z(EftH#(wHkpZe5RP>NJq1tq0O4Xp%OsniV+YavOq00~V(Ham_JJDywJJ2Upoc$|j& z5IJ*~^WAg4^PO`ERx}6zYFJs@dMZF<8X|Mow19wbd7;4!3o;FX zkYHvb1t@8UL_=Li&h@P9Kn2V)0JJIP=C#f52Z$&&5ul#^&%P4=$7qfcat$dt+p3GNi;GV zVZXQKFq~38zUytn7Vmm&C|H9_gYBTQ%pFDvt_p;NH6W_}Ob7y(8f&R6G!aT)&mvK- zo2M62taq2Ax~K~N{9;6sG0ZGR(DC$7Q@D8eu9B1x?tJ&`bq0(CE;iOufrJRqz^9F& zG-0t|oo>ZCcNwZYm58Sn;I+GPd$JeLViT5UP~a+s93p|1Q%L~Q@<;0u&I+Kqd8>Cl z@+Akn4i6+jgiWyF%5aa4vJ{jOm8{gAMkX5=$;j%fAqB6$jpJO&LmtI)o z--X0d5>*8iXdSqgQw}K4e*y|>24KCX!0yJYr90uvFN95$aN%Ja_LXeI)94rq94>71 zRzd)Q+rA3Z3lWUO#&L7vZ^L0$9?k-gUZh*iIB{<2>AhciPc&hsLYn1e_JNJNC+ z=|e(JqG$95|NiFMgIMb-#hC}KM!C?z$#8mw9ynBa0MW!eejmRB7U$aXz4-0lJBTLd zQRr~v_VZq(Xo`E{HUBOi^KT#i^uI!%@c@Oy5;9i?uz0<*u>pNEk1-mXK#hL~p2f!T zU}_LWc^+&l+K9;F9EPH!cxyudQwuY=JlJKpvl4YBD>Z$|=72@Mvrqd=w&BtA5LVgp zQCq%`|K99f%RRtizQ$dO!PzGq$gj_CaW33@-p@T?6;@5nDN#c}0ZBurY*MzdZyP)n z*yF3l(A+3D_Ofp)pMN+th>_SB7(v&2D&VoNQg=|a4Xdh~HgBEeE6Rd{WqVNO^x?qRp`v15`3nR@r~D z`fYsQ_cIbHRxW@o-gVerQjO-`Uo;|f5Ul)eE82id10DEi#|eCS@1ja%lfatbDeWEX7MS-crHCLUmW(IyN>M=+O+XH`M10_Z}b zkx=!3;ucLZvc%ISh>!#c@ukJ|98161L@eD{u>aYJBw`lg3!bh_vN_p}#fakgrbC?V zvMj@6cY_d$fygL)4lh>O^WhL3cpjhP4aZPq1eLBbl(~FZO346ZM3VDZ=kh}oB#g~Z zVty%(lq_RM@n+ng?1N3Rp}^)w+py9&a{#=}W=$t0!QH-UM3XVZmlnX>DhguS8%a3{ zhiKl3lNCFQ+WQq89)bX!T1YGH%#}) zbh^PG8iTUTd&K}-zsBW9fy15d@mMy@FD=0DEau->Sn@<0lCq3wVou+pccfAXUqA76 zSGpz74M6`!P`naoIayC3HW7+|;Q?WKOz7oaRrC%@5bin33>ybOS$iI2rj~zM23k(n zQ&9Fa;~vR52s&lZP|wkGS%&!@z4e^DF)dPzX&(8oo+1?@Aa!akDN_PEWr~p1jV-~x zkOwTBQ`dT`fl%56LS!LD!yU)ZbuMQpm&g7CC7=FbjLBki00000NkvXXu0mjfZEH7* literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon.ico b/pkgdown/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae2167d60d7b49ceb1a36f908419d18052f3f0ee GIT binary patch literal 15406 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 Date: Wed, 14 Sep 2022 11:03:11 +0200 Subject: [PATCH 32/71] Update readme. --- README.md | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 3212d2b..0bfca46 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,13 @@ -We are hiring! - - +# semantic.dashboard semantic.dashboard logo -semantic.dashboard -================== +> _Quick, beautiful and customizable dashboard template for Shiny based on shiny.semantic and Fomantic UI._ + ![R-CMD-check](https://github.com/Appsilon/semantic.dashboard/workflows/R-CMD-check/badge.svg) [![codecov](https://codecov.io/gh/Appsilon/semantic.dashboard/branch/master/graph/badge.svg)](https://codecov.io/gh/Appsilon/semantic.dashboard) [![cranlogs](https://cranlogs.r-pkg.org/badges/semantic.dashboard)](https://CRAN.R-project.org/package=semantic.dashboard) [![total](https://cranlogs.r-pkg.org/badges/grand-total/semantic.dashboard)](https://CRAN.R-project.org/package=semantic.dashboard) - -Dashboard with Semantic UI Support for Shiny. + Are you fed up with ordinary `shinydashboard` look? @@ -83,16 +80,6 @@ How to contribute? If you want to contribute to this project please submit a regular PR, once you're done with new feature or bug fix. Please check `development/README.md` first! It contains useful information that will help you run your dev environment for `semantic.dashboard`. -Changes in documentation ------------------------- - -Both repository **README.md** file and an official documentation page -are generated with Rmarkdown, so if there is a need to update them, -please modify accordingly a **README.Rmd** file and use “Knit”. - -Documentation is rendered with `pkgdown`. Just run -`pkgdown::build_site()` after rendering new **README.md**. - Troubleshooting --------------- @@ -116,7 +103,9 @@ Appsilon -Appsilon is the **Full Service Certified RStudio Partner**. Learn more +Appsilon is a **Full Service Certified RStudio Partner**. Learn more at [appsilon.com](https://appsilon.com). -Get in touch [support+opensource@appsilon.com](support+opensource@appsilon.com) +Get in touch [opensource@appsilon.com](support+opensource@appsilon.com) + +We are hiring! From 268c7e9e1b34390a4e89c7e78529469654f749e1 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 11:09:23 +0200 Subject: [PATCH 33/71] Add pkgdown to .Rbuildignore. --- .Rbuildignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index b513032..23b2845 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -16,4 +16,4 @@ development ^tools$ ^srcjs$ ^styles$ -^_pkgdown\.yml$ +pkgdown From 499bfb2c41a4b0637e4db4101335106e424410ac Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 11:10:07 +0200 Subject: [PATCH 34/71] Add pkgdown Github Actions workflow. --- .github/workflows/pkgdown.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/pkgdown.yml diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml new file mode 100644 index 0000000..24de028 --- /dev/null +++ b/.github/workflows/pkgdown.yml @@ -0,0 +1,35 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: + - master + - kuba.update-documentation + workflow_dispatch: + +name: pkgdown + +jobs: + pkgdown: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::pkgdown, local::. + needs: website + + - name: Deploy to gh-pages branch + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' From fa4de7d3391e4857bdf42d39181f9b31c8f1ceeb Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 11:17:40 +0200 Subject: [PATCH 35/71] Minor page adjustments. --- README.md | 2 +- pkgdown/_pkgdown.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0bfca46..6d7944b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > _Quick, beautiful and customizable dashboard template for Shiny based on shiny.semantic and Fomantic UI._ -![R-CMD-check](https://github.com/Appsilon/semantic.dashboard/workflows/R-CMD-check/badge.svg) +[![R-CMD-check](https://github.com/Appsilon/semantic.dashboard/workflows/R-CMD-check/badge.svg)](https://github.com/Appsilon/semantic.dashboard/actions/workflows/main.yml) [![codecov](https://codecov.io/gh/Appsilon/semantic.dashboard/branch/master/graph/badge.svg)](https://codecov.io/gh/Appsilon/semantic.dashboard) [![cranlogs](https://cranlogs.r-pkg.org/badges/semantic.dashboard)](https://CRAN.R-project.org/package=semantic.dashboard) [![total](https://cranlogs.r-pkg.org/badges/grand-total/semantic.dashboard)](https://CRAN.R-project.org/package=semantic.dashboard) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 1dd4c4f..44bc1c0 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -16,13 +16,13 @@ navbar: - icon: fa-university text: "Tutorials" href: articles/index.html - right: - icon: fa-file-code-o text: "Reference" href: reference/index.html - icon: fa-newspaper-o text: "Changes" href: CHANGELOG.html + right: - icon: fa-github fa-lg href: https://github.com/Appsilon/semantic.dashboard - icon: fa-twitter fa-lg From 41b7bb6f6adcde242e357ceac8c436f85bd0e999 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 11:18:34 +0200 Subject: [PATCH 36/71] Remove test branch from pkgdown workflow. --- .github/workflows/pkgdown.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml index 24de028..6f265a5 100644 --- a/.github/workflows/pkgdown.yml +++ b/.github/workflows/pkgdown.yml @@ -4,7 +4,6 @@ on: push: branches: - master - - kuba.update-documentation workflow_dispatch: name: pkgdown From 74f64a51ea3c8b72d2324acb8bf96cb1812bf35b Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 14 Sep 2022 11:23:16 +0200 Subject: [PATCH 37/71] Use develop branch for documentation. --- .github/workflows/pkgdown.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml index 6f265a5..6164374 100644 --- a/.github/workflows/pkgdown.yml +++ b/.github/workflows/pkgdown.yml @@ -3,7 +3,7 @@ on: push: branches: - - master + - develop workflow_dispatch: name: pkgdown From 031c5ae949bb386ebdbf0597167062496d30dfa9 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Fri, 16 Sep 2022 09:08:22 +0200 Subject: [PATCH 38/71] Fix opensource email. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d7944b..7f25404 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,6 @@ Appsilon Appsilon is a **Full Service Certified RStudio Partner**. Learn more at [appsilon.com](https://appsilon.com). -Get in touch [opensource@appsilon.com](support+opensource@appsilon.com) +Get in touch [opensource@appsilon.com](opensource@appsilon.com) We are hiring! From dd51944334eadfd6da55778b3d8b769e881ea113 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 07:07:08 +0000 Subject: [PATCH 39/71] Bump yargs-parser and yargs in /tools Bumps [yargs-parser](https://github.com/yargs/yargs-parser) and [yargs](https://github.com/yargs/yargs). These dependencies needed to be updated together. Updates `yargs-parser` from 5.0.0-security.0 to 5.0.1 - [Release notes](https://github.com/yargs/yargs-parser/releases) - [Changelog](https://github.com/yargs/yargs-parser/blob/v5.0.1/CHANGELOG.md) - [Commits](https://github.com/yargs/yargs-parser/commits/v5.0.1) Updates `yargs` from 7.1.1 to 7.1.2 - [Release notes](https://github.com/yargs/yargs/releases) - [Changelog](https://github.com/yargs/yargs/blob/yargs-v7.1.2/CHANGELOG.md) - [Commits](https://github.com/yargs/yargs/commits/yargs-v7.1.2) --- updated-dependencies: - dependency-name: yargs-parser dependency-type: indirect - dependency-name: yargs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index 65939ec..2e9fa2a 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -4187,9 +4187,9 @@ "dev": true }, "yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, "requires": { "camelcase": "^3.0.0", @@ -4204,13 +4204,13 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" + "yargs-parser": "^5.0.1" } }, "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { "camelcase": "^3.0.0", From e32bc27b805fdd4a5c7f1f6817e0d9716fdd3946 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Tue, 27 Sep 2022 16:39:13 +0200 Subject: [PATCH 40/71] Fix code style. --- .lintr | 9 ++ R/box.R | 11 ++- R/column.R | 4 +- R/constants.R | 46 ++++++---- R/deps.R | 4 +- R/dropdown_menu.R | 36 +++++--- R/dropdown_menu_output.R | 13 +-- R/menu_item.R | 37 +++++--- R/semantic_dashboard.R | 140 ++++++++++++++++++++---------- R/sidebar_menu_output.R | 18 ++-- R/tab.R | 13 +-- R/tab_box.R | 16 +++- R/utils.R | 7 +- R/value_box.R | 7 +- man/dashboard_body.Rd | 6 +- man/dashboard_header.Rd | 23 +++-- man/dashboard_page.Rd | 9 +- man/dashboard_sidebar.Rd | 22 +++-- man/dropdown_menu.Rd | 5 +- man/dropdown_menu_output.Rd | 3 +- man/get_dashboard_dependencies.Rd | 3 +- man/icon.Rd | 3 +- man/menu_item.Rd | 6 +- man/menu_item_output.Rd | 3 +- man/message_item.Rd | 3 +- man/notification_item.Rd | 3 +- man/render_dropdown_menu.Rd | 6 +- man/render_menu.Rd | 6 +- man/sidebar_menu.Rd | 6 +- man/sidebar_menu_output.Rd | 3 +- man/tab_box.Rd | 3 +- man/tab_item.Rd | 6 +- man/tab_items.Rd | 3 +- man/task_item.Rd | 3 +- man/update_tab_items.Rd | 4 +- tests/testthat/test-lintr.R | 10 --- tests/testthat/test-names.R | 17 ++-- tests/testthat/test-value_box.R | 1 - 38 files changed, 332 insertions(+), 186 deletions(-) create mode 100644 .lintr delete mode 100644 tests/testthat/test-lintr.R diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..e64fd0f --- /dev/null +++ b/.lintr @@ -0,0 +1,9 @@ +linters: + linters_with_defaults( + line_length_linter = line_length_linter(100), + object_name_linter = NULL + ) +exclusions: + c( + "vignettes" + ) diff --git a/R/box.R b/R/box.R index d97f84f..5162da4 100644 --- a/R/box.R +++ b/R/box.R @@ -23,7 +23,10 @@ box <- function(..., title = NULL, color = "", ribbon = TRUE, title_side = "top collapsible = TRUE, width = 8, id = NULL, collapse_icon = "minus", expand_icon = "plus") { verify_value_allowed("color", c("", ALLOWED_COLORS)) - verify_value_allowed("title_side", if (ribbon) ALLOWED_BOX_SIDES_RIBBON else ALLOWED_BOX_SIDES_NONRIBBON) + verify_value_allowed( + "title_side", + if (ribbon) ALLOWED_BOX_SIDES_RIBBON else ALLOWED_BOX_SIDES_NONRIBBON + ) box_id <- if (!is.character(id)) { paste0("box_", random_id_generator()) } else { @@ -42,11 +45,13 @@ box <- function(..., title = NULL, color = "", ribbon = TRUE, title_side = "top shiny::div(class = title_class, minimize_button, title) } icon_selector <- glue::glue("'#{title_id} > .label > .icon'") + # nolint start: line_length_linter js_script <- glue::glue("$('#{box_id}').accordion({{ selector: {{ trigger: {icon_selector} }}, onOpening: function() {{ $({icon_selector}).removeClass('{expand_icon}').addClass('{collapse_icon}'); }}, onClosing: function() {{ $({icon_selector}).removeClass('{collapse_icon}').addClass('{expand_icon}'); }} }});") + # nolint end column(width = width, shiny::div(class = paste("ui segment raised", color), shiny::div(id = box_id, class = "ui accordion", @@ -54,6 +59,8 @@ box <- function(..., title = NULL, color = "", ribbon = TRUE, title_side = "top shiny::div(class = "content active", shiny::div(...)) ) ), - if (collapsible) shiny::singleton(shiny::tags$script(shiny::HTML(paste0("$(document).ready(function() {", js_script, " })")))) + if (collapsible) shiny::singleton( + shiny::tags$script(shiny::HTML(paste0("$(document).ready(function() {", js_script, " })"))) + ) ) } diff --git a/R/column.R b/R/column.R index 20f2ded..12db2cd 100644 --- a/R/column.R +++ b/R/column.R @@ -4,8 +4,8 @@ #' @param ... UI elements to include within the column. #' @return A column that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} #' @export -column <- function(width, ...){ - if (!is.numeric(width) || (width < MIN_COLUMN_WIDTH) || (width > MAX_COLUMN_WIDTH)){ +column <- function(width, ...) { + if (!is.numeric(width) || (width < MIN_COLUMN_WIDTH) || (width > MAX_COLUMN_WIDTH)) { stop(paste("'width' must be between", MIN_COLUMN_WIDTH, "and", MAX_COLUMN_WIDTH)) } shiny::tags$div(class = paste(COLUMN_WIDTHS[width], "wide column"), ...) diff --git a/R/constants.R b/R/constants.R index 63efb04..7e903f0 100644 --- a/R/constants.R +++ b/R/constants.R @@ -1,12 +1,18 @@ -ALLOWED_COLORS <- c("", "red", "orange", "yellow", "olive", "green", "teal", - "blue", "violet", "purple", "pink", "brown", "grey", "black") +ALLOWED_COLORS <- c( + "", "red", "orange", "yellow", "olive", "green", "teal", + "blue", "violet", "purple", "pink", "brown", "grey", "black" +) ALLOWED_SIDEBAR_SIZES <- c("", "thin", "very thin", "wide", "very wide") ALLOWED_SIDEBAR_SIDES <- c("left", "right", "top", "bottom") ALLOWED_VALUEBOX_SIZES <- c("mini", "tiny", "small", "", "large", "huge") -ALLOWED_BOX_SIDES_NONRIBBON <- c("top", "bottom", "top left", "top right", "bottom left", "bottom right") +ALLOWED_BOX_SIDES_NONRIBBON <- c( + "top", "bottom", "top left", "top right", "bottom left", "bottom right" +) ALLOWED_BOX_SIDES_RIBBON <- c("top left", "top right") -COLUMN_WIDTHS <- c("", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", - "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen") +COLUMN_WIDTHS <- c( + "", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", + "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen" +) MIN_COLUMN_WIDTH <- 1 MAX_COLUMN_WIDTH <- 16 MIN_PROGRESS_VALUE <- 0 @@ -21,19 +27,27 @@ progress_bar_js <- "$('.progress').progress();" #' Semantic colors #' https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables #' @export -semantic_palette <- c("#A333C8", "#21BA45", "#2185D0", "#DB2828", "#F2711C", "#FBBD08", "#B5CC18", - "#00B5AD", "#6435C9", "#E03997", "#A5673F", "#767676", "#1B1C1D") -names(semantic_palette) <- c("purple", "green", "blue", "red", "orange", "yellow", "olive", "teal", - "violet", "pink", "brown", "grey", "black") +semantic_palette <- c( + "#A333C8", "#21BA45", "#2185D0", "#DB2828", "#F2711C", "#FBBD08", "#B5CC18", + "#00B5AD", "#6435C9", "#E03997", "#A5673F", "#767676", "#1B1C1D" +) +names(semantic_palette) <- c( + "purple", "green", "blue", "red", "orange", "yellow", "olive", "teal", + "violet", "pink", "brown", "grey", "black" +) #' Semantic light colors #' https://github.com/Semantic-Org/Semantic-UI/blob/master/src/themes/default/globals/site.variables #' @export -light_semantic_palette <- c("#DC73FF", "#2ECC40", "#54C8FF", "#FF695E", "#FF851B", "#FFE21F", - "#D9E778", "#6DFFFF", "#A291FB", "#FF8EDF", "#D67C1C", "#DCDDDE", - "#545454") +light_semantic_palette <- c( + "#DC73FF", "#2ECC40", "#54C8FF", "#FF695E", "#FF851B", "#FFE21F", + "#D9E778", "#6DFFFF", "#A291FB", "#FF8EDF", "#D67C1C", "#DCDDDE", + "#545454" +) -names(light_semantic_palette) <- c("lightPurple", "lightGreen", "lightBlue", "lightRed", - "lightOrange", "lightYellow", "lightOlive", "lightTeal", - "lightViolet", "lightPink", "lightBrown", "lightGrey", - "lightBlack") +names(light_semantic_palette) <- c( + "lightPurple", "lightGreen", "lightBlue", "lightRed", + "lightOrange", "lightYellow", "lightOlive", "lightTeal", + "lightViolet", "lightPink", "lightBrown", "lightGrey", + "lightBlack" +) diff --git a/R/deps.R b/R/deps.R index b70917f..a0c1b9e 100644 --- a/R/deps.R +++ b/R/deps.R @@ -1,6 +1,7 @@ #' Get the semantic.dashboard dependencies #' -#' @description To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} help. +#' @description To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} +#' help. #' #' @return semantic.dashboard dependencies #' @keywords internal @@ -15,4 +16,3 @@ get_dashboard_dependencies <- function() { ) ) } - diff --git a/R/dropdown_menu.R b/R/dropdown_menu.R index 3460b33..69f576d 100644 --- a/R/dropdown_menu.R +++ b/R/dropdown_menu.R @@ -2,7 +2,7 @@ #' @description Create a dropdown menu with additional UI elements. #' @param ... UI elements to include within the dropdown menu. #' @param type Type of the displayed items. -#' @param icon Icon of the dropdown menu. If not specyfied created based on \code{type} agrument. +#' @param icon Icon of the dropdown menu. If not specified created based on \code{type} argument. #' @param show_counter If true circular label with counter is going to be shown for dropdown. #' @return A dropdown menu that can be passed to \code{\link[semantic.dashboard]{dashboardHeader}} #' @export @@ -31,7 +31,8 @@ dropdown_menu <- function(..., type = "messages", icon = NULL, show_counter = TR shiny::tags$script(progress_bar_js)) } -#' @describeIn dropdown_menu Create a dropdown menu (alias for \code{dropdown_menu} for compatibility with \code{shinydashboard}) +#' @describeIn dropdown_menu Create a dropdown menu (alias for \code{dropdown_menu} for +#' compatibility with \code{shinydashboard}) #' @export dropdownMenu <- dropdown_menu @@ -54,7 +55,8 @@ message_item <- function(from, message, ..., icon = "user") { ...) } -#' @describeIn message_item Create a message item (alias for \code{message_item} for compatibility with \code{shinydashboard}) +#' @describeIn message_item Create a message item (alias for \code{message_item} for compatibility +#' with \code{shinydashboard}) #' @export messageItem <- message_item @@ -69,19 +71,26 @@ messageItem <- message_item #' @export #' @examples #' taskItem("Project progress...", 50.777, color = "red") -task_item <- function(text, value, color = ""){ - if (!is.numeric(value) || (value < MIN_PROGRESS_VALUE) || (value > MAX_PROGRESS_VALUE)){ +task_item <- function(text, value, color = "") { + if (!is.numeric(value) || (value < MIN_PROGRESS_VALUE) || (value > MAX_PROGRESS_VALUE)) { warning(paste("'value' must be between", MIN_PROGRESS_VALUE, "and", MAX_PROGRESS_VALUE)) } verify_value_allowed("color", c("", ALLOWED_COLORS)) - shiny::tags$div(class = "item", style = "min-width: 200px;", - shiny::tags$div(class = paste("ui active progress", color), - `data-percent` = value, `data-total` = 100, - shiny::tags$div(class = "bar", shiny::tags$div(class = "progress")), - shiny::tags$div(class = "label", text))) + shiny::tags$div( + class = "item", + style = "min-width: 200px;", + shiny::tags$div( + class = paste("ui active progress", color), + `data-percent` = value, + `data-total` = 100, + shiny::tags$div(class = "bar", shiny::tags$div(class = "progress")), + shiny::tags$div(class = "label", text) + ) + ) } -#' @describeIn task_item Create a task item (alias for \code{taks_item} for compatibility with \code{shinydashboard}) +#' @describeIn task_item Create a task item (alias for \code{taks_item} for compatibility with +#' \code{shinydashboard}) #' @export taskItem <- task_item @@ -96,13 +105,14 @@ taskItem <- task_item #' @export #' @examples #' notificationItem("This is notification!", color = "red") -notification_item <- function(text, icon = "warning", color = ""){ +notification_item <- function(text, icon = "warning", color = "") { verify_value_allowed("color", c("", ALLOWED_COLORS)) shiny::tags$div(class = "item", shiny::tags$div(class = paste("ui label", color), shiny::tags$i(class = paste("small", icon, "icon")), text)) } -#' @describeIn notification_item Create a notification item (alias for \code{notification_item} for compatibility with \code{shinydashboard}) +#' @describeIn notification_item Create a notification item (alias for \code{notification_item} for +#' compatibility with \code{shinydashboard}) #' @export notificationItem <- notification_item diff --git a/R/dropdown_menu_output.R b/R/dropdown_menu_output.R index 94b0e39..bf52d4b 100644 --- a/R/dropdown_menu_output.R +++ b/R/dropdown_menu_output.R @@ -12,11 +12,12 @@ #' messageItem("Marek", "Another test!", icon = "warning", color = "red")) #' }) #' } -dropdown_menu_output <- function(outputId){ +dropdown_menu_output <- function(outputId) { shiny::uiOutput(outputId, class = "right icon menu") } -#' @describeIn dropdown_menu_output Create a dropdown menu output (alias for \code{dropdown_menu_output} for compatibility with \code{shinydashboard}) +#' @describeIn dropdown_menu_output Create a dropdown menu output (alias for \code{dropdown_menu +#' output} for compatibility with \code{shinydashboard}) #' @export dropdownMenuOutput <- dropdown_menu_output @@ -24,7 +25,8 @@ dropdownMenuOutput <- dropdown_menu_output #' @description Server-side function for dynamic dropdownMenu. #' @param expr dropdownMenu. #' @param env The environment in which to evaluate expr. -#' @param quoted Is expr a quoted expression (with \code{quote()})? This is useful if you want to save an expression in a variable. +#' @param quoted Is expr a quoted expression (with \code{quote()})? This is useful if you want to +#' save an expression in a variable. #' @return A dynamic dropdown menu that can be assigned to output. #' @export #' @examples @@ -36,11 +38,12 @@ dropdownMenuOutput <- dropdown_menu_output #' messageItem("Marek", "Another test!", icon = "warning", color = "red")) #' }) #' } -render_dropdown_menu <- function(expr, env = parent.frame(), quoted = FALSE){ +render_dropdown_menu <- function(expr, env = parent.frame(), quoted = FALSE) { fun <- shiny::exprToFunction(expr, env, quoted) shiny::renderUI(fun()) } -#' @describeIn render_dropdown_menu Create a dropdown menu output (alias for \code{render_dropdown_menu} for compatibility with \code{shinydashboard}) +#' @describeIn render_dropdown_menu Create a dropdown menu output (alias for \code{render_dropdown +#' menu} for compatibility with \code{shinydashboard}) #' @export renderDropdownMenu <- render_dropdown_menu diff --git a/R/menu_item.R b/R/menu_item.R index ef70e7a..6346ecc 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -2,7 +2,8 @@ #' #' This creates an icon tag using Semantic UI styles. #' -#' @param type A name of an icon. Look at http://semantic-ui.com/elements/icon.html for all possibilities. +#' @param type A name of an icon. Look at http://semantic-ui.com/elements/icon.html for all +#' possibilities. #' @param ... Other arguments to be added as attributes of the tag (e.g. style, class etc.) #' #' @export @@ -34,7 +35,13 @@ validate_tab_name <- function(name) { #' @export #' @examples #' menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")) -menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newtab = TRUE, selected = FALSE) { +menu_item <- function(text, + ..., + icon = NULL, + tabName = NULL, + href = NULL, + newtab = TRUE, + selected = FALSE) { sub_items <- list(...) if (!is.null(href) + (!is.null(tabName) + (length(sub_items) > 0) != 1)) { stop("Must have either href, tabName, or sub-items (contained in ...).") @@ -48,12 +55,10 @@ menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newta isTabItem <- TRUE data_tab <- paste0("shiny-tab-", tabName) href <- paste0("#", data_tab) - } - else if (is.null(href)) { + } else if (is.null(href)) { href <- "#" - } - else if (newtab) { - target <- "_blank" + } else if (newtab) { + target <- "_blank" } if (length(sub_items) == 0) { @@ -80,17 +85,20 @@ menu_item <- function(text, ..., icon = NULL, tabName = NULL, href = NULL, newta } } -#' @describeIn menu_item Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +#' @describeIn menu_item Create a menu item (alias for \code{menu_item} for compatibility with +#' \code{shinydashboard}) #' @export menuItem <- menu_item -#' @describeIn menu_item Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +#' @describeIn menu_item Create a menu item (alias for \code{menu_item} for compatibility with +#' \code{shinydashboard}) #' @export menuSubItem <- menu_item #' Create a sidebar menu. #' @description Create a sidebar menu with menu items. -#' @param id The sidebar id class also used for update input on server side. Default is \code{uisidebar} +#' @param id The sidebar id class also used for update input on server side. Default is +#' \code{uisidebar} #' @param ... Menu items. #' @return A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSidebar}} #' @export @@ -105,7 +113,8 @@ sidebar_menu <- function(..., id = "uisidebar") { c(as.list(environment()), list(...)) } -#' @describeIn sidebar_menu Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) +#' @describeIn sidebar_menu Create a sidebar menu (alias for \code{sidebar_menu} for compatibility +#' with \code{shinydashboard}) #' @export sidebarMenu <- sidebar_menu @@ -137,11 +146,11 @@ sidebarMenu <- sidebar_menu #' } #' @export update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { - validate_session_object(session) + validate_session_object(session) # nolint: object_usage_linter session$sendCustomMessage("update_tab", tab) } -#' @describeIn update_tab_items Change the selected item on the client (alias for \code{update_tab_items} for -#' compatibility with \code{shinydashboard}) +#' @describeIn update_tab_items Change the selected item on the client (alias for +#' \code{update_tab_items} for compatibility with \code{shinydashboard}) #' @export updateTabItems <- update_tab_items diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 7929c95..61dc43b 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -9,17 +9,23 @@ NULL #' Create a header of a dashboard. #' @description Create a header of a dashboard with other additional UI elements. -#' Hint: use \code{shiny::tagList()} if you want to add multiple elements in \code{left} / \code{center} or \code{right}. +#' Hint: use \code{shiny::tagList()} if you want to add multiple elements in +#' \code{left} / \code{center} or \code{right}. #' @param ... UI elements to include within the header. They will be displayed on the right side. -#' @param left UI element to put on the left of the header. It will be placed after (to the right) the title and menu button (if they exist). +#' @param left UI element to put on the left of the header. It will be placed after (to the right) +#' the title and menu button (if they exist). #' @param center UI element to put in the center of the header. -#' @param right UI element to put to the right of the header. It will be placed before elements defined in \code{...} (if there are any). -#' @param title Dashboard title to be displayed in the upper left corner. If NULL, will not display any title field. Use "" for an empty title. -#' @param titleWidth Title field width, one of \code{c(NULL, "very thin", "thin", "wide", "very wide")} +#' @param right UI element to put to the right of the header. It will be placed before elements +#' defined in \code{...} (if there are any). +#' @param title Dashboard title to be displayed in the upper left corner. If NULL, will not display +#' any title field. Use "" for an empty title. +#' @param titleWidth Title field width, one of \code{c(NULL, "very thin", "thin", "wide", +#' "very wide")} #' @param logo_align Where should logo be placed. One of \code{c("left", "center")} #' @param logo_path Path or URL of the logo to be shown in the header. -#' @param color Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -#' One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")} +#' @param color Color of the sidebar / text / icons (depending on the value of `inverted` parameter. +#' One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", +#' "purple", "pink", "brown", "grey", "black")} #' @param inverted If FALSE sidebar will be white and text will be colored. \ #' If TRUE text will be white and background will be colored. Default is \code{FALSE}. #' @param disable If \code{TRUE}, don't display the header. @@ -65,7 +71,10 @@ dashboard_header <- function(..., left = NULL, center = NULL, right = NULL, inverted_value <- get_inverted_class(inverted) title_span <- if (!is.null(title)) { - title_class <- paste(c("ui menu dashboard-title", titleWidth, inverted_value, color), collapse = " ") + title_class <- paste( + c("ui menu dashboard-title", titleWidth, inverted_value, color), + collapse = " " + ) shiny::span(title, class = title_class) } else { NULL @@ -73,7 +82,7 @@ dashboard_header <- function(..., left = NULL, center = NULL, right = NULL, logo <- if (logo_path != "") { shiny::tags$img( - class="logo", + class = "logo", src = logo_path ) } else { @@ -90,13 +99,19 @@ dashboard_header <- function(..., left = NULL, center = NULL, right = NULL, NULL } - logo_left <- if (logo_align == "left") { logo } - logo_center <- if (logo_align == "center") { logo } - logo_right <- if (logo_align == "right") { logo } + logo_left <- if (logo_align == "left") logo + logo_center <- if (logo_align == "center") logo + logo_right <- if (logo_align == "right") logo - left_content <- div(class="header-part header-part__left", title_span, menu_button, logo_left, left) - center_content <- div(class="header-part header-part__center", logo_center, center) - right_content <- div(class="header-part header-part__right", logo_right, right, ...) + left_content <- div( + class = "header-part header-part__left", + title_span, + menu_button, + logo_left, + left + ) + center_content <- div(class = "header-part header-part__center", logo_center, center) + right_content <- div(class = "header-part header-part__right", logo_right, right, ...) shiny::div( class = paste("ui top attached dashboard-header", inverted_value, color, "menu", class), @@ -107,28 +122,34 @@ dashboard_header <- function(..., left = NULL, center = NULL, right = NULL, } } -#' @describeIn dashboard_header Create a header of a dashboard (alias for \code{dashboard_header} for compatibility with \code{shinydashboard}) +#' @describeIn dashboard_header Create a header of a dashboard (alias for \code{dashboard_header} +#' for compatibility with \code{shinydashboard}) #' @export dashboardHeader <- dashboard_header #' Create a sidebar of a dashboard. -#' @description Create a pushable sidebar of a dashboard with menu items and other additional UI elements. +#' @description Create a pushable sidebar of a dashboard with menu items and other additional UI +#' elements. #' @param ... UI elements to include within the sidebar. #' @param side Placement of the sidebar. One of \code{c("left", "right", "top", "bottom")} #' @param size Size of the sidebar. One of \code{c("", "thin", "very thin", "wide", "very wide")} -#' @param color Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -#' One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")} +#' @param color Color of the sidebar / text / icons (depending on the value of `inverted` +#' parameter. One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", +#' "violet","purple", "pink", "brown", "grey", "black")} #' @param inverted If FALSE sidebar will be white and text will be colored. \ #' If TRUE text will be white and background will be colored. Default is \code{FALSE}. #' @param center Should label and icon be centerd on menu items. Default to \code{FALSE} #' @param visible Should sidebar be visible on start. Default to \code{TRUE} #' @param disable If \code{TRUE}, don't display the sidebar. -#' @param closable If \code{TRUE} allow close sidebar by clicking in the body. Default to \code{FALSE} +#' @param closable If \code{TRUE} allow close sidebar by clicking in the body. Default to +#' \code{FALSE} #' @param pushable If \code{TRUE} the menu button is active. Default to \code{TRUE} -#' @param overlay If \code{TRUE}, opened sidebar will cover the tab content. Otherwise it is displayed next to the content. -#' Relevant only for sidebar positioned on left or right. Default to \code{FALSE} -#' @param dim_page If \code{TRUE}, page content will be darkened when sidebr is open. Default to \code{FALSE} +#' @param overlay If \code{TRUE}, opened sidebar will cover the tab content. Otherwise it is +#' displayed next to the content. Relevant only for sidebar positioned on left or right. Default +#' to \code{FALSE} +#' @param dim_page If \code{TRUE}, page content will be darkened when sidebr is open. Default to +#' \code{FALSE} #' @param class CSS class to be applied to the container of \code{dashboardSidebar}. #' @return A sidebar that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} #' @export @@ -175,20 +196,33 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv overlay <- ifelse(overlay, quote(true), quote(false)) dim_page <- ifelse(dim_page, quote(true), quote(false)) - shiny::div(closable = closable, - id = ..1$id, - class = paste("dashboard-sidebar ui", size, side, color, ifelse(side %in% c("top", "bottom"), "", "vertical"), - display_type, ifelse(visible, "visible", ""), inverted_value, "menu sidebar", uncover_class, - overlay_class, class), - ..1[-1], - shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), - shiny::tags$script(src = "src/updateTabItems.js") - ) + shiny::div( + closable = closable, + id = ..1$id, + class = paste( + "dashboard-sidebar ui", + size, + side, + color, + ifelse(side %in% c("top", "bottom"), "", "vertical"), + display_type, + ifelse(visible, "visible", ""), + inverted_value, + "menu sidebar", + uncover_class, + overlay_class, + class + ), + ..1[-1], + shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), + shiny::tags$script(src = "src/updateTabItems.js") + ) } } -#' @describeIn dashboard_sidebar Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} for compatibility with \code{shinydashboard}) +#' @describeIn dashboard_sidebar Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} +#' for compatibility with \code{shinydashboard}) #' @export dashboardSidebar <- dashboard_sidebar @@ -196,7 +230,8 @@ dashboardSidebar <- dashboard_sidebar #' Create a body of a dashboard. #' @description Create a body of a dashboard with tabs and other additional UI elements. #' @param ... UI elements to include within the body. -#' @param class CSS class to be applied to the container of \code{dashboardBody}. Note it's not the \code{} tag. +#' @param class CSS class to be applied to the container of \code{dashboardBody}. Note it's not the +#' \code{} tag. #' @return A tab that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} #' @export #' @examples @@ -221,23 +256,26 @@ dashboardSidebar <- dashboard_sidebar #' #' shinyApp(ui, server) #' } -dashboard_body <- function(..., class = ""){ +dashboard_body <- function(..., class = "") { shiny::div(class = paste("ui grid pusher dashboard-body", class), ...) } -#' @describeIn dashboard_body Create a body of a dashboard (alias for \code{dashboard_body} for compatibility with \code{shinydashboard}) +#' @describeIn dashboard_body Create a body of a dashboard (alias for \code{dashboard_body} for +#' compatibility with \code{shinydashboard}) #' @export dashboardBody <- dashboard_body #' Create a dashboard. -#' @description Create a page with menu item sidebar and body containing tabs and other additional elements. +#' @description Create a page with menu item sidebar and body containing tabs and other additional +#' elements. #' @param header Header of a dashboard. #' @param sidebar Sidebar of a dashboard. #' @param body Body of a dashboard. #' @param title Title of a dashboard. #' @param margin If \code{TRUE}, margin to be applied to the whole dashboard. #' Defaults to \code{TRUE}. -#' @param theme Theme name or path. For possible options see \code{\link[shiny.semantic]{semanticPage}}. +#' @param theme Theme name or path. For possible options see +#' \code{\link[shiny.semantic]{semanticPage}}. #' @param class CSS class to be applied to the page container (\code{} tag). #' @param sidebar_and_body_container_class CSS class to be applied to the \code{div} containing #' \code{dashboardSidebar} and \code{dashboardBody}. @@ -270,20 +308,30 @@ dashboardBody <- dashboard_body #' } dashboard_page <- function(header, sidebar, body, title = "", suppress_bootstrap = TRUE, theme = NULL, - margin = TRUE, class = "", sidebar_and_body_container_class = "") { + margin = TRUE, class = "", sidebar_and_body_container_class = "") { # nolint: object_length_linter # TODO: Remove this line when it is added to semanticPage() if (is.null(sidebar)) header$children[[1]] <- NULL - sidebar_and_body <- div(class = paste("ui bottom attached segment pushable", sidebar_and_body_container_class), - sidebar, - body) + sidebar_and_body <- div( + class = paste("ui bottom attached segment pushable", sidebar_and_body_container_class), + sidebar, + body + ) margin_class <- ifelse(isFALSE(margin), "no-margin", "") class <- paste("dashboard-page", margin_class, class) - shiny.semantic::semanticPage(header, sidebar_and_body, get_dashboard_dependencies(), margin = "0", - title = title, theme = theme, suppress_bootstrap = suppress_bootstrap, - class = class) + shiny.semantic::semanticPage( + header, + sidebar_and_body, + get_dashboard_dependencies(), + margin = "0", + title = title, + theme = theme, + suppress_bootstrap = suppress_bootstrap, + class = class + ) } -#' @describeIn dashboard_page Create a dashboard (alias for \code{dashboard_page} for compatibility with \code{shinydashboard}) +#' @describeIn dashboard_page Create a dashboard (alias for \code{dashboard_page} for compatibility +#' with \code{shinydashboard}) #' @export dashboardPage <- dashboard_page diff --git a/R/sidebar_menu_output.R b/R/sidebar_menu_output.R index f562b06..3256cc0 100644 --- a/R/sidebar_menu_output.R +++ b/R/sidebar_menu_output.R @@ -3,11 +3,12 @@ #' @param outputId Id of the output. #' @return A sidebar menu that can be passed to \code{\link[semantic.dashboard]{dashboardSidebar}} #' @export -sidebar_menu_output <- function(outputId){ +sidebar_menu_output <- function(outputId) { shiny::uiOutput(outputId) } -#' @describeIn sidebar_menu_output Create a sidebar menu output (alias for \code{sidebar_menu_output} for compatibility with \code{shinydashboard}) +#' @describeIn sidebar_menu_output Create a sidebar menu output (alias for \code{sidebar_menu +#' output} for compatibility with \code{shinydashboard}) #' @export sidebarMenuOutput <- sidebar_menu_output @@ -16,11 +17,12 @@ sidebarMenuOutput <- sidebar_menu_output #' @param outputId Id of the output. #' @return A menu item that can be passed to \code{\link[semantic.dashboard]{sidebarMenu}} #' @export -menu_item_output <- function(outputId){ +menu_item_output <- function(outputId) { shiny::uiOutput(outputId) } -#' @describeIn menu_item_output Create a menu item output (alias for \code{menu_item_output} for compatibility with \code{shinydashboard}) +#' @describeIn menu_item_output Create a menu item output (alias for \code{menu_item_output} for +#' compatibility with \code{shinydashboard}) #' @export menuItemOutput <- menu_item_output @@ -28,14 +30,16 @@ menuItemOutput <- menu_item_output #' @description Server-side function for dynamic sidebarMenu. #' @param expr menu. #' @param env The environment in which to evaluate expr. -#' @param quoted Is expr a quoted expression (with \code{quote()})? This is useful if you want to save an expression in a variable. +#' @param quoted Is expr a quoted expression (with \code{quote()})? This is useful if you want to +#' save an expression in a variable. #' @return A dynamic menu that can be assigned to output. #' @export -render_menu <- function(expr, env = parent.frame(), quoted = FALSE){ +render_menu <- function(expr, env = parent.frame(), quoted = FALSE) { fun <- shiny::exprToFunction(expr, env, quoted) shiny::renderUI(fun()) } -#' @describeIn render_menu Create a menu output (alias for \code{render_menu} for compatibility with \code{shinydashboard}) +#' @describeIn render_menu Create a menu output (alias for \code{render_menu} for compatibility +#' with \code{shinydashboard}) #' @export renderMenu <- render_menu diff --git a/R/tab.R b/R/tab.R index f8aca51..0ba7340 100644 --- a/R/tab.R +++ b/R/tab.R @@ -3,20 +3,22 @@ #' Create a tab panel with additional UI elements. #' #' @param tabName Id of the tab. -#' @param fluid Controls whether tab width should be 100\% (TRUE) or limited by Foomantic UI breakpoints (FALSE). +#' @param fluid Controls whether tab width should be 100\% (TRUE) or limited by Foomantic UI +#' breakpoints (FALSE). #' @param ... UI elements to include within the tab. #' @return A tab that can be passed to \code{\link[semantic.dashboard]{dashboardBody}} #' @export #' @examples #' tab_item(tabName = "tab1", "Tab 1") -tab_item <- function(tabName, ..., fluid = TRUE){ +tab_item <- function(tabName, ..., fluid = TRUE) { data_tab <- paste0("shiny-tab-", tabName) shiny::div(role = "tabpanel", style = "height: 100%;", class = paste("ui", "tab tab-pane container", ifelse(fluid, "fluid", "")), id = data_tab, `data-tab` = data_tab, shiny::tags$div(class = "ui padded grid", ...)) } -#' @describeIn tab_item Create a tab (alias for \code{tab_item} for compatibility with \code{shinydashboard}) +#' @describeIn tab_item Create a tab (alias for \code{tab_item} for compatibility with +#' \code{shinydashboard}) #' @export tabItem <- tab_item @@ -29,10 +31,11 @@ tabItem <- tab_item #' tabItems( #' tabItem(tabName = "tab1", "Tab 1"), #' tabItem(tabName = "tab2", "Tab 2")) -tab_items <- function(...){ +tab_items <- function(...) { shiny::tags$div(class = "tab-content", list(...)) } -#' @describeIn tab_items Create a panel with tabs (alias for \code{tab_items} for compatibility with \code{shinydashboard}) +#' @describeIn tab_items Create a panel with tabs (alias for \code{tab_items} for compatibility +#' with \code{shinydashboard}) #' @export tabItems <- tab_items diff --git a/R/tab_box.R b/R/tab_box.R index 578bc95..552601c 100644 --- a/R/tab_box.R +++ b/R/tab_box.R @@ -22,10 +22,20 @@ #' )) tab_box <- function(tabs, title = NULL, color = "", ribbon = TRUE, title_side = "top right", collapsible = TRUE, width = 8, id = NULL, ...) { - box(shiny.semantic::tabset(tabs), title = title, color = color, ribbon = ribbon, title_side = title_side, - collapsible = collapsible, width = width, id = id, ...) + box( + shiny.semantic::tabset(tabs), + title = title, + color = color, + ribbon = ribbon, + title_side = title_side, + collapsible = collapsible, + width = width, + id = id, + ... + ) } -#' @describeIn tab_box Create a tab box (alias for \code{tab_box} for compatibility with \code{shinydashboard}) +#' @describeIn tab_box Create a tab box (alias for \code{tab_box} for compatibility with +#' \code{shinydashboard}) #' @export tabBox <- tab_box diff --git a/R/utils.R b/R/utils.R index e03727f..727150b 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1,7 +1,7 @@ # Verify that given variable is in the list of allowed values. verify_value_allowed <- function(variable, values) { var <- get(variable, envir = parent.frame()) - if (!(var %in% values)){ + if (!(var %in% values)) { warning(paste(paste0("'", variable, "'"), "argument should be one of:", paste0("'", values, "'", collapse = ", "))) @@ -15,7 +15,7 @@ get_inverted_class <- function(inverted) { # Interlace elements with dividers between each pair of elements. interlace_dividers <- function(elements) { - dividers <- lapply(1:length(elements), function(i) shiny::tags$div(class = "divider")) + dividers <- lapply(seq_along(elements), function(i) shiny::tags$div(class = "divider")) utils::head(c(rbind(elements, dividers)), -1) # Skips last divider with head. } @@ -28,8 +28,7 @@ random_id_generator <- function(values = 0:9, id_length = 30) { # The default label is the caller function's name. validate_session_object <- function(session, label = as.character(sys.call(sys.parent())[[1]])) { if (missing(session) || - !inherits(session, c("ShinySession", "MockShinySession", "session_proxy"))) - { + !inherits(session, c("ShinySession", "MockShinySession", "session_proxy"))) { stop(call. = FALSE, sprintf( "`session` must be a 'ShinySession' object. Did you forget to pass `session` to `%s()`?", diff --git a/R/value_box.R b/R/value_box.R index 76b9866..444ead1 100644 --- a/R/value_box.R +++ b/R/value_box.R @@ -12,7 +12,7 @@ #' @export #' @examples #' valueBox("Unread Mail", 44, icon("mail"), color = "blue", width = 5, size = "tiny") -value_box <- function(subtitle, value, icon = NULL, color = "blue", width = 5, size = ""){ +value_box <- function(subtitle, value, icon = NULL, color = "blue", width = 5, size = "") { verify_value_allowed("color", ALLOWED_COLORS) verify_value_allowed("size", ALLOWED_VALUEBOX_SIZES) column(width = width, @@ -50,7 +50,7 @@ infoBox <- value_box #' width = 5) #' }) #' } -value_box_output <- function(outputId, width = 5){ +value_box_output <- function(outputId, width = 5) { column(width = width, shiny::uiOutput(outputId)) } @@ -83,7 +83,7 @@ infoBoxOutput <- value_box_output #' width = 5) #' }) #' } -render_value_box <- function(expr, env = parent.frame(), quoted = FALSE){ +render_value_box <- function(expr, env = parent.frame(), quoted = FALSE) { fun <- shiny::exprToFunction(expr, env, quoted) shiny::renderUI(fun()) } @@ -95,4 +95,3 @@ renderValueBox <- render_value_box #' @describeIn render_value_box Create a value box output (alias for \code{render_value_box}) #' @export renderInfoBox <- render_value_box - diff --git a/man/dashboard_body.Rd b/man/dashboard_body.Rd index b2f45c5..e1de383 100644 --- a/man/dashboard_body.Rd +++ b/man/dashboard_body.Rd @@ -12,7 +12,8 @@ dashboardBody(..., class = "") \arguments{ \item{...}{UI elements to include within the body.} -\item{class}{CSS class to be applied to the container of \code{dashboardBody}. Note it's not the \code{} tag.} +\item{class}{CSS class to be applied to the container of \code{dashboardBody}. Note it's not the +\code{} tag.} } \value{ A tab that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} @@ -22,7 +23,8 @@ Create a body of a dashboard with tabs and other additional UI elements. } \section{Functions}{ \itemize{ -\item \code{dashboardBody()}: Create a body of a dashboard (alias for \code{dashboard_body} for compatibility with \code{shinydashboard}) +\item \code{dashboardBody()}: Create a body of a dashboard (alias for \code{dashboard_body} for +compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/dashboard_header.Rd b/man/dashboard_header.Rd index 8ad275a..28ba5a3 100644 --- a/man/dashboard_header.Rd +++ b/man/dashboard_header.Rd @@ -42,22 +42,27 @@ dashboardHeader( \arguments{ \item{...}{UI elements to include within the header. They will be displayed on the right side.} -\item{left}{UI element to put on the left of the header. It will be placed after (to the right) the title and menu button (if they exist).} +\item{left}{UI element to put on the left of the header. It will be placed after (to the right) +the title and menu button (if they exist).} \item{center}{UI element to put in the center of the header.} -\item{right}{UI element to put to the right of the header. It will be placed before elements defined in \code{...} (if there are any).} +\item{right}{UI element to put to the right of the header. It will be placed before elements +defined in \code{...} (if there are any).} -\item{title}{Dashboard title to be displayed in the upper left corner. If NULL, will not display any title field. Use "" for an empty title.} +\item{title}{Dashboard title to be displayed in the upper left corner. If NULL, will not display +any title field. Use "" for an empty title.} -\item{titleWidth}{Title field width, one of \code{c(NULL, "very thin", "thin", "wide", "very wide")}} +\item{titleWidth}{Title field width, one of \code{c(NULL, "very thin", "thin", "wide", +"very wide")}} \item{logo_align}{Where should logo be placed. One of \code{c("left", "center")}} \item{logo_path}{Path or URL of the logo to be shown in the header.} -\item{color}{Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")}} +\item{color}{Color of the sidebar / text / icons (depending on the value of `inverted` parameter. +One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", +"purple", "pink", "brown", "grey", "black")}} \item{inverted}{If FALSE sidebar will be white and text will be colored. \ If TRUE text will be white and background will be colored. Default is \code{FALSE}.} @@ -75,11 +80,13 @@ A header that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} } \description{ Create a header of a dashboard with other additional UI elements. - Hint: use \code{shiny::tagList()} if you want to add multiple elements in \code{left} / \code{center} or \code{right}. + Hint: use \code{shiny::tagList()} if you want to add multiple elements in + \code{left} / \code{center} or \code{right}. } \section{Functions}{ \itemize{ -\item \code{dashboardHeader()}: Create a header of a dashboard (alias for \code{dashboard_header} for compatibility with \code{shinydashboard}) +\item \code{dashboardHeader()}: Create a header of a dashboard (alias for \code{dashboard_header} +for compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/dashboard_page.Rd b/man/dashboard_page.Rd index a9d31a0..087a718 100644 --- a/man/dashboard_page.Rd +++ b/man/dashboard_page.Rd @@ -42,7 +42,8 @@ dashboardPage( FomanticUI and Bootstrap. For the time being it's better to suppress Bootstrap. If \code{TRUE} bootstrap dependency from \code{shiny} will be disabled.} -\item{theme}{Theme name or path. For possible options see \code{\link[shiny.semantic]{semanticPage}}.} +\item{theme}{Theme name or path. For possible options see +\code{\link[shiny.semantic]{semanticPage}}.} \item{margin}{If \code{TRUE}, margin to be applied to the whole dashboard. Defaults to \code{TRUE}.} @@ -56,11 +57,13 @@ Defaults to \code{TRUE}.} Dashboard. } \description{ -Create a page with menu item sidebar and body containing tabs and other additional elements. +Create a page with menu item sidebar and body containing tabs and other additional + elements. } \section{Functions}{ \itemize{ -\item \code{dashboardPage()}: Create a dashboard (alias for \code{dashboard_page} for compatibility with \code{shinydashboard}) +\item \code{dashboardPage()}: Create a dashboard (alias for \code{dashboard_page} for compatibility +with \code{shinydashboard}) }} \examples{ diff --git a/man/dashboard_sidebar.Rd b/man/dashboard_sidebar.Rd index dfaf455..5498048 100644 --- a/man/dashboard_sidebar.Rd +++ b/man/dashboard_sidebar.Rd @@ -44,13 +44,15 @@ dashboardSidebar( \item{size}{Size of the sidebar. One of \code{c("", "thin", "very thin", "wide", "very wide")}} -\item{color}{Color of the sidebar / text / icons (depending on the value of `inverted` parameter. \ -One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", "violet", "purple", "pink", "brown", "grey", "black")}} +\item{color}{Color of the sidebar / text / icons (depending on the value of `inverted` +parameter. One of \code{c("", "red", "orange", "yellow", "olive", "green", "teal", "blue", +"violet","purple", "pink", "brown", "grey", "black")}} \item{inverted}{If FALSE sidebar will be white and text will be colored. \ If TRUE text will be white and background will be colored. Default is \code{FALSE}.} -\item{closable}{If \code{TRUE} allow close sidebar by clicking in the body. Default to \code{FALSE}} +\item{closable}{If \code{TRUE} allow close sidebar by clicking in the body. Default to +\code{FALSE}} \item{pushable}{If \code{TRUE} the menu button is active. Default to \code{TRUE}} @@ -60,10 +62,12 @@ If TRUE text will be white and background will be colored. Default is \code{FALS \item{disable}{If \code{TRUE}, don't display the sidebar.} -\item{overlay}{If \code{TRUE}, opened sidebar will cover the tab content. Otherwise it is displayed next to the content. -Relevant only for sidebar positioned on left or right. Default to \code{FALSE}} +\item{overlay}{If \code{TRUE}, opened sidebar will cover the tab content. Otherwise it is +displayed next to the content. Relevant only for sidebar positioned on left or right. Default +to \code{FALSE}} -\item{dim_page}{If \code{TRUE}, page content will be darkened when sidebr is open. Default to \code{FALSE}} +\item{dim_page}{If \code{TRUE}, page content will be darkened when sidebr is open. Default to +\code{FALSE}} \item{class}{CSS class to be applied to the container of \code{dashboardSidebar}.} } @@ -71,11 +75,13 @@ Relevant only for sidebar positioned on left or right. Default to \code{FALSE}} A sidebar that can be passed to \code{\link[semantic.dashboard]{dashboardPage}} } \description{ -Create a pushable sidebar of a dashboard with menu items and other additional UI elements. +Create a pushable sidebar of a dashboard with menu items and other additional UI + elements. } \section{Functions}{ \itemize{ -\item \code{dashboardSidebar()}: Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} for compatibility with \code{shinydashboard}) +\item \code{dashboardSidebar()}: Create a sidebar of a dashboard (alias for \code{dashboard_sidebar} +for compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/dropdown_menu.Rd b/man/dropdown_menu.Rd index 3934067..2ded4bf 100644 --- a/man/dropdown_menu.Rd +++ b/man/dropdown_menu.Rd @@ -14,7 +14,7 @@ dropdownMenu(..., type = "messages", icon = NULL, show_counter = TRUE) \item{type}{Type of the displayed items.} -\item{icon}{Icon of the dropdown menu. If not specyfied created based on \code{type} agrument.} +\item{icon}{Icon of the dropdown menu. If not specified created based on \code{type} argument.} \item{show_counter}{If true circular label with counter is going to be shown for dropdown.} } @@ -26,7 +26,8 @@ Create a dropdown menu with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{dropdownMenu()}: Create a dropdown menu (alias for \code{dropdown_menu} for compatibility with \code{shinydashboard}) +\item \code{dropdownMenu()}: Create a dropdown menu (alias for \code{dropdown_menu} for +compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/dropdown_menu_output.Rd b/man/dropdown_menu_output.Rd index ee3b062..8fb4dd3 100644 --- a/man/dropdown_menu_output.Rd +++ b/man/dropdown_menu_output.Rd @@ -20,7 +20,8 @@ UI-side function for dynamic dropdownMenu. } \section{Functions}{ \itemize{ -\item \code{dropdownMenuOutput()}: Create a dropdown menu output (alias for \code{dropdown_menu_output} for compatibility with \code{shinydashboard}) +\item \code{dropdownMenuOutput()}: Create a dropdown menu output (alias for \code{dropdown_menu +output} for compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/get_dashboard_dependencies.Rd b/man/get_dashboard_dependencies.Rd index 88e763f..e975cb0 100644 --- a/man/get_dashboard_dependencies.Rd +++ b/man/get_dashboard_dependencies.Rd @@ -10,6 +10,7 @@ get_dashboard_dependencies() semantic.dashboard dependencies } \description{ -To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} help. +To add dependencies in the future follow the \code{\link[htmltools]{htmlDependency}} + help. } \keyword{internal} diff --git a/man/icon.Rd b/man/icon.Rd index 3ce6de7..54df05b 100644 --- a/man/icon.Rd +++ b/man/icon.Rd @@ -7,7 +7,8 @@ icon(type, ...) } \arguments{ -\item{type}{A name of an icon. Look at http://semantic-ui.com/elements/icon.html for all possibilities.} +\item{type}{A name of an icon. Look at http://semantic-ui.com/elements/icon.html for all +possibilities.} \item{...}{Other arguments to be added as attributes of the tag (e.g. style, class etc.)} } diff --git a/man/menu_item.Rd b/man/menu_item.Rd index a401635..a668bd3 100644 --- a/man/menu_item.Rd +++ b/man/menu_item.Rd @@ -59,9 +59,11 @@ Create a menu item corresponding to a tab. } \section{Functions}{ \itemize{ -\item \code{menuItem()}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +\item \code{menuItem()}: Create a menu item (alias for \code{menu_item} for compatibility with +\code{shinydashboard}) -\item \code{menuSubItem()}: Create a menu item (alias for \code{manu_item} for compatibility with \code{shinydashboard}) +\item \code{menuSubItem()}: Create a menu item (alias for \code{menu_item} for compatibility with +\code{shinydashboard}) }} \examples{ diff --git a/man/menu_item_output.Rd b/man/menu_item_output.Rd index 993f0ec..7e1ae8c 100644 --- a/man/menu_item_output.Rd +++ b/man/menu_item_output.Rd @@ -20,6 +20,7 @@ UI-side function for dynamic manuItem. } \section{Functions}{ \itemize{ -\item \code{menuItemOutput()}: Create a menu item output (alias for \code{menu_item_output} for compatibility with \code{shinydashboard}) +\item \code{menuItemOutput()}: Create a menu item output (alias for \code{menu_item_output} for +compatibility with \code{shinydashboard}) }} diff --git a/man/message_item.Rd b/man/message_item.Rd index a4eceae..99eb5d0 100644 --- a/man/message_item.Rd +++ b/man/message_item.Rd @@ -26,7 +26,8 @@ Create a message item. } \section{Functions}{ \itemize{ -\item \code{messageItem()}: Create a message item (alias for \code{message_item} for compatibility with \code{shinydashboard}) +\item \code{messageItem()}: Create a message item (alias for \code{message_item} for compatibility +with \code{shinydashboard}) }} \examples{ diff --git a/man/notification_item.Rd b/man/notification_item.Rd index dd38395..7379543 100644 --- a/man/notification_item.Rd +++ b/man/notification_item.Rd @@ -26,7 +26,8 @@ Create a notification item. } \section{Functions}{ \itemize{ -\item \code{notificationItem()}: Create a notification item (alias for \code{notification_item} for compatibility with \code{shinydashboard}) +\item \code{notificationItem()}: Create a notification item (alias for \code{notification_item} for +compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/render_dropdown_menu.Rd b/man/render_dropdown_menu.Rd index 9a5a53e..ee30c8a 100644 --- a/man/render_dropdown_menu.Rd +++ b/man/render_dropdown_menu.Rd @@ -14,7 +14,8 @@ renderDropdownMenu(expr, env = parent.frame(), quoted = FALSE) \item{env}{The environment in which to evaluate expr.} -\item{quoted}{Is expr a quoted expression (with \code{quote()})? This is useful if you want to save an expression in a variable.} +\item{quoted}{Is expr a quoted expression (with \code{quote()})? This is useful if you want to +save an expression in a variable.} } \value{ A dynamic dropdown menu that can be assigned to output. @@ -24,7 +25,8 @@ Server-side function for dynamic dropdownMenu. } \section{Functions}{ \itemize{ -\item \code{renderDropdownMenu()}: Create a dropdown menu output (alias for \code{render_dropdown_menu} for compatibility with \code{shinydashboard}) +\item \code{renderDropdownMenu()}: Create a dropdown menu output (alias for \code{render_dropdown +menu} for compatibility with \code{shinydashboard}) }} \examples{ diff --git a/man/render_menu.Rd b/man/render_menu.Rd index 2a6fd13..dd7093e 100644 --- a/man/render_menu.Rd +++ b/man/render_menu.Rd @@ -14,7 +14,8 @@ renderMenu(expr, env = parent.frame(), quoted = FALSE) \item{env}{The environment in which to evaluate expr.} -\item{quoted}{Is expr a quoted expression (with \code{quote()})? This is useful if you want to save an expression in a variable.} +\item{quoted}{Is expr a quoted expression (with \code{quote()})? This is useful if you want to +save an expression in a variable.} } \value{ A dynamic menu that can be assigned to output. @@ -24,6 +25,7 @@ Server-side function for dynamic sidebarMenu. } \section{Functions}{ \itemize{ -\item \code{renderMenu()}: Create a menu output (alias for \code{render_menu} for compatibility with \code{shinydashboard}) +\item \code{renderMenu()}: Create a menu output (alias for \code{render_menu} for compatibility +with \code{shinydashboard}) }} diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index f0e0724..1a69d93 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -12,7 +12,8 @@ sidebarMenu(..., id = "uisidebar") \arguments{ \item{...}{Menu items.} -\item{id}{The sidebar id class also used for update input on server side. Default is \code{uisidebar}} +\item{id}{The sidebar id class also used for update input on server side. Default is +\code{uisidebar}} } \value{ A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSidebar}} @@ -25,7 +26,8 @@ It's possible to set selected menu item by setting `selected = TRUE` in `menuIte } \section{Functions}{ \itemize{ -\item \code{sidebarMenu()}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) +\item \code{sidebarMenu()}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility +with \code{shinydashboard}) }} \examples{ diff --git a/man/sidebar_menu_output.Rd b/man/sidebar_menu_output.Rd index b0dd6fb..b550e6c 100644 --- a/man/sidebar_menu_output.Rd +++ b/man/sidebar_menu_output.Rd @@ -20,6 +20,7 @@ UI-side function for dynamic sidebarMenu. } \section{Functions}{ \itemize{ -\item \code{sidebarMenuOutput()}: Create a sidebar menu output (alias for \code{sidebar_menu_output} for compatibility with \code{shinydashboard}) +\item \code{sidebarMenuOutput()}: Create a sidebar menu output (alias for \code{sidebar_menu +output} for compatibility with \code{shinydashboard}) }} diff --git a/man/tab_box.Rd b/man/tab_box.Rd index 57311d7..13d74ff 100644 --- a/man/tab_box.Rd +++ b/man/tab_box.Rd @@ -59,7 +59,8 @@ Create a tab box with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{tabBox()}: Create a tab box (alias for \code{tab_box} for compatibility with \code{shinydashboard}) +\item \code{tabBox()}: Create a tab box (alias for \code{tab_box} for compatibility with +\code{shinydashboard}) }} \examples{ diff --git a/man/tab_item.Rd b/man/tab_item.Rd index dca054c..96dd9cc 100644 --- a/man/tab_item.Rd +++ b/man/tab_item.Rd @@ -14,7 +14,8 @@ tabItem(tabName, ..., fluid = TRUE) \item{...}{UI elements to include within the tab.} -\item{fluid}{Controls whether tab width should be 100\% (TRUE) or limited by Foomantic UI breakpoints (FALSE).} +\item{fluid}{Controls whether tab width should be 100\% (TRUE) or limited by Foomantic UI +breakpoints (FALSE).} } \value{ A tab that can be passed to \code{\link[semantic.dashboard]{dashboardBody}} @@ -24,7 +25,8 @@ Create a tab panel with additional UI elements. } \section{Functions}{ \itemize{ -\item \code{tabItem()}: Create a tab (alias for \code{tab_item} for compatibility with \code{shinydashboard}) +\item \code{tabItem()}: Create a tab (alias for \code{tab_item} for compatibility with +\code{shinydashboard}) }} \examples{ diff --git a/man/tab_items.Rd b/man/tab_items.Rd index b89864f..cccdc87 100644 --- a/man/tab_items.Rd +++ b/man/tab_items.Rd @@ -20,7 +20,8 @@ Create a panel with tabs. } \section{Functions}{ \itemize{ -\item \code{tabItems()}: Create a panel with tabs (alias for \code{tab_items} for compatibility with \code{shinydashboard}) +\item \code{tabItems()}: Create a panel with tabs (alias for \code{tab_items} for compatibility +with \code{shinydashboard}) }} \examples{ diff --git a/man/task_item.Rd b/man/task_item.Rd index 5e84c06..60fe9b9 100644 --- a/man/task_item.Rd +++ b/man/task_item.Rd @@ -26,7 +26,8 @@ Create a task item. } \section{Functions}{ \itemize{ -\item \code{taskItem()}: Create a task item (alias for \code{taks_item} for compatibility with \code{shinydashboard}) +\item \code{taskItem()}: Create a task item (alias for \code{taks_item} for compatibility with +\code{shinydashboard}) }} \examples{ diff --git a/man/update_tab_items.Rd b/man/update_tab_items.Rd index 65e4540..875b2ef 100644 --- a/man/update_tab_items.Rd +++ b/man/update_tab_items.Rd @@ -19,8 +19,8 @@ Change the selected tab on the client } \section{Functions}{ \itemize{ -\item \code{updateTabItems()}: Change the selected item on the client (alias for \code{update_tab_items} for -compatibility with \code{shinydashboard}) +\item \code{updateTabItems()}: Change the selected item on the client (alias for +\code{update_tab_items} for compatibility with \code{shinydashboard}) }} \examples{ diff --git a/tests/testthat/test-lintr.R b/tests/testthat/test-lintr.R deleted file mode 100644 index e13eef5..0000000 --- a/tests/testthat/test-lintr.R +++ /dev/null @@ -1,10 +0,0 @@ -context("lintr") - -test_that("lintr", { - print(getwd()) - lintr::expect_lint_free( - path = "../../00_pkg_src/semantic.dashboard", - relative_path = TRUE, - lintr::line_length_linter(150) - ) -}) diff --git a/tests/testthat/test-names.R b/tests/testthat/test-names.R index 06c0358..810d152 100644 --- a/tests/testthat/test-names.R +++ b/tests/testthat/test-names.R @@ -2,11 +2,14 @@ library(semantic.dashboard) library(shinydashboard) context("Function names") -test_that("All functions from shinydashboard are implemented except functions known to be missing", { - to_be_implemented <- c("menuItemOutput", "menuSubItem", "renderMenu", "sidebarMenuOutput", - "sidebarSearchForm", "sidebarUserPanel", "updateTabItems") - not_implemented <- setdiff(setdiff(ls("package:shinydashboard"), ls("package:semantic.dashboard")), - to_be_implemented) +test_that("All functions from shinydashboard are implemented except functions known to be missing", { # nolint: line_length_linter + to_be_implemented <- c( + "menuItemOutput", "menuSubItem", "renderMenu", "sidebarMenuOutput", + "sidebarSearchForm", "sidebarUserPanel", "updateTabItems" + ) + not_implemented <- setdiff( + setdiff(ls("package:shinydashboard"), ls("package:semantic.dashboard")), + to_be_implemented + ) expect_equal(length(not_implemented), 0) -} -) +}) diff --git a/tests/testthat/test-value_box.R b/tests/testthat/test-value_box.R index 150b479..58691cd 100644 --- a/tests/testthat/test-value_box.R +++ b/tests/testthat/test-value_box.R @@ -75,4 +75,3 @@ test_that("equivalence of valueBoxOutput and infoBoxOutput", { expect_equal(si_str3, si_str2) expect_equal(si_str1, si_str3) }) - From affef442cf9894f8553639266c3eb635fd337a4c Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 28 Sep 2022 11:57:43 +0200 Subject: [PATCH 41/71] Files cleanup. --- .Rbuildignore | 1 + run_example.sh | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100755 run_example.sh diff --git a/.Rbuildignore b/.Rbuildignore index 23b2845..503e196 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -17,3 +17,4 @@ development ^srcjs$ ^styles$ pkgdown +.lintr diff --git a/run_example.sh b/run_example.sh deleted file mode 100755 index e6250f5..0000000 --- a/run_example.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -cd examples/$1 -R -e 'shiny::runApp()' From 80ef585fe68e7388e46087d84beb9d7f5c059ce4 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 28 Sep 2022 11:58:35 +0200 Subject: [PATCH 42/71] Update CI script. --- .github/workflows/main.yml | 75 +++++++++++++------------------------- 1 file changed, 26 insertions(+), 49 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index be04eba..c1c9e33 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,10 +3,12 @@ on: push name: R-CMD-check jobs: - R-CMD-check: + main: + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + runs-on: ${{ matrix.config.os }} - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + timeout-minutes: 30 strategy: fail-fast: false @@ -14,63 +16,38 @@ jobs: config: - {os: macOS-latest, r: 'release'} - {os: windows-latest, r: 'release'} - - {os: ubuntu-18.04, r: 'devel', http-user-agent: 'release', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} - - {os: ubuntu-18.04, r: 'release', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} - - {os: ubuntu-18.04, r: 'oldrel', cran: "https://demo.rstudiopm.com/all/__linux__/bionic/latest"} - - env: - R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - CRAN: ${{ matrix.config.cran }} + - {os: ubuntu-22.04, r: 'devel'} + - {os: ubuntu-22.04, r: 'release'} + - {os: ubuntu-22.04, r: 'oldrel'} steps: - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 - - uses: r-lib/actions/setup-r@master + - name: Install R + uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.r }} - http-user-agent: ${{ matrix.config.http-user-agent }} - - uses: r-lib/actions/setup-pandoc@master - - - name: Query dependencies - run: Rscript -e "install.packages('remotes')" -e "saveRDS(remotes::dev_package_deps(dependencies = TRUE), 'depends.Rds', version = 2)" - - - name: Cache R packages - if: runner.os != 'Windows' - uses: actions/cache@v1 + - name: Install R package dependencies + uses: r-lib/actions/setup-r-dependencies@v2 with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-r-${{ matrix.config.r }}-${{ hashFiles('depends.Rds') }} - restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }}- + extra-packages: local::. # Necessary to avoid object usage linter errors. - - name: Install system dependencies - if: runner.os == 'Linux' - uses: r-lib/actions/setup-r-dependencies@v1 + - name: R CMD check + if: always() + uses: r-lib/actions/check-r-package@v2 with: - extra-packages: rcmdcheck - - - name: Install vctrs - if: runner.os == 'Windows' - run: Rscript -e "remotes::install_cran('vctrs')" - - - name: Install vctrs - if: runner.os == 'macos' - run: Rscript -e "remotes::install_cran('Rcpp')" - - - name: Install dependencies - run: Rscript -e "library(remotes)" -e "update(readRDS('depends.Rds'))" -e "remotes::install_cran('rcmdcheck')" - - - name: Check - run: Rscript -e "rcmdcheck::rcmdcheck(args = c('--no-manual', '--as-cran'), error_on = 'error', check_dir = 'check')" - - - name: Upload check results - if: failure() - uses: actions/upload-artifact@master - with: - name: ${{ runner.os }}-r${{ matrix.config.r }}-results - path: check + error-on: '"note"' + - name: Lint + if: always() + shell: Rscript {0} + run: | + lints <- lintr::lint_package() + for (lint in lints) print(lint) + quit(status = length(lints) > 0) - name: Test coverage - if: matrix.config.os == 'ubuntu-18.04' && matrix.config.r == 'release' + if: matrix.config.os == 'ubuntu-22.04' && matrix.config.r == 'release' run: | Rscript -e 'covr::codecov(token = "${{secrets.CODECOV_TOKEN}}")' From 9a3ff3e3b128c59b04c9ad6a64f019115ca36ca5 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Wed, 28 Sep 2022 12:04:35 +0200 Subject: [PATCH 43/71] Add rcmdcheck to DESCRIPTION. --- DESCRIPTION | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index eab4c11..10a10d6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -9,7 +9,7 @@ Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "a person("Michał", "Drzazga", role = "ctb"), person("Developers", "Appsilon", email = "support+opensource@appsilon.com", role = "cre"), person(family = "Appsilon", role = "cph")) -Description: It offers functions for creating dashboard with Fomantic UI. +Description: It offers functions for creating dashboard with Fomantic UI. BugReports: https://github.com/Appsilon/semantic.dashboard/issues Encoding: UTF-8 License: MIT + file LICENSE @@ -21,13 +21,14 @@ Imports: glue, checkmate Suggests: - testthat, - lintr, - shinydashboard, covr, knitr, + lintr, + markdown, + rcmdcheck, rmarkdown, - markdown + shinydashboard, + testthat RoxygenNote: 7.2.1 VignetteBuilder: knitr From cb59ee587afdb0f4d6baea1dd648bafee26ad553 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Fri, 28 Oct 2022 13:00:38 +0200 Subject: [PATCH 44/71] Add Google tag to the documentation page. --- pkgdown/_pkgdown.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 44bc1c0..081f94f 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -4,6 +4,16 @@ template: bootswatch: pulse bslib: pkgdown-nav-height: 100px + includes: + in_header: | + + + url: https://appsilon.github.io/semantic.dashboard/ From 90ea53c8687731391fd515a31a2f37af93155552 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Nov 2022 13:59:40 +0000 Subject: [PATCH 45/71] Bump minimatch from 3.0.4 to 3.1.2 in /tools Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2. - [Release notes](https://github.com/isaacs/minimatch/releases) - [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2) --- updated-dependencies: - dependency-name: minimatch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index 65939ec..9209551 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -2557,9 +2557,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" From 44fa9ff6906dac1ab7a3daaef8288cbf1db7abf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:14:43 +0000 Subject: [PATCH 46/71] Bump decode-uri-component from 0.2.0 to 0.2.2 in /tools Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2. - [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases) - [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2) --- updated-dependencies: - dependency-name: decode-uri-component dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/package-lock.json b/tools/package-lock.json index 65939ec..ab1ffd3 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -796,9 +796,9 @@ "dev": true }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, "deep-is": { From a446f2db6a3dec557d7609b5be7f2d25862c8ddb Mon Sep 17 00:00:00 2001 From: osenan Date: Thu, 23 Jun 2022 15:15:53 +0200 Subject: [PATCH 47/71] Feature: First commit of sidebar_user_panel --- R/menu_item.R | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/R/menu_item.R b/R/menu_item.R index 6346ecc..3afc473 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -154,3 +154,13 @@ update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { #' \code{update_tab_items} for compatibility with \code{shinydashboard}) #' @export updateTabItems <- update_tab_items + +sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, + image_size = "mini") { + div(class = "user-panel", if (!is.null(image)) { + div(class = "pull-left image", + img(src = image, class = glue("ui {image_size} circular image", + alt = "User Image"))) + }, div(class = "pull-left info", style = if (is.null(image)) + "left: 4px", p(name), subtitle)) +} From 389cb1736e7aed60ca49cc9a11d209f504031975 Mon Sep 17 00:00:00 2001 From: osenan Date: Thu, 1 Sep 2022 02:21:36 +0200 Subject: [PATCH 48/71] Refactor: transform list to html and allow to include multiple elements --- R/semantic_dashboard.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 61dc43b..3d5f011 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -217,7 +217,6 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), shiny::tags$script(src = "src/updateTabItems.js") ) - } } From 45ca52b0fc257e269c8a9d57810267855bbf8f87 Mon Sep 17 00:00:00 2001 From: osenan Date: Thu, 1 Sep 2022 02:24:01 +0200 Subject: [PATCH 49/71] Feature: Use more fomantic ui css cclasses for better ui on the sidebar user panel and remove id from sidebar --- R/menu_item.R | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/R/menu_item.R b/R/menu_item.R index 3afc473..645e0b2 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -109,8 +109,8 @@ menuSubItem <- menu_item #' menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), #' menuItem(tabName = "table_tab", text = "My table", icon = icon("smile"), selected = TRUE) #' ) -sidebar_menu <- function(..., id = "uisidebar") { - c(as.list(environment()), list(...)) +sidebar_menu <- function(...) { + shiny::div(id = "uisidebar", list(...)) } #' @describeIn sidebar_menu Create a sidebar menu (alias for \code{sidebar_menu} for compatibility @@ -156,11 +156,10 @@ update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { updateTabItems <- update_tab_items sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, - image_size = "mini") { - div(class = "user-panel", if (!is.null(image)) { - div(class = "pull-left image", - img(src = image, class = glue("ui {image_size} circular image", - alt = "User Image"))) - }, div(class = "pull-left info", style = if (is.null(image)) - "left: 4px", p(name), subtitle)) -} + image_size = "tiny") { + div(class = "user-panel", if (!is.null(image)) { + img(src = image, class = glue("ui {image_size} circular left floated image", + alt = "User Image"))}, + p(name), subtitle) + } + From 06419fef9905be7759ed385c865705dfcfde408d Mon Sep 17 00:00:00 2001 From: osenan Date: Thu, 1 Sep 2022 02:26:56 +0200 Subject: [PATCH 50/71] Improve styling of sidebar user panel Remove id from parameter of sidebar --- R/semantic_dashboard.R | 1 + inst/semantic.dashboard.css | 3 +++ 2 files changed, 4 insertions(+) diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 3d5f011..394d3c7 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -181,6 +181,7 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv if (disable || length(list(...)) < 1) { NULL } else { + arguments <- list(...) verify_value_allowed("side", ALLOWED_SIDEBAR_SIDES) verify_value_allowed("size", ALLOWED_SIDEBAR_SIZES) verify_value_allowed("color", ALLOWED_COLORS) diff --git a/inst/semantic.dashboard.css b/inst/semantic.dashboard.css index da9062c..71bc8e3 100644 --- a/inst/semantic.dashboard.css +++ b/inst/semantic.dashboard.css @@ -259,3 +259,6 @@ body.no-margin .ui.top.menu.dashboard-header { border-top-width: 1px; } +section.sidebar .user-panel{ + min-height: 65px; +} From 559d3917c0f40f564ba60f43f57feb99f1e1763a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 18:50:18 +0000 Subject: [PATCH 51/71] adds styling and documentation --- NAMESPACE | 1 + R/menu_item.R | 56 ++++++++++++++++++++++++++ examples/app.R | 14 +++++-- examples/www/jane_doe.jpg | Bin 0 -> 15284 bytes inst/semantic.dashboard.css | 3 +- inst/semantic.dashboard.min.css | 3 +- man/sidebar_user_panel.Rd | 67 ++++++++++++++++++++++++++++++++ styles/layout/_sidebar.scss | 5 +++ 8 files changed, 143 insertions(+), 6 deletions(-) create mode 100644 examples/www/jane_doe.jpg create mode 100644 man/sidebar_user_panel.Rd diff --git a/NAMESPACE b/NAMESPACE index cbf1cbf..3bf194f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -39,6 +39,7 @@ export(sidebarMenu) export(sidebarMenuOutput) export(sidebar_menu) export(sidebar_menu_output) +export(sidebar_user_panel) export(tabBox) export(tabItem) export(tabItems) diff --git a/R/menu_item.R b/R/menu_item.R index 645e0b2..9bf0627 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -155,6 +155,62 @@ update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { #' @export updateTabItems <- update_tab_items + +#' Create a user panel +#' +#' @description This creates an user panel using Semantic UI styles. +#' +#' @param name Name of the user +#' @param subtitle Information to be displayed below the name (for example +#' if the user is online) +#' @param image Path to an image. This can be a relative link to an existing +#' `www/` directory, or an URL to an image +#' @param image_size CSS class to display the image, see Semantic documentation +#' for all sizes (goes from `mini` to `massive`) +#' +#' @return A div tag with the user panel +#' @export +#' +#' @examples +#' sidebar_user_panel( +#' "Some Name", +#' subtitle = a(href = "#", icon("circle"), "Online"), +#' # Image file should be in www/ subdir +#' # or a link to a image +#' image = "some_image_located_inside_www_dir.jpg", +#' image_size = "mini" +#' ) +#' +#' ui_user <- sidebar_user_panel( +#' "Luca Turilli", +#' subtitle = a(href = "#", icon("circle"), "Online"), +#' # Image file should be in www/ subdir +#' # or a link to a image +#' image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_%282%29.jpg/330px-Luca_Turilli_in_2019_%282%29.jpg", +#' image_size = "mini" +#' ) +#' +#' if (interactive()) { +#' ui <- dashboardPage( +#' dashboardHeader(), +#' dashboardSidebar( +#' ui_user, +#' sidebarMenu( +#' menuItem("Tab 1", tabName = "tab1"), +#' menuItem("Tab 2", tabName = "tab2") +#' ) +#' ), +#' body = dashboardBody( +#' tabItems( +#' tabItem(tabName = "tab1", h2("Tab 1")), +#' tabItem(tabName = "tab2", h2("Tab 2")) +#' ) +#' ) +#' ) +#' +#' server <- function(input, output, session) {} +#' shinyApp(ui, server) +#' } sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, image_size = "tiny") { div(class = "user-panel", if (!is.null(image)) { diff --git a/examples/app.R b/examples/app.R index 86268ec..3e89a32 100644 --- a/examples/app.R +++ b/examples/app.R @@ -24,9 +24,17 @@ ui <- dashboardPage( visible = TRUE, dim_page = FALSE, closable = FALSE, - sidebarMenu( - menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), - menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")))), + sidebarMenu( + sidebar_user_panel( + "Jane Smith", + subtitle = a(href = "#", icon("circle"), "Online"), + # Original image is published with a free to use license. + # https://www.pexels.com/photo/3492736/ + image = "jane_smith.jpg", + image_size = "mini" + ), + menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), + menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")))), dashboardBody( tabItems( diff --git a/examples/www/jane_doe.jpg b/examples/www/jane_doe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5878fd9f1294b91d10421c9200e8e155540ceb2d GIT binary patch literal 15284 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 Ss%gNKaLGpNUZ&~Z`2Pa=6i;XX literal 0 HcmV?d00001 diff --git a/inst/semantic.dashboard.css b/inst/semantic.dashboard.css index 71bc8e3..d701b9e 100644 --- a/inst/semantic.dashboard.css +++ b/inst/semantic.dashboard.css @@ -259,6 +259,7 @@ body.no-margin .ui.top.menu.dashboard-header { border-top-width: 1px; } -section.sidebar .user-panel{ +.ui.sidebar .user-panel { min-height: 65px; + padding: .92857143em 1.14285714em; } diff --git a/inst/semantic.dashboard.min.css b/inst/semantic.dashboard.min.css index 8743e10..5858f2e 100644 --- a/inst/semantic.dashboard.min.css +++ b/inst/semantic.dashboard.min.css @@ -1,2 +1 @@ -body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar ~ .pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px} - +body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar~.pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px}.ui.sidebar .user-panel{min-height:65px;padding:.92857143em 1.14285714em} diff --git a/man/sidebar_user_panel.Rd b/man/sidebar_user_panel.Rd new file mode 100644 index 0000000..2379eb2 --- /dev/null +++ b/man/sidebar_user_panel.Rd @@ -0,0 +1,67 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/menu_item.R +\name{sidebar_user_panel} +\alias{sidebar_user_panel} +\title{Create a user panel} +\usage{ +sidebar_user_panel(name, subtitle = NULL, image = NULL, image_size = "tiny") +} +\arguments{ +\item{name}{Name of the user} + +\item{subtitle}{Information to be displayed below the name (for example +if the user is online)} + +\item{image}{Path to an image. This can be a relative link to an existing +`www/` directory, or an URL to an image} + +\item{image_size}{CSS class to display the image, see Semantic documentation +for all sizes (goes from `mini` to `massive`)} +} +\value{ +A div tag with the user panel +} +\description{ +This creates an user panel using Semantic UI styles. +} +\examples{ +sidebar_user_panel( + "Some Name", + subtitle = a(href = "#", icon("circle"), "Online"), + # Image file should be in www/ subdir + # or a link to a image + image = "some_image_located_inside_www_dir.jpg", + image_size = "mini" +) + +ui_user <- sidebar_user_panel( + "Luca Turilli", + subtitle = a(href = "#", icon("circle"), "Online"), + # Image file should be in www/ subdir + # or a link to a image + image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_\%282\%29.jpg/330px-Luca_Turilli_in_2019_\%282\%29.jpg", + image_size = "mini" +) + +if (interactive()) { + ui <- dashboardPage( + dashboardHeader(), + dashboardSidebar( + ui_user, + sidebarMenu( + menuItem("Tab 1", tabName = "tab1"), + menuItem("Tab 2", tabName = "tab2") + ) + ), + body = dashboardBody( + tabItems( + tabItem(tabName = "tab1", h2("Tab 1")), + tabItem(tabName = "tab2", h2("Tab 2")) + ) + ) + ) + + server <- function(input, output, session) {} + shinyApp(ui, server) +} +} diff --git a/styles/layout/_sidebar.scss b/styles/layout/_sidebar.scss index 2c3e445..1b014a7 100644 --- a/styles/layout/_sidebar.scss +++ b/styles/layout/_sidebar.scss @@ -24,3 +24,8 @@ $opposite-sides: ("left": "right", "right": "left", "top": "bottom", "bottom": " border-#{$opposide-side}-width: 1px; } } + +.ui.sidebar .user-panel{ + min-height: 65px; + padding: .92857143em 1.14285714em; +} From f6372091f68c60f98c1d3c9447cc299135c6fbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:00:55 +0000 Subject: [PATCH 52/71] adds compatibility with shinydashboard, update tests --- NAMESPACE | 1 + R/menu_item.R | 8 +++++--- examples/app.R | 2 +- examples/www/jane_doe.jpg | Bin 15284 -> 0 bytes man/sidebar_user_panel.Rd | 4 ++-- tests/testthat/test-names.R | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 examples/www/jane_doe.jpg diff --git a/NAMESPACE b/NAMESPACE index 3bf194f..2b77a67 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -37,6 +37,7 @@ export(render_value_box) export(semantic_palette) export(sidebarMenu) export(sidebarMenuOutput) +export(sidebarUserPanel) export(sidebar_menu) export(sidebar_menu_output) export(sidebar_user_panel) diff --git a/R/menu_item.R b/R/menu_item.R index 9bf0627..7632189 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -155,7 +155,6 @@ update_tab_items <- function(session = shiny::getDefaultReactiveDomain(), tab) { #' @export updateTabItems <- update_tab_items - #' Create a user panel #' #' @description This creates an user panel using Semantic UI styles. @@ -172,7 +171,7 @@ updateTabItems <- update_tab_items #' @export #' #' @examples -#' sidebar_user_panel( +#' sidebarUserPanel( #' "Some Name", #' subtitle = a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir @@ -181,7 +180,7 @@ updateTabItems <- update_tab_items #' image_size = "mini" #' ) #' -#' ui_user <- sidebar_user_panel( +#' ui_user <- sidebarUserPanel( #' "Luca Turilli", #' subtitle = a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir @@ -219,3 +218,6 @@ sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, p(name), subtitle) } +#' @describeIn sidebar_menu Create a sidebar user panel (alias for \code{sidebar_user_panel} for compatibility with \code{shinydashboard}) +#' @export +sidebarUserPanel <- sidebar_user_panel diff --git a/examples/app.R b/examples/app.R index 3e89a32..37a2044 100644 --- a/examples/app.R +++ b/examples/app.R @@ -25,7 +25,7 @@ ui <- dashboardPage( dim_page = FALSE, closable = FALSE, sidebarMenu( - sidebar_user_panel( + sidebarUserPanel( "Jane Smith", subtitle = a(href = "#", icon("circle"), "Online"), # Original image is published with a free to use license. diff --git a/examples/www/jane_doe.jpg b/examples/www/jane_doe.jpg deleted file mode 100644 index 5878fd9f1294b91d10421c9200e8e155540ceb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15284 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 Ss%gNKaLGpNUZ&~Z`2Pa=6i;XX diff --git a/man/sidebar_user_panel.Rd b/man/sidebar_user_panel.Rd index 2379eb2..fccdc8b 100644 --- a/man/sidebar_user_panel.Rd +++ b/man/sidebar_user_panel.Rd @@ -25,7 +25,7 @@ A div tag with the user panel This creates an user panel using Semantic UI styles. } \examples{ -sidebar_user_panel( +sidebarUserPanel( "Some Name", subtitle = a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir @@ -34,7 +34,7 @@ sidebar_user_panel( image_size = "mini" ) -ui_user <- sidebar_user_panel( +ui_user <- sidebarUserPanel( "Luca Turilli", subtitle = a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir diff --git a/tests/testthat/test-names.R b/tests/testthat/test-names.R index 810d152..dc72b3c 100644 --- a/tests/testthat/test-names.R +++ b/tests/testthat/test-names.R @@ -5,7 +5,7 @@ context("Function names") test_that("All functions from shinydashboard are implemented except functions known to be missing", { # nolint: line_length_linter to_be_implemented <- c( "menuItemOutput", "menuSubItem", "renderMenu", "sidebarMenuOutput", - "sidebarSearchForm", "sidebarUserPanel", "updateTabItems" + "sidebarSearchForm", "updateTabItems" ) not_implemented <- setdiff( setdiff(ls("package:shinydashboard"), ls("package:semantic.dashboard")), From 22cfcb2fa160a2de42cc1396f446607ac68e45b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:23:42 +0000 Subject: [PATCH 53/71] leftover from rebase --- R/semantic_dashboard.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 394d3c7..3d5f011 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -181,7 +181,6 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv if (disable || length(list(...)) < 1) { NULL } else { - arguments <- list(...) verify_value_allowed("side", ALLOWED_SIDEBAR_SIDES) verify_value_allowed("size", ALLOWED_SIDEBAR_SIZES) verify_value_allowed("color", ALLOWED_COLORS) From 9efc039e4779dfa39e9cf0150149337e68c2c54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:27:33 +0000 Subject: [PATCH 54/71] updates documentation for sidebar_menu that was outdated --- man/sidebar_menu.Rd | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index 1a69d93..d37de03 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -3,11 +3,14 @@ \name{sidebar_menu} \alias{sidebar_menu} \alias{sidebarMenu} +\alias{sidebarUserPanel} \title{Create a sidebar menu.} \usage{ -sidebar_menu(..., id = "uisidebar") +sidebar_menu(...) -sidebarMenu(..., id = "uisidebar") +sidebarMenu(...) + +sidebarUserPanel(name, subtitle = NULL, image = NULL, image_size = "tiny") } \arguments{ \item{...}{Menu items.} @@ -29,6 +32,8 @@ It's possible to set selected menu item by setting `selected = TRUE` in `menuIte \item \code{sidebarMenu()}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) +\item \code{sidebarUserPanel()}: Create a sidebar user panel (alias for \code{sidebar_user_panel} for compatibility with \code{shinydashboard}) + }} \examples{ sidebarMenu( From 6e009e999a2f516e0a7ca4eaebbe690aa75ff8c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:29:25 +0000 Subject: [PATCH 55/71] rename of jane_doe to jane_smith --- examples/www/jane_smith.jpg | Bin 0 -> 15284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/www/jane_smith.jpg diff --git a/examples/www/jane_smith.jpg b/examples/www/jane_smith.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5878fd9f1294b91d10421c9200e8e155540ceb2d GIT binary patch literal 15284 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 Ss%gNKaLGpNUZ&~Z`2Pa=6i;XX literal 0 HcmV?d00001 From b799ff10fb09865d7e300ff2625fd42b37c332df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:42:40 +0000 Subject: [PATCH 56/71] corrects lint errors and typo on documentation --- R/menu_item.R | 24 +++++++++++++++++------- man/sidebar_menu.Rd | 5 ----- man/sidebar_user_panel.Rd | 11 ++++++++++- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/R/menu_item.R b/R/menu_item.R index 7632189..ebfabd7 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -185,7 +185,7 @@ updateTabItems <- update_tab_items #' subtitle = a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir #' # or a link to a image -#' image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_%282%29.jpg/330px-Luca_Turilli_in_2019_%282%29.jpg", +#' image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_%282%29.jpg/330px-Luca_Turilli_in_2019_%282%29.jpg", # nolint: line_length_linter #' image_size = "mini" #' ) #' @@ -210,14 +210,24 @@ updateTabItems <- update_tab_items #' server <- function(input, output, session) {} #' shinyApp(ui, server) #' } -sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, +sidebar_user_panel <- function(name, + subtitle = NULL, + image = NULL, image_size = "tiny") { - div(class = "user-panel", if (!is.null(image)) { - img(src = image, class = glue("ui {image_size} circular left floated image", - alt = "User Image"))}, - p(name), subtitle) + div( + class = "user-panel", + if (!is.null(image)) { + img( + src = image, + class = glue("ui {image_size} circular left floated image", + alt = "User Image") + ) + }, + p(name), subtitle + ) } -#' @describeIn sidebar_menu Create a sidebar user panel (alias for \code{sidebar_user_panel} for compatibility with \code{shinydashboard}) +#' @describeIn sidebar_user_panel Create a sidebar user panel (alias for +#' \code{sidebar_user_panel} for compatibility with \code{shinydashboard}) #' @export sidebarUserPanel <- sidebar_user_panel diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index d37de03..b4b2c70 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -3,14 +3,11 @@ \name{sidebar_menu} \alias{sidebar_menu} \alias{sidebarMenu} -\alias{sidebarUserPanel} \title{Create a sidebar menu.} \usage{ sidebar_menu(...) sidebarMenu(...) - -sidebarUserPanel(name, subtitle = NULL, image = NULL, image_size = "tiny") } \arguments{ \item{...}{Menu items.} @@ -32,8 +29,6 @@ It's possible to set selected menu item by setting `selected = TRUE` in `menuIte \item \code{sidebarMenu()}: Create a sidebar menu (alias for \code{sidebar_menu} for compatibility with \code{shinydashboard}) -\item \code{sidebarUserPanel()}: Create a sidebar user panel (alias for \code{sidebar_user_panel} for compatibility with \code{shinydashboard}) - }} \examples{ sidebarMenu( diff --git a/man/sidebar_user_panel.Rd b/man/sidebar_user_panel.Rd index fccdc8b..353204a 100644 --- a/man/sidebar_user_panel.Rd +++ b/man/sidebar_user_panel.Rd @@ -2,9 +2,12 @@ % Please edit documentation in R/menu_item.R \name{sidebar_user_panel} \alias{sidebar_user_panel} +\alias{sidebarUserPanel} \title{Create a user panel} \usage{ sidebar_user_panel(name, subtitle = NULL, image = NULL, image_size = "tiny") + +sidebarUserPanel(name, subtitle = NULL, image = NULL, image_size = "tiny") } \arguments{ \item{name}{Name of the user} @@ -24,6 +27,12 @@ A div tag with the user panel \description{ This creates an user panel using Semantic UI styles. } +\section{Functions}{ +\itemize{ +\item \code{sidebarUserPanel()}: Create a sidebar user panel (alias for +\code{sidebar_user_panel} for compatibility with \code{shinydashboard}) + +}} \examples{ sidebarUserPanel( "Some Name", @@ -39,7 +48,7 @@ ui_user <- sidebarUserPanel( subtitle = a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir # or a link to a image - image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_\%282\%29.jpg/330px-Luca_Turilli_in_2019_\%282\%29.jpg", + image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_\%282\%29.jpg/330px-Luca_Turilli_in_2019_\%282\%29.jpg", # nolint: line_length_linter image_size = "mini" ) From 12637efd6834d504f6cffe00780766bc6a4f6bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 19:54:00 +0000 Subject: [PATCH 57/71] change image link to local file provided by the package --- R/menu_item.R | 7 +++++-- man/sidebar_user_panel.Rd | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/R/menu_item.R b/R/menu_item.R index ebfabd7..314f658 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -181,11 +181,14 @@ updateTabItems <- update_tab_items #' ) #' #' ui_user <- sidebarUserPanel( -#' "Luca Turilli", +#' "Jane Smith", #' subtitle = a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir #' # or a link to a image -#' image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_%282%29.jpg/330px-Luca_Turilli_in_2019_%282%29.jpg", # nolint: line_length_linter +#' image = base::system.file( +#' file.path('examples', "www", "jane_smith.jpg"), +#' package = "semantic.dashboard" +#' ), #' image_size = "mini" #' ) #' diff --git a/man/sidebar_user_panel.Rd b/man/sidebar_user_panel.Rd index 353204a..685a9c4 100644 --- a/man/sidebar_user_panel.Rd +++ b/man/sidebar_user_panel.Rd @@ -44,11 +44,14 @@ sidebarUserPanel( ) ui_user <- sidebarUserPanel( - "Luca Turilli", + "Jane Smith", subtitle = a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir # or a link to a image - image = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Luca_Turilli_in_2019_\%282\%29.jpg/330px-Luca_Turilli_in_2019_\%282\%29.jpg", # nolint: line_length_linter + image = base::system.file( + file.path('examples', "www", "jane_smith.jpg"), + package = "semantic.dashboard" + ), image_size = "mini" ) From 4d96f6114985640a0a658a5944103bcccf0b9c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 20:02:15 +0000 Subject: [PATCH 58/71] corrects error with example --- .Rbuildignore | 2 ++ R/menu_item.R | 6 ++---- man/sidebar_menu.Rd | 3 --- man/sidebar_user_panel.Rd | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 503e196..eb80759 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,5 @@ +^renv$ +^renv\.lock$ ^codecov\.yml$ ^.*\.Rproj$ ^\.Rproj\.user$ diff --git a/R/menu_item.R b/R/menu_item.R index 314f658..af1147f 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -97,8 +97,6 @@ menuSubItem <- menu_item #' Create a sidebar menu. #' @description Create a sidebar menu with menu items. -#' @param id The sidebar id class also used for update input on server side. Default is -#' \code{uisidebar} #' @param ... Menu items. #' @return A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSidebar}} #' @export @@ -173,7 +171,7 @@ updateTabItems <- update_tab_items #' @examples #' sidebarUserPanel( #' "Some Name", -#' subtitle = a(href = "#", icon("circle"), "Online"), +#' subtitle = shiny::a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir #' # or a link to a image #' image = "some_image_located_inside_www_dir.jpg", @@ -182,7 +180,7 @@ updateTabItems <- update_tab_items #' #' ui_user <- sidebarUserPanel( #' "Jane Smith", -#' subtitle = a(href = "#", icon("circle"), "Online"), +#' subtitle = shiny::a(href = "#", icon("circle"), "Online"), #' # Image file should be in www/ subdir #' # or a link to a image #' image = base::system.file( diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index b4b2c70..ca5da80 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -11,9 +11,6 @@ sidebarMenu(...) } \arguments{ \item{...}{Menu items.} - -\item{id}{The sidebar id class also used for update input on server side. Default is -\code{uisidebar}} } \value{ A sidebar menu that can be passed \code{\link[semantic.dashboard]{dashboardSidebar}} diff --git a/man/sidebar_user_panel.Rd b/man/sidebar_user_panel.Rd index 685a9c4..6107903 100644 --- a/man/sidebar_user_panel.Rd +++ b/man/sidebar_user_panel.Rd @@ -36,7 +36,7 @@ This creates an user panel using Semantic UI styles. \examples{ sidebarUserPanel( "Some Name", - subtitle = a(href = "#", icon("circle"), "Online"), + subtitle = shiny::a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir # or a link to a image image = "some_image_located_inside_www_dir.jpg", @@ -45,7 +45,7 @@ sidebarUserPanel( ui_user <- sidebarUserPanel( "Jane Smith", - subtitle = a(href = "#", icon("circle"), "Online"), + subtitle = shiny::a(href = "#", icon("circle"), "Online"), # Image file should be in www/ subdir # or a link to a image image = base::system.file( From 9ba7b1568fa10236d0b0db733ff218cb39ac6fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 20:46:30 +0000 Subject: [PATCH 59/71] minor corrections and typos --- CHANGELOG.md | 4 +- R/menu_item.R | 8 +- R/semantic_dashboard.R | 4 +- examples/app.R | 174 +++++++++++++++++++++++++---------------- man/sidebar_menu.Rd | 2 +- pkgdown/_pkgdown.yml | 2 + 6 files changed, 120 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 800731e..ad6bf4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ## [Unreleased] ### Added +- `sidebarUserPanel` was added increasing support of `shinydashboard` functions + ### Changed ### Fixed ### Removed @@ -17,7 +19,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). - `fluid` param for `tabItem` - `class` param for `dashboardPage`, `dashboardBody`, `dashboardSidebar` and `dashboardHeader` - `dashboardPage`, `dashboardBody`, `dashboardSidebar` and `dashboardHeader` have now built-in CSS classes of syntax `dashboard-` e.g. `dashboard-page`. Thanks to that it's easy to write selectors for DOM nodes related to them -- pkgdown docuemntation +- pkgdown documentation - tests for dropdown menu, utils and value box ### Changed diff --git a/R/menu_item.R b/R/menu_item.R index af1147f..6b93d91 100644 --- a/R/menu_item.R +++ b/R/menu_item.R @@ -106,7 +106,7 @@ menuSubItem <- menu_item #' sidebarMenu( #' menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), #' menuItem(tabName = "table_tab", text = "My table", icon = icon("smile"), selected = TRUE) -#' ) +#' ) sidebar_menu <- function(...) { shiny::div(id = "uisidebar", list(...)) } @@ -215,12 +215,12 @@ sidebar_user_panel <- function(name, subtitle = NULL, image = NULL, image_size = "tiny") { - div( + shiny::div( class = "user-panel", if (!is.null(image)) { - img( + shiny::img( src = image, - class = glue("ui {image_size} circular left floated image", + class = glue::glue("ui {image_size} circular left floated image", alt = "User Image") ) }, diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 3d5f011..45a7624 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -198,7 +198,7 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv shiny::div( closable = closable, - id = ..1$id, + id = ..1$attribs$id, class = paste( "dashboard-sidebar ui", size, @@ -213,7 +213,7 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv overlay_class, class ), - ..1[-1], + ..1$children, shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), shiny::tags$script(src = "src/updateTabItems.js") ) diff --git a/examples/app.R b/examples/app.R index 37a2044..33bdabe 100644 --- a/examples/app.R +++ b/examples/app.R @@ -6,82 +6,124 @@ library(DT) ui <- dashboardPage( margin = TRUE, - dashboardHeader(logo_align = "center", - logo_path = "http://d2v95fjda94ghc.cloudfront.net/appsilon_logo.png", - dropdownMenuOutput("dropdown"), - title = "Appsilon", - titleWidth = "thin", - show_menu_button = TRUE, - dropdownMenu(type = "notifications", - taskItem("Project progress...", 50.777, color = "red")), - dropdownMenu(icon = icon("red warning sign"), - notificationItem("This is an important notification!", color = "red"))), - - dashboardSidebar(side = "left", - size = "thin", - overlay = FALSE, - pushable = TRUE, - visible = TRUE, - dim_page = FALSE, - closable = FALSE, - sidebarMenu( - sidebarUserPanel( - "Jane Smith", - subtitle = a(href = "#", icon("circle"), "Online"), - # Original image is published with a free to use license. - # https://www.pexels.com/photo/3492736/ - image = "jane_smith.jpg", - image_size = "mini" - ), - menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), - menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")))), + dashboardHeader( + logo_align = "center", + logo_path = "http://d2v95fjda94ghc.cloudfront.net/appsilon_logo.png", + dropdownMenuOutput("dropdown"), + title = "Appsilon", + titleWidth = "thin", + show_menu_button = TRUE, + dropdownMenu( + type = "notifications", + taskItem("Project progress...", 50.777, color = "red") + ), + dropdownMenu( + icon = icon("red warning sign"), + notificationItem("This is an important notification!", color = "red") + ) + ), + dashboardSidebar( + side = "left", + size = "thin", + overlay = FALSE, + pushable = TRUE, + visible = TRUE, + dim_page = FALSE, + closable = FALSE, + sidebarMenu( + sidebarUserPanel( + "Jane Smith", + subtitle = shiny::a(href = "#", icon("circle"), "Online"), + # Original image is published with a free to use license. + # https://www.pexels.com/photo/3492736/ + image = "jane_smith.jpg", + image_size = "mini" + ), + menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), + menuItem(tabName = "table_tab", text = "My table", icon = icon("smile")) + ) + ), dashboardBody( tabItems( - tabItem(tabName = "plot_tab", fluid = TRUE, - fluidRow( - valueBox("Unread Mail", 44, icon("mail"), color = "blue", width = 5)), - fluidRow( - box(title = "Sample box", color = "blue", width = 11, - selectInput(inputId = "variable1", choices = names(mtcars), - label = "Select first variable", selected = "mpg"), - selectInput(inputId = "variable2", choices = names(mtcars), - label = "Select second variable", selected = "cyl"), - plotlyOutput("mtcars_plot")), - tabBox(title = "Sample box", color = "blue", width = 5, - collapsible = FALSE, - tabs = list( - list(menu = "First Tab", content = "Some text..."), - list(menu = "Second Tab", content = plotlyOutput("mtcars_plot2")) - ))) - ), - tabItem(tabName = "table_tab", fluid = FALSE, - fluidRow( - valueBox("Unread Mail", 144, icon("mail"), color = "blue", width = 6, size = "small"), - valueBox("Spam", 20, icon("mail"), color = "red", width = 5, size = "small"), - valueBox("Readed Mail", 666, icon("mail"), color = "green", width = 5, size = "small") - ), - fluidRow( - box(title = "Classic box", color = "red", ribbon = FALSE, - title_side = "top left", width = 16, - dataTableOutput("mtcars_table") - ))))) + tabItem( + tabName = "plot_tab", fluid = TRUE, + fluidRow( + valueBox("Unread Mail", 44, icon("mail"), color = "blue", width = 5)), + fluidRow( + box( + title = "Sample box", color = "blue", width = 11, + selectInput( + inputId = "variable1", + choices = names(mtcars), + label = "Select first variable", + selected = "mpg" + ), + selectInput( + inputId = "variable2", + choices = names(mtcars), + label = "Select second variable", selected = "cyl" + ), + plotlyOutput("mtcars_plot") + ), + tabBox( + title = "Sample box", color = "blue", width = 5, + collapsible = FALSE, + tabs = list( + list(menu = "First Tab", content = "Some text..."), + list(menu = "Second Tab", content = plotlyOutput("mtcars_plot2")) + ) + ) + ) + ), + tabItem( + tabName = "table_tab", fluid = FALSE, + fluidRow( + valueBox("Unread Mail", 144, icon("mail"), color = "blue", width = 6, size = "small"), + valueBox("Spam", 20, icon("mail"), color = "red", width = 5, size = "small"), + valueBox("Readed Mail", 666, icon("mail"), color = "green", width = 5, size = "small") + ), + fluidRow( + box( + title = "Classic box", + color = "red", + ribbon = FALSE, + title_side = "top left", + width = 16, + dataTableOutput("mtcars_table") + ) + ) + ) + ) + ) ) server <- function(input, output) { - output$mtcars_plot <- renderPlotly(plot_ly(mtcars, x = ~ mtcars[ , input$variable1], - y = ~ mtcars[ , input$variable2], - type = "scatter", mode = "markers")) - output$mtcars_plot2 <- renderPlotly(plot_ly(mtcars, x = ~ mtcars[ , input$variable1], - y = ~ mtcars[ , input$variable2], - type = "scatter", mode = "markers")) + output$mtcars_plot <- renderPlotly( + plot_ly( + mtcars, x = ~ mtcars[ , input$variable1], + y = ~ mtcars[ ,input$variable2], + type = "scatter", + mode = "markers" + ) + ) + output$mtcars_plot2 <- renderPlotly( + plot_ly( + mtcars, x = ~ mtcars[ , input$variable1], + y = ~ mtcars[ , input$variable2], + type = "scatter", + mode = "markers" + ) + ) output$mtcars_table <- renderDataTable(mtcars) output$dropdown <- renderDropdownMenu({ - dropdownMenu(messageItem("User", "Test message", color = "teal", style = "min-width: 200px"), - messageItem("Users", "Test message", color = "teal", icon = "users"), - messageItem("See this", "Another test", icon = "warning", color = "red")) + dropdownMenu( + messageItem("User", "Test message", color = "teal", style = "min-width: 200px"), + messageItem("Users", "Test message", color = "teal", icon = "users"), + messageItem("See this", "Another test", icon = "warning", color = "red") + ) }) } diff --git a/man/sidebar_menu.Rd b/man/sidebar_menu.Rd index ca5da80..b96e5b6 100644 --- a/man/sidebar_menu.Rd +++ b/man/sidebar_menu.Rd @@ -31,5 +31,5 @@ with \code{shinydashboard}) sidebarMenu( menuItem(tabName = "plot_tab", text = "My plot", icon = icon("home")), menuItem(tabName = "table_tab", text = "My table", icon = icon("smile"), selected = TRUE) - ) +) } diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 081f94f..396c198 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -88,6 +88,8 @@ reference: - '`sidebar_menu`' - '`sidebarMenuOutput`' - '`sidebar_menu_output`' + - '`sidebarUserPanel`' + - '`sidebar_user_panel`' - '`tabBox`' - '`tab_box`' - '`tabItem`' From 726b36ce30e5c2fd7e25685401e76ab0078f897e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 27 Jan 2023 20:57:59 +0000 Subject: [PATCH 60/71] revert back to this brach implementation of semantic_dashboard --- R/semantic_dashboard.R | 46 ++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/R/semantic_dashboard.R b/R/semantic_dashboard.R index 45a7624..89156df 100644 --- a/R/semantic_dashboard.R +++ b/R/semantic_dashboard.R @@ -181,6 +181,7 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv if (disable || length(list(...)) < 1) { NULL } else { + arguments <- list(...) verify_value_allowed("side", ALLOWED_SIDEBAR_SIDES) verify_value_allowed("size", ALLOWED_SIDEBAR_SIZES) verify_value_allowed("color", ALLOWED_COLORS) @@ -196,26 +197,31 @@ dashboard_sidebar <- function(..., side = "left", size = "thin", color = "", inv overlay <- ifelse(overlay, quote(true), quote(false)) dim_page <- ifelse(dim_page, quote(true), quote(false)) - shiny::div( - closable = closable, - id = ..1$attribs$id, - class = paste( - "dashboard-sidebar ui", - size, - side, - color, - ifelse(side %in% c("top", "bottom"), "", "vertical"), - display_type, - ifelse(visible, "visible", ""), - inverted_value, - "menu sidebar", - uncover_class, - overlay_class, - class - ), - ..1$children, - shiny::tags$script(glue("initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})")), - shiny::tags$script(src = "src/updateTabItems.js") + do.call( + shiny::div, + list( + closable = glue::glue("{closable}"), + id = arguments$id, + class = paste( + "dashboard-sidebar ui", + size, + side, + color, + ifelse(side %in% c("top", "bottom"), "", "vertical"), + display_type, + ifelse(visible, "visible", ""), + inverted_value, + "menu sidebar", + uncover_class, + overlay_class, + class + ), + arguments, + shiny::tags$script(glue::glue( + "initialize_sidebar({closable}, {pushable}, {overlay}, {dim_page})" + )), + shiny::tags$script(src = "src/updateTabItems.js") + ) ) } } From 5a90928bdc2b498d5b66e3e2916a35208a1e2646 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Fri, 17 Mar 2023 15:46:24 +0100 Subject: [PATCH 61/71] chore: Add second GA tag. --- pkgdown/_pkgdown.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 081f94f..b0203bd 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -14,6 +14,14 @@ template: gtag('js', new Date()); gtag('config', 'G-ZVSGPM9FF2'); + + + url: https://appsilon.github.io/semantic.dashboard/ From 7d07e25aed990e4cfa54cae2360881059ec753cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:12:23 +0100 Subject: [PATCH 62/71] remove renv and renv.lock that sneaked in the commit --- .Rbuildignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index eb80759..503e196 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,5 +1,3 @@ -^renv$ -^renv\.lock$ ^codecov\.yml$ ^.*\.Rproj$ ^\.Rproj\.user$ From 84787dad7da81a98f26f674a9f3d3637511bd7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:21:30 +0100 Subject: [PATCH 63/71] default back to px which is easier to read/understand --- inst/semantic.dashboard.css | 3 ++- inst/semantic.dashboard.min.css | 3 ++- styles/layout/_sidebar.scss | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/inst/semantic.dashboard.css b/inst/semantic.dashboard.css index d701b9e..575f556 100644 --- a/inst/semantic.dashboard.css +++ b/inst/semantic.dashboard.css @@ -261,5 +261,6 @@ body.no-margin .ui.top.menu.dashboard-header { .ui.sidebar .user-panel { min-height: 65px; - padding: .92857143em 1.14285714em; + padding: 13px 16px; } + diff --git a/inst/semantic.dashboard.min.css b/inst/semantic.dashboard.min.css index 5858f2e..8c4933c 100644 --- a/inst/semantic.dashboard.min.css +++ b/inst/semantic.dashboard.min.css @@ -1 +1,2 @@ -body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar~.pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px}.ui.sidebar .user-panel{min-height:65px;padding:.92857143em 1.14285714em} +body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar ~ .pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px}.ui.sidebar .user-panel{min-height:65px;padding:13px 16px} + diff --git a/styles/layout/_sidebar.scss b/styles/layout/_sidebar.scss index 1b014a7..baa9637 100644 --- a/styles/layout/_sidebar.scss +++ b/styles/layout/_sidebar.scss @@ -27,5 +27,5 @@ $opposite-sides: ("left": "right", "right": "left", "top": "bottom", "bottom": " .ui.sidebar .user-panel{ min-height: 65px; - padding: .92857143em 1.14285714em; + padding: 13px 16px; } From 67286fadd56afc1eb3b986f235ae93b54c4c4be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:42:36 +0100 Subject: [PATCH 64/71] updates to use a recent version of SASS --- inst/semantic.dashboard.css | 1 - inst/semantic.dashboard.min.css | 3 +-- styles/generate_css.R | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/inst/semantic.dashboard.css b/inst/semantic.dashboard.css index 575f556..0eaf834 100644 --- a/inst/semantic.dashboard.css +++ b/inst/semantic.dashboard.css @@ -263,4 +263,3 @@ body.no-margin .ui.top.menu.dashboard-header { min-height: 65px; padding: 13px 16px; } - diff --git a/inst/semantic.dashboard.min.css b/inst/semantic.dashboard.min.css index 8c4933c..dcc9bdc 100644 --- a/inst/semantic.dashboard.min.css +++ b/inst/semantic.dashboard.min.css @@ -1,2 +1 @@ -body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar ~ .pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px}.ui.sidebar .user-panel{min-height:65px;padding:13px 16px} - +body{min-height:unset !important;display:flex;flex-direction:column}body:not(.no-margin){padding:10px}body.no-margin>.ui.top.menu{border-top:0}body.no-margin>.ui.segment.pushable{border:0}body>.ui.segment.pushable.attached{display:flex;overflow:hidden;margin-bottom:0}body>.ui.segment.pushable>.pusher{overflow:auto;width:100%}.dashboard-body.ui.grid{margin:0}.dashboard-body.ui.grid .tab-content{padding-left:0;padding-right:0;width:100%}.ui.menu.dashboard-title{display:flex;justify-content:center;align-items:center;box-shadow:none;border-left-width:0;border-top-width:0;border-bottom-width:0;border-top-right-radius:0;border-bottom-right-radius:0;background:transparent}.dashboard-title.thin{width:150px}body.no-margin .dashboard-title.thin{width:calc(150px - 1px)}.dashboard-title{width:260px}body.no-margin .dashboard-title{width:calc(260px - 1px)}.dashboard-title.wide{width:350px}body.no-margin .dashboard-title.wide{width:calc(350px - 1px)}.dashboard-title[class*='very thin']{width:60px}body.no-margin .dashboard-title[class*='very thin']{width:calc(60px - 1px)}.dashboard-title[class*='very wide']{width:475px}body.no-margin .dashboard-title[class*='very wide']{width:calc(475px - 1px)}.ui.dashboard-title{background-color:rgba(255,255,255,0.9);color:rgba(0,0,0,0.87)}.ui.inverted.dashboard-title{color:rgba(255,255,255,0.9)}.ui.inverted.dashboard-title{background-color:#1B1C1D}.ui.inverted.red.dashboard-title{background-color:#DB2828}.ui.inverted.orange.dashboard-title{background-color:#F2711C}.ui.inverted.yellow.dashboard-title{background-color:#FBBD08}.ui.inverted.olive.dashboard-title{background-color:#B5CC18}.ui.inverted.green.dashboard-title{background-color:#21BA45}.ui.inverted.teal.dashboard-title{background-color:#00B5AD}.ui.inverted.blue.dashboard-title{background-color:#2185D0}.ui.inverted.violet.dashboard-title{background-color:#6435C9}.ui.inverted.purple.dashboard-title{background-color:#A333C8}.ui.inverted.pink.dashboard-title{background-color:#E03997}.ui.inverted.brown.dashboard-title{background-color:#A5673F}.ui.inverted.grey.dashboard-title{background-color:#767676}.ui.inverted.black.dashboard-title{background-color:#1B1C1D}.ui.top.menu.dashboard-header{justify-content:space-between}.ui.top.menu.dashboard-header h1,.ui.top.menu.dashboard-header h2,.ui.top.menu.dashboard-header h3,.ui.top.menu.dashboard-header h4,.ui.top.menu.dashboard-header h5,.ui.top.menu.dashboard-header h6{margin:0}.ui.top.menu.dashboard-header:after{content:none}.ui.top.menu.dashboard-header .logo{height:30px;margin:5px}.ui.top.menu.dashboard-header .header-part{display:flex;align-items:center}body.no-margin .ui.top.menu.dashboard-header{border-radius:0}.ui.sidebar~.pusher{transform:none !important;transition:margin-left .5s ease, margin-right .5s ease}.ui.sidebar.visible:not(.pushable):not(.overlay).left.thin+.pusher,.ui.sidebar.visible.uncover.pushable.left.thin+.pusher{margin-left:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).left+.pusher,.ui.sidebar.visible.uncover.pushable.left+.pusher{margin-left:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).left.wide+.pusher,.ui.sidebar.visible.uncover.pushable.left.wide+.pusher{margin-left:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very thin']+.pusher{margin-left:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).left[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.left[class*='very wide']+.pusher{margin-left:475px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.thin+.pusher,.ui.sidebar.visible.uncover.pushable.right.thin+.pusher{margin-right:150px}.ui.sidebar.visible:not(.pushable):not(.overlay).right+.pusher,.ui.sidebar.visible.uncover.pushable.right+.pusher{margin-right:260px}.ui.sidebar.visible:not(.pushable):not(.overlay).right.wide+.pusher,.ui.sidebar.visible.uncover.pushable.right.wide+.pusher{margin-right:350px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very thin']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very thin']+.pusher{margin-right:60px}.ui.sidebar.visible:not(.pushable):not(.overlay).right[class*='very wide']+.pusher,.ui.sidebar.visible.uncover.pushable.right[class*='very wide']+.pusher{margin-right:475px}.ui.sidebar.left{border-width:0;border-right-width:1px}.ui.sidebar.right{border-width:0;border-left-width:1px}.ui.sidebar.top{border-width:0;border-bottom-width:1px}.ui.sidebar.bottom{border-width:0;border-top-width:1px}.ui.sidebar .user-panel{min-height:65px;padding:13px 16px} diff --git a/styles/generate_css.R b/styles/generate_css.R index f029363..534f0af 100644 --- a/styles/generate_css.R +++ b/styles/generate_css.R @@ -2,12 +2,12 @@ sass::sass( sass::sass_file("styles/main.scss"), options = sass::sass_options(output_style = "compressed"), output = "inst/semantic.dashboard.min.css", - cache_options = sass::sass_cache_options(FALSE) + cache = FALSE ) sass::sass( sass::sass_file("styles/main.scss"), options = sass::sass_options(output_style = "expanded"), output = "inst/semantic.dashboard.css", - cache_options = sass::sass_cache_options(FALSE) + cache = FALSE ) From b07e3fe39c090404e8c3fcd116b3b4a17d81c17c Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Tue, 18 Apr 2023 12:05:53 +0200 Subject: [PATCH 65/71] chore: Update Appsilon section in the readme. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7f25404..8c0f9b8 100644 --- a/README.md +++ b/README.md @@ -97,15 +97,15 @@ Future enhacements - Release of a stable 1.0.0 version - Closer integration with shinydashboard -Appsilon --------- - +## Appsilon -Appsilon is a **Full Service Certified RStudio Partner**. Learn more -at [appsilon.com](https://appsilon.com). +Appsilon is a **Posit (formerly RStudio) Full Service Certified Partner**.
    +Learn more at [appsilon.com](https://appsilon.com). + +Get in touch [opensource@appsilon.com](mailto:opensource@appsilon.com) -Get in touch [opensource@appsilon.com](opensource@appsilon.com) +Explore the [Rhinoverse](https://rhinoverse.dev) - a family of R packages built around [Rhino](https://appsilon.github.io/rhino/)! -We are hiring! +We are hiring! From afdb40edddfd62833ec8099a846a5ad4824f2785 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Tue, 18 Apr 2023 12:06:28 +0200 Subject: [PATCH 66/71] chore: Use markdown headings in the readme. --- README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8c0f9b8..b09ecad 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,7 @@ shinyApp(ui, server) `semantic.dashboard` offers basic functions for creating dashboard with Fomantic UI. -How to install? ---------------- +## How to install? Install `shiny.semantic` library first. [Here](https://github.com/Appsilon/shiny.semantic) you can find how. @@ -67,21 +66,18 @@ To install [previous version]() you can run: remotes::install_github("Appsilon/semantic.dashboard", ref = "0.1.0") -Example -------- +## Example You can find examples in the `examples/` folder of the [GitHub repository](https://github.com/Appsilon/semantic.dashboard). You can check [documentation](https://appsilon.github.io/semantic.dashboard/) for tutorials. -How to contribute? ------------------- +## How to contribute? If you want to contribute to this project please submit a regular PR, once you're done with new feature or bug fix. Please check `development/README.md` first! It contains useful information that will help you run your dev environment for `semantic.dashboard`. -Troubleshooting ---------------- +## Troubleshooting We used the latest versions of dependencies for this library, so please update your R environment before installation. @@ -91,8 +87,7 @@ However, if you encounter any problems, try the following: 2. Installing specific dependent libraries versions - shiny.semantic -Future enhacements ------------------- +## Future enhacements - Release of a stable 1.0.0 version - Closer integration with shinydashboard From a68435cdd569a0aa08980ad30f5c440166736de5 Mon Sep 17 00:00:00 2001 From: Jakub Nowicki Date: Thu, 20 Apr 2023 10:19:08 +0200 Subject: [PATCH 67/71] chore: Replace Appsilon logo link. --- examples/app.R | 2 +- examples/minimal/app_header_elements.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/app.R b/examples/app.R index 33bdabe..f18b763 100644 --- a/examples/app.R +++ b/examples/app.R @@ -8,7 +8,7 @@ ui <- dashboardPage( margin = TRUE, dashboardHeader( logo_align = "center", - logo_path = "http://d2v95fjda94ghc.cloudfront.net/appsilon_logo.png", + logo_path = "https://avatars0.githubusercontent.com/u/6096772", dropdownMenuOutput("dropdown"), title = "Appsilon", titleWidth = "thin", diff --git a/examples/minimal/app_header_elements.R b/examples/minimal/app_header_elements.R index 7226efd..7e76754 100644 --- a/examples/minimal/app_header_elements.R +++ b/examples/minimal/app_header_elements.R @@ -4,7 +4,7 @@ library(semantic.dashboard) ui <- dashboardPage(margin = TRUE, dashboardHeader(title = "Sample app", titleWidth = "thin", - logo_path = "http://d2v95fjda94ghc.cloudfront.net/appsilon_logo.png", + logo_path = "https://avatars0.githubusercontent.com/u/6096772", logo_align = "center", show_menu_button = FALSE, left = tagList(h4("Header test", style="margin-left: 5px"), shiny::icon("check-circle")), From 6bb5c6f02414296d3f77aca18691c8e14fa37eda Mon Sep 17 00:00:00 2001 From: Sankhadeep Dutta Date: Wed, 17 Apr 2024 13:11:53 +0530 Subject: [PATCH 68/71] chore: Update doc page color scheme --- pkgdown/extra.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgdown/extra.css b/pkgdown/extra.css index b067801..9c6aba9 100644 --- a/pkgdown/extra.css +++ b/pkgdown/extra.css @@ -1,13 +1,13 @@ .navbar { - background-color: #3FAD61 !important; + background-color: #69B573 !important; } #navbar > ul.navbar-nav > li.nav-item a:hover { - background-color: #3FAD61 !important; + background-color: #69B573 !important; } .navbar-dark .navbar-nav .active>.nav-link { - background-color: #3FAD61 !important; + background-color: #69B573 !important; color: #fff; } @@ -21,7 +21,7 @@ nav .text-muted { } a { - color: #3FAD61; + color: #69B573; } a:hover { @@ -29,8 +29,8 @@ a:hover { } button.btn.btn-primary.btn-copy-ex { - background-color: #3FAD61; - border-color: #3FAD61; + background-color: #69B573; + border-color: #69B573; } .app-preview { From ddb07095cfa5bff6923013414736c9c882bebe40 Mon Sep 17 00:00:00 2001 From: Sankhadeep Dutta Date: Wed, 17 Apr 2024 13:13:14 +0530 Subject: [PATCH 69/71] chore: Update package logos --- man/figures/hexsticker.png | Bin 28819 -> 94845 bytes pkgdown/favicon/favicon-16x16.png | Bin 719 -> 1551 bytes pkgdown/favicon/favicon-32x32.png | Bin 1757 -> 2167 bytes pkgdown/favicon/favicon.ico | Bin 15406 -> 15086 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/man/figures/hexsticker.png b/man/figures/hexsticker.png index 746f56cf5e8d232d2de8042933bf0f21f7adb204..d38e7cd9ab6acfca439c9c7fad85d91f17f851dd 100644 GIT binary patch literal 94845 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

    a|TWb$Cv*mzt>@hS7&!SK# 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 diff --git a/pkgdown/favicon/favicon-32x32.png b/pkgdown/favicon/favicon-32x32.png index 0b074a818890b934f4448a901ab185e9a234ee51..59c6d2ad8a1f62a354f5f6590a15a0b82b9f45ec 100644 GIT binary patch literal 2167 zcmZ{lc`)1QAIHBTh`5DPN1M1>bu=LarH(|Z|2PU#D+ZbEr>Q;Kq*b zU2keNJD(?0WHy8H9A4`T>a=~G+W+$KjI}9@0I5<+Pj0VXxm(*4Zyi$6_PH<8MNct{ zi+xu4qgxVQPi5^Vg%x@AZz-wzO4>~)%+D{Fd_1!rp-w&zPq=ysE`;QOsoOew)Mfvy z!QbPbckR18x639@YcRyrH_tgNP>JYbjxtRn;>&7AH~5)$#4arRLmM1@=i+?mcJ#7a z>Ll8=*q56jlRS`EdSkxHuw(J|;^hARBuJw#kJlJ0ap6s6FYmCr+OvyT$+IoZerg*N zp8Gg7CZsL>BX{7HF%C0#BOzh~_#(a&C)W2zMo&r%&MI%Vg5pi|1%Na&0N~^Tz!#~+ zSpE%vxqO;05{RC$Vft(1kfL0td9~_nrrmkE$qxnq>TC$4Ptd(mX}BA{SA#z*6q0zFSx5x~u}{ zyI{g0HWEyutAlD|pSC{l;ZOvDqKA=;>zxp61C%y`N{OMp%?DN$+7Hn z_e(*E&=mbodPw$nywb{+W^OxjHxJOfy-ZHK)!TTEZvTPysk1I${IOKEH8(+an?e-p zd*0Quw;Rt|uK1|3ZNg9$hQFGgSn}_Tq_xA-l6~Jq;hsQ^vvcKP4}90-LUVThykPNW z`bGB+L`%Xnr;;5v$p58V{!|^Jqjc*nsJ3n;t-2c_9{+^5eRI&<@p2LWDvuHEYK4)R z8l%=L7b#S0|7e>sGHps&?$}gIMA#9-%31i*V7KXeIH61UOegvD-1JG(t}vBK7jO99mm3&!LY=>C8cO0|N_W;GjY_l};2X5NffX1tlF zVWAem1ex?CwXlQopiZK8A9t|v@O1QNTQW!x@a{Q)0|%*UXb2(WS*j(C$&TzX<4Wd} z#zMB`w+szTxgg$GQ!9g*>F7rG$WgojfH4_UV_IVktMwyx3>huX(=6=HkGQq0J?ylL z*9{^}4UrzfDua!Mxf*7gL>DXGIM|k7c*XK0+fp4-hmV=;T(vZE75cT~j=K$9$ssB3 zaGNt(QT@;u^Puce?!5S6u;e(Zrao6zhTJ}Xpro#wWL{E>Dphw6*hfyaH#?;sMDRsr zSF%vb0p3`T(Z`^=RZT;ANj3ff}7h~jt@{VGp%ga$7zunkc1aT9Rr1^-RZ6DdX+zt zS3GLyR}Knkm3(8AjTyMYZk6Gs|DP$#lf%boNfRB delta 1742 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 gMxDRs*6Vaq!r1_=ZU%L&`{5sUvm&4|-{O6aWAK literal 15406 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 Date: Wed, 17 Apr 2024 19:20:16 +0530 Subject: [PATCH 70/71] Update extra.css --- pkgdown/extra.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgdown/extra.css b/pkgdown/extra.css index 9c6aba9..2fba05d 100644 --- a/pkgdown/extra.css +++ b/pkgdown/extra.css @@ -1,13 +1,13 @@ .navbar { - background-color: #69B573 !important; + background-color: #4BB66C !important; } #navbar > ul.navbar-nav > li.nav-item a:hover { - background-color: #69B573 !important; + background-color: #4BB66C !important; } .navbar-dark .navbar-nav .active>.nav-link { - background-color: #69B573 !important; + background-color: #4BB66C !important; color: #fff; } @@ -21,7 +21,7 @@ nav .text-muted { } a { - color: #69B573; + color: #4BB66C; } a:hover { @@ -29,8 +29,8 @@ a:hover { } button.btn.btn-primary.btn-copy-ex { - background-color: #69B573; - border-color: #69B573; + background-color: #4BB66C; + border-color: #4BB66C; } .app-preview { From 6497bb4f6bf771b794fbad9f15706f6f6a5ff1c4 Mon Sep 17 00:00:00 2001 From: Sankhadeep Dutta <75749037+sankhadeepdutta@users.noreply.github.com> Date: Wed, 17 Apr 2024 20:21:51 +0530 Subject: [PATCH 71/71] Update extra.css --- pkgdown/extra.css | 54 +++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/pkgdown/extra.css b/pkgdown/extra.css index 2fba05d..f9827f7 100644 --- a/pkgdown/extra.css +++ b/pkgdown/extra.css @@ -1,14 +1,27 @@ +:root { + --primary-color: #4AB76C; +} + .navbar { - background-color: #4BB66C !important; + background-color: var(--primary-color) !important; } -#navbar > ul.navbar-nav > li.nav-item a:hover { - background-color: #4BB66C !important; + +#navbar > ul.navbar-nav > li.nav-item > a { + color: rgba(255, 255, 255, 0.55); } -.navbar-dark .navbar-nav .active>.nav-link { - background-color: #4BB66C !important; - color: #fff; +.navbar-dark .navbar-nav .active > .nav-link { + background-color: var(--primary-color) !important; + color: #fff !important; +} + +.navbar-brand { + color: #fff !important; +} + +#navbar > ul.navbar-nav > li.nav-item a:hover { + background-color: var(--primary-color) !important; } .navbar-dark input[type="search"] { @@ -21,24 +34,25 @@ nav .text-muted { } a { - color: #4BB66C; + color: var(--primary-color); } a:hover { - color: #2d7e46; + color: #2c2b2b; } button.btn.btn-primary.btn-copy-ex { - background-color: #4BB66C; - border-color: #4BB66C; -} - -.app-preview { - margin: 1.5em 0.75em; - padding: 0.25em; - box-shadow: - 0 3.9px 4.6px rgba(0, 0, 0, 0.08), - 0 12.3px 8.4px rgba(0, 0, 0, 0.056), - 0 18.8px 19.2px rgba(0, 0, 0, 0.037), - 0 22px 40px rgba(0, 0, 0, 0.019); + background-color: var(--primary-color); + border-color: var(--primary-color); +} + +.home { + left: 0px; + position: absolute; + padding: 8px 30px; + color: rgba(255,255,255,0.55); +} + +.home:hover { + color: rgba(255,255,255,0.9); }