From 1e09fa15dab490ae7990ea9b605dbbeaee6fe57c Mon Sep 17 00:00:00 2001 From: Peter Marsh Date: Mon, 13 Oct 2025 10:57:28 +0100 Subject: [PATCH 1/2] Updating code base to reflect developments from within the last year. High level changes: - functions moved into separate files - more reusable code created to reduce code repetition - templated html for each page - api key and max workers can now be read from a environment var to improve security - manifest file removed (needs to be generated prior to installation) --- Notes.Rmd | 507 ++++++ Notes.html | 885 ++++++++++ R/aiProcessFunct.R | 24 + R/aiProcessSuccessFunct.R | 58 + R/errorFunct.R | 10 + R/getAPIKey.R | 6 + R/getMaxWorkers.R | 6 + R/head.R | 19 + R/instructions.R | 15 + R/observer.R | 70 + R/page_.R | 59 + R/responses.R | 25 + R/runChatCompletion.R | 25 + R/server_.R | 79 + R/termsandconditions.R | 41 + R/uiElements.R | 39 + R/ui_.R | 47 + README.md | 3 +- config.yml | 17 + functions/readFile.R | 54 - functions/utils.R | 160 -- global.R | 490 +----- manifest.json | 2136 ----------------------- server.R | 10 +- ui.R | 8 +- www/html/CopyOfExplainerInput.html | 22 + www/html/CopyOfSPSSTranslatorInput.html | 21 + www/html/Disclaimer.html | 99 +- www/html/ExplainerInput.html | 22 + www/html/SPSSTranslatorInput.html | 21 + www/html/TranslatorInput.html | 10 +- www/html/TranslatorInputTemplate.html | 21 + www/html/TranslatorInput_Old.html | 21 + www/includes/Transcompiler.css | 116 +- www/includes/Transcompiler.js | 31 + www/includes/TranscompilerNew.css | 281 +++ www/instructions/instructions3.txt | 1 + 37 files changed, 2504 insertions(+), 2955 deletions(-) create mode 100644 Notes.Rmd create mode 100644 Notes.html create mode 100644 R/aiProcessFunct.R create mode 100644 R/aiProcessSuccessFunct.R create mode 100644 R/errorFunct.R create mode 100644 R/getAPIKey.R create mode 100644 R/getMaxWorkers.R create mode 100644 R/head.R create mode 100644 R/instructions.R create mode 100644 R/observer.R create mode 100644 R/page_.R create mode 100644 R/responses.R create mode 100644 R/runChatCompletion.R create mode 100644 R/server_.R create mode 100644 R/termsandconditions.R create mode 100644 R/uiElements.R create mode 100644 R/ui_.R delete mode 100644 functions/readFile.R delete mode 100644 functions/utils.R delete mode 100644 manifest.json create mode 100644 www/html/CopyOfExplainerInput.html create mode 100644 www/html/CopyOfSPSSTranslatorInput.html create mode 100644 www/html/ExplainerInput.html create mode 100644 www/html/SPSSTranslatorInput.html create mode 100644 www/html/TranslatorInputTemplate.html create mode 100644 www/html/TranslatorInput_Old.html create mode 100644 www/includes/TranscompilerNew.css create mode 100644 www/instructions/instructions3.txt diff --git a/Notes.Rmd b/Notes.Rmd new file mode 100644 index 0000000..c226fa3 --- /dev/null +++ b/Notes.Rmd @@ -0,0 +1,507 @@ +--- +title: "Test Branch Review" +output: +html_document: default +pdf_document: default +date: "2025-10-01" +--- +```{r, out.width = 1000, out.height = 500, echo=FALSE} +knitr::include_graphics("www/images/transcompilerflow.pdf") +``` + +## observer: +Some error handling of the input before creating callbackR() which +runs aiProcessfunct() which runs runchatCompletion() which sends the instruction +prompt and the code input to OpenAi. if there is input text of appropriate +length and if no regex exists in config.yml to remove private send to OpenAi +through runChatCompletion else if regex does exist them create a shinyalert page +to check with user that they are okay with their SAS code leaving the +organisation. If there's no input through error/ observer() returns a shinyAlert +page that will run callbackR() when users select to. +```{r} +observer <- function(userInput, regexDetect, api_response, language, att, ...){ + # Error catching: no input detected ---- + if( nchar(userInput) > 0 ) { + # Error catching: input SAS code too long ---- + if( nchar(userInput) > 4000 ) { + # Hide progress bar on error ---- + on.exit({ + att$done() + }) + Sys.sleep(1) + # Error output ---- + updateAceEditor(session, api_response, value = paste0("You have entered too much ",language," code.")) + } else { + # Regular Expression catching ---- + if (regexDetect() == FALSE) { + # No regular expression found, send text to API + aiProcessFunct(userInput = userInput, att=att, ...) + } else { # Create a pop-up warning to inform user that regex has caught some patterns, + # Ask user to confirm before sending text to API or do NULL + shinyalert( + title = "Information Check", + text = "Input appears to contain sensitive information\n (URLs/Filepaths/IP addresses/Passwords/etc.)\n + Do you wish to proceed with translation?", + size = "s", + closeOnEsc = TRUE, + closeOnClickOutside = FALSE, + html = FALSE, type = "warning", + showConfirmButton = TRUE, + showCancelButton = TRUE, + confirmButtonText = "Proceed with Translation", + confirmButtonCol = "#AEDEF4", + cancelButtonText = "Back", + timer = 0, + animation = TRUE, + callbackR = function(x) { if(x == FALSE) {return(NULL)} # NA not here + # this is now going to be aiProcessFunct everytime which itself takes a function as an argument + #userInput, instructions, att, successFunct + else{ aiProcessFunct(userInput = userInput, att=att, ...) } + #else{ fn(userInput = userInput, instructions = instructions, att=att, session=session, output=output) } + } + )} + } + } + else { + showNotification(paste("Error: No input detected."), type = "error") + } + } +``` +## aiProcessfunct(): +This functions uses the future R package. Returns a +function promise object called rs which stored function runChatCompletion() which is +then available as a future promise Globally in the app. If the future object rs runs +successfully when it is called %...>% it runs successFunct() else if a 200 code +is returned from the API %...!% it runs errorFunct(). +```{r} +aiProcessFunct <- function(userInput, att, successFunct, instructions, ...){ #session, output,language, api + # loading bar + att$set(0) # Start at 0% + att$auto() + future({ + # OpenAI API connection ---- + rs <- runChatCompletion(instructions=instructions, userInput=userInput) + }) %...>% ( + function(rs){ + # run the indicated success function + # (currently either explanationSuccessFunct, or translateSuccessFunct) + successFunct(rs=rs, att=att, ...) + } + ) %...!% ( + function(rs){ + errorFunct(rs=rs, att=att) + } + ) +} +``` +## runChatCompletion: +Posts to OpenAI API with instruction and input text. Looks +in the config.yml file for open_ai_model and instructions (passed as function +parameter) as a system input and the userInput as a user input to create an API +call. It also uses the open_ai_max_tokens from config.yml and the API Key +through function getAPIKey() +```{r} +runChatCompletion <- function(instructions, userInput){ + return (openai::create_chat_completion( + # Model used from 10-Nov is the GPT-4 turbo preview. + # This model will need to be updated when the preview ends and full release begins + model = site_params$open_ai_model, + messages = list( + list( + "role" = "system", + "content" = instructions + ), + list( + "role" = "user", + "content" = userInput + ) + ), + temperature = 0, + # max_tokens = 1024, # Controls response length for GPT-4 + max_tokens = site_params$open_ai_max_tokens, # Increased response length for GPT-4 Turbo (context window is x4 times larger) + openai_api_key = getAPIKey()) +)} +``` +## getAPIKey : +If there is no environment called "OPEN_AI_KEY" then look in the config.yml +for open_ai_key else use the "OPEN_AI_KEY" environment. +```{r} +getAPIKey <- function(){ + if (Sys.getenv("OPEN_AI_KEY") == "") return(site_params$open_ai_key) + return (Sys.getenv("OPEN_AI_KEY")) +} +``` +## aiProcessSuccessFunct: +if rs API repsonse exists then take the response from the rs object and format +it for the user. +```{r} +aiProcessSuccessFunct <- function(rs, att, lang, updateFunction, ...){ + # Hide progress bar after 30s + + on.exit({ + att$done() + }) + Sys.sleep(1) + + # Response content ---- + if (!is.null(rs)) { + response <- rs$choices$message.content + lines <- strsplit(response, "\n") + lines2 = lines[[1]] + + start_line <- min(match(c(paste0("This is not ",lang," code. "), + paste0("This is not ",lang," code."), + paste0("This is not ",lang," code ")), + lines2), + match("```R", lines2), + match(c("Here is the explanation of the SAS code provided:", + "\"Here is the explanation of the SAS code provided:", + "Here is the explanation of the SAS code provided:\r", + "\"Here is the explanation of the SAS code provided:\r", + "Here is the explanation of the SAS code provided: ", + "\"Here is the explanation of the SAS code provided: "), + lines2), + na.rm=TRUE) + start_sentence <- lines2[start_line] + end_line <- which(lines2 == "```") + + # If is code, just give back the R code equivalent ---- + if(start_sentence=="```R") { + code_reconstructed <- paste(lines2[(start_line+1):(end_line-1)], collapse = "\n") + } + # If not code, give back message explaining issue ---- + else{ + code_reconstructed <- paste(lines2, collapse = "\n") + } + + updateFunction(value = code_reconstructed, ...) + + + list(code_reconstructed = code_reconstructed) + } + +} + +updateUiOutput <- function(value, output){ + output$response2 <- renderUI({ + HTML(str_replace_all(str_replace_all(value, "\r", ""), "\n", "
")) + }) +} +updateAceEditor_ <- function(session, editorId, value){ + updateAceEditor(session=session, editorId=editorId, + value = value, + wordWrap = T) +} +``` +## errorFunct: +formats error message from the API call as an R Error. +Set the flag that the call is complete. +```{r} +errorFunct <- function(rs, att){ + showNotification(paste("Error:", rs$message), type = "error") + # Hide progress bar + on.exit({ + att$done() + }) + return(NULL) +} + +``` + + + +## UIElements: +wrapper function for using aceEditor and prism.js to highlight +code syntax. +```{r} + +aceOutput <- function(tabIndex){ + return ( + div(id = paste0("response", tabIndex), + aceEditor(paste0("api_response", tabIndex), + height = "798px", + mode = "r", + fontSize="15", + readOnly = TRUE, + wordWrap = TRUE))) +} + +standardInput <- function(fromLanguage, tabIndex){ + return( HTML( + str_replace_all( + readFile("html", "TranslatorInputTemplate", "html"), + c("_input_language_"=fromLanguage, "_tabIndex_"=tabIndex)))) +} + +aceInput <- function(fromLanguage, tabIndex){ + return( + div(id = paste0("editing", tabIndex, "container"), style = "height: 100%", + HTML(paste0("")), + aceEditor( + outputId =paste0("editing", tabIndex), + height = "750px", + selectionId = "selection", + fontSize= 15, + mode = "r", + placeholder = paste0("Enter ",fromLanguage," Code") + ) + ) + ) +} + + +uiOutput_ <- function(tabIndex) { + return (uiOutput(paste0("response", tabIndex))) +} +``` + + +```{r, out.width = 1000, out.height = 500, echo=FALSE} +knitr::include_graphics("www/images/transcompiler2.pdf") +``` + + +## ui_(): +Created fluiPage ui using config parameters in config.yml and the page_() function +returns a fluidPage, uses title in config file, runs head() utility function, runs +useattendent() function, creates header using the title from the config file and +an image stored in www. + +The main tabset of the app is created using the instructions() and page_() wrapper functions. + +```{r} +ui_ <- function() { + return (fluidPage( + + # adds title to browser tab + title = site_params$title, + + # load css and js files + head(), + + # Initialize Progress bar ---- + theme = bslib::bs_theme(version = 4), + + useAttendant(), + + # Branding Image ---- + headerPanel(site_params$title, + title = img(id = "branding", + draggable = "false", + src = getFile(site_params$logo, "image") + ) + ), + + + # Main tabs ---- + tabsetPanel( + id="inTabset", + instructions(), + # sas to R + page_(fromLanguage = site_params$from_language, tabIndex = 1, outputElement = aceOutput, inputElement = standardInput), + # explainer + page_(fromLanguage = site_params$from_language, tabIndex = 2, + tabName = "Explainer", + outputLabel = "Explanation", + buttonLabel = "Explain", + outputElement = uiOutput_, inputElement = aceInput + ), + # spss to R + page_(fromLanguage = site_params$from_language_2, tabIndex = 3, outputElement = aceOutput, inputElement = standardInput) + + ), + + )) +} +``` + +## head(): + +Creates head tag using css and javascript in the includes folder + +```{r} +head <- function(){ + tags$head( + # favicon: + # TODO put the favicon code here + + # Cookies to remember user on popup Terms ---- + tags$script(src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"), + # Load cookies script ---- + tags$script(src="includes/cookies.js"), + + # Load CSS & JS script ---- + tags$link(rel = "stylesheet", type = "text/css", href = "includes/Transcompiler.css"), + tags$script(src="includes/Transcompiler.js") + ) +} +``` + +## page_() + +Creates the input ui for the text/code input using information from the config.yml file. + +Uses the waiter package a progress bar. + +the inputElement and outputElement functions come are defined in the uiElemets.r file and chosen in the ui_ function +```{r} +page_ <- function(fromLanguage, #fromLanguage, + tabIndex, + tabName = "", + outputLabel = "", + buttonLabel = "", + inputElement, + outputElement + +){ + # set defaults + tn <- tabName + bt <- buttonLabel + ol <- outputLabel + if (tabName == "") tn <- paste0(fromLanguage," to ", site_params$to_language," code Assistant") + if (buttonLabel == "") bt <- paste0("Translate to ", site_params$to_language) + if (outputLabel == "") ol <- paste0("Output ",site_params$to_language," Code") + + + return(tabPanel(title = tn, + # Main content ---- + fluidRow( + column(1), + column(5, + # Progress bar ---- + attendantBar(paste0("progress-bar", tabIndex), + color = "success", + max = 100, + striped = TRUE, + animated = TRUE, + height = "40px", + width = "75%" + ), + + # Live syntax highlighting input SAS code box ---- + + inputElement(fromLanguage, tabIndex), + + + + + # Translate button ---- + actionButton(paste0("process", tabIndex), bt) + ), + column(5, + div(id = paste0("output", tabIndex, "container"), style = "height: 100%;", + style = "width: 95%", + HTML(paste0("")), + div(id = paste0("output", tabIndex), + style = "border: 1px solid #CED4DA; height: 800px", + outputElement(tabIndex) + ) + ) + ), + column(1) + ) + )) + + +} + +``` + +## server_() + +reads in 3 sets of "instructions" these are text prompts that tell the LLM what to do eg. Convert the following +SAS code to R. + +the responses() function creates output boxes UI using aceeditor. + +Uses Attendant from the waiter package to create progress bars. + +termsandconditions displays a t&c page that users need to check before they are allowed to use the App. + +regexPattern is created from the config.yalm file. + +regexPattern used to define regex methods that identify if sensitive information is in the submitted code. + +observer is then called which checks if the input text/code is of an appropriate length and if it includes sensitive information with the regexPattern methods. Then if the text is okay, or the user agrees to proceed with submitting the flagged input text/code it calls aiProcessFuct which create R promises (delayed functions that can be run later in the project) that call the llm model of choice with the instructions and input text/code. + +```{r} +#' Core server function +#' +#' Defines the core server function called from server.R +#' +#' @param input app inputs +#' @param output app outputs +#' @param session app session +#' @export +server_ <- function(input, output, session) { + + # read instructions from instructions txt files + instructions1 <- readFile("text", "instructions1", "instructions") + instructions2 <- readFile("text", "instructions2", "instructions") + instructions3 <- readFile("text", "instructions3", "instructions") + + # render R Output boxes + responses(output) + + # create progress bars (I wonder if its possible to have 1 progress bar for the whole thing) + att1 <- Attendant$new("progress-bar1", hide_on_max = TRUE) + att2 <- Attendant$new("progress-bar2", hide_on_max = TRUE) + att3 <- Attendant$new("progress-bar3", hide_on_max = TRUE) + + # initiate observe event for first time users to be presented with T&Cs + termsandconditions(input) + + # generate regex pattern from params + regexPattern <- paste0(site_params$regex, collapse="|") + + # define regex reactive methods for each input (again can we have 1 input perhaps?) + regexDetect1 <- reactive(return(grepl(pattern = regexPattern, x = input$editing1, ignore.case = T))) + regexDetect2 <- reactive(return(grepl(pattern = regexPattern, x = input$editing2, ignore.case = T))) + regexDetect3 <- reactive(return(grepl(pattern = regexPattern, x = input$editing3, ignore.case = T))) + + + # initiate observe events for each button + # SAS to R translation + observeEvent(input$process1, + observer( + userInput=input$editing1, + regexDetect=regexDetect1, + api_response="api_response1", + language = site_params$from_language, + att=att1, + instructions=instructions1, #... + successFunct=aiProcessSuccessFunct, + session = session, + lang = site_params$from_language, + editorId = "api_response1", + updateFunction = updateAceEditor_ + ) + ) + # SAS code explainer + observeEvent(input$process2, + observer(userInput=input$editing2, + regexDetect=regexDetect2, + api_response="response2", + language = site_params$from_language, + att=att2, + instructions=instructions2, #... + successFunct=aiProcessSuccessFunct, + lang = site_params$from_language, + output = output, + updateFunction = updateUiOutput + ) + ) + + # SPSS to R translator + observeEvent(input$process3, observer( + userInput=input$editing3, instructions=instructions3, + regexDetect=regexDetect1, api_response="api_response3", + language = site_params$from_language, att=att3, + successFunct=aiProcessSuccessFunct, session = session, + lang = site_params$from_language_2, editorId="api_response3", + updateFunction = updateAceEditor_ + )) + + +} # End server + diff --git a/Notes.html b/Notes.html new file mode 100644 index 0000000..66e0b11 --- /dev/null +++ b/Notes.html @@ -0,0 +1,885 @@ + + + + + + + + + + + + + + +Test Branch Review + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+

observer:

+

Some error handling of the input before creating callbackR() which +runs aiProcessfunct() which runs runchatCompletion() which sends the +instruction prompt and the code input to OpenAi. if there is input text +of appropriate length and if no regex exists in config.yml to remove +private send to OpenAi through runChatCompletion else if regex does +exist them create a shinyalert page to check with user that they are +okay with their SAS code leaving the organisation. If there’s no input +through error/ observer() returns a shinyAlert page that will run +callbackR() when users select to.

+
observer <- function(userInput, regexDetect, api_response, language, att,  ...){
+     # Error catching: no input detected ----
+    if( nchar(userInput) > 0 ) {
+      # Error catching: input SAS code too long ----
+      if( nchar(userInput) > 4000 ) {
+        # Hide progress bar on error ----
+        on.exit({
+          att$done()
+        })
+        Sys.sleep(1)
+        # Error output ----
+        updateAceEditor(session, api_response, value = paste0("You have entered too much ",language," code."))
+      } else {
+        # Regular Expression catching ----
+        if (regexDetect() == FALSE) {
+          # No regular expression found, send text to API
+          aiProcessFunct(userInput = userInput, att=att, ...)
+        } else { # Create a pop-up warning to inform user that regex has caught some patterns,
+          # Ask user to confirm before sending text to API or do NULL
+          shinyalert(
+            title = "Information Check",
+            text = "Input appears to contain sensitive information\n (URLs/Filepaths/IP addresses/Passwords/etc.)\n
+                            Do you wish to proceed with translation?",
+            size = "s",
+            closeOnEsc = TRUE,
+            closeOnClickOutside = FALSE,
+            html = FALSE, type = "warning",
+            showConfirmButton = TRUE,
+            showCancelButton = TRUE,
+            confirmButtonText = "Proceed with Translation",
+            confirmButtonCol = "#AEDEF4",
+            cancelButtonText = "Back",
+            timer = 0,
+            animation = TRUE,
+            callbackR = function(x) {  if(x == FALSE) {return(NULL)} # NA not here
+              # this is now going to be aiProcessFunct everytime which itself takes a function as an argument
+                    #userInput, instructions, att, successFunct
+              else{ aiProcessFunct(userInput = userInput, att=att, ...) }
+              #else{ fn(userInput = userInput, instructions = instructions, att=att, session=session, output=output) }
+            }
+          )}
+      }
+    }
+    else {
+      showNotification(paste("Error: No input detected."), type = "error")
+    }
+  }
+
+
+

aiProcessfunct():

+

This functions uses the future R package. Returns a function promise +object called rs which stored function runChatCompletion() which is then +available as a future promise Globally in the app. If the future object +rs runs successfully when it is called %…>% it runs successFunct() +else if a 200 code is returned from the API %…!% it runs +errorFunct().

+
aiProcessFunct <- function(userInput, att, successFunct, instructions, ...){ #session, output,language, api
+    # loading bar
+  att$set(0)    # Start at 0%
+    att$auto()
+    future({
+        # OpenAI API connection ----
+        rs <- runChatCompletion(instructions=instructions, userInput=userInput)
+    }) %...>% (
+      function(rs){
+        # run the indicated success function
+        # (currently either explanationSuccessFunct, or translateSuccessFunct)
+          successFunct(rs=rs, att=att, ...)
+      }
+    ) %...!% (
+      function(rs){
+          errorFunct(rs=rs, att=att)
+      }
+    )
+}
+
+
+

runChatCompletion:

+

Posts to OpenAI API with instruction and input text. Looks in the +config.yml file for open_ai_model and instructions (passed as function +parameter) as a system input and the userInput as a user input to create +an API call. It also uses the open_ai_max_tokens from config.yml and the +API Key through function getAPIKey()

+
runChatCompletion <- function(instructions, userInput){
+  return (openai::create_chat_completion(
+  # Model used from 10-Nov is the GPT-4 turbo preview.
+  # This model will need to be updated when the preview ends and full release begins
+  model = site_params$open_ai_model,
+  messages = list(
+    list(
+      "role" = "system",
+      "content" = instructions
+    ),
+    list(
+      "role" = "user",
+      "content" = userInput
+    )
+  ),
+  temperature = 0,
+  # max_tokens = 1024, # Controls response length for GPT-4
+  max_tokens = site_params$open_ai_max_tokens, # Increased response length for GPT-4 Turbo (context window is x4 times larger)
+  openai_api_key = getAPIKey())
+)}
+
+
+

getAPIKey :

+

If there is no environment called “OPEN_AI_KEY” then look in the +config.yml for open_ai_key else use the “OPEN_AI_KEY” environment.

+
getAPIKey <- function(){
+  if (Sys.getenv("OPEN_AI_KEY") == "") return(site_params$open_ai_key)
+  return (Sys.getenv("OPEN_AI_KEY"))
+}
+
+
+

aiProcessSuccessFunct:

+

if rs API repsonse exists then take the response from the rs object +and format it for the user.

+
aiProcessSuccessFunct <- function(rs, att, lang, updateFunction, ...){
+  # Hide progress bar after 30s
+
+  on.exit({
+    att$done()
+  })
+  Sys.sleep(1)
+  
+  # Response content ----
+  if (!is.null(rs)) {
+    response <- rs$choices$message.content
+    lines <- strsplit(response, "\n")
+    lines2 = lines[[1]]
+
+    start_line <- min(match(c(paste0("This is not ",lang," code. "), 
+                              paste0("This is not ",lang," code."), 
+                              paste0("This is not ",lang," code ")), 
+                            lines2), 
+                      match("```R", lines2), 
+                      match(c("Here is the explanation of the SAS code provided:", 
+                              "\"Here is the explanation of the SAS code provided:",
+                              "Here is the explanation of the SAS code provided:\r",
+                              "\"Here is the explanation of the SAS code provided:\r",
+                              "Here is the explanation of the SAS code provided: ",
+                              "\"Here is the explanation of the SAS code provided: "),
+                            lines2),
+                      na.rm=TRUE)
+    start_sentence <- lines2[start_line]
+    end_line <- which(lines2 == "```")
+    
+    # If is code, just give back the R code equivalent ----
+    if(start_sentence=="```R") { 
+      code_reconstructed <- paste(lines2[(start_line+1):(end_line-1)], collapse = "\n")
+    }
+    # If not code, give back message explaining issue ----
+    else{
+      code_reconstructed <- paste(lines2, collapse = "\n")
+    }
+    
+    updateFunction(value = code_reconstructed, ...)
+                   
+  
+    list(code_reconstructed = code_reconstructed)
+  }
+  
+}
+
+updateUiOutput <- function(value, output){
+  output$response2 <- renderUI({
+    HTML(str_replace_all(str_replace_all(value, "\r", ""), "\n", "<br>"))
+  })
+}
+updateAceEditor_ <- function(session, editorId, value){
+  updateAceEditor(session=session, editorId=editorId,
+                 value = value,
+                 wordWrap = T)
+}
+
+
+

errorFunct:

+

formats error message from the API call as an R Error. Set the flag +that the call is complete.

+
errorFunct <- function(rs, att){
+  showNotification(paste("Error:", rs$message), type = "error")
+  # Hide progress bar
+  on.exit({
+    att$done()
+  })    
+  return(NULL)
+}
+
+
+

UIElements:

+

wrapper function for using aceEditor and prism.js to highlight code +syntax.

+
aceOutput <- function(tabIndex){
+  return (
+    div(id = paste0("response", tabIndex),
+        aceEditor(paste0("api_response", tabIndex),
+                  height = "798px",
+                  mode = "r",
+                  fontSize="15",
+                  readOnly = TRUE, 
+                  wordWrap = TRUE)))
+}
+
+standardInput <- function(fromLanguage, tabIndex){
+  return(  HTML(
+    str_replace_all(
+      readFile("html", "TranslatorInputTemplate", "html"),
+      c("_input_language_"=fromLanguage, "_tabIndex_"=tabIndex))))
+}
+
+aceInput <- function(fromLanguage, tabIndex){
+  return( 
+    div(id = paste0("editing", tabIndex, "container"), style = "height: 100%",
+        HTML(paste0("<label>Input ",fromLanguage," Code:</label>")),
+        aceEditor(
+          outputId =paste0("editing", tabIndex),
+          height = "750px",
+          selectionId = "selection",
+          fontSize= 15,
+          mode = "r",
+          placeholder = paste0("Enter ",fromLanguage," Code")
+        )
+    )
+  )
+}
+
+
+uiOutput_ <- function(tabIndex) {
+  return (uiOutput(paste0("response", tabIndex)))
+}
+ +
+
+

ui_():

+

Created fluiPage ui using config parameters in config.yml and the +page_() function returns a fluidPage, uses title in config file, runs +head() utility function, runs useattendent() function, creates header +using the title from the config file and an image stored in www.

+

The main tabset of the app is created using the instructions() and +page_() wrapper functions.

+
ui_ <- function() {
+  return  (fluidPage(
+  
+    # adds title to browser tab
+    title = site_params$title,
+    
+    # load css and js files
+    head(),
+  
+    # Initialize Progress bar ----
+    theme = bslib::bs_theme(version = 4),
+    
+    useAttendant(),
+    
+    # Branding Image ----
+    headerPanel(site_params$title, 
+                title = img(id = "branding",
+                            draggable = "false",
+                            src = getFile(site_params$logo, "image") 
+                )
+    ),
+    
+    
+    # Main tabs ----
+    tabsetPanel(
+      id="inTabset",
+      instructions(),
+      # sas to R
+      page_(fromLanguage = site_params$from_language, tabIndex = 1, outputElement = aceOutput,  inputElement = standardInput), 
+      # explainer
+      page_(fromLanguage = site_params$from_language, tabIndex = 2,
+            tabName = "Explainer", 
+            outputLabel = "Explanation",
+            buttonLabel = "Explain", 
+            outputElement = uiOutput_,  inputElement = aceInput
+          ),
+      # spss to R
+      page_(fromLanguage = site_params$from_language_2, tabIndex = 3,  outputElement = aceOutput,  inputElement = standardInput)
+      
+    ),
+   
+  ))
+}
+
+ +
+

page_()

+

Creates the input ui for the text/code input using information from +the config.yml file.

+

Uses the waiter package a progress bar.

+

the inputElement and outputElement functions come are defined in the +uiElemets.r file and chosen in the ui_ function

+
page_ <- function(fromLanguage, #fromLanguage,
+                  tabIndex,
+                  tabName = "", 
+                  outputLabel = "",
+                  buttonLabel = "",
+                  inputElement, 
+                  outputElement
+                  
+){
+  # set defaults
+  tn <- tabName
+  bt <- buttonLabel
+  ol <- outputLabel
+  if (tabName == "") tn <- paste0(fromLanguage," to ", site_params$to_language," code Assistant")
+  if (buttonLabel == "") bt <- paste0("Translate to ", site_params$to_language)
+  if (outputLabel == "") ol <- paste0("Output ",site_params$to_language," Code")
+  
+  
+  return(tabPanel(title = tn,
+  # Main content ----
+  fluidRow(
+    column(1),
+    column(5,
+           # Progress bar ----
+           attendantBar(paste0("progress-bar", tabIndex),
+                        color = "success",
+                        max = 100,
+                        striped = TRUE,
+                        animated = TRUE,
+                        height = "40px",
+                        width = "75%"
+           ),
+           
+           # Live syntax highlighting input SAS code box ----
+           
+           inputElement(fromLanguage, tabIndex),
+           
+           
+           
+          
+           # Translate button ----
+           actionButton(paste0("process", tabIndex), bt)
+    ),
+    column(5,
+           div(id = paste0("output", tabIndex, "container"), style = "height: 100%;",
+               style = "width: 95%",
+               HTML(paste0("<label>", ol, ":</label>")),
+               div(id = paste0("output", tabIndex), 
+                   style = "border: 1px solid #CED4DA; height: 800px",
+                   outputElement(tabIndex)
+               )
+           )
+    ),
+    column(1)
+  )
+  ))
+  
+  
+}
+
+
+

server_()

+

reads in 3 sets of “instructions” these are text prompts that tell +the LLM what to do eg. Convert the following SAS code to R.

+

the responses() function creates output boxes UI using aceeditor.

+

Uses Attendant from the waiter package to create progress bars.

+

termsandconditions displays a t&c page that users need to check +before they are allowed to use the App.

+

regexPattern is created from the config.yalm file.

+

regexPattern used to define regex methods that identify if sensitive +information is in the submitted code.

+

observer is then called which checks if the input text/code is of an +appropriate length and if it includes sensitive information with the +regexPattern methods. Then if the text is okay, or the user agrees to +proceed with submitting the flagged input text/code it calls +aiProcessFuct which create R promises (delayed functions that can be run +later in the project) that call the llm model of choice with the +instructions and input text/code.

+
#' Core server function
+#' 
+#' Defines the core server function called from server.R
+#'
+#' @param input app inputs
+#' @param output app outputs
+#' @param session app session
+#' @export
+server_ <- function(input, output, session) {
+ 
+  # read instructions from instructions txt files
+  instructions1 <- readFile("text", "instructions1", "instructions")
+  instructions2 <- readFile("text", "instructions2", "instructions")
+  instructions3 <- readFile("text", "instructions3", "instructions")
+  
+  # render R Output boxes
+  responses(output)
+  
+  # create progress bars (I wonder if its possible to have 1 progress bar for the whole thing)
+  att1 <- Attendant$new("progress-bar1", hide_on_max = TRUE)
+  att2 <- Attendant$new("progress-bar2", hide_on_max = TRUE)
+  att3 <- Attendant$new("progress-bar3", hide_on_max = TRUE)
+  
+  # initiate observe event for first time users to be presented with T&Cs
+  termsandconditions(input)
+  
+  # generate regex pattern from params
+  regexPattern <- paste0(site_params$regex, collapse="|")
+  
+  # define regex reactive methods for each input (again can we have 1 input perhaps?)
+  regexDetect1 <- reactive(return(grepl(pattern = regexPattern, x = input$editing1, ignore.case = T)))
+  regexDetect2 <- reactive(return(grepl(pattern = regexPattern, x = input$editing2, ignore.case = T)))
+  regexDetect3 <- reactive(return(grepl(pattern = regexPattern, x = input$editing3, ignore.case = T)))
+  
+  
+  # initiate observe events for each button
+  # SAS to R translation
+  observeEvent(input$process1, 
+               observer( 
+                 userInput=input$editing1, 
+                 regexDetect=regexDetect1, 
+                 api_response="api_response1", 
+                 language = site_params$from_language, 
+                 att=att1, 
+                 instructions=instructions1, #... 
+                 successFunct=aiProcessSuccessFunct, 
+                 session = session, 
+                 lang = site_params$from_language, 
+                 editorId = "api_response1",
+                 updateFunction = updateAceEditor_
+              )
+  )
+  # SAS code explainer
+  observeEvent(input$process2,
+               observer(userInput=input$editing2, 
+                        regexDetect=regexDetect2, 
+                        api_response="response2",
+                        language = site_params$from_language, 
+                        att=att2,
+                        instructions=instructions2, #...
+                        successFunct=aiProcessSuccessFunct, 
+                        lang = site_params$from_language, 
+                        output = output,
+                        updateFunction = updateUiOutput
+                      )
+               )
+
+  # SPSS to R translator
+  observeEvent(input$process3, observer(
+                    userInput=input$editing3, instructions=instructions3, 
+                    regexDetect=regexDetect1, api_response="api_response3", 
+                    language = site_params$from_language, att=att3, 
+                    successFunct=aiProcessSuccessFunct, session = session, 
+                    lang = site_params$from_language_2, editorId="api_response3",
+                    updateFunction = updateAceEditor_
+                ))
+  
+  
+} # End server
+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/R/aiProcessFunct.R b/R/aiProcessFunct.R new file mode 100644 index 0000000..4413870 --- /dev/null +++ b/R/aiProcessFunct.R @@ -0,0 +1,24 @@ +# aiProcessFunct +# nice and small +aiProcessFunct <- function(userInput, att, successFunct, instructions, ...){ #session, output,language, api + # loading bar + att$set(0) # Start at 0% + att$auto() + future({ + # OpenAI API connection ---- + rs <- runChatCompletion(instructions=instructions, userInput=userInput) + }) %...>% ( + function(rs){ + # run the indicated success function + # (currently either explanationSuccessFunct, or translateSuccessFunct) + successFunct(rs=rs, att=att, ...) + } + ) %...!% ( + function(rs){ + errorFunct(rs=rs, att=att) + } + ) + +} + + diff --git a/R/aiProcessSuccessFunct.R b/R/aiProcessSuccessFunct.R new file mode 100644 index 0000000..1389fc0 --- /dev/null +++ b/R/aiProcessSuccessFunct.R @@ -0,0 +1,58 @@ + +aiProcessSuccessFunct <- function(rs, att, lang, updateFunction, ...){ + # Hide progress bar after 30s + + on.exit({ + att$done() + }) + Sys.sleep(1) + + # Response content ---- + if (!is.null(rs)) { + response <- rs$choices$message.content + lines <- strsplit(response, "\n") + lines2 = lines[[1]] + + start_line <- min(match(c(paste0("This is not ",lang," code. "), + paste0("This is not ",lang," code."), + paste0("This is not ",lang," code ")), + lines2), + match("```R", lines2), + match(c("Here is the explanation of the SAS code provided:", + "\"Here is the explanation of the SAS code provided:", + "Here is the explanation of the SAS code provided:\r", + "\"Here is the explanation of the SAS code provided:\r", + "Here is the explanation of the SAS code provided: ", + "\"Here is the explanation of the SAS code provided: "), + lines2), + na.rm=TRUE) + start_sentence <- lines2[start_line] + end_line <- which(lines2 == "```") + + # If is code, just give back the R code equivalent ---- + if(start_sentence=="```R") { + code_reconstructed <- paste(lines2[(start_line+1):(end_line-1)], collapse = "\n") + } + # If not code, give back message explaining issue ---- + else{ + code_reconstructed <- paste(lines2, collapse = "\n") + } + + updateFunction(value = code_reconstructed, ...) + + + list(code_reconstructed = code_reconstructed) + } + +} + +updateUiOutput <- function(value, output){ + output$response2 <- renderUI({ + HTML(str_replace_all(str_replace_all(value, "\r", ""), "\n", "
")) + }) +} +updateAceEditor_ <- function(session, editorId, value){ + updateAceEditor(session=session, editorId=editorId, + value = value, + wordWrap = T) +} \ No newline at end of file diff --git a/R/errorFunct.R b/R/errorFunct.R new file mode 100644 index 0000000..db0a6f5 --- /dev/null +++ b/R/errorFunct.R @@ -0,0 +1,10 @@ + + +errorFunct <- function(rs, att){ + showNotification(paste("Error:", rs$message), type = "error") + # Hide progress bar + on.exit({ + att$done() + }) + return(NULL) +} diff --git a/R/getAPIKey.R b/R/getAPIKey.R new file mode 100644 index 0000000..7a09105 --- /dev/null +++ b/R/getAPIKey.R @@ -0,0 +1,6 @@ +#' Gets the API Key, checks for OPEN_AI_KEY environment var, otherwise uses the value in params file. +#' +getAPIKey <- function(){ + if (Sys.getenv("OPEN_AI_KEY") == "") return(site_params$open_ai_key) + return (Sys.getenv("OPEN_AI_KEY")) +} diff --git a/R/getMaxWorkers.R b/R/getMaxWorkers.R new file mode 100644 index 0000000..2ffd4b8 --- /dev/null +++ b/R/getMaxWorkers.R @@ -0,0 +1,6 @@ +#' Gets the max workers, checks for MAX_WORKERS environment var, otherwise uses the value in params file. +#' +getMaxWorkers <- function(){ + if (Sys.getenv("MAX_WORKERS") == "") return(site_params$max_workers) + return (strtoi(Sys.getenv("MAX_WORKERS"))) +} diff --git a/R/head.R b/R/head.R new file mode 100644 index 0000000..9e24508 --- /dev/null +++ b/R/head.R @@ -0,0 +1,19 @@ +#' head function +#' defines the css and js files to be included in the app +#' @export +#' +head <- function(){ + tags$head( + # favicon: + # TODO put the favicon code here + + # Cookies to remember user on popup Terms ---- + tags$script(src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"), + # Load cookies script ---- + tags$script(src="includes/cookies.js"), + + # Load CSS & JS script ---- + tags$link(rel = "stylesheet", type = "text/css", href = "includes/Transcompiler.css"), + tags$script(src="includes/Transcompiler.js") + ) +} \ No newline at end of file diff --git a/R/instructions.R b/R/instructions.R new file mode 100644 index 0000000..7eb1d26 --- /dev/null +++ b/R/instructions.R @@ -0,0 +1,15 @@ +#' defines the instructions tab +#' @export +instructions <- function(){ + return (tabPanel("Instructions", + fluidRow( + column(2), + column(8, + div(id = "disclaimer", + readFile("html", "Disclaimer", "html" ) + ) + ), + column(2) + ) + )) +} diff --git a/R/observer.R b/R/observer.R new file mode 100644 index 0000000..5ae381d --- /dev/null +++ b/R/observer.R @@ -0,0 +1,70 @@ +#' observer function +#' Calls a generic function with runs the basic checks and processes +#' before calling the openAI related function +#' +#' @param userInput the input box to read SAS/SPSS from +#' @param instruction the specific instructions to send to openAI +#' @param regexDetect the regextDetect specific to each input to check for i.p. addresses etc +#' @param api_response id of the output box +#' @param language language being sent to the AI +#' @param att the attendant for the API call +#' @param fn the function to call to send text to API +#' @param output the output (same as in server_ function & server.R) - this is only needed for one of the 3 functions defined in fn +#' +#' @export +observer <- function(userInput, regexDetect, api_response, language, att, ...){ + # Error catching: no input detected ---- + if( nchar(userInput) > 0 ) { + + # Error catching: input SAS code too long ---- + if( nchar(userInput) > 4000 ) { + # Hide progress bar on error ---- + on.exit({ + att$done() + }) + Sys.sleep(1) + + # Error output ---- + updateAceEditor(session, api_response, value = paste0("You have entered too much ",language," code.")) + + } else { + + # Regular Expression catching ---- + if (regexDetect() == FALSE) { + + # No regular expression found, send text to API + aiProcessFunct(userInput = userInput, att=att, ...) + + } else { # Create a pop-up warning to inform user that regex has caught some patterns, + # Ask user to confirm before sending text to API or do NULL + + shinyalert( + title = "Information Check", + text = "Input appears to contain sensitive information\n (URLs/Filepaths/IP addresses/Passwords/etc.)\n + Do you wish to proceed with translation?", + size = "s", + closeOnEsc = TRUE, + closeOnClickOutside = FALSE, + html = FALSE, type = "warning", + showConfirmButton = TRUE, + showCancelButton = TRUE, + confirmButtonText = "Proceed with Translation", + confirmButtonCol = "#AEDEF4", + cancelButtonText = "Back", + timer = 0, + animation = TRUE, + + callbackR = function(x) { if(x == FALSE) {return(NULL)} # NA not here + # this is now going to be aiProcessFunct everytime which itself takes a function as an argument + #userInput, instructions, att, successFunct + else{ aiProcessFunct(userInput = userInput, att=att, ...) } + #else{ fn(userInput = userInput, instructions = instructions, att=att, session=session, output=output) } + } + )} + + } + } + else { + showNotification(paste("Error: No input detected."), type = "error") + } + } \ No newline at end of file diff --git a/R/page_.R b/R/page_.R new file mode 100644 index 0000000..12c2775 --- /dev/null +++ b/R/page_.R @@ -0,0 +1,59 @@ +page_ <- function(fromLanguage, #fromLanguage, + tabIndex, + tabName = "", + outputLabel = "", + buttonLabel = "", + inputElement, + outputElement + +){ + # set defaults + tn <- tabName + bt <- buttonLabel + ol <- outputLabel + if (tabName == "") tn <- paste0(fromLanguage," to ", site_params$to_language," code Assistant") + if (buttonLabel == "") bt <- paste0("Translate to ", site_params$to_language) + if (outputLabel == "") ol <- paste0("Output ",site_params$to_language," Code") + + + return(tabPanel(title = tn, + # Main content ---- + fluidRow( + column(1), + column(5, + # Progress bar ---- + attendantBar(paste0("progress-bar", tabIndex), + color = "success", + max = 100, + striped = TRUE, + animated = TRUE, + height = "40px", + width = "75%" + ), + + # Live syntax highlighting input SAS code box ---- + + inputElement(fromLanguage, tabIndex), + + + + + # Translate button ---- + actionButton(paste0("process", tabIndex), bt) + ), + column(5, + div(id = paste0("output", tabIndex, "container"), style = "height: 100%;", + style = "width: 95%", + HTML(paste0("")), + div(id = paste0("output", tabIndex), + style = "border: 1px solid #CED4DA; height: 800px", + outputElement(tabIndex) + ) + ) + ), + column(1) + ) + )) + + +} diff --git a/R/responses.R b/R/responses.R new file mode 100644 index 0000000..37a509e --- /dev/null +++ b/R/responses.R @@ -0,0 +1,25 @@ +#' renders output boxes for API responses from the openAI. +#' weirdly only for SAS to R and SPSS to R +#' +#' questions: +#' - can this be generalised since the two sets of 3 lines are the same +#' - why is this only used for 2 of the three API calls? +#' +#' @param output the global output variable from server.R +#' @export +responses <- function(output){ + # Render R code box ---- + + output$api_response1 <- renderUI({ + aceEditor("api_response1", mode = "r", readOnly = TRUE, fontSize = 13) + }) + + output$api_response2 <- renderUI({ + aceEditor("api_response2", mode = "r", readOnly = TRUE, fontSize = 13) + }) + + output$api_response3 <- renderUI({ + aceEditor("api_response3", mode = "r", readOnly = TRUE, fontSize = 13) + }) + +} \ No newline at end of file diff --git a/R/runChatCompletion.R b/R/runChatCompletion.R new file mode 100644 index 0000000..7603f17 --- /dev/null +++ b/R/runChatCompletion.R @@ -0,0 +1,25 @@ +runChatCompletion <- function(instructions, userInput){ + + return (openai::create_chat_completion( + # Model used from 10-Nov is the GPT-4 turbo preview. + # This model will need to be updated when the preview ends and full release begins + model = site_params$open_ai_model, + + messages = list( + list( + "role" = "system", + "content" = instructions + ), + list( + "role" = "user", + "content" = userInput + ) + ), + + temperature = 0, + + # max_tokens = 1024, # Controls response length for GPT-4 + max_tokens = site_params$open_ai_max_tokens, # Increased response length for GPT-4 Turbo (context window is x4 times larger) + + openai_api_key = getAPIKey()) +)} \ No newline at end of file diff --git a/R/server_.R b/R/server_.R new file mode 100644 index 0000000..fdcb91d --- /dev/null +++ b/R/server_.R @@ -0,0 +1,79 @@ +#' Core server function +#' +#' Defines the core server function called from server.R +#' +#' @param input app inputs +#' @param output app outputs +#' @param session app session +#' @export +server_ <- function(input, output, session) { + + # read instructions from instructions txt files + instructions1 <- readFile("text", "instructions1", "instructions") + instructions2 <- readFile("text", "instructions2", "instructions") + instructions3 <- readFile("text", "instructions3", "instructions") + + # render R Output boxes + responses(output) + + # create progress bars (I wonder if its possible to have 1 progress bar for the whole thing) + att1 <- Attendant$new("progress-bar1", hide_on_max = TRUE) + att2 <- Attendant$new("progress-bar2", hide_on_max = TRUE) + att3 <- Attendant$new("progress-bar3", hide_on_max = TRUE) + + # initiate observe event for first time users to be presented with T&Cs + termsandconditions(input) + + # generate regex pattern from params + regexPattern <- paste0(site_params$regex, collapse="|") + + # define regex reactive methods for each input (again can we have 1 input perhaps?) + regexDetect1 <- reactive(return(grepl(pattern = regexPattern, x = input$editing1, ignore.case = T))) + regexDetect2 <- reactive(return(grepl(pattern = regexPattern, x = input$editing2, ignore.case = T))) + regexDetect3 <- reactive(return(grepl(pattern = regexPattern, x = input$editing3, ignore.case = T))) + + + # initiate observe events for each button + # SAS to R translation + observeEvent(input$process1, + observer( + userInput=input$editing1, + regexDetect=regexDetect1, + api_response="api_response1", + language = site_params$from_language, + att=att1, + instructions=instructions1, #... + successFunct=aiProcessSuccessFunct, + session = session, + lang = site_params$from_language, + editorId = "api_response1", + updateFunction = updateAceEditor_ + ) + ) + # SAS code explainer + observeEvent(input$process2, + observer(userInput=input$editing2, + regexDetect=regexDetect2, + api_response="response2", + language = site_params$from_language, + att=att2, + instructions=instructions2, #... + successFunct=aiProcessSuccessFunct, + lang = site_params$from_language, + output = output, + updateFunction = updateUiOutput + ) + ) + + # SPSS to R translator + observeEvent(input$process3, observer( + userInput=input$editing3, instructions=instructions3, + regexDetect=regexDetect1, api_response="api_response3", + language = site_params$from_language, att=att3, + successFunct=aiProcessSuccessFunct, session = session, + lang = site_params$from_language_2, editorId="api_response3", + updateFunction = updateAceEditor_ + )) + + +} # End server \ No newline at end of file diff --git a/R/termsandconditions.R b/R/termsandconditions.R new file mode 100644 index 0000000..21d047d --- /dev/null +++ b/R/termsandconditions.R @@ -0,0 +1,41 @@ +#' +#' terms and conditions +#' +#' Calls the terms and conditions popup for new users +#' and for users who's cookies have expired +#' +#' @param input global input variable from server.R +#' @export +termsandconditions <- function(input){ + #print(input) + # Terms and conditions show only once ---- + observeEvent(input$new_user, { + req(input$new_user) + # Pop up Terms and conditions on launch ---- + showModal( + modalDialog( + div(id = "terms-content", + HTML(" +

Terms and Conditions

+

By ticking the box below, you are agreeing to follow the Terms and Conditions listed on the Instuctions tab of this app. Please take the time to thoroughly read and understand these terms.

+ ") + ), + + # Disabled submit button when checkbox is not ticked and vice-versa ---- + HTML(" +
+ + +
+ +
+ +
+ "), + + footer = NULL, + size = "l" + ) + ) + }) +} \ No newline at end of file diff --git a/R/uiElements.R b/R/uiElements.R new file mode 100644 index 0000000..4c97ff4 --- /dev/null +++ b/R/uiElements.R @@ -0,0 +1,39 @@ + +aceOutput <- function(tabIndex){ + return ( + div(id = paste0("response", tabIndex), + aceEditor(paste0("api_response", tabIndex), + height = "798px", + mode = "r", + fontSize="15", + readOnly = TRUE, + wordWrap = TRUE))) +} + +standardInput <- function(fromLanguage, tabIndex){ + return( HTML( + str_replace_all( + readFile("html", "TranslatorInputTemplate", "html"), + c("_input_language_"=fromLanguage, "_tabIndex_"=tabIndex)))) +} + +aceInput <- function(fromLanguage, tabIndex){ + return( + div(id = paste0("editing", tabIndex, "container"), style = "height: 100%", + HTML(paste0("")), + aceEditor( + outputId =paste0("editing", tabIndex), + height = "750px", + selectionId = "selection", + fontSize= 15, + mode = "r", + placeholder = paste0("Enter ",fromLanguage," Code") + ) + ) + ) +} + + +uiOutput_ <- function(tabIndex) { + return (uiOutput(paste0("response", tabIndex))) +} diff --git a/R/ui_.R b/R/ui_.R new file mode 100644 index 0000000..0185214 --- /dev/null +++ b/R/ui_.R @@ -0,0 +1,47 @@ +#' ui function +#' called from ui.R +#' @export + +ui_ <- function() { + return (fluidPage( + + # adds title to browser tab + title = site_params$title, + + # load css and js files + head(), + + # Initialize Progress bar ---- + theme = bslib::bs_theme(version = 4), + + useAttendant(), + + # Branding Image ---- + headerPanel(site_params$title, + title = img(id = "branding", + draggable = "false", + src = getFile(site_params$logo, "image") + ) + ), + + + # Main tabs ---- + tabsetPanel( + id="inTabset", + instructions(), + # sas to R + page_(fromLanguage = site_params$from_language, tabIndex = 1, outputElement = aceOutput, inputElement = standardInput), + # explainer + page_(fromLanguage = site_params$from_language, tabIndex = 2, + tabName = "Explainer", + outputLabel = "Explanation", + buttonLabel = "Explain", + outputElement = uiOutput_, inputElement = aceInput + ), + # spss to R + page_(fromLanguage = site_params$from_language_2, tabIndex = 3, outputElement = aceOutput, inputElement = standardInput) + + ), + + )) +} \ No newline at end of file diff --git a/README.md b/README.md index 5243299..6b077eb 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ The application has been an ongoing project for a series of interns and graduate - Minh Quach [https://www.linkedin.com/in/qhm/](https://www.linkedin.com/in/qhm/) - Eva Leahy [https://www.linkedin.com/in/eva-leahy/](https://ie.linkedin.com/in/eva-leahy) - Sean Browne [https://www.linkedin.com/in/se%C3%A1n-browne-608211286/](https://www.linkedin.com/in/se%C3%A1n-browne-608211286/) +- Cian O'Riordan ### Permanent staff - Peter Marsh [https://www.linkedin.com/in/peter-marsh-704180157/](https://www.linkedin.com/in/peter-marsh-704180157/) @@ -24,7 +25,7 @@ The CSO is making this configurable version of the code translator available for #### config file from the config file you can: -`from_language`, `to_language` define the to/from languages. \ +`from_language`, `from_language_2`, `to_language` define the to/from languages. \ `title` define the title of the app. \ `logo` define the file name of the company logo in ./www/images `open_ai_key` define the openai api key. \ diff --git a/config.yml b/config.yml index 26b68c3..b2cb162 100644 --- a/config.yml +++ b/config.yml @@ -1,12 +1,29 @@ name: "Code Translator" title: "Code Translator" +url: "code-translator" +description: "Code Translaotr assistant using OpenAI" + +# access: to define access level in Posit Connect +# acl (access only for specific users), +# logged_in (any registered user, must log in first), +# all (any user no login required) +access: "acl" + +# change location and name of favicon and logo as necessary favicon: "favicon.png" logo: "logo.png" + +# define translation languages (from/to) from_language: "SAS" +from_language_2: "SPSS" to_language: "R" + +# this is now to be set as an environment variable in Posit Connect (OPEN_AI_KEY) +# it will be read from there first then from here if it doesn't exists in Connect open_ai_key: "your-key-here" open_ai_model: "GPT-4o" open_ai_max_tokens: 4000 +max_workers: 4 # full value can also be stored as an environment variable in Posit Connect (MAX_WORKERS) # define regex patterns here # the provided patterns match the following (in order) diff --git a/functions/readFile.R b/functions/readFile.R deleted file mode 100644 index 0628f6b..0000000 --- a/functions/readFile.R +++ /dev/null @@ -1,54 +0,0 @@ -library(readr) -library(yaml) - -# reads files from various locations. this removes the awful nested functions -# which litter the code otherwise - -readFile <- function(type, name, subfolder = ""){ - ext <- extension(type) - subfld <- subpath(subfolder) - switch (type, - html = includeHTML(paste0(getwd(), subfld, name, ext)), - yaml = read_yaml(paste0(getwd(), subfld, name, ext)), - text = as.character(read_file(paste0(getwd(), subfld, name, ext))), - txt = as.character(read_file(paste0(getwd(), subfld, name, ext))), - yml = read_yaml(paste0(getwd(), subfld, name, ext)) - ) -} - -sourceFile <- function(name){ - source (paste0(getwd(), "/functions/", name)) -} - -getFile <- function(fileName, type){ - switch(type - , image = paste0("images/", fileName) - , style = paste0("includes/", fileName) - , script = paste0("includes/", fileName) - ) - - -} - -extension <- function (type){ - switch(type, - yaml = ".yml", - yml = ".yml", - text = ".txt", - txt = ".txt", - html = ".html" - , "" - ) -} - -subpath <- function(subfolder){ - switch (subfolder, - www = "/www/", - html = "/www/html/", - images = "/www/images/", - includes = "/www/includes/", - instructions = "/www/instructions/", - "/" - ) -} - diff --git a/functions/utils.R b/functions/utils.R deleted file mode 100644 index fcec838..0000000 --- a/functions/utils.R +++ /dev/null @@ -1,160 +0,0 @@ - - -####################################################################################### -# Utils abstract away as much as is practical away from ui.R , server.R and global.R -# -# TODO: add other authors -# Authors: Peter Marsh -# -# Created: 03/10/2024 - Peter Marsh -# Edited: -# -# -# -# -# -####################################################################################### - - -library(shiny) -library(shinythemes) -library(waiter) -library(shinyAce) -library(future) -library(promises) -library(shinyalert) -library(yaml) -library(stringr) -library(readr) - -#################################################################################################### -# # -# U U IIIII FFFFFFF U U N N CCCCC TTTTTTT IIIII OOOO N N SSS # -# U U I F U U NN N C C T I O O NN N S S # -# U U I F U U N N N C T I O O N N N S S # -# U U I F U U N N N C T I O O N N N S # -# U U I FFFFF U U N N N C T I O O N N N S # -# U U I F U U N N N C T I O O N N N SSS # -# U U I F U U N N N C T I O O N N N S # -# U U I F U U N N N C T I O O N N N S # -# U U I F U U N NN C T I O O N NN S S # -# U U I F U U N NN C C T I O O N NN S S # -# UUUUU IIIII F UUUUU N N CCCCC T IIIII OOOO N N SSS # -# # -#################################################################################################### - -# TODO parse out remaining inline html and inline styling - -# defines Instructions panel -instructions <- function(){ - return (tabPanel("Instructions", - fluidRow( - column(2), - column(8, - div(id = "disclaimer", - readFile("html", "Disclaimer", "html" ) - ) - ), - column(2) - ) - )) -} - -# defines the code translator tab -translator <- function() { - return(tabPanel(title = paste0(site_params$from_language, " to ", site_params$to_language," code Assistant"), - # Main content ---- - fluidRow( - column(1), - column(5, - # Progress bar ---- - attendantBar("progress-bar1", - color = "success", - max = 100, - striped = TRUE, - animated = TRUE, - height = "40px", - width = "75%" - ), - - # Live syntax highlighting input SAS code box ---- - HTML( - str_replace( - readFile("html", "TranslatorInput", "html"), - "_input_language_", - site_params$from_language)), - - # Translate button ---- - actionButton("process1", paste0("Translate to ", site_params$to_language)) - ), - column(5, - div(id = "output1container", style = "height: 100%;", style = "width: 95%", - HTML(paste0("")), - div(id = "output1", style = "border: 1px solid #CED4DA; height: 800px", - div(id = "response1", - aceEditor("api_response1", - height = "798px", - mode = "r", - readOnly = TRUE) - ), - ) - ) - ), - column(1) - ) - )) -} - - -# defines the code explainer tab -explainer <- function(){ - return( tabPanel(title = "Explainer", - # Main content ---- - fluidRow( - column(1), - column(5, - # Progress bar ---- - attendantBar("progress-bar2", - color = "success", - max = 100, - striped = TRUE, - animated = TRUE, - height = "40px", - width = "75%" - ), - - # Live syntax highlighting input R code box ---- - div(id = "editing2container", style = "height: 100%", - HTML(paste0("")), - aceEditor( - outputId = "editing2", - height = "750px", - selectionId = "selection", - mode = "r", - placeholder = paste0("Enter ",site_params$from_language," Code") - ) - ), - - - # Explanation button ---- - actionButton("process2", "Explain") - ), - column(5, - div(id = "output2container", style = "height: 100%;", style = "width: 95%", - HTML(""), - div(id = "output2", style = "border: 1px solid #CED4DA; height: 800px", - uiOutput("outBox") - #div(id = "response2", - #aceEditor("api_response2", - #height = "798px", - #readOnly = TRUE) - #), - ) - ) - ), - column(1) - ) - ) - ) -} - diff --git a/global.R b/global.R index 1a56c59..7228d65 100644 --- a/global.R +++ b/global.R @@ -1,3 +1,4 @@ +# define libraries used throughout the app library(shiny) library(shinythemes) library(waiter) @@ -9,487 +10,16 @@ library(yaml) library(stringr) library(readr) -# read readFile.R file for the readFile() function -# (since everything else depends on this being loaded) -source (paste0(getwd(), "/functions/readFile.R")) - -# because we want to abstract away all abstractions -sourceFile("utils.R") +#load readFile first +source (paste0(getwd(), "/R/readFile.R")) +# read the params file site_params <- readFile("yaml", "config") -# read instructions -instructions1 <- readFile("text", "instructions1", "instructions") -instructions2 <- readFile("text", "instructions2", "instructions") - - -# behold my beautiful ascii art! - PM - -##################### -# # -# U U IIIII # -# U U I # -# U U I # -# U U I # -# U U I # -# U U I # -# U U I # -# U U I # -# U U I # -# U U I # -# UUUUU IIIII # -# # -##################### - - -ui <- function(){ - return (fluidPage( - - # adds title to browser tab - title = site_params$title, - - # add js and css to html - tags$head( - # favicon: - # TODO put the favicon code here - - # Cookies to remember user on popup Terms ---- - tags$script(src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"), - # Load cookies script ---- - tags$script(src="includes/cookies.js"), - - # Load CSS & JS script ---- - tags$link(rel = "stylesheet", type = "text/css", href = "includes/Transcompiler.css"), - tags$script(src="includes/Transcompiler.js") - ), - - # Initialize Progress bar ---- - theme = bslib::bs_theme(version = 4), - useAttendant(), - - # Branding Image ---- - headerPanel(site_params$title, - title = img(id = "branding", - draggable = "false", - src = getFile(site_params$logo, "image") - ) - ), - - - # Main tabs ---- - tabsetPanel( - id="inTabset", - - instructions(), - translator(), - explainer() - - - ) - )) -} - - -####################################################### -# # -# SSS EEEEEEE RRRRR V V EEEEEEE RRRRR # -# S S E R R V V E R R # -# S S E R R V V E R R # -# S E R R V V E R R # -# S E R R V V E R R # -# SSS EEEEE RRRRR V V EEEEE RRRRR # -# S E R R V V E R R # -# S E R R V V E R R # -# S S E R R V V E R R # -# S S E R R V V E R R # -# SSS EEEEEEE R R V EEEEEEE R R # -# # -####################################################### - -# TODO: abstract and modularise this as much as possible / is practical -# TODO: parse out html into separate html files so we don't have inline html -# TODO: parse out inline styling (in inline html) - -server <- function(input, output, session) { - - # Render R code box ---- - output$api_response1 <- renderUI({ - aceEditor("api_response1", mode = "r", readOnly = TRUE, fontSize = 13) - }) - - # Progress bar ---- - att1 <- Attendant$new("progress-bar1", hide_on_max = TRUE) - att2 <- Attendant$new("progress-bar2", hide_on_max = TRUE) - - # Terms and conditions show only once ---- - observeEvent(input$new_user, { - req(input$new_user) - # Pop up Terms and conditions on launch ---- - showModal( - modalDialog( - div(id = "terms-content", - HTML(" -

Terms and Conditions

-

By ticking the box below, you are agreeing to follow the Terms and Conditions listed on the Instuctions tab of this app. Please take the time to thoroughly read and understand these terms.

- ") - ), - - # Disabled submit button when checkbox is not ticked and vice-versa ---- - HTML(" -
- - -
- -
- -
- "), - - footer = NULL, - size = "l" - ) - ) - }) - - # Regular Expressions to check for ---- - regexPattern <- paste0(site_params$regex, collapse="|") - - # Check for Regular Expressions in inputted SAS code ---- - regexDetect1 <- reactive({ - userInput1 <- input$editing1 - if (grepl(pattern = regexPattern, x = userInput1, ignore.case = T)) { - return(TRUE) - } else { - return(FALSE) - } - }) - - # print(userInput1) - - # Check for Regular Expressions in inputted Explanation SAS code ---- - regexDetect2 <- reactive({ - userInput2 <- input$editing2 - if (grepl(pattern = regexPattern, x = userInput2, ignore.case = T)) { - return(TRUE) - } else { - return(FALSE) - } - }) - - #print(userInput2) - - translationFunct <- function(userInput, instructions) { - # Loading bar - att1$set(0) # Start at 0% - att1$auto() # Auto increment - #print (instructions1) - # Async process1 - # Send code to run in another session ---- - # print(userInput) - future({ - # OpenAI API connection ---- - rs <- openai::create_chat_completion( - # Model used from 10-Nov is the GPT-4 turbo preview. - # This model will need to be updated when the preview ends and full release begins - model = "gpt-4o", - - messages = list( - list( - "role" = "system", - "content" = instructions - ), - list( - "role" = "user", - "content" = userInput - ) - ), - - temperature = 0, - - # max_tokens = 1024, # Controls response length for GPT-4 - max_tokens = 4000, # Increased response length for GPT-4 Turbo (context window is x4 times larger) - - openai_api_key = site_params$open_ai_key) - - - }) %...>% ( - # Handler when the code is returned ---- - function(rs) { - # Hide progress bar after 30s - #print(rs) - on.exit({ - att1$done() - }) - - Sys.sleep(1) - - # Response content ---- - if (!is.null(rs)) { - response <- rs$choices$message.content - lines <- strsplit(response, "\n") - lines2 = lines[[1]] - # print("lines 2") - # print(lines2) - # suppressWarnings(min(data)) - start_line <- min(match(c(paste0("This is not ",site_params$from_language," code. "), paste0("This is not ",site_params$from_language," code."), paste0("This is not ",site_params$from_language," code ")), lines2), - match("```R", lines2), na.rm=TRUE) - # print("start_line") - # print(start_line) - start_sentence <- lines2[start_line] - end_line <- which(lines2 == "```") - # print("end_line") - # print(end_line) - - - - # If is code, just give back the R code equivalent ---- - if(start_sentence=="```R") { - code_reconstructed <- paste(lines2[(start_line+1):(end_line-1)], collapse = "\n") - - } - - # If not code, give back message explaining issue ---- - else{ - code_reconstructed <- paste(lines2, collapse = "\n") - } - - updateAceEditor(session, "api_response1", - value = code_reconstructed, - wordWrap = T) - list(code_reconstructed = code_reconstructed) - } - - }) %...!% ( - # Handler when error is returned ---- - # Typically: Warning: Error in curl::curl_fetch_memory: Failed connect to api.openai.com:443; - function(rs) { - showNotification(paste("Error:", rs$message), type = "error") - - #print (rs$message) - #showNotification("hello", type="error") - # Hide progress bar - on.exit({ - att1$done() - }) - - return(NULL) - }) - } - # Once user clicks translate, do the following ---- - observeEvent(input$process1, { - - userInput1 <- input$editing1 - # print(userInput) - - # Error catching: no input detected ---- - if( nchar(userInput1) > 0 ) { - - # Error catching: input SAS code too long ---- - if( nchar(userInput1) > 4000 ) { - # Hide progress bar on error ---- - on.exit({ - att1$done() - }) - Sys.sleep(1) - - # Error output ---- - updateAceEditor(session, "api_response1", value = paste0("You have entered too much ",site_params$from_language," code.")) - - } else { - - # Regular Expression catching ---- - if (regexDetect1() == FALSE) { - # No regular expression found, send text to API - translationFunct(userInput = userInput1, instructions = instructions1) - - } else { # Create a pop-up warning to inform user that regex has caught some patterns, - # Ask user to confirm before sending text to API or do NULL - shinyalert( - title = "Information Check", - text = "Input appears to contain sensitive information\n (URLs/Filepaths/IP addresses/Passwords/etc.)\n - Do you wish to proceed with translation?", - size = "s", closeOnEsc = TRUE, closeOnClickOutside = FALSE, - html = FALSE, type = "warning", - showConfirmButton = TRUE, showCancelButton = TRUE, - confirmButtonText = "Proceed with Translation", - confirmButtonCol = "#AEDEF4", - cancelButtonText = "Back", - timer = 0, animation = TRUE, - - callbackR = function(x) { if(x == FALSE) {return(NULL)} # NA not here - else{ translationFunct(userInput = userInput1, instructions = instructions1) } - } - )} - - } - } - else { - showNotification(paste("Error: No input detected."), type = "error") - } - }) # End observeEvent - - explanationFunct <- function(userInput, instructions) { - # Loading bar - att2$set(0) # Start at 0% - att2$auto() # Auto increment - #print (instructions1) - # Async process1 - # Send code to run in another session ---- - future({ - # OpenAI API connection ---- - rs <- openai::create_chat_completion( - # Model used from 10-Nov is the GPT-4 turbo preview. - # This model will need to be updated when the preview ends and full release begins - model = "gpt-4o", - - messages = list( - list( - "role" = "system", - "content" = instructions - ), - list( - "role" = "user", - "content" = userInput - ) - ), - - temperature = 0, - - # max_tokens = 1024, # Controls response length for GPT-4 - max_tokens = 4000, # Increased response length for GPT-4 Turbo (context window is x4 times larger) - - openai_api_key = site_params$open_ai_key) - - - }) %...>% ( - # Handler when the code is returned ---- - function(rs) { - # Hide progress bar after 30s - #print(rs) - on.exit({ - att2$done() - }) - - Sys.sleep(1) - - # Response content ---- - if (!is.null(rs)) { - response <- rs$choices$message.content - lines <- strsplit(response, "\n") - #print(lines) - lines2 = lines[[1]] - #print("lines 2") - #print(lines2) - #suppressWarnings(min(data)) - start_line <- lines2[1] - #print("start_line") - #print(start_line) - end_line <- tail(lines2, n=1) - #print(end_line) - - - - # If is code, just give back the explanation ---- - if(start_line == "\n") { - explanation <- lines2[start_line:(lines2[length(lines2)-1])] - # Render explanation box ---- - output$outBox <- renderUI({ - HTML(paste(explanation, collapse = "
")) - }) - - } - - # If not code, give back message explaining issue ---- - else{ - explanation <- lines2 - # Render explanation box ---- - output$outBox <- renderUI({ - HTML(paste(explanation, collapse = "
")) - }) - } - #list(code_reconstructed1 = code_reconstructed1) - } - - - }) %...!% ( - # Handler when error is returned ---- - # Typically: Warning: Error in curl::curl_fetch_memory: Failed connect to api.openai.com:443; - function(rs) { - showNotification(paste("Error:", rs$message), type = "error") - - #print (rs$message) - #showNotification("hello", type="error") - # Hide progress bar - on.exit({ - att2$done() - }) - - return(NULL) - }) - - } - - # Once user clicks Explain, do the following ---- - observeEvent(input$process2, { - - userInput2 <- input$editing2 - # print(userInput2) - - # Error catching: no input detected ---- - if( nchar(userInput2) > 0 ) { - - # Error catching: input R code too long ---- - if( nchar(userInput2) > 4000 ) { - # Hide progress bar on error ---- - on.exit({ - att2$done() - }) - Sys.sleep(1) - - # Error output ---- - textOutput(session, "api_response2", value = paste0("You have entered too much ",site_params$from_language," code.")) - - } else { - - # Regular Expression catching ---- - if (regexDetect2() == FALSE) { - # No regular expression found, send text to API - explanationFunct(userInput = userInput2, instructions = instructions2) - - } else { # Create a pop-up warning to inform user that regex has caught some patterns, - # Ask user to confirm before sending text to API or do NULL - shinyalert( - title = "Information Check", - text = "Input appears to contain sensitive information\n (URLs/Filepaths/IP addresses/Passwords/etc.)\n - Do you wish to proceed with explanation?", - size = "s", closeOnEsc = TRUE, closeOnClickOutside = FALSE, - html = FALSE, type = "warning", - showConfirmButton = TRUE, showCancelButton = TRUE, - confirmButtonText = "Proceed with Explanation", - confirmButtonCol = "#AEDEF4", - cancelButtonText = "Back", - timer = 0, animation = TRUE, - - callbackR = function(x) { if(x == FALSE) {return(NULL)} # NA not here - else{ explanationFunct(userInput = userInput2, instructions = instructions2) } - } - )} - - } - } - else { - showNotification(paste("Error: No input detected."), type = "error") - } - }) # End observeEvent - -} # End server - - - - - - - - +# load other functions +loadSupport("R") +# load order: +# 1. global.R +# 2. all files in R/ (in alphabetical order) +# 3. server.R & ui.R \ No newline at end of file diff --git a/manifest.json b/manifest.json deleted file mode 100644 index bb936e9..0000000 --- a/manifest.json +++ /dev/null @@ -1,2136 +0,0 @@ -{ - "version": 1, - "locale": "en_GB", - "platform": "4.4.0", - "metadata": { - "appmode": "shiny", - "primary_rmd": null, - "primary_html": null, - "content_category": null, - "has_parameters": false - }, - "packages": { - "R6": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "R6", - "Title": "Encapsulated Classes with Reference Semantics", - "Version": "2.5.1", - "Authors@R": "person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@stdout.org\")", - "Description": "Creates classes with reference semantics, similar to R's built-in\n reference classes. Compared to reference classes, R6 classes are simpler\n and lighter-weight, and they are not built on S4 classes so they do not\n require the methods package. These classes allow public and private\n members, and they support inheritance, even when the classes are defined in\n different packages.", - "Depends": "R (>= 3.0)", - "Suggests": "testthat, pryr", - "License": "MIT + file LICENSE", - "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6/", - "BugReports": "https://github.com/r-lib/R6/issues", - "RoxygenNote": "7.1.1", - "NeedsCompilation": "no", - "Packaged": "2021-08-06 20:18:46 UTC; winston", - "Author": "Winston Chang [aut, cre]", - "Maintainer": "Winston Chang ", - "Repository": "RSPM", - "Date/Publication": "2021-08-19 14:00:05 UTC", - "Encoding": "UTF-8", - "Built": "R 4.4.0; ; 2024-04-25 19:39:56 UTC; windows" - } - }, - "Rcpp": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "Rcpp", - "Title": "Seamless R and C++ Integration", - "Version": "1.0.12", - "Date": "2024-01-08", - "Author": "Dirk Eddelbuettel, Romain Francois, JJ Allaire, Kevin Ushey, Qiang Kou,\n Nathan Russell, Inaki Ucar, Douglas Bates and John Chambers", - "Maintainer": "Dirk Eddelbuettel ", - "Description": "The 'Rcpp' package provides R functions as well as C++ classes which\n offer a seamless integration of R and C++. Many R data types and objects can be\n mapped back and forth to C++ equivalents which facilitates both writing of new\n code as well as easier integration of third-party libraries. Documentation\n about 'Rcpp' is provided by several vignettes included in this package, via the\n 'Rcpp Gallery' site at , the paper by Eddelbuettel and\n Francois (2011, ), the book by Eddelbuettel (2013,\n ) and the paper by Eddelbuettel and Balamuta (2018,\n ); see 'citation(\"Rcpp\")' for details.", - "Imports": "methods, utils", - "Suggests": "tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)", - "URL": "https://www.rcpp.org,\nhttps://dirk.eddelbuettel.com/code/rcpp.html,\nhttps://github.com/RcppCore/Rcpp", - "License": "GPL (>= 2)", - "BugReports": "https://github.com/RcppCore/Rcpp/issues", - "MailingList": "rcpp-devel@lists.r-forge.r-project.org", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2024-01-08 12:50:16 UTC; edd", - "Repository": "CRAN", - "Date/Publication": "2024-01-09 08:20:35 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:42:57 UTC; windows", - "Archs": "x64" - } - }, - "askpass": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "askpass", - "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Version": "1.2.0", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), \n email = \"jeroen@berkeley.edu\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a \n passphrase, for example to authenticate with a server or read a protected key.\n Includes native programs for MacOS and Windows, hence no 'tcltk' is required. \n Password entry can be invoked in two different ways: directly from R via the \n askpass() function, or indirectly as password-entry back-end for 'ssh-agent' \n or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables.\n Thereby the user can be prompted for credentials or a passphrase if needed \n when R calls out to git or ssh.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", - "Encoding": "UTF-8", - "Imports": "sys (>= 2.1)", - "RoxygenNote": "7.2.3", - "Suggests": "testthat", - "Language": "en-US", - "NeedsCompilation": "yes", - "Packaged": "2023-09-03 19:16:12 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN", - "Date/Publication": "2023-09-03 20:00:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:28:09 UTC; windows", - "Archs": "x64" - } - }, - "assertthat": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "assertthat", - "Title": "Easy Pre and Post Assertions", - "Version": "0.2.1", - "Authors@R": "\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", c(\"aut\", \"cre\"))", - "Description": "An extension to stopifnot() that makes it easy to declare \n the pre and post conditions that you code should satisfy, while also \n producing friendly error messages so that your users know what's gone\n wrong.", - "License": "GPL-3", - "Imports": "tools", - "Suggests": "testthat, covr", - "RoxygenNote": "6.0.1", - "Collate": "'assert-that.r' 'on-failure.r' 'assertions-file.r'\n'assertions-scalar.R' 'assertions.r' 'base.r'\n'base-comparison.r' 'base-is.r' 'base-logical.r' 'base-misc.r'\n'utils.r' 'validate-that.R'", - "NeedsCompilation": "no", - "Packaged": "2019-03-21 13:11:01 UTC; hadley", - "Author": "Hadley Wickham [aut, cre]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN", - "Date/Publication": "2019-03-21 14:53:46 UTC", - "Built": "R 4.4.0; ; 2024-05-14 00:34:35 UTC; windows" - } - }, - "base64enc": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "base64enc", - "Version": "0.1-3", - "Title": "Tools for base64 encoding", - "Author": "Simon Urbanek ", - "Maintainer": "Simon Urbanek ", - "Depends": "R (>= 2.9.0)", - "Enhances": "png", - "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", - "License": "GPL-2 | GPL-3", - "URL": "http://www.rforge.net/base64enc", - "NeedsCompilation": "yes", - "Packaged": "2015-02-04 20:31:00 UTC; svnuser", - "Repository": "CRAN", - "Date/Publication": "2015-07-28 08:03:37", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-23 00:24:00 UTC; windows", - "Archs": "x64" - } - }, - "bit": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "bit", - "Type": "Package", - "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections", - "Version": "4.0.5", - "Date": "2022-11-13", - "Author": "Jens Oehlschlägel [aut, cre], Brian Ripley [ctb]", - "Maintainer": "Jens Oehlschlägel ", - "Depends": "R (>= 2.9.2)", - "Suggests": "testthat (>= 0.11.0), roxygen2, knitr, rmarkdown,\nmicrobenchmark, bit64 (>= 4.0.0), ff (>= 4.0.0)", - "Description": "Provided are classes for boolean and skewed boolean vectors,\n fast boolean methods, fast unique and non-unique integer sorting,\n fast set operations on sorted and unsorted sets of integers, and\n foundations for ff (range index, compression, chunked processing).", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "Encoding": "UTF-8", - "URL": "https://github.com/truecluster/bit", - "VignetteBuilder": "knitr, rmarkdown", - "RoxygenNote": "7.2.0", - "NeedsCompilation": "yes", - "Packaged": "2022-11-13 21:22:09 UTC; jo", - "Repository": "CRAN", - "Date/Publication": "2022-11-15 21:20:16 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:24 UTC; windows", - "Archs": "x64" - } - }, - "bit64": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "bit64", - "Type": "Package", - "Title": "A S3 Class for Vectors of 64bit Integers", - "Version": "4.0.5", - "Date": "2020-08-29", - "Author": "Jens Oehlschlägel [aut, cre], Leonardo Silvestri [ctb]", - "Maintainer": "Jens Oehlschlägel ", - "Depends": "R (>= 3.0.1), bit (>= 4.0.0), utils, methods, stats", - "Description": "\n Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. \n These are useful for handling database keys and exact counting in +-2^63.\n WARNING: do not use them as replacement for 32bit integers, integer64 are not\n supported for subscripting by R-core and they have different semantics when \n combined with double, e.g. integer64 + double => integer64. \n Class integer64 can be used in vectors, matrices, arrays and data.frames. \n Methods are available for coercion from and to logicals, integers, doubles, \n characters and factors as well as many elementwise and summary functions. \n Many fast algorithmic operations such as 'match' and 'order' support inter-\n active data exploration and manipulation and optionally leverage caching.", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "URL": "https://github.com/truecluster/bit64", - "Encoding": "UTF-8", - "Repository": "CRAN", - "Repository/R-Forge/Project": "ff", - "Repository/R-Forge/Revision": "177", - "Repository/R-Forge/DateTimeStamp": "2018-08-17 17:45:18", - "Date/Publication": "2020-08-30 07:20:02 UTC", - "NeedsCompilation": "yes", - "Packaged": "2020-08-29 10:56:45 UTC; jo", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:28:20 UTC; windows", - "Archs": "x64" - } - }, - "bslib": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "bslib", - "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", - "Version": "0.7.0", - "Authors@R": "c(\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-7111-0077\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(, \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap colorpicker library\"),\n person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootswatch library\"),\n person(, \"PayPal\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap accessibility plugin\")\n )", - "Description": "Simplifies custom 'CSS' styling of both 'shiny' and\n 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as\n well as their various 'Bootswatch' themes. An interactive widget is\n also provided for previewing themes in real time.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", - "BugReports": "https://github.com/rstudio/bslib/issues", - "Depends": "R (>= 2.10)", - "Imports": "base64enc, cachem, fastmap (>= 1.1.1), grDevices, htmltools\n(>= 0.5.8), jquerylib (>= 0.1.3), jsonlite, lifecycle, memoise\n(>= 2.0.1), mime, rlang, sass (>= 0.4.9)", - "Suggests": "bsicons, curl, fontawesome, future, ggplot2, knitr, magrittr,\nrappdirs, rmarkdown (>= 2.7), shiny (>= 1.8.1), testthat,\nthematic, withr", - "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11,\ncpsievert/chiflights22, cpsievert/histoslider, dplyr, DT,\nggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets,\nlattice, leaflet, lubridate, modelr, plotly, reactable,\nreshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler,\ntibble", - "Config/Needs/routine": "chromote, desc, renv", - "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue,\nhtmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr,\nrprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile,\ntheme-*, rmd-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R'\n'bs-dependencies.R' 'bs-global.R' 'bs-remove.R'\n'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R'\n'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R'\n'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R'\n'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R'\n'fill.R' 'imports.R' 'input-dark-mode.R' 'input-switch.R'\n'layout.R' 'nav-items.R' 'nav-update.R' 'navs-legacy.R'\n'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R'\n'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R'\n'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R'\n'value-box.R' 'version-default.R' 'versions.R'", - "NeedsCompilation": "no", - "Packaged": "2024-03-28 21:43:16 UTC; cpsievert", - "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n Garrick Aden-Buie [aut] (),\n Posit Software, PBC [cph, fnd],\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Javi Aguilar [ctb, cph] (Bootstrap colorpicker library),\n Thomas Park [ctb, cph] (Bootswatch library),\n PayPal [ctb, cph] (Bootstrap accessibility plugin)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN", - "Date/Publication": "2024-03-29 01:00:03 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:54:26 UTC; windows" - } - }, - "cachem": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "cachem", - "Version": "1.0.8", - "Title": "Cache R Objects with Automatic Pruning", - "Description": "Key-value stores with automatic pruning. Caches can limit\n either their total size or the age of the oldest object (or both),\n automatically pruning objects to maintain the constraints.", - "Authors@R": "c(\n person(\"Winston\", \"Chang\", , \"winston@rstudio.com\", c(\"aut\", \"cre\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")))", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "ByteCompile": "true", - "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", - "Imports": "rlang, fastmap (>= 1.1.1)", - "Suggests": "testthat", - "RoxygenNote": "7.2.3", - "Config/Needs/routine": "lobstr", - "Config/Needs/website": "pkgdown", - "NeedsCompilation": "yes", - "Packaged": "2023-05-01 15:38:38 UTC; winston", - "Author": "Winston Chang [aut, cre],\n RStudio [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2023-05-01 16:40:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:28:12 UTC; windows", - "Archs": "x64" - } - }, - "cli": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "cli", - "Title": "Helpers for Developing Command Line Interfaces", - "Version": "3.6.1", - "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Kirill\", \"Müller\", role = \"ctb\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "A suite of tools to build attractive command line interfaces\n ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs,\n etc. Supports custom themes via a 'CSS'-like language. It also\n contains a number of lower level 'CLI' elements: rules, boxes, trees,\n and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI\n colors and text styles as well.", - "License": "MIT + file LICENSE", - "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli#readme", - "BugReports": "https://github.com/r-lib/cli/issues", - "Depends": "R (>= 3.4)", - "Imports": "utils", - "Suggests": "callr, covr, crayon, digest, glue (>= 1.6.0), grDevices,\nhtmltools, htmlwidgets, knitr, methods, mockery, processx, ps\n(>= 1.3.4.9000), rlang (>= 1.0.2.9003), rmarkdown, rprojroot,\nrstudioapi, testthat, tibble, whoami, withr", - "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc,\nfansi, prettyunits, sessioninfo, tidyverse/tidytemplate,\nusethis, vctrs", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1.9000", - "NeedsCompilation": "yes", - "Packaged": "2023-03-22 13:59:32 UTC; gaborcsardi", - "Author": "Gábor Csárdi [aut, cre],\n Hadley Wickham [ctb],\n Kirill Müller [ctb],\n RStudio [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "RSPM", - "Date/Publication": "2023-03-23 12:52:05 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-10 06:34:24 UTC; windows", - "Archs": "x64" - } - }, - "clipr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "clipr", - "Title": "Read and Write from the System Clipboard", - "Version": "0.8.0", - "Authors@R": "c(\n person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4387-3384\")),\n person(\"Louis\", \"Maddox\", role = \"ctb\"),\n person(\"Steve\", \"Simpson\", role = \"ctb\"),\n person(\"Jennifer\", \"Bryan\", role = \"ctb\")\n )", - "Description": "Simple utility functions to read from and write to\n the Windows, OS X, and X11 clipboards.", - "License": "GPL-3", - "URL": "https://github.com/mdlincoln/clipr,\nhttp://matthewlincoln.net/clipr/", - "BugReports": "https://github.com/mdlincoln/clipr/issues", - "Imports": "utils", - "Suggests": "covr, knitr, rmarkdown, rstudioapi (>= 0.5), testthat (>=\n2.0.0)", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.1.2", - "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel\n(http://www.vergenet.net/~conrad/software/xsel/) for accessing\nthe X11 clipboard, or wl-clipboard\n(https://github.com/bugaevc/wl-clipboard) for systems using\nWayland.", - "NeedsCompilation": "no", - "Packaged": "2022-02-19 02:20:21 UTC; mlincoln", - "Author": "Matthew Lincoln [aut, cre] (),\n Louis Maddox [ctb],\n Steve Simpson [ctb],\n Jennifer Bryan [ctb]", - "Maintainer": "Matthew Lincoln ", - "Repository": "CRAN", - "Date/Publication": "2022-02-22 00:58:45 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:43:23 UTC; windows" - } - }, - "codetools": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "codetools", - "Version": "0.2-20", - "Priority": "recommended", - "Author": "Luke Tierney ", - "Description": "Code analysis tools for R.", - "Title": "Code Analysis Tools for R", - "Depends": "R (>= 2.1)", - "Maintainer": "Luke Tierney ", - "URL": "https://gitlab.com/luke-tierney/codetools", - "License": "GPL", - "NeedsCompilation": "no", - "Packaged": "2024-03-31 18:18:09 UTC; luke", - "Repository": "CRAN", - "Date/Publication": "2024-03-31 20:10:06 UTC", - "Built": "R 4.4.0; ; 2024-04-24 08:34:07 UTC; windows" - } - }, - "commonmark": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "commonmark", - "Type": "Package", - "Title": "High Performance CommonMark and Github Markdown Rendering in R", - "Version": "1.9.1", - "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", ,\"jeroen@berkeley.edu\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", - "URL": "https://docs.ropensci.org/commonmark/\nhttps://r-lib.r-universe.dev/commonmark\nhttps://github.github.com/gfm/ (spec)", - "BugReports": "https://github.com/r-lib/commonmark/issues", - "Description": "The CommonMark specification defines a rationalized version of markdown\n syntax. This package uses the 'cmark' reference implementation for converting\n markdown text into various formats including html, latex and groff man. In\n addition it exposes the markdown parse tree in xml format. Also includes opt-in\n support for GFM extensions including tables, autolinks, and strikethrough text.", - "License": "BSD_2_clause + file LICENSE", - "Suggests": "curl, testthat, xml2", - "RoxygenNote": "7.2.3", - "Language": "en-US", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2024-01-30 11:29:56 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] (),\n John MacFarlane [cph] (Author of cmark)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN", - "Date/Publication": "2024-01-30 12:40:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:01 UTC; windows", - "Archs": "x64" - } - }, - "cpp11": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "cpp11", - "Title": "A C++11 Interface for R's C Interface", - "Version": "0.4.7", - "Authors@R": "\n c(\n person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")),\n person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"Benjamin\", \"Kietzman\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Provides a header only, C++11 interface to R's C\n interface. Compared to other approaches 'cpp11' strives to be safe\n against long jumps from the C API as well as C++ exceptions, conform\n to normal R function semantics and supports interaction with 'ALTREP'\n vectors.", - "License": "MIT + file LICENSE", - "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", - "BugReports": "https://github.com/r-lib/cpp11/issues", - "Depends": "R (>= 3.5.0)", - "Suggests": "bench, brio, callr, cli, covr, decor, desc, ggplot2, glue,\nknitr, lobstr, mockery, progress, rmarkdown, scales, Rcpp,\ntestthat (>= 3.2.0), tibble, utils, vctrs, withr", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble,\nvctrs", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2023-12-01 19:16:04 UTC; davis", - "Author": "Davis Vaughan [aut, cre] (),\n Jim Hester [aut] (),\n Romain François [aut] (),\n Benjamin Kietzman [ctb],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN", - "Date/Publication": "2023-12-02 13:20:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:43:00 UTC; windows" - } - }, - "crayon": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "crayon", - "Title": "Colored Terminal Output", - "Version": "1.5.2", - "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\",\n role = c(\"aut\", \"cre\")),\n person(\n \"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\",\n role=c(\"ctb\"))\n )", - "Description": "The crayon package is now superseded. Please use the 'cli' package\n for new projects.\n Colored terminal output on terminals that support 'ANSI'\n color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI'\n color support is automatically detected. Colors and highlighting can\n be combined and nested. New styles can also be created easily.\n This package was inspired by the 'chalk' 'JavaScript' project.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/crayon#readme", - "BugReports": "https://github.com/r-lib/crayon/issues", - "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R'\n'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.r'\n'ansi-palette.R' 'combine.r' 'string.r' 'utils.r'\n'crayon-package.r' 'disposable.r' 'enc-utils.R' 'has_ansi.r'\n'has_color.r' 'link.R' 'styles.r' 'machinery.r' 'parts.r'\n'print.r' 'style-var.r' 'show.r' 'string_operations.r'", - "Imports": "grDevices, methods, utils", - "Suggests": "mockery, rstudioapi, testthat, withr", - "RoxygenNote": "7.1.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Packaged": "2022-09-29 06:24:10 UTC; gaborcsardi", - "Author": "Gábor Csárdi [aut, cre],\n Brodie Gaslam [ctb]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN", - "Date/Publication": "2022-09-29 16:20:24 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:42:58 UTC; windows" - } - }, - "curl": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "curl", - "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Version": "5.2.1", - "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"ctb\"),\n person(\"RStudio\", role = \"cph\")\n )", - "Description": "The curl() and curl_download() functions provide highly\n configurable drop-in replacements for base url() and download.file() with\n better performance, support for encryption (https, ftps), gzip compression,\n authentication, and other 'libcurl' goodies. The core of the package implements a\n framework for performing fully customized requests where data can be processed\n either in memory, on disk, or streaming via the callback or connection\n interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly\n web client see the 'httr' package which builds on this package with http\n specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl: libcurl-devel (rpm) or\nlibcurl4-openssl-dev (deb).", - "URL": "https://jeroen.r-universe.dev/curl https://curl.se/libcurl/", - "BugReports": "https://github.com/jeroen/curl/issues", - "Suggests": "spelling, testthat (>= 1.0.0), knitr, jsonlite, later,\nrmarkdown, httpuv (>= 1.4.4), webutils", - "VignetteBuilder": "knitr", - "Depends": "R (>= 3.0.0)", - "RoxygenNote": "7.3.0", - "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Packaged": "2024-02-26 21:12:31 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] (),\n Hadley Wickham [ctb],\n RStudio [cph]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN", - "Date/Publication": "2024-03-01 23:22:46 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:09 UTC; windows", - "Archs": "x64" - } - }, - "digest": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "digest", - "Author": "Dirk Eddelbuettel with contributions\n by Antoine Lucas, Jarek Tuszynski, Henrik Bengtsson, Simon Urbanek,\n Mario Frasca, Bryan Lewis, Murray Stokely, Hannes Muehleisen,\n Duncan Murdoch, Jim Hester, Wush Wu, Qiang Kou, Thierry Onkelinx,\n Michel Lang, Viliam Simko, Kurt Hornik, Radford Neal, Kendon Bell,\n Matthew de Queljoe, Ion Suruceanu, Bill Denney, Dirk Schumacher,\n Winston Chang, Dean Attali, and Michael Chirico.", - "Version": "0.6.35", - "Date": "2024-03-10", - "Maintainer": "Dirk Eddelbuettel ", - "Title": "Create Compact Hash Digests of R Objects", - "Description": "Implementation of a function 'digest()' for the creation of hash\n digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32',\n 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128'\n algorithms) permitting easy comparison of R language objects, as well as functions\n such as'hmac()' to create hash-based message authentication code. Please note that\n this package is not meant to be deployed for cryptographic purposes for which more\n comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", - "URL": "https://github.com/eddelbuettel/digest,\nhttps://dirk.eddelbuettel.com/code/digest.html", - "BugReports": "https://github.com/eddelbuettel/digest/issues", - "Depends": "R (>= 3.3.0)", - "Imports": "utils", - "License": "GPL (>= 2)", - "Suggests": "tinytest, simplermarkdown", - "VignetteBuilder": "simplermarkdown", - "NeedsCompilation": "yes", - "Packaged": "2024-03-10 19:40:54 UTC; edd", - "Repository": "CRAN", - "Date/Publication": "2024-03-11 14:10:06 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:00 UTC; windows", - "Archs": "x64" - } - }, - "evaluate": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "evaluate", - "Type": "Package", - "Title": "Parsing and Evaluation Tools that Provide More Details than the\nDefault", - "Version": "0.23", - "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", role = \"aut\"),\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Michael\", \"Lawrence\", role = \"ctb\"),\n person(\"Thomas\", \"Kluyver\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Adam\", \"Ryczkowski\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Michel\", \"Lang\", role = \"ctb\"),\n person(\"Karolis\", \"Koncevičius\", role = \"ctb\"),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Parsing and evaluation tools that make it easy to recreate the\n command line behaviour of R.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/evaluate", - "BugReports": "https://github.com/r-lib/evaluate/issues", - "Depends": "R (>= 3.0.2)", - "Imports": "methods", - "Suggests": "covr, ggplot2, lattice, rlang, testthat (>= 3.0.0), withr", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Packaged": "2023-11-01 13:28:50 UTC; yihui", - "Author": "Hadley Wickham [aut],\n Yihui Xie [aut, cre] (),\n Michael Lawrence [ctb],\n Thomas Kluyver [ctb],\n Jeroen Ooms [ctb],\n Barret Schloerke [ctb],\n Adam Ryczkowski [ctb],\n Hiroaki Yutani [ctb],\n Michel Lang [ctb],\n Karolis Koncevičius [ctb],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2023-11-01 14:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:42:58 UTC; windows" - } - }, - "fansi": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "fansi", - "Title": "ANSI Control Sequence Aware String Functions", - "Description": "Counterparts to R string manipulation functions that account for\n the effects of ANSI text formatting control sequences.", - "Version": "1.0.4", - "Authors@R": "c(\n person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\",\n role=c(\"aut\", \"cre\")),\n person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"),\n person(family=\"R Core Team\",\n email=\"R-core@r-project.org\", role=\"cph\",\n comment=\"UTF8 byte length calcs from src/util.c\"\n ))", - "Depends": "R (>= 3.1.0)", - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/brodieG/fansi", - "BugReports": "https://github.com/brodieG/fansi/issues", - "VignetteBuilder": "knitr", - "Suggests": "unitizer, knitr, rmarkdown", - "Imports": "grDevices, utils", - "RoxygenNote": "7.1.1", - "Encoding": "UTF-8", - "Collate": "'constants.R' 'fansi-package.R' 'internal.R' 'load.R' 'misc.R'\n'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R'\n'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'", - "NeedsCompilation": "yes", - "Packaged": "2023-01-22 17:39:01 UTC; bg", - "Author": "Brodie Gaslam [aut, cre],\n Elliott Sales De Andrade [ctb],\n R Core Team [cph] (UTF8 byte length calcs from src/util.c)", - "Maintainer": "Brodie Gaslam ", - "Repository": "RSPM", - "Date/Publication": "2023-01-22 19:20:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-12 10:29:21 UTC; windows", - "Archs": "x64" - } - }, - "fastmap": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "fastmap", - "Title": "Fast Data Structures", - "Version": "1.2.0", - "Authors@R": "c(\n person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\")\n )", - "Description": "Fast implementation of data structures, including a key-value\n store, stack, and queue. Environments are commonly used as key-value stores\n in R, but every time a new key is used, it is added to R's global symbol\n table, causing a small amount of memory leakage. This can be problematic in\n cases where many different keys are used. Fastmap avoids this memory leak\n issue by implementing the map using data structures in C++.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Suggests": "testthat (>= 2.1.1)", - "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", - "BugReports": "https://github.com/r-lib/fastmap/issues", - "NeedsCompilation": "yes", - "Packaged": "2024-05-14 17:54:13 UTC; winston", - "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd],\n Tessil [cph] (hopscotch_map library)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2024-05-15 09:00:07 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-17 23:51:38 UTC; windows", - "Archs": "x64" - } - }, - "fontawesome": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "fontawesome", - "Version": "0.5.2", - "Title": "Easily Work with 'Font Awesome' Icons", - "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown'\n documents and 'Shiny' apps. These icons can be inserted into HTML content\n through inline 'SVG' tags or 'i' tags. There is also a utility function for\n exporting 'Font Awesome' icons as 'PNG' images for those situations where\n raster graphics are needed.", - "Authors@R": "c(\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\",\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"),\n comment = \"Font-Awesome font\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/fontawesome,\nhttps://rstudio.github.io/fontawesome/", - "BugReports": "https://github.com/rstudio/fontawesome/issues", - "Encoding": "UTF-8", - "ByteCompile": "true", - "RoxygenNote": "7.2.3", - "Depends": "R (>= 3.3.0)", - "Imports": "rlang (>= 1.0.6), htmltools (>= 0.5.1.1)", - "Suggests": "covr, dplyr (>= 1.0.8), knitr (>= 1.31), testthat (>= 3.0.0),\nrsvg", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Packaged": "2023-08-19 02:32:12 UTC; rich", - "Author": "Richard Iannone [aut, cre] (),\n Christophe Dervieux [ctb] (),\n Winston Chang [ctb],\n Dave Gandy [ctb, cph] (Font-Awesome font),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN", - "Date/Publication": "2023-08-19 04:52:40 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:40:43 UTC; windows" - } - }, - "fs": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "fs", - "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Version": "1.6.4", - "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "A cross-platform interface to file system operations, built\n on top of the 'libuv' C library.", - "License": "MIT + file LICENSE", - "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", - "BugReports": "https://github.com/r-lib/fs/issues", - "Depends": "R (>= 3.6)", - "Imports": "methods", - "Suggests": "covr, crayon, knitr, pillar (>= 1.0.0), rmarkdown, spelling,\ntestthat (>= 3.0.0), tibble (>= 1.1.0), vctrs (>= 0.3.0), withr", - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "SystemRequirements": "GNU make", - "NeedsCompilation": "yes", - "Packaged": "2024-04-25 11:57:22 UTC; gaborcsardi", - "Author": "Jim Hester [aut],\n Hadley Wickham [aut],\n Gábor Csárdi [aut, cre],\n libuv project contributors [cph] (libuv library),\n Joyent, Inc. and other Node contributors [cph] (libuv library),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN", - "Date/Publication": "2024-04-25 12:50:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:00 UTC; windows", - "Archs": "x64" - } - }, - "future": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "future", - "Version": "1.33.2", - "Title": "Unified Parallel and Distributed Processing in R for Everyone", - "Imports": "digest, globals (>= 0.16.1), listenv (>= 0.8.0), parallel,\nparallelly (>= 1.34.0), utils", - "Suggests": "methods, RhpcBLASctl, R.rsp, markdown", - "VignetteBuilder": "R.rsp", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\",\n role = c(\"aut\", \"cre\", \"cph\"),\n email = \"henrikb@braju.com\",\n comment = c(ORCID = \"0000-0002-7579-5165\")))", - "Description": "The purpose of this package is to provide a lightweight and\n unified Future API for sequential and parallel processing of R\n expression via futures. The simplest way to evaluate an expression\n in parallel is to use `x %<-% { expression }` with `plan(multisession)`.\n This package implements sequential, multicore, multisession, and\n cluster futures. With these, R expressions can be evaluated on the\n local machine, in parallel a set of local machines, or distributed\n on a mix of local and remote machines.\n Extensions to this package implement additional backends for\n processing futures via compute cluster schedulers, etc.\n Because of its unified API, there is no need to modify any code in order\n switch from sequential on the local machine to, say, distributed\n processing on a remote compute cluster.\n Another strength of this package is that global variables and functions\n are automatically identified and exported as needed, making it\n straightforward to tweak existing code to make use of futures.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "ByteCompile": "TRUE", - "URL": "https://future.futureverse.org,\nhttps://github.com/HenrikBengtsson/future", - "BugReports": "https://github.com/HenrikBengtsson/future/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Packaged": "2024-03-24 15:06:26 UTC; henrik", - "Author": "Henrik Bengtsson [aut, cre, cph]\n ()", - "Maintainer": "Henrik Bengtsson ", - "Repository": "CRAN", - "Date/Publication": "2024-03-26 18:00:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:14:01 UTC; windows" - } - }, - "globals": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "globals", - "Version": "0.16.3", - "Depends": "R (>= 3.1.2)", - "Imports": "codetools", - "Title": "Identify Global Objects in R Expressions", - "Authors@R": "c(\n person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"),\n email=\"henrikb@braju.com\"),\n person(\"Davis\",\"Vaughan\", role=\"ctb\",\n email=\"davis@rstudio.com\"))", - "Description": "Identifies global (\"unknown\" or \"free\") objects in R expressions\n by code inspection using various strategies (ordered, liberal, or\n conservative). The objective of this package is to make it as simple as\n possible to identify global objects for the purpose of exporting them in\n parallel, distributed compute environments.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "ByteCompile": "TRUE", - "URL": "https://globals.futureverse.org,\nhttps://github.com/HenrikBengtsson/globals", - "BugReports": "https://github.com/HenrikBengtsson/globals/issues", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Packaged": "2024-03-07 23:38:30 UTC; henrik", - "Author": "Henrik Bengtsson [aut, cre, cph],\n Davis Vaughan [ctb]", - "Maintainer": "Henrik Bengtsson ", - "Repository": "CRAN", - "Date/Publication": "2024-03-08 00:00:03 UTC", - "Built": "R 4.4.0; ; 2024-04-23 00:24:09 UTC; windows" - } - }, - "glue": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "glue", - "Title": "Interpreted String Literals", - "Version": "1.6.2", - "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "An implementation of interpreted string literals, inspired by\n Python's Literal String Interpolation\n and Docstrings\n and Julia's Triple-Quoted\n String Literals\n .", - "License": "MIT + file LICENSE", - "URL": "https://github.com/tidyverse/glue, https://glue.tidyverse.org/", - "BugReports": "https://github.com/tidyverse/glue/issues", - "Depends": "R (>= 3.4)", - "Imports": "methods", - "Suggests": "covr, crayon, DBI, dplyr, forcats, ggplot2, knitr, magrittr,\nmicrobenchmark, R.utils, rmarkdown, rprintf, RSQLite, stringr,\ntestthat (>= 3.0.0), vctrs (>= 0.3.0), waldo (>= 0.3.0), withr", - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "hadley/emo, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "yes", - "Packaged": "2022-02-23 22:50:40 UTC; jenny", - "Author": "Jim Hester [aut] (),\n Jennifer Bryan [aut, cre] (),\n RStudio [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "RSPM", - "Date/Publication": "2022-02-24 07:50:20 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-09 18:57:57 UTC; windows", - "Archs": "x64" - } - }, - "highr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "highr", - "Type": "Package", - "Title": "Syntax Highlighting for R Source Code", - "Version": "0.10", - "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Yixuan\", \"Qiu\", role = \"aut\"),\n person(\"Christopher\", \"Gandrud\", role = \"ctb\"),\n person(\"Qiang\", \"Li\", role = \"ctb\")\n )", - "Description": "Provides syntax highlighting for R source code. Currently it\n supports LaTeX and HTML output. Source code of other languages is supported\n via Andre Simon's highlight package ().", - "Depends": "R (>= 3.3.0)", - "Imports": "xfun (>= 0.18)", - "Suggests": "knitr, markdown, testit", - "License": "GPL", - "URL": "https://github.com/yihui/highr", - "BugReports": "https://github.com/yihui/highr/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2022-12-22 06:43:07 UTC; yihui", - "Author": "Yihui Xie [aut, cre] (),\n Yixuan Qiu [aut],\n Christopher Gandrud [ctb],\n Qiang Li [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2022-12-22 07:00:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:28:13 UTC; windows" - } - }, - "hms": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "hms", - "Title": "Pretty Time of Day", - "Date": "2023-03-21", - "Version": "1.1.3", - "Authors@R": "c(\n person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(\"R Consortium\", role = \"fnd\"),\n person(\"RStudio\", role = \"fnd\")\n )", - "Description": "Implements an S3 class for storing and formatting time-of-day\n values, based on the 'difftime' class.", - "Imports": "lifecycle, methods, pkgconfig, rlang (>= 1.0.2), vctrs (>=\n0.3.8)", - "Suggests": "crayon, lubridate, pillar (>= 1.1.0), testthat (>= 3.0.0)", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", - "BugReports": "https://github.com/tidyverse/hms/issues", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Packaged": "2023-03-21 16:52:11 UTC; kirill", - "Author": "Kirill Müller [aut, cre] (),\n R Consortium [fnd],\n RStudio [fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN", - "Date/Publication": "2023-03-21 18:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:54:24 UTC; windows" - } - }, - "htmltools": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "htmltools", - "Title": "Tools for HTML", - "Version": "0.5.8.1", - "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Tools for HTML generation and output.", - "License": "GPL (>= 2)", - "URL": "https://github.com/rstudio/htmltools,\nhttps://rstudio.github.io/htmltools/", - "BugReports": "https://github.com/rstudio/htmltools/issues", - "Depends": "R (>= 2.14.1)", - "Imports": "base64enc, digest, fastmap (>= 1.1.0), grDevices, rlang (>=\n1.0.0), utils", - "Suggests": "Cairo, markdown, ragg, shiny, testthat, withr", - "Enhances": "knitr", - "Config/Needs/check": "knitr", - "Config/Needs/website": "rstudio/quillt, bench", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R'\n'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R'\n'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R'\n'template.R'", - "NeedsCompilation": "yes", - "Packaged": "2024-04-02 14:26:15 UTC; cpsievert", - "Author": "Joe Cheng [aut],\n Carson Sievert [aut, cre] (),\n Barret Schloerke [aut] (),\n Winston Chang [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN", - "Date/Publication": "2024-04-04 05:03:00 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:28:11 UTC; windows", - "Archs": "x64" - } - }, - "httpuv": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "httpuv", - "Title": "HTTP and WebSocket Server Library", - "Version": "1.6.15", - "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit, PBC\", \"fnd\", role = \"cph\"),\n person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Andrzej\", \"Krzemienski\", role = \"cph\",\n comment = \"optional.hpp\"),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"),\n person(\"Niels\", \"Provos\", role = \"cph\",\n comment = \"libuv subcomponent: tree.h\"),\n person(\"Internet Systems Consortium, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"),\n person(\"Alexander\", \"Chemeris\", role = \"cph\",\n comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"),\n person(\"Google, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Sony Mobile Communcations AB\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Berkeley Software Design Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Kenneth\", \"MacKay\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Steve\", \"Reid\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"James\", \"Brown\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"Bob\", \"Trower\", role = \"aut\",\n comment = \"base64 implementation\"),\n person(\"Alexander\", \"Peslyak\", role = \"aut\",\n comment = \"MD5 implementation\"),\n person(\"Trantor Standard Systems\", role = \"cph\",\n comment = \"base64 implementation\"),\n person(\"Igor\", \"Sysoev\", role = \"cph\",\n comment = \"http-parser\")\n )", - "Description": "Provides low-level socket and protocol support for handling\n HTTP and WebSocket requests directly from within R. It is primarily\n intended as a building block for other packages, rather than making it\n particularly easy to create complete web applications using httpuv\n alone. httpuv is built on top of the libuv and http-parser C\n libraries, both of which were developed by Joyent, Inc. (See LICENSE\n file for libuv and http-parser license information.)", - "License": "GPL (>= 2) | file LICENSE", - "URL": "https://github.com/rstudio/httpuv", - "BugReports": "https://github.com/rstudio/httpuv/issues", - "Depends": "R (>= 2.15.1)", - "Imports": "later (>= 0.8.0), promises, R6, Rcpp (>= 1.0.7), utils", - "Suggests": "callr, curl, testthat, websocket", - "LinkingTo": "later, Rcpp", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "SystemRequirements": "GNU make, zlib", - "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R'\n'staticServer.R' 'static_paths.R' 'utils.R'", - "NeedsCompilation": "yes", - "Packaged": "2024-03-25 21:06:08 UTC; cpsievert", - "Author": "Joe Cheng [aut],\n Winston Chang [aut, cre],\n Posit, PBC fnd [cph],\n Hector Corrada Bravo [ctb],\n Jeroen Ooms [ctb],\n Andrzej Krzemienski [cph] (optional.hpp),\n libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS\n file),\n Joyent, Inc. and other Node contributors [cph] (libuv library, see\n src/libuv/AUTHORS file; and http-parser library, see\n src/http-parser/AUTHORS file),\n Niels Provos [cph] (libuv subcomponent: tree.h),\n Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton\n and inet_ntop, contained in src/libuv/src/inet.c),\n Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from\n msinttypes)),\n Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c),\n Sony Mobile Communcations AB [cph] (libuv subcomponent:\n pthread-fixes.c),\n Berkeley Software Design Inc. [cph] (libuv subcomponent:\n android-ifaddrs.h, android-ifaddrs.c),\n Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h,\n android-ifaddrs.c),\n Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph]\n (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c),\n Steve Reid [aut] (SHA-1 implementation),\n James Brown [aut] (SHA-1 implementation),\n Bob Trower [aut] (base64 implementation),\n Alexander Peslyak [aut] (MD5 implementation),\n Trantor Standard Systems [cph] (base64 implementation),\n Igor Sysoev [cph] (http-parser)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2024-03-26 05:50:06 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:54:24 UTC; windows", - "Archs": "x64" - } - }, - "httr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "httr", - "Title": "Tools for Working with URLs and HTTP", - "Version": "1.4.7", - "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs\n (GET(), POST(), etc). Configuration functions make it easy to control\n additional request components (authenticate(), add_headers() and so\n on).", - "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", - "Depends": "R (>= 3.5)", - "Imports": "curl (>= 5.0.2), jsonlite, mime, openssl (>= 0.8), R6", - "Suggests": "covr, httpuv, jpeg, knitr, png, readr, rmarkdown, testthat\n(>= 0.8.0), xml2", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2023-08-15 02:56:56 UTC; hadleywickham", - "Author": "Hadley Wickham [aut, cre],\n Posit, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN", - "Date/Publication": "2023-08-15 09:00:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:54:23 UTC; windows" - } - }, - "jquerylib": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "jquerylib", - "Title": "Obtain 'jQuery' as an HTML Dependency Object", - "Version": "0.1.4", - "Authors@R": "c(\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\")\n )", - "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown').\n Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.0.2", - "Imports": "htmltools", - "Suggests": "testthat", - "NeedsCompilation": "no", - "Packaged": "2021-04-26 16:40:21 UTC; cpsievert", - "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n RStudio [cph],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/lib/jquery-AUTHORS.txt)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN", - "Date/Publication": "2021-04-26 17:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:40:43 UTC; windows" - } - }, - "jsonlite": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "jsonlite", - "Version": "1.8.8", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", - "Depends": "methods", - "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Duncan\", \"Temple Lang\", role = \"ctb\"),\n person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite\nhttps://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical \n data and the web. Offers simple, flexible tools for working with JSON in R, and\n is particularly powerful for building pipelines and interacting with a web API. \n The implementation is based on the mapping described in the vignette (Ooms, 2014).\n In addition to converting JSON data from/to R objects, 'jsonlite' contains \n functions to stream, validate, and prettify JSON data. The unit tests included \n with the package verify that all edge cases are encoded and decoded consistently \n for use with dynamic data in systems and applications.", - "Suggests": "httr, vctrs, testthat, knitr, rmarkdown, R.rsp, sf", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2023-12-04 12:57:12 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] (),\n Duncan Temple Lang [ctb],\n Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "CRAN", - "Date/Publication": "2023-12-04 15:20:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:42:59 UTC; windows", - "Archs": "x64" - } - }, - "knitr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "knitr", - "Type": "Package", - "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Version": "1.46", - "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Abhraneel\", \"Sarma\", role = \"ctb\"),\n person(\"Adam\", \"Vogt\", role = \"ctb\"),\n person(\"Alastair\", \"Andrew\", role = \"ctb\"),\n person(\"Alex\", \"Zvoleff\", role = \"ctb\"),\n person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"),\n person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"),\n person(\"Aron\", \"Atkins\", role = \"ctb\"),\n person(\"Aaron\", \"Wolen\", role = \"ctb\"),\n person(\"Ashley\", \"Manton\", role = \"ctb\"),\n person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")),\n person(\"Ben\", \"Baumer\", role = \"ctb\"),\n person(\"Brian\", \"Diggs\", role = \"ctb\"),\n person(\"Brian\", \"Zhang\", role = \"ctb\"),\n person(\"Bulat\", \"Yapparov\", role = \"ctb\"),\n person(\"Cassio\", \"Pereira\", role = \"ctb\"),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person(\"David\", \"Hall\", role = \"ctb\"),\n person(\"David\", \"Hugh-Jones\", role = \"ctb\"),\n person(\"David\", \"Robinson\", role = \"ctb\"),\n person(\"Doug\", \"Hemken\", role = \"ctb\"),\n person(\"Duncan\", \"Murdoch\", role = \"ctb\"),\n person(\"Elio\", \"Campitelli\", role = \"ctb\"),\n person(\"Ellis\", \"Hughes\", role = \"ctb\"),\n person(\"Emily\", \"Riederer\", role = \"ctb\"),\n person(\"Fabian\", \"Hirschmann\", role = \"ctb\"),\n person(\"Fitch\", \"Simeon\", role = \"ctb\"),\n person(\"Forest\", \"Fang\", role = \"ctb\"),\n person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"),\n person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"),\n person(\"Gregoire\", \"Detrez\", role = \"ctb\"),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Hao\", \"Zhu\", role = \"ctb\"),\n person(\"Heewon\", \"Jeon\", role = \"ctb\"),\n person(\"Henrik\", \"Bengtsson\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Ian\", \"Lyttle\", role = \"ctb\"),\n person(\"Hodges\", \"Daniel\", role = \"ctb\"),\n person(\"Jacob\", \"Bien\", role = \"ctb\"),\n person(\"Jake\", \"Burkhead\", role = \"ctb\"),\n person(\"James\", \"Manton\", role = \"ctb\"),\n person(\"Jared\", \"Lander\", role = \"ctb\"),\n person(\"Jason\", \"Punyon\", role = \"ctb\"),\n person(\"Javier\", \"Luraschi\", role = \"ctb\"),\n person(\"Jeff\", \"Arnold\", role = \"ctb\"),\n person(\"Jenny\", \"Bryan\", role = \"ctb\"),\n person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"),\n person(\"Jeremy\", \"Stephens\", role = \"ctb\"),\n person(\"Jim\", \"Hester\", role = \"ctb\"),\n person(\"Joe\", \"Cheng\", role = \"ctb\"),\n person(\"Johannes\", \"Ranke\", role = \"ctb\"),\n person(\"John\", \"Honaker\", role = \"ctb\"),\n person(\"John\", \"Muschelli\", role = \"ctb\"),\n person(\"Jonathan\", \"Keane\", role = \"ctb\"),\n person(\"JJ\", \"Allaire\", role = \"ctb\"),\n person(\"Johan\", \"Toloe\", role = \"ctb\"),\n person(\"Jonathan\", \"Sidi\", role = \"ctb\"),\n person(\"Joseph\", \"Larmarange\", role = \"ctb\"),\n person(\"Julien\", \"Barnier\", role = \"ctb\"),\n person(\"Kaiyin\", \"Zhong\", role = \"ctb\"),\n person(\"Kamil\", \"Slowikowski\", role = \"ctb\"),\n person(\"Karl\", \"Forner\", role = \"ctb\"),\n person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"),\n person(\"Kirill\", \"Mueller\", role = \"ctb\"),\n person(\"Kohske\", \"Takahashi\", role = \"ctb\"),\n person(\"Lorenz\", \"Walthert\", role = \"ctb\"),\n person(\"Lucas\", \"Gallindo\", role = \"ctb\"),\n person(\"Marius\", \"Hofert\", role = \"ctb\"),\n person(\"Martin\", \"Modrák\", role = \"ctb\"),\n person(\"Michael\", \"Chirico\", role = \"ctb\"),\n person(\"Michael\", \"Friendly\", role = \"ctb\"),\n person(\"Michal\", \"Bojanowski\", role = \"ctb\"),\n person(\"Michel\", \"Kuhlmann\", role = \"ctb\"),\n person(\"Miller\", \"Patrick\", role = \"ctb\"),\n person(\"Nacho\", \"Caballero\", role = \"ctb\"),\n person(\"Nick\", \"Salkowski\", role = \"ctb\"),\n person(\"Niels Richard\", \"Hansen\", role = \"ctb\"),\n person(\"Noam\", \"Ross\", role = \"ctb\"),\n person(\"Obada\", \"Mahdi\", role = \"ctb\"),\n person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")),\n person(\"Pedro\", \"Faria\", role = \"ctb\"),\n person(\"Qiang\", \"Li\", role = \"ctb\"),\n person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"),\n person(\"Richard\", \"Cotton\", role = \"ctb\"),\n person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"),\n person(\"Rodrigo\", \"Copetti\", role = \"ctb\"),\n person(\"Romain\", \"Francois\", role = \"ctb\"),\n person(\"Ruaridh\", \"Williamson\", role = \"ctb\"),\n person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")),\n person(\"Scott\", \"Kostyshak\", role = \"ctb\"),\n person(\"Sebastian\", \"Meyer\", role = \"ctb\"),\n person(\"Sietse\", \"Brouwer\", role = \"ctb\"),\n person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"),\n person(\"Sylvain\", \"Rousseau\", role = \"ctb\"),\n person(\"Taiyun\", \"Wei\", role = \"ctb\"),\n person(\"Thibaut\", \"Assus\", role = \"ctb\"),\n person(\"Thibaut\", \"Lamadon\", role = \"ctb\"),\n person(\"Thomas\", \"Leeper\", role = \"ctb\"),\n person(\"Tim\", \"Mastny\", role = \"ctb\"),\n person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"),\n person(\"Trevor\", \"Davis\", role = \"ctb\"),\n person(\"Viktoras\", \"Veitas\", role = \"ctb\"),\n person(\"Weicheng\", \"Zhu\", role = \"ctb\"),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Zachary\", \"Foster\", role = \"ctb\"),\n person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Provides a general-purpose tool for dynamic report generation in R\n using Literate Programming techniques.", - "Depends": "R (>= 3.3.0)", - "Imports": "evaluate (>= 0.15), highr, methods, tools, xfun (>= 0.43),\nyaml (>= 2.1.19)", - "Suggests": "bslib, codetools, DBI (>= 0.4-1), digest, formatR, gifski,\ngridSVG, htmlwidgets (>= 0.7), jpeg, JuliaCall (>= 0.11.1),\nmagick, markdown (>= 1.3), png, ragg, reticulate (>= 1.4), rgl\n(>= 0.95.1201), rlang, rmarkdown, sass, showtext, styler (>=\n1.2.0), targets (>= 0.6.0), testit, tibble, tikzDevice (>=\n0.10), tinytex (>= 0.46), webshot, rstudioapi, svglite", - "License": "GPL", - "URL": "https://yihui.org/knitr/", - "BugReports": "https://github.com/yihui/knitr/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "knitr", - "SystemRequirements": "Package vignettes based on R Markdown v2 or\nreStructuredText require Pandoc (http://pandoc.org). The\nfunction rst2pdf() requires rst2pdf\n(https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'utils.R' 'citation.R' 'hooks-html.R'\n'plot.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R'\n'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R'\n'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R'\n'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R'\n'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R'\n'template.R' 'utils-conversion.R' 'utils-rd2html.R'\n'utils-string.R' 'utils-sweave.R' 'utils-upload.R'\n'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Packaged": "2024-04-05 19:54:27 UTC; yihui", - "Author": "Yihui Xie [aut, cre] (),\n Abhraneel Sarma [ctb],\n Adam Vogt [ctb],\n Alastair Andrew [ctb],\n Alex Zvoleff [ctb],\n Amar Al-Zubaidi [ctb],\n Andre Simon [ctb] (the CSS files under inst/themes/ were derived from\n the Highlight package http://www.andre-simon.de),\n Aron Atkins [ctb],\n Aaron Wolen [ctb],\n Ashley Manton [ctb],\n Atsushi Yasumoto [ctb] (),\n Ben Baumer [ctb],\n Brian Diggs [ctb],\n Brian Zhang [ctb],\n Bulat Yapparov [ctb],\n Cassio Pereira [ctb],\n Christophe Dervieux [ctb],\n David Hall [ctb],\n David Hugh-Jones [ctb],\n David Robinson [ctb],\n Doug Hemken [ctb],\n Duncan Murdoch [ctb],\n Elio Campitelli [ctb],\n Ellis Hughes [ctb],\n Emily Riederer [ctb],\n Fabian Hirschmann [ctb],\n Fitch Simeon [ctb],\n Forest Fang [ctb],\n Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty),\n Garrick Aden-Buie [ctb],\n Gregoire Detrez [ctb],\n Hadley Wickham [ctb],\n Hao Zhu [ctb],\n Heewon Jeon [ctb],\n Henrik Bengtsson [ctb],\n Hiroaki Yutani [ctb],\n Ian Lyttle [ctb],\n Hodges Daniel [ctb],\n Jacob Bien [ctb],\n Jake Burkhead [ctb],\n James Manton [ctb],\n Jared Lander [ctb],\n Jason Punyon [ctb],\n Javier Luraschi [ctb],\n Jeff Arnold [ctb],\n Jenny Bryan [ctb],\n Jeremy Ashkenas [ctb, cph] (the CSS file at\n inst/misc/docco-classic.css),\n Jeremy Stephens [ctb],\n Jim Hester [ctb],\n Joe Cheng [ctb],\n Johannes Ranke [ctb],\n John Honaker [ctb],\n John Muschelli [ctb],\n Jonathan Keane [ctb],\n JJ Allaire [ctb],\n Johan Toloe [ctb],\n Jonathan Sidi [ctb],\n Joseph Larmarange [ctb],\n Julien Barnier [ctb],\n Kaiyin Zhong [ctb],\n Kamil Slowikowski [ctb],\n Karl Forner [ctb],\n Kevin K. Smith [ctb],\n Kirill Mueller [ctb],\n Kohske Takahashi [ctb],\n Lorenz Walthert [ctb],\n Lucas Gallindo [ctb],\n Marius Hofert [ctb],\n Martin Modrák [ctb],\n Michael Chirico [ctb],\n Michael Friendly [ctb],\n Michal Bojanowski [ctb],\n Michel Kuhlmann [ctb],\n Miller Patrick [ctb],\n Nacho Caballero [ctb],\n Nick Salkowski [ctb],\n Niels Richard Hansen [ctb],\n Noam Ross [ctb],\n Obada Mahdi [ctb],\n Pavel N. Krivitsky [ctb] (),\n Pedro Faria [ctb],\n Qiang Li [ctb],\n Ramnath Vaidyanathan [ctb],\n Richard Cotton [ctb],\n Robert Krzyzanowski [ctb],\n Rodrigo Copetti [ctb],\n Romain Francois [ctb],\n Ruaridh Williamson [ctb],\n Sagiru Mati [ctb] (),\n Scott Kostyshak [ctb],\n Sebastian Meyer [ctb],\n Sietse Brouwer [ctb],\n Simon de Bernard [ctb],\n Sylvain Rousseau [ctb],\n Taiyun Wei [ctb],\n Thibaut Assus [ctb],\n Thibaut Lamadon [ctb],\n Thomas Leeper [ctb],\n Tim Mastny [ctb],\n Tom Torsney-Weir [ctb],\n Trevor Davis [ctb],\n Viktoras Veitas [ctb],\n Weicheng Zhu [ctb],\n Wush Wu [ctb],\n Zachary Foster [ctb],\n Zhian N. Kamvar [ctb] (),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2024-04-06 18:13:00 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:40:46 UTC; windows" - } - }, - "later": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "later", - "Type": "Package", - "Title": "Utilities for Scheduling Functions to Execute Later with Event\nLoops", - "Version": "1.3.2", - "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"),\n person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"),\n person(family = \"Posit Software, PBC\", role = \"cph\"),\n person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"),\n person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\")\n )", - "Description": "Executes arbitrary R or C functions some time after the current\n time, after the R execution stack has emptied. The functions are scheduled\n in an event loop.", - "URL": "https://r-lib.github.io/later/, https://github.com/r-lib/later", - "BugReports": "https://github.com/r-lib/later/issues", - "License": "MIT + file LICENSE", - "Imports": "Rcpp (>= 0.12.9), rlang", - "LinkingTo": "Rcpp", - "RoxygenNote": "7.2.3", - "Suggests": "knitr, rmarkdown, testthat (>= 2.1.0)", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2023-12-06 00:38:14 UTC; cpsievert", - "Author": "Winston Chang [aut, cre],\n Joe Cheng [aut],\n Posit Software, PBC [cph],\n Marcus Geelnard [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/),\n Evan Nemerson [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2023-12-06 09:10:05 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:28:11 UTC; windows", - "Archs": "x64" - } - }, - "lifecycle": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "lifecycle", - "Title": "Manage the Life Cycle of your Package Functions", - "Version": "1.0.3", - "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Manage the life cycle of your exported functions with shared\n conventions, documentation badges, and user-friendly deprecation\n warnings.", - "License": "MIT + file LICENSE", - "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", - "BugReports": "https://github.com/r-lib/lifecycle/issues", - "Depends": "R (>= 3.4)", - "Imports": "cli (>= 3.4.0), glue, rlang (>= 1.0.6)", - "Suggests": "covr, crayon, knitr, lintr, rmarkdown, testthat (>= 3.0.1),\ntibble, tidyverse, tools, vctrs, withr", - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "NeedsCompilation": "no", - "Packaged": "2022-10-07 08:50:55 UTC; lionel", - "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut] (),\n RStudio [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "RSPM", - "Date/Publication": "2022-10-07 09:50:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 19:34:38 UTC; windows" - } - }, - "listenv": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "listenv", - "Version": "0.9.1", - "Depends": "R (>= 3.1.2)", - "Suggests": "R.utils, R.rsp, markdown", - "VignetteBuilder": "R.rsp", - "Title": "Environments Behaving (Almost) as Lists", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"),\n email = \"henrikb@braju.com\"))", - "Description": "List environments are environments that have list-like properties. For instance, the elements of a list environment are ordered and can be accessed and iterated over using index subsetting, e.g. 'x <- listenv(a = 1, b = 2); for (i in seq_along(x)) x[[i]] <- x[[i]] ^ 2; y <- as.list(x)'.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "URL": "https://listenv.futureverse.org,\nhttps://github.com/HenrikBengtsson/listenv", - "BugReports": "https://github.com/HenrikBengtsson/listenv/issues", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Packaged": "2024-01-28 20:40:45 UTC; henrik", - "Author": "Henrik Bengtsson [aut, cre, cph]", - "Maintainer": "Henrik Bengtsson ", - "Repository": "CRAN", - "Date/Publication": "2024-01-29 13:10:06 UTC", - "Built": "R 4.4.0; ; 2024-05-14 00:34:10 UTC; windows" - } - }, - "magrittr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "magrittr", - "Title": "A Forward-Pipe Operator for R", - "Version": "2.0.3", - "Authors@R": "c(\n person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"),\n comment = \"Original author and creator of magrittr\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Provides a mechanism for chaining commands with a new\n forward-pipe operator, %>%. This operator will forward a value, or the\n result of an expression, into the next function call/expression.\n There is flexible support for the type of right-hand side expressions.\n For more information, see package vignette. To quote Rene Magritte,\n \"Ceci n'est pas un pipe.\"", - "License": "MIT + file LICENSE", - "URL": "https://magrittr.tidyverse.org,\nhttps://github.com/tidyverse/magrittr", - "BugReports": "https://github.com/tidyverse/magrittr/issues", - "Depends": "R (>= 3.4.0)", - "Suggests": "covr, knitr, rlang, rmarkdown, testthat", - "VignetteBuilder": "knitr", - "ByteCompile": "Yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "yes", - "Packaged": "2022-03-29 09:34:37 UTC; lionel", - "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of\n magrittr),\n Hadley Wickham [aut],\n Lionel Henry [cre],\n RStudio [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "RSPM", - "Date/Publication": "2022-03-30 07:30:09 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-25 19:43:08 UTC; windows", - "Archs": "x64" - } - }, - "memoise": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "memoise", - "Title": "'Memoisation' of Functions", - "Version": "2.0.1", - "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = c(\"aut\", \"cre\"),\n email = \"winston@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Daniel\",\n family = \"Cook\",\n role = \"aut\",\n email = \"danielecook@gmail.com\"),\n person(given = \"Mark\",\n family = \"Edmondson\",\n role = \"ctb\",\n email = \"r@sunholo.com\"))", - "Description": "Cache the results of a function so that when you\n call it again with the same arguments it returns the previously computed\n value.", - "License": "MIT + file LICENSE", - "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", - "BugReports": "https://github.com/r-lib/memoise/issues", - "Imports": "rlang (>= 0.4.10), cachem", - "Suggests": "digest, aws.s3, covr, googleAuthR, googleCloudStorageR, httr,\ntestthat", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Packaged": "2021-11-24 21:24:50 UTC; jhester", - "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Winston Chang [aut, cre],\n Kirill Müller [aut],\n Daniel Cook [aut],\n Mark Edmondson [ctb]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2021-11-26 16:11:10 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:40:43 UTC; windows" - } - }, - "mime": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "mime", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Version": "0.12", - "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Jeffrey\", \"Horner\", role = \"ctb\"),\n person(\"Beilei\", \"Bian\", role = \"ctb\")\n )", - "Description": "Guesses the MIME type from a filename extension using the data\n derived from /etc/mime.types in UNIX-type systems.", - "Imports": "tools", - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.1.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2021-09-28 02:06:04 UTC; yihui", - "Author": "Yihui Xie [aut, cre] (),\n Jeffrey Horner [ctb],\n Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2021-09-28 05:00:05 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-23 00:24:00 UTC; windows", - "Archs": "x64" - } - }, - "openai": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "openai", - "Type": "Package", - "Title": "R Wrapper for OpenAI API", - "Version": "0.4.1", - "Date": "2023-03-14", - "Authors@R": "\n person(\"Iegor\", \"Rudnytskyi\", , \"iegor.rudnytskyi@gmail.com\", c(\"aut\", \"cre\"))", - "Description": "An R wrapper of OpenAI API endpoints (see\n for details). This package\n covers Models, Completions, Chat, Edits, Images, Embeddings, Audio, Files,\n Fine-tunes, Moderations, and legacy Engines endpoints.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "URL": "https://github.com/irudnyts/openai,\nhttps://irudnyts.github.io/openai/", - "BugReports": "https://github.com/irudnyts/openai/issues", - "Depends": "R (>= 3.5)", - "Imports": "assertthat (>= 0.2.1), glue (>= 1.6.2), httr (>= 1.4.3),\njsonlite (>= 1.8.0), lifecycle (>= 1.0.1), magrittr (>= 2.0.3)", - "Suggests": "testthat (>= 3.0.0), purrr (>= 0.3.4), covr (>= 3.5.1)", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Packaged": "2023-03-15 00:08:52 UTC; irudnyts", - "Author": "Iegor Rudnytskyi [aut, cre]", - "Maintainer": "Iegor Rudnytskyi ", - "Repository": "CRAN", - "Date/Publication": "2023-03-15 00:20:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:51:40 UTC; windows" - } - }, - "openssl": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "openssl", - "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on\nOpenSSL", - "Version": "2.1.2", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers.\n Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic\n signatures can either be created and verified manually or via x509 certificates. \n AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric\n (public key) encryption or EC for Diffie Hellman. High-level envelope functions \n combine RSA and AES for encrypting arbitrary sized data. Other utilities include key\n generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random\n number generator, and 'bignum' math methods for manually performing crypto \n calculations on large multibyte integers.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", - "Imports": "askpass", - "Suggests": "curl, testthat (>= 2.1.0), digest, knitr, rmarkdown,\njsonlite, jose, sodium", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2024-04-21 20:40:22 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] (),\n Oliver Keyes [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN", - "Date/Publication": "2024-04-21 21:32:40 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:40:52 UTC; windows", - "Archs": "x64" - } - }, - "parallelly": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "parallelly", - "Version": "1.37.1", - "Title": "Enhancing the 'parallel' Package", - "Imports": "parallel, tools, utils", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\",\n role = c(\"aut\", \"cre\", \"cph\"),\n email = \"henrikb@braju.com\",\n comment = c(ORCID = \"0000-0002-7579-5165\")))", - "Description": "Utility functions that enhance the 'parallel' package and support the built-in parallel backends of the 'future' package. For example, availableCores() gives the number of CPU cores available to your R process as given by the operating system, 'cgroups' and Linux containers, R options, and environment variables, including those set by job schedulers on high-performance compute clusters. If none is set, it will fall back to parallel::detectCores(). Another example is makeClusterPSOCK(), which is backward compatible with parallel::makePSOCKcluster() while doing a better job in setting up remote cluster workers without the need for configuring the firewall to do port-forwarding to your local computer.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "ByteCompile": "TRUE", - "URL": "https://parallelly.futureverse.org,\nhttps://github.com/HenrikBengtsson/parallelly", - "BugReports": "https://github.com/HenrikBengtsson/parallelly/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Packaged": "2024-02-29 04:56:55 UTC; henrik", - "Author": "Henrik Bengtsson [aut, cre, cph]\n ()", - "Maintainer": "Henrik Bengtsson ", - "Repository": "CRAN", - "Date/Publication": "2024-02-29 07:10:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-23 00:24:12 UTC; windows", - "Archs": "x64" - } - }, - "pillar": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "pillar", - "Title": "Coloured Formatting for Columns", - "Version": "1.9.0", - "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"RStudio\",\n role = \"cph\"))", - "Description": "Provides 'pillar' and 'colonnade' generics designed\n for formatting columns of data using the full range of colours\n provided by modern terminals.", - "License": "MIT + file LICENSE", - "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", - "BugReports": "https://github.com/r-lib/pillar/issues", - "Imports": "cli (>= 2.3.0), fansi, glue, lifecycle, rlang (>= 1.0.2), utf8\n(>= 1.1.0), utils, vctrs (>= 0.5.0)", - "Suggests": "bit64, DBI, debugme, DiagrammeR, dplyr, formattable, ggplot2,\nknitr, lubridate, nanotime, nycflights13, palmerpenguins,\nrmarkdown, scales, stringi, survival, testthat (>= 3.1.1),\ntibble, units (>= 0.7.2), vdiffr, withr", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2,\nformat_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/gha/extra-packages": "DiagrammeR=?ignore-before-r=3.5.0", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Packaged": "2023-03-21 08:42:46 UTC; kirill", - "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n RStudio [cph]", - "Maintainer": "Kirill Müller ", - "Repository": "RSPM", - "Date/Publication": "2023-03-22 08:10:02 UTC", - "Built": "R 4.4.0; ; 2024-04-25 20:17:40 UTC; windows" - } - }, - "pkgconfig": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "pkgconfig", - "Title": "Private Configuration for 'R' Packages", - "Version": "2.0.3", - "Author": "Gábor Csárdi", - "Maintainer": "Gábor Csárdi ", - "Description": "Set configuration options on a per-package basis.\n Options set by a given package only apply to that package,\n other packages are unaffected.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "Imports": "utils", - "Suggests": "covr, testthat, disposables (>= 1.0.3)", - "URL": "https://github.com/r-lib/pkgconfig#readme", - "BugReports": "https://github.com/r-lib/pkgconfig/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Packaged": "2019-09-22 08:42:40 UTC; gaborcsardi", - "Repository": "RSPM", - "Date/Publication": "2019-09-22 09:20:02 UTC", - "Built": "R 4.4.0; ; 2024-04-25 20:11:40 UTC; windows" - } - }, - "prettyunits": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "prettyunits", - "Title": "Pretty, Human Readable Formatting of Quantities", - "Version": "1.2.0", - "Authors@R": "c(\n person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")),\n person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")),\n person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\"))\n )", - "Description": "Pretty, human readable formatting of quantities.\n Time intervals: '1337000' -> '15d 11h 23m 20s'.\n Vague time intervals: '2674000' -> 'about a month ago'.\n Bytes: '1337' -> '1.34 kB'.\n Rounding: '99' with 3 significant digits -> '99.0'\n p-values: '0.00001' -> '<0.0001'.\n Colors: '#FF0000' -> 'red'.\n Quantities: '1239437' -> '1.24 M'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/prettyunits", - "BugReports": "https://github.com/r-lib/prettyunits/issues", - "Depends": "R(>= 2.10)", - "Suggests": "codetools, covr, testthat", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Packaged": "2023-09-24 10:53:19 UTC; gaborcsardi", - "Author": "Gabor Csardi [aut, cre],\n Bill Denney [ctb] (),\n Christophe Regouby [ctb]", - "Maintainer": "Gabor Csardi ", - "Repository": "CRAN", - "Date/Publication": "2023-09-24 21:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:43:24 UTC; windows" - } - }, - "progress": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "progress", - "Title": "Terminal Progress Bars", - "Version": "1.2.3", - "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Rich\", \"FitzJohn\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Configurable Progress bars, they may include percentage,\n elapsed time, and/or the estimated completion time. They work in\n terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the\n 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works\n with or without 'Rcpp'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/progress#readme,\nhttp://r-lib.github.io/progress/", - "BugReports": "https://github.com/r-lib/progress/issues", - "Depends": "R (>= 3.6)", - "Imports": "crayon, hms, prettyunits, R6", - "Suggests": "Rcpp, testthat (>= 3.0.0), withr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2023-12-05 09:33:10 UTC; gaborcsardi", - "Author": "Gábor Csárdi [aut, cre],\n Rich FitzJohn [aut],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN", - "Date/Publication": "2023-12-06 10:30:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:53:57 UTC; windows" - } - }, - "promises": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "promises", - "Title": "Abstractions for Promise-Based Asynchronous Programming", - "Version": "1.3.0", - "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Provides fundamental abstractions for doing asynchronous\n programming in R using promises. Asynchronous programming is useful\n for allowing a single R process to orchestrate multiple tasks in the\n background while also attending to something else. Semantics are\n similar to 'JavaScript' promises, but with a syntax that is idiomatic\n R.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/promises/,\nhttps://github.com/rstudio/promises", - "BugReports": "https://github.com/rstudio/promises/issues", - "Imports": "fastmap (>= 1.1.0), later, magrittr (>= 1.5), R6, Rcpp, rlang,\nstats", - "Suggests": "future (>= 1.21.0), knitr, purrr, rmarkdown, spelling,\ntestthat, vembedr", - "LinkingTo": "later, Rcpp", - "VignetteBuilder": "knitr", - "Config/Needs/website": "rsconnect", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Packaged": "2024-04-04 20:02:05 UTC; jcheng", - "Author": "Joe Cheng [aut, cre],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN", - "Date/Publication": "2024-04-05 15:00:06 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:40:43 UTC; windows", - "Archs": "x64" - } - }, - "rappdirs": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "rappdirs", - "Title": "Application Directories: Determine Where to Save Data, Caches,\nand Logs", - "Version": "0.3.3", - "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"trl\", \"cre\", \"cph\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"),\n person(given = \"Sridhar\",\n family = \"Ratnakumar\",\n role = \"aut\"),\n person(given = \"Trent\",\n family = \"Mick\",\n role = \"aut\"),\n person(given = \"ActiveState\",\n role = \"cph\",\n comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"),\n person(given = \"Eddy\",\n family = \"Petrisor\",\n role = \"ctb\"),\n person(given = \"Trevor\",\n family = \"Davis\",\n role = c(\"trl\", \"aut\")),\n person(given = \"Gabor\",\n family = \"Csardi\",\n role = \"ctb\"),\n person(given = \"Gregory\",\n family = \"Jefferis\",\n role = \"ctb\"))", - "Description": "An easy way to determine which directories on the\n users computer you should use to save data, caches and logs. A port of\n Python's 'Appdirs' () to\n R.", - "License": "MIT + file LICENSE", - "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", - "BugReports": "https://github.com/r-lib/rappdirs/issues", - "Depends": "R (>= 3.2)", - "Suggests": "roxygen2, testthat (>= 3.0.0), covr, withr", - "Copyright": "Original python appdirs module copyright (c) 2010\nActiveState Software Inc. R port copyright Hadley Wickham,\nRStudio. See file LICENSE for details.", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Packaged": "2021-01-28 22:29:57 UTC; hadley", - "Author": "Hadley Wickham [trl, cre, cph],\n RStudio [cph],\n Sridhar Ratnakumar [aut],\n Trent Mick [aut],\n ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated\n from appdirs),\n Eddy Petrisor [ctb],\n Trevor Davis [trl, aut],\n Gabor Csardi [ctb],\n Gregory Jefferis [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN", - "Date/Publication": "2021-01-31 05:40:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:00 UTC; windows", - "Archs": "x64" - } - }, - "readr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "readr", - "Title": "Read Rectangular Text Data", - "Version": "2.1.5", - "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Romain\", \"Francois\", role = \"ctb\"),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Shelby\", \"Bearrows\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(\"https://github.com/mandreyel/\", role = \"cph\",\n comment = \"mio library\"),\n person(\"Jukka\", \"Jylänki\", role = c(\"ctb\", \"cph\"),\n comment = \"grisu3 implementation\"),\n person(\"Mikkel\", \"Jørgensen\", role = c(\"ctb\", \"cph\"),\n comment = \"grisu3 implementation\")\n )", - "Description": "The goal of 'readr' is to provide a fast and friendly way to\n read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed\n to flexibly parse many types of data found in the wild, while still\n cleanly failing when data unexpectedly changes.", - "License": "MIT + file LICENSE", - "URL": "https://readr.tidyverse.org, https://github.com/tidyverse/readr", - "BugReports": "https://github.com/tidyverse/readr/issues", - "Depends": "R (>= 3.6)", - "Imports": "cli (>= 3.2.0), clipr, crayon, hms (>= 0.4.1), lifecycle (>=\n0.2.0), methods, R6, rlang, tibble, utils, vroom (>= 1.6.0)", - "Suggests": "covr, curl, datasets, knitr, rmarkdown, spelling, stringi,\ntestthat (>= 3.2.0), tzdb (>= 0.1.1), waldo, withr, xml2", - "LinkingTo": "cpp11, tzdb (>= 0.1.1)", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Packaged": "2024-01-10 21:03:49 UTC; jenny", - "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Romain Francois [ctb],\n Jennifer Bryan [aut, cre] (),\n Shelby Bearrows [ctb],\n Posit Software, PBC [cph, fnd],\n https://github.com/mandreyel/ [cph] (mio library),\n Jukka Jylänki [ctb, cph] (grisu3 implementation),\n Mikkel Jørgensen [ctb, cph] (grisu3 implementation)", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN", - "Date/Publication": "2024-01-10 23:20:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-14 02:19:43 UTC; windows", - "Archs": "x64" - } - }, - "rlang": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "rlang", - "Version": "1.1.1", - "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", - "Description": "A toolbox for working with base types, core R features\n like the condition system, and core 'Tidyverse' features like tidy\n evaluation.", - "Authors@R": "c(\n person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"),\n person(given = \"mikefc\",\n email = \"mikefc@coolbutuseless.com\", \n role = \"cph\", \n comment = \"Hash implementation based on Mike's xxhashlite\"),\n person(given = \"Yann\",\n family = \"Collet\",\n role = \"cph\", \n comment = \"Author of the embedded xxHash library\"),\n person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "License": "MIT + file LICENSE", - "ByteCompile": "true", - "Biarch": "true", - "Depends": "R (>= 3.5.0)", - "Imports": "utils", - "Suggests": "cli (>= 3.1.0), covr, crayon, fs, glue, knitr, magrittr,\nmethods, pillar, rmarkdown, stats, testthat (>= 3.0.0), tibble,\nusethis, vctrs (>= 0.2.3), withr", - "Enhances": "winch", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", - "BugReports": "https://github.com/r-lib/rlang/issues", - "Config/testthat/edition": "3", - "Config/Needs/website": "dplyr, tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Packaged": "2023-04-28 10:48:43 UTC; lionel", - "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n mikefc [cph] (Hash implementation based on Mike's xxhashlite),\n Yann Collet [cph] (Author of the embedded xxHash library),\n Posit, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "RSPM", - "Date/Publication": "2023-04-28 22:30:03 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 20:52:42 UTC; windows", - "Archs": "x64" - } - }, - "rmarkdown": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "rmarkdown", - "Title": "Dynamic Documents for R", - "Version": "2.26", - "Authors@R": "c(\n person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"),\n person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"),\n person(\"Javier\", \"Luraschi\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"),\n person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")),\n person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), \n person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")),\n person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), \n person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")),\n person(\"Malcolm\", \"Barrett\", role = \"ctb\"),\n person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"),\n person(\"Romain\", \"Lesur\", role = \"ctb\"),\n person(\"Roy\", \"Storey\", role = \"ctb\"),\n person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"),\n person(\"Sergio\", \"Oller\", role = \"ctb\"),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"),\n person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"),\n person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"),\n person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"),\n person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"),\n person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"),\n person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"),\n person(, \"W3C\", role = \"cph\", comment = \"slidy library\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"),\n person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"),\n person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"),\n person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"),\n person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"),\n person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\")\n )", - "Maintainer": "Yihui Xie ", - "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/rmarkdown,\nhttps://pkgs.rstudio.com/rmarkdown/", - "BugReports": "https://github.com/rstudio/rmarkdown/issues", - "Depends": "R (>= 3.0)", - "Imports": "bslib (>= 0.2.5.1), evaluate (>= 0.13), fontawesome (>=\n0.5.0), htmltools (>= 0.5.1), jquerylib, jsonlite, knitr (>=\n1.43), methods, tinytex (>= 0.31), tools, utils, xfun (>=\n0.36), yaml (>= 2.1.19)", - "Suggests": "digest, dygraphs, fs, rsconnect, downlit (>= 0.4.0), katex\n(>= 1.4.0), sass (>= 0.4.0), shiny (>= 1.6.0), testthat (>=\n3.0.3), tibble, vctrs, cleanrmd, withr (>= 2.4.2)", - "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", - "NeedsCompilation": "no", - "Packaged": "2024-03-04 15:00:37 UTC; yihui", - "Author": "JJ Allaire [aut],\n Yihui Xie [aut, cre] (),\n Christophe Dervieux [aut] (),\n Jonathan McPherson [aut],\n Javier Luraschi [aut],\n Kevin Ushey [aut],\n Aron Atkins [aut],\n Hadley Wickham [aut],\n Joe Cheng [aut],\n Winston Chang [aut],\n Richard Iannone [aut] (),\n Andrew Dunning [ctb] (),\n Atsushi Yasumoto [ctb, cph] (,\n Number sections Lua filter),\n Barret Schloerke [ctb],\n Carson Sievert [ctb] (),\n Devon Ryan [ctb] (),\n Frederik Aust [ctb] (),\n Jeff Allen [ctb],\n JooYoung Seo [ctb] (),\n Malcolm Barrett [ctb],\n Rob Hyndman [ctb],\n Romain Lesur [ctb],\n Roy Storey [ctb],\n Ruben Arslan [ctb],\n Sergio Oller [ctb],\n Posit Software, PBC [cph, fnd],\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/rmd/h/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Alexander Farkas [ctb, cph] (html5shiv library),\n Scott Jehl [ctb, cph] (Respond.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n Greg Franko [ctb, cph] (tocify library),\n John MacFarlane [ctb, cph] (Pandoc templates),\n Google, Inc. [ctb, cph] (ioslides library),\n Dave Raggett [ctb] (slidy library),\n W3C [cph] (slidy library),\n Dave Gandy [ctb, cph] (Font-Awesome),\n Ben Sperry [ctb] (Ionicons),\n Drifty [cph] (Ionicons),\n Aidan Lister [ctb, cph] (jQuery StickyTabs),\n Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter),\n Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", - "Repository": "CRAN", - "Date/Publication": "2024-03-05 17:40:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 02:03:41 UTC; windows" - } - }, - "sass": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Type": "Package", - "Package": "sass", - "Version": "0.4.9", - "Title": "Syntactically Awesome Style Sheets ('Sass')", - "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this,\n R developers can use variables, inheritance, and functions to generate\n dynamic style sheets. The package uses the 'Sass CSS' extension language,\n which is stable, powerful, and CSS compatible.", - "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"),\n person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"),\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")),\n person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"),\n comment = \"json.cpp\"),\n person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"),\n comment = \"utf8.h\")\n )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", - "BugReports": "https://github.com/rstudio/sass/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "SystemRequirements": "GNU make", - "Imports": "fs (>= 1.2.4), rlang (>= 0.4.10), htmltools (>= 0.5.1), R6,\nrappdirs", - "Suggests": "testthat, knitr, rmarkdown, withr, shiny, curl", - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Packaged": "2024-03-15 21:58:01 UTC; cpsievert", - "Author": "Joe Cheng [aut],\n Timothy Mastny [aut],\n Richard Iannone [aut] (),\n Barret Schloerke [aut] (),\n Carson Sievert [aut, cre] (),\n Christophe Dervieux [ctb] (),\n RStudio [cph, fnd],\n Sass Open Source Foundation [ctb, cph] (LibSass library),\n Greter Marcel [ctb, cph] (LibSass library),\n Mifsud Michael [ctb, cph] (LibSass library),\n Hampton Catlin [ctb, cph] (LibSass library),\n Natalie Weizenbaum [ctb, cph] (LibSass library),\n Chris Eppstein [ctb, cph] (LibSass library),\n Adams Joseph [ctb, cph] (json.cpp),\n Trifunovic Nemanja [ctb, cph] (utf8.h)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN", - "Date/Publication": "2024-03-15 22:30:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 01:40:46 UTC; windows", - "Archs": "x64" - } - }, - "shiny": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "shiny", - "Type": "Package", - "Title": "Web Application Framework for R", - "Version": "1.8.1.1", - "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"),\n person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"),\n person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"),\n person(\"Alan\", \"Dipert\", role = \"aut\"),\n person(\"Barbara\", \"Borges\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"),\n person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Prem Nawaz\", \"Khan\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Victor\", \"Tsaran\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Dennis\", \"Lembree\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Cathy\", \"O'Connor\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(family = \"PayPal, Inc\", role = \"cph\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize.js library\"),\n person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize-plugin-a11y library\"),\n person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"),\n comment = \"ion.rangeSlider library\"),\n person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"),\n comment = \"Javascript strftime library\"),\n person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"),\n comment = \"DataTables library\"),\n person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"),\n comment = \"highlight.js library\"),\n person(family = \"R Core Team\", role = c(\"ctb\", \"cph\"),\n comment = \"tar implementation from R\")\n )", - "Description": "Makes it incredibly easy to build interactive web\n applications with R. Automatic \"reactive\" binding between inputs and\n outputs and extensive prebuilt widgets make it possible to build\n beautiful, responsive, and powerful applications with minimal effort.", - "License": "GPL-3 | file LICENSE", - "Depends": "R (>= 3.0.2), methods", - "Imports": "utils, grDevices, httpuv (>= 1.5.2), mime (>= 0.3), jsonlite\n(>= 0.9.16), xtable, fontawesome (>= 0.4.0), htmltools (>=\n0.5.4), R6 (>= 2.0), sourcetools, later (>= 1.0.0), promises\n(>= 1.1.0), tools, crayon, rlang (>= 0.4.10), fastmap (>=\n1.1.1), withr, commonmark (>= 1.7), glue (>= 1.3.2), bslib (>=\n0.3.0), cachem, lifecycle (>= 0.2.0)", - "Suggests": "datasets, DT, Cairo (>= 1.5-5), testthat (>= 3.0.0), knitr\n(>= 1.6), markdown, rmarkdown, ggplot2, reactlog (>= 1.0.0),\nmagrittr, yaml, future, dygraphs, ragg, showtext, sass", - "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", - "BugReports": "https://github.com/rstudio/shiny/issues", - "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R'\n'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R'\n'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R'\n'map.R' 'utils.R' 'bootstrap.R' 'cache-utils.R' 'deprecated.R'\n'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R'\n'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R'\n'hooks.R' 'html-deps.R' 'image-interact-opts.R'\n'image-interact.R' 'imageutils.R' 'input-action.R'\n'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R'\n'input-daterange.R' 'input-file.R' 'input-numeric.R'\n'input-password.R' 'input-radiobuttons.R' 'input-select.R'\n'input-slider.R' 'input-submit.R' 'input-text.R'\n'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R'\n'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R'\n'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R'\n'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R'\n'reexports.R' 'render-cached-plot.R' 'render-plot.R'\n'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R'\n'server-input-handlers.R' 'server-resource-paths.R' 'server.R'\n'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R'\n'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R'\n'tar.R' 'test-export.R' 'test-server.R' 'test.R'\n'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R'\n'version_ion_range_slider.R' 'version_jquery.R'\n'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R'\n'viewer.R'", - "RoxygenNote": "7.3.1", - "Encoding": "UTF-8", - "RdMacros": "lifecycle", - "Config/testthat/edition": "3", - "Config/Needs/check": "shinytest2", - "NeedsCompilation": "no", - "Packaged": "2024-04-02 14:16:09 UTC; cpsievert", - "Author": "Winston Chang [aut, cre] (),\n Joe Cheng [aut],\n JJ Allaire [aut],\n Carson Sievert [aut] (),\n Barret Schloerke [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Jonathan McPherson [aut],\n Alan Dipert [aut],\n Barbara Borges [aut],\n Posit Software, PBC [cph, fnd],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/www/shared/jquery-AUTHORS.txt),\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/www/shared/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin),\n Victor Tsaran [ctb] (Bootstrap accessibility plugin),\n Dennis Lembree [ctb] (Bootstrap accessibility plugin),\n Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin),\n Cathy O'Connor [ctb] (Bootstrap accessibility plugin),\n PayPal, Inc [cph] (Bootstrap accessibility plugin),\n Stefan Petre [ctb, cph] (Bootstrap-datepicker library),\n Andrew Rowls [ctb, cph] (Bootstrap-datepicker library),\n Brian Reavis [ctb, cph] (selectize.js library),\n Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library),\n Denis Ineshin [ctb, cph] (ion.rangeSlider library),\n Sami Samhuri [ctb, cph] (Javascript strftime library),\n SpryMedia Limited [ctb, cph] (DataTables library),\n John Fraser [ctb, cph] (showdown.js library),\n John Gruber [ctb, cph] (showdown.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n R Core Team [ctb, cph] (tar implementation from R)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2024-04-02 17:22:03 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:53:58 UTC; windows" - } - }, - "shinyAce": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "shinyAce", - "Type": "Package", - "Title": "Ace Editor Bindings for Shiny", - "Version": "0.4.2", - "Date": "2022-5-5", - "Authors@R": "c(\n person(\"Vincent\", \"Nijs\", role = c(\"aut\", \"cre\"), email = \"radiant@rady.ucsd.edu\"),\n person(\"Forest\", \"Fang\", role = \"aut\", email = \"forest.fang@outlook.com\"),\n person(family = \"Trestle Technology, LLC\", role = \"aut\", email = \"cran@trestletechnology.net\"),\n person(\"Jeff\", \"Allen\", role = \"aut\", email = \"cran@trestletechnology.net\"),\n person(family = \"Institut de Radioprotection et de Surete Nucleaire\", role = c(\"cph\"), email = \"yann.richet@irsn.fr\"),\n person(family = \"Ajax.org B.V.\", role = c(\"ctb\", \"cph\"), comment = \"Ace\"))", - "Description": "Ace editor bindings to enable a rich text editing environment\n within Shiny.", - "License": "MIT + file LICENSE", - "Depends": "R (>= 3.3.0)", - "Imports": "shiny (>= 1.0.5), jsonlite, utils, tools", - "Suggests": "testthat (>= 2.0.0), dplyr (>= 0.8.3)", - "BugReports": "https://github.com/trestletech/shinyAce/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "Language": "en-US", - "NeedsCompilation": "no", - "Packaged": "2022-05-06 04:47:18 UTC; vnijs", - "Author": "Vincent Nijs [aut, cre],\n Forest Fang [aut],\n Trestle Technology, LLC [aut],\n Jeff Allen [aut],\n Institut de Radioprotection et de Surete Nucleaire [cph],\n Ajax.org B.V. [ctb, cph] (Ace)", - "Maintainer": "Vincent Nijs ", - "Repository": "CRAN", - "Date/Publication": "2022-05-06 06:50:08 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:54:49 UTC; windows" - } - }, - "shinyalert": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "shinyalert", - "Title": "Easily Create Pretty Popup Messages (Modals) in 'Shiny'", - "Version": "3.1.0", - "Authors@R": "c(\n person(\"Dean\", \"Attali\",\n email = \"daattali@gmail.com\",\n role = c(\"aut\", \"cre\"),\n comment = c(ORCID=\"0000-0002-5645-3493\", \"R interface\")),\n person(\"Tristan\", \"Edwards\", role = c(\"aut\"),\n comment = \"sweetalert library\"),\n person(\"Zhengjia\", \"Wang\", role = c(\"ctb\"))\n )", - "Description": "Easily create pretty popup messages (modals) in 'Shiny'. A modal can\n contain text, images, OK/Cancel buttons, an input to get a response from the\n user, and many more customizable options.", - "URL": "https://github.com/daattali/shinyalert,\nhttps://daattali.com/shiny/shinyalert-demo/", - "BugReports": "https://github.com/daattali/shinyalert/issues", - "Depends": "R (>= 3.0.2)", - "Imports": "htmltools (>= 0.3.5), shiny (>= 1.0.4), uuid", - "Suggests": "colourpicker, shinydisconnect", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2024-04-26 16:57:44 UTC; Dean", - "Author": "Dean Attali [aut, cre] (, R\n interface),\n Tristan Edwards [aut] (sweetalert library),\n Zhengjia Wang [ctb]", - "Maintainer": "Dean Attali ", - "Repository": "CRAN", - "Date/Publication": "2024-04-27 23:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 02:03:04 UTC; windows" - } - }, - "shinythemes": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "shinythemes", - "Title": "Themes for Shiny", - "Version": "1.2.0", - "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch themes\"),\n person(\"Lukasz\", \"Dziedzic\", role = c(\"ctb\", \"cph\"), comment = \"Lato font\"),\n person(\"Nathan\", \"Willis\", role = c(\"ctb\", \"cph\"), comment = \"News Cycle font\"),\n person(family = \"Google Corporation\", role = c(\"ctb\", \"cph\"), comment = \"Open Sans and Roboto fonts\"),\n person(\"Matt\", \"McInerney\", role = c(\"ctb\", \"cph\"), comment = \"Raleway font\"),\n person(family = \"Adobe Systems Incorporated\", role = c(\"ctb\", \"cph\"), comment = \"Source Sans Pro font\"),\n person(family = \"Canonical Ltd\", role = c(\"ctb\", \"cph\"), comment = \"Ubuntu font\")\n )", - "Description": "Themes for use with Shiny. Includes several Bootstrap themes\n from , which are packaged for use with Shiny\n applications.", - "Depends": "R (>= 3.0.0)", - "Imports": "shiny (>= 0.11)", - "URL": "https://rstudio.github.io/shinythemes/", - "License": "GPL-3 | file LICENSE", - "RoxygenNote": "7.1.1", - "NeedsCompilation": "no", - "Packaged": "2021-01-25 21:27:09 UTC; winston", - "Author": "Winston Chang [aut, cre],\n RStudio [cph],\n Thomas Park [ctb, cph] (Bootswatch themes),\n Lukasz Dziedzic [ctb, cph] (Lato font),\n Nathan Willis [ctb, cph] (News Cycle font),\n Google Corporation [ctb, cph] (Open Sans and Roboto fonts),\n Matt McInerney [ctb, cph] (Raleway font),\n Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font),\n Canonical Ltd [ctb, cph] (Ubuntu font)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN", - "Date/Publication": "2021-01-25 22:00:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 02:03:06 UTC; windows" - } - }, - "sourcetools": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "sourcetools", - "Type": "Package", - "Title": "Tools for Reading, Tokenizing and Parsing R Code", - "Version": "0.1.7-1", - "Author": "Kevin Ushey", - "Maintainer": "Kevin Ushey ", - "Description": "Tools for the reading and tokenization of R code. The\n 'sourcetools' package provides both an R and C++ interface for the tokenization\n of R code, and helpers for interacting with the tokenized representation of R\n code.", - "License": "MIT + file LICENSE", - "Depends": "R (>= 3.0.2)", - "Suggests": "testthat", - "RoxygenNote": "5.0.1", - "BugReports": "https://github.com/kevinushey/sourcetools/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2023-01-31 18:03:04 UTC; kevin", - "Repository": "CRAN", - "Date/Publication": "2023-02-01 10:10:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:00 UTC; windows", - "Archs": "x64" - } - }, - "stringi": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "stringi", - "Version": "1.8.4", - "Date": "2024-05-06", - "Title": "Fast and Portable Character String Processing Facilities", - "Description": "A collection of character string/text/natural language\n processing tools for pattern searching (e.g., with 'Java'-like regular\n expressions or the 'Unicode' collation algorithm), random string generation,\n case mapping, string transliteration, concatenation, sorting, padding,\n wrapping, Unicode normalisation, date-time formatting and parsing,\n and many more. They are fast, consistent, convenient, and -\n thanks to 'ICU' (International Components for Unicode) -\n portable across all locales and platforms. Documentation about 'stringi' is\n provided via its website at and\n the paper by Gagolewski (2022, ).", - "URL": "https://stringi.gagolewski.com/,\nhttps://github.com/gagolews/stringi, https://icu.unicode.org/", - "BugReports": "https://github.com/gagolews/stringi/issues", - "SystemRequirements": "ICU4C (>= 61, optional)", - "Type": "Package", - "Depends": "R (>= 3.4)", - "Imports": "tools, utils, stats", - "Biarch": "TRUE", - "License": "file LICENSE", - "Author": "Marek Gagolewski [aut, cre, cph] (),\n Bartek Tartanus [ctb], and others (stringi source code);\n Unicode, Inc. and others (ICU4C source code, Unicode Character Database)", - "Maintainer": "Marek Gagolewski ", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Packaged": "2024-05-06 12:50:25 UTC; gagolews", - "License_is_FOSS": "yes", - "Repository": "CRAN", - "Date/Publication": "2024-05-06 15:00:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-06 23:50:54 UTC; windows", - "Archs": "x64" - } - }, - "stringr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "stringr", - "Title": "Simple, Consistent Wrappers for Common String Operations", - "Version": "1.5.1", - "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "A consistent, simple and easy to use set of wrappers around\n the fantastic 'stringi' package. All function and argument names (and\n positions) are consistent, all functions deal with \"NA\"'s and zero\n length vectors in the same way, and the output from one function is\n easy to feed into the input of another.", - "License": "MIT + file LICENSE", - "URL": "https://stringr.tidyverse.org,\nhttps://github.com/tidyverse/stringr", - "BugReports": "https://github.com/tidyverse/stringr/issues", - "Depends": "R (>= 3.6)", - "Imports": "cli, glue (>= 1.6.1), lifecycle (>= 1.0.3), magrittr, rlang\n(>= 1.0.0), stringi (>= 1.5.3), vctrs (>= 0.4.0)", - "Suggests": "covr, dplyr, gt, htmltools, htmlwidgets, knitr, rmarkdown,\ntestthat (>= 3.0.0), tibble", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Packaged": "2023-11-14 15:03:52 UTC; hadleywickham", - "Author": "Hadley Wickham [aut, cre, cph],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN", - "Date/Publication": "2023-11-14 23:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-11 01:54:20 UTC; windows" - } - }, - "sys": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "sys", - "Type": "Package", - "Title": "Powerful and Reliable Tools for Running System Commands in R", - "Version": "3.4.2", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), \n email = \"jeroen@berkeley.edu\", comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", - "Description": "Drop-in replacements for the base system2() function with fine control\n and consistent behavior across platforms. Supports clean interruption, timeout, \n background tasks, and streaming STDIN / STDOUT / STDERR over binary or text \n connections. Arguments on Windows automatically get encoded and quoted to work \n on different locales.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/sys", - "BugReports": "https://github.com/jeroen/sys/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Suggests": "unix (>= 1.4), spelling, testthat", - "Language": "en-US", - "NeedsCompilation": "yes", - "Packaged": "2023-05-22 21:45:03 UTC; jeroen", - "Author": "Jeroen Ooms [aut, cre] (),\n Gábor Csárdi [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN", - "Date/Publication": "2023-05-23 07:50:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-11 00:43:01 UTC; windows", - "Archs": "x64" - } - }, - "tibble": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "tibble", - "Title": "Simple Data Frames", - "Version": "3.2.1", - "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Romain\",\n family = \"Francois\",\n role = \"ctb\",\n email = \"romain@r-enthusiasts.com\"),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\",\n email = \"jenny@rstudio.com\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", - "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional\n data frame.", - "License": "MIT + file LICENSE", - "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", - "BugReports": "https://github.com/tidyverse/tibble/issues", - "Depends": "R (>= 3.4.0)", - "Imports": "fansi (>= 0.4.0), lifecycle (>= 1.0.0), magrittr, methods,\npillar (>= 1.8.1), pkgconfig, rlang (>= 1.0.2), utils, vctrs\n(>= 0.4.2)", - "Suggests": "bench, bit64, blob, brio, callr, cli, covr, crayon (>=\n1.3.4), DiagrammeR, dplyr, evaluate, formattable, ggplot2,\nhere, hms, htmltools, knitr, lubridate, mockr, nycflights13,\npkgbuild, pkgload, purrr, rmarkdown, stringi, testthat (>=\n3.0.2), tidyr, withr", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "vignette-formats, as_tibble, add,\ninvariants", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/autostyle/rmd": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Packaged": "2023-03-19 09:23:10 UTC; kirill", - "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n Romain Francois [ctb],\n Jennifer Bryan [ctb],\n RStudio [cph, fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "RSPM", - "Date/Publication": "2023-03-20 06:30:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-25 20:22:42 UTC; windows", - "Archs": "x64" - } - }, - "tidyselect": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "tidyselect", - "Title": "Select from a Set of Strings", - "Version": "1.2.1", - "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "A backend for the selecting functions of the 'tidyverse'. It\n makes it easy to implement select-like functions in your own packages\n in a way that is consistent with other 'tidyverse' interfaces for\n selection.", - "License": "MIT + file LICENSE", - "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", - "BugReports": "https://github.com/r-lib/tidyselect/issues", - "Depends": "R (>= 3.4)", - "Imports": "cli (>= 3.3.0), glue (>= 1.3.0), lifecycle (>= 1.0.3), rlang\n(>= 1.0.4), vctrs (>= 0.5.2), withr", - "Suggests": "covr, crayon, dplyr, knitr, magrittr, rmarkdown, stringr,\ntestthat (>= 3.1.1), tibble (>= 2.1.3)", - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.0.9000", - "NeedsCompilation": "yes", - "Packaged": "2024-03-11 11:46:04 UTC; lionel", - "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN", - "Date/Publication": "2024-03-11 14:10:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:45:33 UTC; windows" - } - }, - "tinytex": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "tinytex", - "Type": "Package", - "Title": "Helper Functions to Install and Maintain TeX Live, and Compile\nLaTeX Documents", - "Version": "0.51", - "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Ethan\", \"Heinzen\", role = \"ctb\"),\n person(\"Fernando\", \"Cagua\", role = \"ctb\"),\n person()\n )", - "Description": "Helper functions to install and maintain the 'LaTeX' distribution\n named 'TinyTeX' (), a lightweight, cross-platform,\n portable, and easy-to-maintain version of 'TeX Live'. This package also\n contains helper functions to compile 'LaTeX' documents, and install missing\n 'LaTeX' packages automatically.", - "Imports": "xfun (>= 0.29)", - "Suggests": "testit, rstudioapi", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/tinytex", - "BugReports": "https://github.com/rstudio/tinytex/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Packaged": "2024-05-06 16:53:21 UTC; yihui", - "Author": "Yihui Xie [aut, cre, cph] (),\n Posit Software, PBC [cph, fnd],\n Christophe Dervieux [ctb] (),\n Devon Ryan [ctb] (),\n Ethan Heinzen [ctb],\n Fernando Cagua [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2024-05-06 17:30:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 01:13:55 UTC; windows" - } - }, - "tzdb": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "tzdb", - "Title": "Time Zone Database Information", - "Version": "0.4.0", - "Authors@R": "c(\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Howard\", \"Hinnant\", role = \"cph\",\n comment = \"Author of the included date library\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Provides an up-to-date copy of the Internet Assigned Numbers\n Authority (IANA) Time Zone Database. It is updated periodically to\n reflect changes made by political bodies to time zone boundaries, UTC\n offsets, and daylight saving time rules. Additionally, this package\n provides a C++ interface for working with the 'date' library. 'date'\n provides comprehensive support for working with dates and date-times,\n which this package exposes to make it easier for other R packages to\n utilize. Headers are provided for calendar specific calculations,\n along with a limited interface for time zone manipulations.", - "License": "MIT + file LICENSE", - "URL": "https://tzdb.r-lib.org, https://github.com/r-lib/tzdb", - "BugReports": "https://github.com/r-lib/tzdb/issues", - "Depends": "R (>= 3.5.0)", - "Suggests": "covr, testthat (>= 3.0.0)", - "LinkingTo": "cpp11 (>= 0.4.2)", - "Biarch": "yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Packaged": "2023-05-12 12:40:06 UTC; davis", - "Author": "Davis Vaughan [aut, cre],\n Howard Hinnant [cph] (Author of the included date library),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN", - "Date/Publication": "2023-05-12 23:00:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-14 01:13:56 UTC; windows", - "Archs": "x64" - } - }, - "utf8": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "utf8", - "Title": "Unicode Text Processing", - "Version": "1.2.3", - "Authors@R": "\n c(person(given = c(\"Patrick\", \"O.\"),\n family = \"Perry\",\n role = c(\"aut\", \"cph\")),\n person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = \"cre\",\n email = \"kirill@cynkra.com\"),\n person(given = \"Unicode, Inc.\",\n role = c(\"cph\", \"dtc\"),\n comment = \"Unicode Character Database\"))", - "Description": "Process and print 'UTF-8' encoded international\n text (Unicode). Input, validate, normalize, encode, format, and\n display.", - "License": "Apache License (== 2.0) | file LICENSE", - "URL": "https://ptrckprry.com/r-utf8/, https://github.com/patperry/r-utf8", - "BugReports": "https://github.com/patperry/r-utf8/issues", - "Depends": "R (>= 2.10)", - "Suggests": "cli, covr, knitr, rlang, rmarkdown, testthat (>= 3.0.0),\nwithr", - "VignetteBuilder": "knitr, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Packaged": "2023-01-31 05:28:43 UTC; kirill", - "Author": "Patrick O. Perry [aut, cph],\n Kirill Müller [cre],\n Unicode, Inc. [cph, dtc] (Unicode Character Database)", - "Maintainer": "Kirill Müller ", - "Repository": "RSPM", - "Date/Publication": "2023-01-31 18:00:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-12 03:36:25 UTC; windows", - "Archs": "x64" - } - }, - "uuid": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "uuid", - "Version": "1.2-0", - "Title": "Tools for Generating and Handling of UUIDs", - "Author": "Simon Urbanek (R package), Theodore Ts'o (libuuid)", - "Maintainer": "Simon Urbanek ", - "Depends": "R (>= 2.9.0)", - "Description": "Tools for generating and handling of UUIDs (Universally Unique Identifiers).", - "License": "MIT + file LICENSE", - "URL": "https://www.rforge.net/uuid", - "BugReports": "https://github.com/s-u/uuid", - "NeedsCompilation": "yes", - "Packaged": "2024-01-13 00:03:03 UTC; rforge", - "Repository": "CRAN", - "Date/Publication": "2024-01-14 15:20:05 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-23 00:25:15 UTC; windows", - "Archs": "x64" - } - }, - "vctrs": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "vctrs", - "Title": "Vector Helpers", - "Version": "0.6.5", - "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"data.table team\", role = \"cph\",\n comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "Defines new notions of prototype and size that are used to\n provide tools for consistent and well-founded type-coercion and\n size-recycling, and are in turn connected to ideas of type- and\n size-stability useful for analysing function interfaces.", - "License": "MIT + file LICENSE", - "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", - "BugReports": "https://github.com/r-lib/vctrs/issues", - "Depends": "R (>= 3.5.0)", - "Imports": "cli (>= 3.4.0), glue, lifecycle (>= 1.0.3), rlang (>= 1.1.0)", - "Suggests": "bit64, covr, crayon, dplyr (>= 0.8.5), generics, knitr,\npillar (>= 1.4.4), pkgdown (>= 2.0.1), rmarkdown, testthat (>=\n3.0.0), tibble (>= 3.1.3), waldo (>= 0.2.0), withr, xml2,\nzeallot", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Packaged": "2023-12-01 16:27:12 UTC; davis", - "Author": "Hadley Wickham [aut],\n Lionel Henry [aut],\n Davis Vaughan [aut, cre],\n data.table team [cph] (Radix sort based on data.table's forder() and\n their contribution to R's order()),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN", - "Date/Publication": "2023-12-01 23:50:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-06-05 01:31:37 UTC; windows", - "Archs": "x64" - } - }, - "vroom": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "vroom", - "Title": "Read and Write Rectangular Text Data Quickly", - "Version": "1.6.5", - "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Shelby\", \"Bearrows\", role = \"ctb\"),\n person(\"https://github.com/mandreyel/\", role = \"cph\",\n comment = \"mio library\"),\n person(\"Jukka\", \"Jylänki\", role = \"cph\",\n comment = \"grisu3 implementation\"),\n person(\"Mikkel\", \"Jørgensen\", role = \"cph\",\n comment = \"grisu3 implementation\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", - "Description": "The goal of 'vroom' is to read and write data (like 'csv',\n 'tsv' and 'fwf') quickly. When reading it uses a quick initial\n indexing step, then reads the values lazily , so only the data you\n actually use needs to be read. The writer formats the data in\n parallel and writes to disk asynchronously from formatting.", - "License": "MIT + file LICENSE", - "URL": "https://vroom.r-lib.org, https://github.com/tidyverse/vroom", - "BugReports": "https://github.com/tidyverse/vroom/issues", - "Depends": "R (>= 3.6)", - "Imports": "bit64, cli (>= 3.2.0), crayon, glue, hms, lifecycle (>=\n1.0.3), methods, rlang (>= 0.4.2), stats, tibble (>= 2.0.0),\ntidyselect, tzdb (>= 0.1.1), vctrs (>= 0.2.0), withr", - "Suggests": "archive, bench (>= 1.1.0), covr, curl, dplyr, forcats, fs,\nggplot2, knitr, patchwork, prettyunits, purrr, rmarkdown,\nrstudioapi, scales, spelling, testthat (>= 2.1.0), tidyr,\nutils, waldo, xml2", - "LinkingTo": "cpp11 (>= 0.2.0), progress (>= 1.2.1), tzdb (>= 0.1.1)", - "VignetteBuilder": "knitr", - "Config/Needs/website": "nycflights13, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3.9000", - "NeedsCompilation": "yes", - "Packaged": "2023-12-05 16:46:59 UTC; jenny", - "Author": "Jim Hester [aut] (),\n Hadley Wickham [aut] (),\n Jennifer Bryan [aut, cre] (),\n Shelby Bearrows [ctb],\n https://github.com/mandreyel/ [cph] (mio library),\n Jukka Jylänki [cph] (grisu3 implementation),\n Mikkel Jørgensen [cph] (grisu3 implementation),\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN", - "Date/Publication": "2023-12-05 23:50:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-14 02:02:33 UTC; windows", - "Archs": "x64" - } - }, - "waiter": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "waiter", - "Title": "Loading Screen for 'Shiny'", - "Version": "0.2.5", - "Date": "2022-01-02", - "Authors@R": "c(\n person(given = \"John\",\n family = \"Coene\",\n role = c(\"aut\", \"cre\"),\n email = \"jcoenep@gmail.com\"),\n person(given = \"Jinhwan\",\n family = \"Kim\",\n role = \"ctb\",\n email = 'hwanistic@gmail.com'),\n person(given = \"Victor\",\n family = \"Granda\",\n role = c(\"ctb\"),\n email = \"victorgrandagarcia@gmail.com\",\n comment = c(ORCID = \"0000-0002-0469-1991\")))", - "Description": "Full screen and partial loading screens for 'Shiny' with spinners, progress bars, and notifications.", - "License": "MIT + file LICENSE", - "URL": "https://waiter.john-coene.com/,\nhttps://github.com/JohnCoene/waiter", - "BugReports": "https://github.com/JohnCoene/waiter/issues", - "Encoding": "UTF-8", - "Imports": "R6, shiny, htmltools", - "RoxygenNote": "7.1.2", - "Suggests": "httr, knitr, packer, rmarkdown", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Packaged": "2022-01-03 13:33:14 UTC; john", - "Author": "John Coene [aut, cre],\n Jinhwan Kim [ctb],\n Victor Granda [ctb] ()", - "Maintainer": "John Coene ", - "Repository": "CRAN", - "Date/Publication": "2022-01-03 14:30:02 UTC", - "Built": "R 4.4.0; ; 2024-05-14 02:02:48 UTC; windows" - } - }, - "withr": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "withr", - "Title": "Run Code 'With' Temporarily Modified Global State", - "Version": "2.5.0", - "Authors@R": "\n c(person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Lionel\",\n family = \"Henry\",\n role = c(\"aut\", \"cre\"),\n email = \"lionel@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Kevin\",\n family = \"Ushey\",\n role = \"aut\",\n email = \"kevinushey@gmail.com\"),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = \"aut\"),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\"),\n person(given = \"Richard\",\n family = \"Cotton\",\n role = \"ctb\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", - "Description": "A set of functions to run code 'with' safely and\n temporarily modified global state. Many of these functions were\n originally a part of the 'devtools' package, this provides a simple\n package with limited dependencies to provide access to these\n functions.", - "License": "MIT + file LICENSE", - "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", - "BugReports": "https://github.com/r-lib/withr/issues", - "Depends": "R (>= 3.2.0)", - "Imports": "graphics, grDevices, stats", - "Suggests": "callr, covr, DBI, knitr, lattice, methods, rlang, rmarkdown\n(>= 2.12), RSQLite, testthat (>= 3.0.0)", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "Collate": "'aaa.R' 'collate.R' 'compat-defer.R' 'connection.R' 'db.R'\n'defer.R' 'wrap.R' 'local_.R' 'with_.R' 'devices.R' 'dir.R'\n'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R'\n'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R'\n'seed.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R'\n'utils.R' 'with.R'", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Packaged": "2022-03-03 21:13:01 UTC; lionel", - "Author": "Jim Hester [aut],\n Lionel Henry [aut, cre],\n Kirill Müller [aut],\n Kevin Ushey [aut],\n Hadley Wickham [aut],\n Winston Chang [aut],\n Jennifer Bryan [ctb],\n Richard Cotton [ctb],\n RStudio [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "RSPM", - "Date/Publication": "2022-03-03 21:50:02 UTC", - "Built": "R 4.4.0; ; 2024-05-12 23:08:40 UTC; windows" - } - }, - "xfun": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "xfun", - "Type": "Package", - "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", - "Version": "0.44", - "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Daijiang\", \"Li\", role = \"ctb\"),\n person(\"Xianying\", \"Tan\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person()\n )", - "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", - "Imports": "grDevices, stats, tools", - "Suggests": "testit, parallel, codetools, methods, rstudioapi, tinytex (>=\n0.30), mime, markdown (>= 1.5), knitr (>= 1.42), htmltools,\nremotes, pak, rhub, renv, curl, xml2, jsonlite, magick, yaml,\nqs, rmarkdown", - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/xfun", - "BugReports": "https://github.com/yihui/xfun/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "VignetteBuilder": "knitr", - "NeedsCompilation": "yes", - "Packaged": "2024-05-15 05:31:06 UTC; yihui", - "Author": "Yihui Xie [aut, cre, cph] (),\n Wush Wu [ctb],\n Daijiang Li [ctb],\n Xianying Tan [ctb],\n Salim Brüggemann [ctb] (),\n Christophe Dervieux [ctb],\n Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN", - "Date/Publication": "2024-05-15 06:00:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-05-17 23:51:39 UTC; windows", - "Archs": "x64" - } - }, - "xtable": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "xtable", - "Version": "1.8-4", - "Date": "2019-04-08", - "Title": "Export Tables to LaTeX or HTML", - "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"),\n person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"),\n email=\"d.scott@auckland.ac.nz\"),\n person(\"Charles\", \"Roosen\", role=\"aut\"),\n person(\"Arni\", \"Magnusson\", role=\"aut\"),\n person(\"Jonathan\", \"Swinton\", role=\"aut\"),\n person(\"Ajay\", \"Shah\", role=\"ctb\"),\n person(\"Arne\", \"Henningsen\", role=\"ctb\"),\n person(\"Benno\", \"Puetz\", role=\"ctb\"),\n person(\"Bernhard\", \"Pfaff\", role=\"ctb\"),\n person(\"Claudio\", \"Agostinelli\", role=\"ctb\"),\n person(\"Claudius\", \"Loehnert\", role=\"ctb\"),\n person(\"David\", \"Mitchell\", role=\"ctb\"),\n person(\"David\", \"Whiting\", role=\"ctb\"),\n person(\"Fernando da\", \"Rosa\", role=\"ctb\"),\n person(\"Guido\", \"Gay\", role=\"ctb\"),\n person(\"Guido\", \"Schulz\", role=\"ctb\"),\n person(\"Ian\", \"Fellows\", role=\"ctb\"),\n person(\"Jeff\", \"Laake\", role=\"ctb\"),\n person(\"John\", \"Walker\", role=\"ctb\"),\n person(\"Jun\", \"Yan\", role=\"ctb\"),\n person(\"Liviu\", \"Andronic\", role=\"ctb\"),\n person(\"Markus\", \"Loecher\", role=\"ctb\"),\n person(\"Martin\", \"Gubri\", role=\"ctb\"),\n person(\"Matthieu\", \"Stigler\", role=\"ctb\"),\n person(\"Robert\", \"Castelo\", role=\"ctb\"),\n person(\"Seth\", \"Falcon\", role=\"ctb\"),\n person(\"Stefan\", \"Edwards\", role=\"ctb\"),\n person(\"Sven\", \"Garbade\", role=\"ctb\"),\n person(\"Uwe\", \"Ligges\", role=\"ctb\"))", - "Maintainer": "David Scott ", - "Imports": "stats, utils", - "Suggests": "knitr, plm, zoo, survival", - "VignetteBuilder": "knitr", - "Description": "Coerce data to LaTeX and HTML tables.", - "URL": "http://xtable.r-forge.r-project.org/", - "Depends": "R (>= 2.10.0)", - "License": "GPL (>= 2)", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Packaged": "2019-04-21 10:56:51 UTC; dsco036", - "Author": "David B. Dahl [aut],\n David Scott [aut, cre],\n Charles Roosen [aut],\n Arni Magnusson [aut],\n Jonathan Swinton [aut],\n Ajay Shah [ctb],\n Arne Henningsen [ctb],\n Benno Puetz [ctb],\n Bernhard Pfaff [ctb],\n Claudio Agostinelli [ctb],\n Claudius Loehnert [ctb],\n David Mitchell [ctb],\n David Whiting [ctb],\n Fernando da Rosa [ctb],\n Guido Gay [ctb],\n Guido Schulz [ctb],\n Ian Fellows [ctb],\n Jeff Laake [ctb],\n John Walker [ctb],\n Jun Yan [ctb],\n Liviu Andronic [ctb],\n Markus Loecher [ctb],\n Martin Gubri [ctb],\n Matthieu Stigler [ctb],\n Robert Castelo [ctb],\n Seth Falcon [ctb],\n Stefan Edwards [ctb],\n Sven Garbade [ctb],\n Uwe Ligges [ctb]", - "Date/Publication": "2019-04-21 12:20:03 UTC", - "Built": "R 4.4.0; ; 2024-05-11 00:43:00 UTC; windows" - } - }, - "yaml": { - "Source": "CRAN", - "Repository": "https://cran.rstudio.com", - "description": { - "Package": "yaml", - "Type": "Package", - "Title": "Methods to Convert R Data to YAML and Back", - "Date": "2023-11-28", - "Version": "2.3.8", - "Suggests": "RUnit", - "Author": "Shawn P Garbett [aut], Jeremy Stephens [aut, cre], Kirill Simonov [aut], Yihui Xie [ctb],\n Zhuoer Dong [ctb], Hadley Wickham [ctb], Jeffrey Horner [ctb], reikoch [ctb],\n Will Beasley [ctb], Brendan O'Connor [ctb], Gregory R. Warnes [ctb],\n Michael Quinn [ctb], Zhian N. Kamvar [ctb]", - "Maintainer": "Shawn Garbett ", - "License": "BSD_3_clause + file LICENSE", - "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter\n () for R.", - "URL": "https://github.com/vubiostat/r-yaml/", - "BugReports": "https://github.com/vubiostat/r-yaml/issues", - "NeedsCompilation": "yes", - "Packaged": "2023-12-11 16:46:09 UTC; garbetsp", - "Repository": "CRAN", - "Date/Publication": "2023-12-11 18:50:02 UTC", - "Built": "R 4.4.0; x86_64-w64-mingw32; 2024-04-23 00:24:20 UTC; windows", - "Archs": "x64" - } - } - }, - "files": { - ".RData": { - "checksum": "f95ce752c16d738076ff1050a26c798c" - }, - "config.yml": { - "checksum": "322b1734db77ed096148baa2bc969158" - }, - "Jenkinsfile": { - "checksum": "95c2d7850bf9001cdfee3bfe739f20ff" - }, - "README.md": { - "checksum": "b7e3c194e877f8c87be7fb80d26ad928" - }, - "server.R": { - "checksum": "17d71fe946d5e46e1793c106abd9d3d5" - }, - "ui.R": { - "checksum": "a39dc7f2e63c3398929965b2395f3d54" - }, - "www/.Renviron": { - "checksum": "7d4386e9b580a1901a2ecdf38d0d02bb" - }, - "www/Disclaimer/_site.yml": { - "checksum": "03f0a0669a20765dd07f3727cff3b9cb" - }, - "www/Disclaimer/_site/Disclaimer.html": { - "checksum": "8684eed1d406428e2a51a12bddb33e7b" - }, - "www/Disclaimer/_site/site_libs/header-attrs-2.26/header-attrs.js": { - "checksum": "9c32b58ed5fd8fe2efbd5bd7023cdef0" - }, - "www/Disclaimer/Disclaimer.Rmd": { - "checksum": "10c5ed9226cb719326423ce8c568e40a" - }, - "www/html/TranslatorInput.html": { - "checksum": "d5a9a9f1ae16fc142654d3491f4b741e" - }, - "www/images/favicon.png": { - "checksum": "20780767c5887c0d80602f8e047144d3" - }, - "www/instructions1.txt": { - "checksum": "99df941d36181da649a502e3e8010c82" - }, - "www/instructions2.txt": { - "checksum": "3afa856e50d67f29dc299ba4fd0d5f2e" - }, - "www/key.txt": { - "checksum": "9300c4e7c6b56368ee83bf859646815e" - }, - "www/logo.png": { - "checksum": "0a10ae1a5d14bac902e5318ce2181eac" - }, - "www/LogoPlacement.png": { - "checksum": "30badb71e01a440ac463c3b92a3a043d" - }, - "www/regex_pattern.txt": { - "checksum": "6ecdb537ea7a4d33325a180bd6c874b1" - }, - "www/Transcompiler.css": { - "checksum": "5b051a73e6a48d726bbb098b471ee7d1" - }, - "www/Transcompiler.js": { - "checksum": "686d4eb0e18320a29d313bb57aefabbd" - } - }, - "users": null -} diff --git a/server.R b/server.R index fa03a01..3147b34 100644 --- a/server.R +++ b/server.R @@ -1,11 +1,9 @@ # don't need to define libraries as they're defined in global.R -# all functionality has been put into global.R ready to be refactored into separate files a necessary "later" +# all functionality has been split into separate files for "ease" of maintainance -function(input, output, session) { - # call server function (found in global.R) - server(input,output, session) - -} + +# call server_() function (found in server_.R) +function(input, output, session) server_(input,output, session) diff --git a/ui.R b/ui.R index 205b450..75c0eec 100644 --- a/ui.R +++ b/ui.R @@ -7,9 +7,11 @@ # Error: Cannot create 128 parallel PSOCK nodes. Each node needs one connection, # But there are only 124 connections left out of the maximum 128 available on this # R installation -# Default: connections aka workers = 128 -plan(multisession, workers = 4) +# Default: connections aka workers = 124 +plan(multisession, workers = getMaxWorkers()) + + # run the ui function (in global.R) to return the fluidPage object -ui() +ui_() diff --git a/www/html/CopyOfExplainerInput.html b/www/html/CopyOfExplainerInput.html new file mode 100644 index 0000000..ebeac03 --- /dev/null +++ b/www/html/CopyOfExplainerInput.html @@ -0,0 +1,22 @@ + +
+ + +
diff --git a/www/html/CopyOfSPSSTranslatorInput.html b/www/html/CopyOfSPSSTranslatorInput.html new file mode 100644 index 0000000..7417622 --- /dev/null +++ b/www/html/CopyOfSPSSTranslatorInput.html @@ -0,0 +1,21 @@ + +
+ + +
\ No newline at end of file diff --git a/www/html/Disclaimer.html b/www/html/Disclaimer.html index 8d9231d..10ea6b7 100644 --- a/www/html/Disclaimer.html +++ b/www/html/Disclaimer.html @@ -2,44 +2,63 @@
-

Disclaimers and Instructions

-
-
-

SAS to R Transcompiler

-
-
    -
  1. Only SAS code is allowed in the tool.
  2. -
  3. Validate the code for syntax correctness.
  4. -
  5. There may be errors or discrepancies in the translations. Always -review and test the translated R code before using it in -production.
  6. -
  7. Do not include any data, especially confidential information, in the -code.
  8. -
  9. Once the code is translated and incorporated into production, you -become the owner of the translated code.
  10. -
  11. No passwords, network drives, database connections, or hard-coded -data.
  12. -
  13. Translate small and manageable chunks of code. The input window for -SAS is limited to 4000 tokens, where each token represents approximately -0.75 words.
  14. -
-
-
-

Explainer

-
-
    -
  1. Only SAS code is allowed in the tool.
  2. -
  3. Validate the code for syntax correctness.
  4. -
  5. There may be errors or discrepancies in the explanations.Please -review the provided explanations with caution.
  6. -
  7. Do not include any data, especially confidential information, in the -code.
  8. -
  9. No passwords, network drives, database connections, or hard-coded -data.
  10. -
  11. Only input small and manageable chunks of code. The input window for -R is limited to 4000 tokens, where each token represents approximately -0.75 words.
  12. -
-
-
+

Disclaimers and Instructions

+
+
+

SAS to R Transcompiler

+
+
    +
  1. Only SAS code is allowed in the tool.
  2. +
  3. Validate the code for syntax correctness.
  4. +
  5. There may be errors or discrepancies in the translations. Always + review and test the translated R code before using it in + production.
  6. +
  7. Do not include any data, especially confidential information, in the + code.
  8. +
  9. Once the code is translated and incorporated into production, you + become the owner of the translated code.
  10. +
  11. No passwords, network drives, database connections, or hard-coded + data.
  12. +
  13. Translate small and manageable chunks of code. The input window for + SAS is limited to 4000 tokens, where each token represents approximately + 0.75 words.
  14. +
+
+
+

Explainer

+
+
    +
  1. Only SAS code is allowed in the tool.
  2. +
  3. Validate the code for syntax correctness.
  4. +
  5. There may be errors or discrepancies in the explanations.Please + review the provided explanations with caution.
  6. +
  7. Do not include any data, especially confidential information, in the + code.
  8. +
  9. No passwords, network drives, database connections, or hard-coded + data.
  10. +
  11. Only input small and manageable chunks of code. The input window for + R is limited to 4000 tokens, where each token represents approximately + 0.75 words.
  12. +
+
+
+

SPSS to R Transcompiler

+
+
    +
  1. Only SPSS code is allowed in the tool.
  2. +
  3. Validate the code for syntax correctness.
  4. +
  5. There may be errors or discrepancies in the translations. Always + review and test the translated R code before using it in + production.
  6. +
  7. Do not include any data, especially confidential information, in the + code.
  8. +
  9. Once the code is translated and incorporated into production, you + become the owner of the translated code.
  10. +
  11. No passwords, network drives, database connections, or hard-coded + data.
  12. +
  13. Translate small and manageable chunks of code. The input window for + SPSS is limited to 4000 tokens, where each token represents approximately + 0.75 words.
  14. +
+
diff --git a/www/html/ExplainerInput.html b/www/html/ExplainerInput.html new file mode 100644 index 0000000..ebeac03 --- /dev/null +++ b/www/html/ExplainerInput.html @@ -0,0 +1,22 @@ + +
+ + +
diff --git a/www/html/SPSSTranslatorInput.html b/www/html/SPSSTranslatorInput.html new file mode 100644 index 0000000..01cdb94 --- /dev/null +++ b/www/html/SPSSTranslatorInput.html @@ -0,0 +1,21 @@ + +
+ + +
\ No newline at end of file diff --git a/www/html/TranslatorInput.html b/www/html/TranslatorInput.html index 3efb8fc..a01baa1 100644 --- a/www/html/TranslatorInput.html +++ b/www/html/TranslatorInput.html @@ -1,13 +1,13 @@ - +
- -
diff --git a/www/html/TranslatorInputTemplate.html b/www/html/TranslatorInputTemplate.html new file mode 100644 index 0000000..6545075 --- /dev/null +++ b/www/html/TranslatorInputTemplate.html @@ -0,0 +1,21 @@ + +
+ + +
diff --git a/www/html/TranslatorInput_Old.html b/www/html/TranslatorInput_Old.html new file mode 100644 index 0000000..dd14b10 --- /dev/null +++ b/www/html/TranslatorInput_Old.html @@ -0,0 +1,21 @@ + +
+ + +
diff --git a/www/includes/Transcompiler.css b/www/includes/Transcompiler.css index a762747..c93c735 100644 --- a/www/includes/Transcompiler.css +++ b/www/includes/Transcompiler.css @@ -8,7 +8,7 @@ height: 81px; } -#text{ +.text{ font-size: 24px; @@ -32,7 +32,7 @@ z-index: 3; } /* Live syntax-highlighting Input Console */ -#editing1 { +.editing { /* Both elements need the same text and space styling so they are directly on top of each other */ height: 750px; width: 95%; @@ -44,82 +44,58 @@ outline: 0; font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace!important; + + + z-index: 1; + + color: transparent; + background: transparent; + caret-color: black; } - #highlighting1 { + .highlighting { /* Both elements need the same text and space styling so they are directly on top of each other */ height: 750px; width: 95%; - margin: 1px; - margin-left: 16px; - padding: 10px; + margin: 1px!important; + margin-left: 16px!important; + padding: 10px!important; border: 1px solid #ced4da; border-radius: .25rem; outline: 0; - - + z-index: 0; + background: white!important; } -#editing1, #highlighting1{ +.editing, .highlighting{ /* Also add text styles to highlighting tokens */ font-size: 11pt!important; - font-family: "Courier New"; + /*font-family: "Courier New"!important;*/ /*line-height: 1.4;*/ - tab-size: 2; - line-height: 24px; -} - + tab-size: 2!important; + line-height: 24px!important; -#editing1, #highlighting1 { /* In the same place */ position: absolute; left: 0; + + + overflow: scroll!important; + white-space: nowrap!important; /* Allows textarea to scroll horizontally */ + resize: none; } -/* Move the textarea in front of the result */ -#editing1 { - z-index: 1; -} -#highlighting1 { - z-index: 0; -} - - -/* Make textarea almost completely transparent */ -#editing1 { - color: transparent; - background: transparent; - caret-color: black; -} - -#highlighting1 { - background: white; -} - -/* Can be scrolled */ -#editing1, #highlighting1 { - overflow: scroll; - white-space: nowrap; /* Allows textarea to scroll horizontally */ -} - -/* No resize on textarea */ -#editing1, #highlighting1 { - resize: none; +.editing:focus, .highlighting:focus/*,#editing2:focus*/ { + background-color: transparent!important; + border-color: #80bdff!important; + outline: 0!important; + box-shadow: 0 0 0 0.2rem rgba(0,123,255,0.25)!important; } -#editing1:focus, #highlighting1:focus,#editing2:focus { - background-color: transparent; - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0,123,255,0.25); +.highlighting:focus { + z-index: 2!important; } -#highlighting1:focus{ - z-index: 2; -} - - - /* Paragraphs; First Image */ p code { border-radius: 2px; @@ -129,7 +105,7 @@ p code { /* Content Formatting */ -#process1, #process2, #optimise { +#process1, #process2, #process3, #optimise { background-color: #006F74; border-color: #006F74; color: white; @@ -139,7 +115,7 @@ p code { } -#progress-bar1, #progress-bar2 { +#progress-bar1, #progress-bar2, #progress-bar3 { margin-left: 150px; position: absolute; bottom: 0; @@ -149,26 +125,26 @@ h2 { margin-top: 0; } -#output1, #output2, #editing2{ +#output1, #output2, #output3/*, #editing2*/{ background-color: white; border-radius: 5px; } - -#output1, #editing2{ +pre{ + white-space: normal!important; +} +#output1,#output2, #output3/*, #editing2*/{ overflow: auto; - white-space: nowrap; + white-space: normal!important; } -#output2{ +/*#output2{ overflow: auto; -} -#response1, #response2 { +}*/ +#response1, #response2, #response3 { background-color: white; } - - .tab-content { margin-top: 85px; } @@ -198,17 +174,17 @@ h2 { .ace_content, .ace_gutter{ - font-size: 10pt; - font-family: "Lucida Console"; + /*font-size: 10pt; + font-family: "Lucida Console";*/ line-height: 1.5; tab-size: 2; } -#api_response2 { +/*#api_response2 { line-height: 1.5; padding: 0; margin: 0; -} +}*/ /* Syntax Highlighting from prism.js starts below */ diff --git a/www/includes/Transcompiler.js b/www/includes/Transcompiler.js index 25f3e4a..788ea49 100644 --- a/www/includes/Transcompiler.js +++ b/www/includes/Transcompiler.js @@ -11,6 +11,9 @@ function update(text, targetId) { Prism.highlightElement(result_element); } + + + function sync_scroll1(element) { /* Scroll result to scroll coords of event - sync with textarea */ let result_element = document.querySelector("#highlighting1"); @@ -29,6 +32,15 @@ function sync_scroll2(element) { result_element.scrollLeft = element.scrollLeft; } +function sync_scroll3(element) { + /* Scroll result to scroll coords of event - sync with textarea */ + let result_element = document.querySelector("#highlighting3"); + + // Get and set x and y + result_element.scrollTop = element.scrollTop; + result_element.scrollLeft = element.scrollLeft; +} + function check_tab(element, event) { let code = element.value; if(event.key == "Tab") { @@ -59,6 +71,25 @@ function activate_Button(element) { } } +function init(){ + let editor1 = ace.edit("api_response1"); + editor1.setOptions({ + indentedSoftWrap: false + }); + /*let editor2 = ace.edit("api_response2"); + editor2.setOptions({ + indentedSoftWrap: false + });*/ + let editor3 = ace.edit("api_response3"); + editor3.setOptions({ + indentedSoftWrap: false + }); + +} + + +window.onload = init; + /* PrismJS 1.29.0 https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+r+sas&plugins=line-numbers */ var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); diff --git a/www/includes/TranscompilerNew.css b/www/includes/TranscompilerNew.css new file mode 100644 index 0000000..0b599a5 --- /dev/null +++ b/www/includes/TranscompilerNew.css @@ -0,0 +1,281 @@ +#branding { + position: fixed; + background-color: white; + left: 20px; + top: 3px; + z-index: 5; + width: 333px; + height: 81px; +} + +.text{ + font-size: 24px; + + +} + +#disclaimer{ + padding: 10px; + margin-top: 1px; + height: 900px; + border: 1px solid #ced4da; + border-radius: .25rem; +} + + +#inTabset { + position: fixed; + background-color: white; + width: 100%; + padding-bottom: 44px; + top: 0; + z-index: 3; +} +/* Live syntax-highlighting Input Console */ +/* I'm going to give these elements a class and use that +for all the styling */ +.editing { + /* Both elements need the same text and space styling so they are directly on top of each other */ + height: 750px; + width: 95%; + margin: 1px; + margin-left: 16px; + padding: 10px; + border: 1px solid #ced4da; + border-radius: .25rem; + outline: 0; + + font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace!important; + + + z-index: 1; + color: transparent; + background: transparent; + caret-color: black; +} +.highlighting { + /* Both elements need the same text and space styling so they are directly on top of each other */ + height: 750px; + width: 95%; + margin: 1px; + margin-left: 16px; + padding: 10px; + border: 1px solid #ced4da; + border-radius: .25rem; + outline: 0; + z-index: 0; + background: white; +} + +.editing, .highlighting{ + /* Also add text styles to highlighting tokens */ + font-size: 11pt!important; + font-family: "Courier New"; + /*line-height: 1.4;*/ + tab-size: 2; + line-height: 24px; + /* In the same place */ + position: absolute; + left: 0; + resize: none; + + overflow: scroll; + white-space: nowrap; /* Allows textarea to scroll horizontally */ + +} + +.editing:focus, .highlighting1:focus,#editing2:focus{ + background-color: transparent; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0,123,255,0.25); +} + +.highlighting:focus{ + z-index: 2; +} + +/* Paragraphs; First Image */ +p code { + border-radius: 2px; + background-color: white; + color: #111; +} + + +/* Content Formatting */ +#process1, #process2, #process3, #optimise { + background-color: #006F74; + border-color: #006F74; + color: white; + -webkit-user-drag: none; + position: absolute; + bottom: 0; +} + + +#progress-bar1, #progress-bar2, #progress-bar3 { + margin-left: 150px; + position: absolute; + bottom: 0; +} + +h2 { + margin-top: 0; +} + +#output1, #output2, #output3, #editing2{ + background-color: white; + border-radius: 5px; + +} + +#output1, #output2, #output3, #editing2{ + overflow: auto; + white-space: nowrap; +} +/*#output2{ + overflow: auto; +}*/ +#response1, #response2, #response3 { + background-color: white; + +} + +.tab-content { + margin-top: 85px; +} + +.tabbable .nav-tabs { + padding-left: 350px; + border-bottom-color: transparent; +} + +.tabbable .nav-tabs li a { + background-color: #006F74; + color: white; + -webkit-user-drag: none; +} + +.tabbable .nav-tabs li:hover a { + background-color: #45C1C0; + color: white; + -webkit-user-drag: none; +} + +.tabbable .nav-tabs li a.active { + background-color: #45C1C0; + color: white; + -webkit-user-drag: none; +} + + +.ace_content, .ace_gutter{ + font-size: 10pt; + font-family: "Lucida Console"; + line-height: 1.5; + tab-size: 2; +} + +#api_response2 { + line-height: 1.5; + padding: 0; + margin: 0; +} + +/* Syntax Highlighting from prism.js starts below */ + +/* PrismJS 1.29.0 https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+sas */ + code[class*=language-],pre[class*=language-]{ + color:#000; + background:0 0; + text-shadow:0 1px #fff; + font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; + font-size:1em; + text-align:left; + white-space:pre; + word-spacing:normal; + word-break:normal; + word-wrap:normal; + line-height:1.5; + -moz-tab-size:4; + -o-tab-size:4; + tab-size:4; + -webkit-hyphens:none; + -moz-hyphens:none; + -ms-hyphens:none; + hyphens:none +} +code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{ + text-shadow:none; + background:#b3d4fc +} +code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{ + text-shadow:none; + background:#b3d4fc +} +@media print{ + code[class*=language-],pre[class*=language-]{ + text-shadow:none + } +} +pre[class*=language-]{ + padding:1em; + margin:.5em 0; + overflow:auto +} +:not(pre)>code[class*=language-],pre[class*=language-]{ + background:#f5f2f0 +} +:not(pre)>code[class*=language-]{ + padding:.1em; + border-radius:.3em; + white-space:normal +} +.token.cdata,.token.comment,.token.doctype,.token.prolog{ + color:#708090 +} +.token.punctuation{ + color:#000 +} +.token.namespace{ + opacity:.7 +} +.token.boolean,.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{ + color:#905 +} +.token.number { + color:#008080; + font-weight:bold; +} +.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{ + color:#800080 +} +.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{ + color:#9a6e3a; +} +.token.atrule,.token.attr-value,.token.keyword{ + color:#0000ff +} +.token.step.keyword{ + color:#000080; + font-weight:bold; +} +.token.class-name,.token.function{ + color:#dd4a68 +} +.token.important,.token.regex,.token.variable{ + color:#e90 +} +.token.bold,.token.important{ + font-weight:700 +} +.token.italic{ + font-style:italic +} +.token.entity{ + cursor:help +} + + +/* End of prism.js syntax highlighting*/ \ No newline at end of file diff --git a/www/instructions/instructions3.txt b/www/instructions/instructions3.txt new file mode 100644 index 0000000..8d647e0 --- /dev/null +++ b/www/instructions/instructions3.txt @@ -0,0 +1 @@ +Convert the following code from SPSS to R. Any non-code in the output should be returned as a comment. Start the response with ```R From 444626fc4066d7e195976aa26ba65a6c6ff752de Mon Sep 17 00:00:00 2001 From: Peter Marsh Date: Mon, 13 Oct 2025 10:57:57 +0100 Subject: [PATCH 2/2] missed this file in previous commit (file moved from functions/ to R/ --- R/readFile.R | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 R/readFile.R diff --git a/R/readFile.R b/R/readFile.R new file mode 100644 index 0000000..b603900 --- /dev/null +++ b/R/readFile.R @@ -0,0 +1,60 @@ +library(readr) +library(yaml) + + +#' reads files from various locations +#' @param type the file type +#' @param name the name of the file +#' @param subfolder the subfolder the file is in +#' +#' @export + +readFile <- function(type, name, subfolder = ""){ + ext <- extension(type) + subfld <- subpath(subfolder) + switch (type, + html = includeHTML(paste0(getwd(), subfld, name, ext)), + yaml = read_yaml(paste0(getwd(), subfld, name, ext)), + text = as.character(read_file(paste0(getwd(), subfld, name, ext))), + txt = as.character(read_file(paste0(getwd(), subfld, name, ext))), + yml = read_yaml(paste0(getwd(), subfld, name, ext)) + ) +} + + +sourceFile <- function(name){ + source (paste0(getwd(), "/functions/", name)) +} + +getFile <- function(fileName, type){ + switch(type + , image = paste0("images/", fileName) + , style = paste0("includes/", fileName) + , script = paste0("includes/", fileName) + ) + + +} + +extension <- function (type){ + switch(type, + yaml = ".yml", + yml = ".yml", + text = ".txt", + txt = ".txt", + html = ".html" + , "" + ) +} + +subpath <- function(subfolder){ + switch (subfolder, + www = "/www/", + html = "/www/html/", + images = "/www/images/", + includes = "/www/includes/", + instructions = "/www/instructions/", + "/" + ) +} +