From 67fc5ccb0358b55708b27f1c506ce911aa84314c Mon Sep 17 00:00:00 2001 From: Ashley Baldry Date: Sat, 17 Jun 2023 11:20:42 +0100 Subject: [PATCH 1/5] Using download modal for file name --- R/mod_code_srv.R | 141 +++++++++++++++++++------------ R/mod_code_ui.R | 6 +- inst/app/www/designer.min.js | 2 +- inst/app/www/designer.min.js.map | 4 +- srcjs/app/settings.js | 8 ++ 5 files changed, 102 insertions(+), 59 deletions(-) diff --git a/R/mod_code_srv.R b/R/mod_code_srv.R index 8ff3bd5..fd82779 100644 --- a/R/mod_code_srv.R +++ b/R/mod_code_srv.R @@ -7,71 +7,104 @@ CodeModuleServer <- function(id, ui_code) { ns <- session$ns observeEvent(input$save, ignoreInit = TRUE, { - showModal( - modalDialog( - tagList( - shiny::radioButtons( - inputId = ns("file_type"), - label = "File Type:", - choices = c("UI" = "ui", "Module" = "module"), - inline = TRUE - ), - conditionalPanel( - condition = "input.file_type === 'module'", - ns = ns, - tagList( - shiny::textInput( - inputId = ns("file_name"), - label = "Module Name:" - ), - shiny::radioButtons( - inputId = ns("app_type"), - label = "App Structure:", - choices = c("{golem}" = "golem", "{rhino}" = "rhino"), - inline = TRUE - ) - ) - ) - ), - title = "Save UI", - footer = tagList( - tags$button( - type = "button", - class = "btn btn-secondary", - `data-dismiss` = "modal", - `data-bs-dismiss` = "modal", - shiny::icon("xmark"), - "Cancel" - ), - tags$button( - id = ns("save_confirm"), - type = "button", - class = "btn btn-primary action-button", - `data-dismiss` = "modal", - `data-bs-dismiss` = "modal", - shiny::icon("check"), - "Confirm" - ) - ) - ) - ) + showModal(saveFileModal(ns, "save")) + }) + + observeEvent(input$download, ignoreInit = TRUE, { + showModal(saveFileModal(ns, "download")) }) observeEvent(input$save_confirm, ignoreInit = TRUE, { - writeToUI(ui_code(), input$file_type, input$file_name,input$app_type) + writeToUI(ui_code(), input$file_type, input$file_name, input$app_type) }) + output$download_confirm <- downloadHandler( + filename = function() { + if (input$file_type == "ui") { + "ui.R" + } else { + paste0("mod_", paste0("mod_", tolower(gsub(" ", "_", module_name)), "_ui.R")) + } + }, + content = function(file) { + mod_name <- if (input$file_type == "ui") NULL else input$file_name + r_code <- jsonToRScript(code, module_name = module_name) + writeLines(r_code, file) + } + ) + r_code <- reactive(jsonToRScript(ui_code())) output$code <- renderPrint(cat(r_code())) + }) +} - output$download <- downloadHandler( - filename = "ui.R", - content = function(file) { - writeLines(r_code(), file) +saveFileModal <- function(ns, type = c("save", "download")) { + type <- match.arg(type) + + modalDialog( + tagList( + shiny::radioButtons( + inputId = ns("file_type"), + label = "File Type:", + choices = c("UI" = "ui", "Module" = "module"), + inline = TRUE + ), + conditionalPanel( + condition = "input.file_type === 'module'", + ns = ns, + tagList( + shiny::textInput( + inputId = ns("file_name"), + label = "Module Name:" + ), + if (type == "save") { + shiny::radioButtons( + inputId = ns("app_type"), + label = "App Structure:", + choices = c("{golem}" = "golem", "{rhino}" = "rhino"), + inline = TRUE + ) + } + ) + ) + ), + title = "Save UI", + footer = tagList( + tags$button( + type = "button", + class = "btn btn-secondary", + `data-dismiss` = "modal", + `data-bs-dismiss` = "modal", + shiny::icon("xmark"), + "Cancel" + ), + if (type == "save") { + tags$button( + id = ns("save_confirm"), + type = "button", + class = "btn btn-primary action-button", + `data-dismiss` = "modal", + `data-bs-dismiss` = "modal", + shiny::icon("check"), + "Confirm" + ) + } else { + tags$a( + id = ns("download_confirm"), + type = "button", + class = "btn btn-primary shiny-download-link", + `data-dismiss` = "modal", + `data-bs-dismiss` = "modal", + href = "", + target = "_blank", + download = NA, + icon = shiny::icon("check"), + label = "Confirm" + ) } ) - }) + ) } writeToUI <- function(code, file_type = c("ui", "module"), module_name = NULL, app_type = c("golem", "rhino")) { diff --git a/R/mod_code_ui.R b/R/mod_code_ui.R index 96ad51c..05fbfea 100644 --- a/R/mod_code_ui.R +++ b/R/mod_code_ui.R @@ -24,8 +24,10 @@ CodeModUI <- function(id) { "Copy" ) ), - downloadButton( - ns("download") + actionButton( + ns("download"), + "Download", + shiny::icon("download") ), if (interactive()) { actionButton( diff --git a/inst/app/www/designer.min.js b/inst/app/www/designer.min.js index f80f478..e02a9d9 100644 --- a/inst/app/www/designer.min.js +++ b/inst/app/www/designer.min.js @@ -60,7 +60,7 @@ var b=class{name;navbar_item_style="none";bs4_item_style="none";enable_on_load=! - `};function rt(){$("#settings-page_type").on("click",()=>$(".canvas-modal").css("display","none")),$(".copy-ui-button").on("click",Ct),$("#settings-code-save").on("click",()=>{$("#settings-code_button").trigger("click")}),$("#css_style").on("change",Dt),$("#remove_label").on("change",vt),$("#remove_colour").on("change",_t),$("#remove_border").on("change",yt),$("#canvas_clear").on("click",wt),$("#confirm_clear").on("click",xt),$(".component-accordion .card-header button").on("click",Pt),$("body").on("click",()=>{document.querySelector("body").classList.contains("sidebar-mini")&&document.querySelector("body").classList.remove("sidebar-mini")}),$(document).on("click",".clickable-dropdown",s=>{s.stopPropagation()}),$("#preview").on("click",()=>{$("#settings-options_button").trigger("click"),$(".page-canvas-shell").addClass("preview")}),$("#canvas-close_preview").on("click",()=>{$(".page-canvas-shell").removeClass("preview")}),Shiny.addCustomMessageHandler("toggleBS4DashDeps",qt),Shiny.addCustomMessageHandler("runjs",function(s){(0,eval)(s.script)}),$("body").on("click contextmenu",ot),$("#canvas-canvas").on("contextmenu",kt),$("#canvas-menu").on("contextmenu",s=>{s.preventDefault()}),$("#sidebar-container").on("mousedown",ot),$("#canvas-delete").on("click",Tt),$("#settings-template-search").on("input",St),$(document).on("click",".template-option",Lt)}function vt(){this.checked?$(".designer-page-template").removeClass("hidden-after-label"):$(".designer-page-template").addClass("hidden-after-label")}function _t(){this.checked?$(".designer-page-template").removeClass("hidden-colour"):$(".designer-page-template").addClass("hidden-colour")}function yt(){this.checked?$(".designer-page-template").removeClass("hidden-borders"):$(".designer-page-template").addClass("hidden-borders")}function wt(){if($("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()==="")return null;$("#clear_modal").modal()}function xt(){$("#canvas-page").html("")}function Ct(){let s=document.getElementById("settings-code-code").textContent;navigator.clipboard.writeText(s),$("#copy_toast").toast("show")}function qt(s){let t=document.styleSheets;for(let e=0;e{document.getElementById(s).scrollIntoView({behavior:"smooth",block:"start"}),$(this).trigger("blur")},250)}var ct;function kt(s){if($(s.target).closest(".designer-element").length===0)return;s.preventDefault();let{clientX:t,clientY:e}=s,{normalizedX:a,normalizedY:n}=It(t,e);ct=$(s.target).closest(".designer-element"),$("#canvas-menu").css("top",`${n}px`),$("#canvas-menu").css("left",`${a}px`),$("#canvas-menu").removeClass("visible"),setTimeout(()=>{$("#canvas-menu").addClass("visible")})}function It(s,t){let e=document.getElementById("canvas-canvas"),a=document.getElementById("canvas-menu"),{left:n,top:i}=e.getBoundingClientRect();n=n<0?0:n,i=i<0?0:i;let l=s-n,o=t-i,r=l+a.clientWidth>e.clientWidth,d=o+a.clientHeight>e.clientHeight,u=s,p=t;return r&&(u=n+e.clientWidth-a.clientWidth),d&&(p=i+e.clientHeight-a.clientHeight),{normalizedX:u,normalizedY:p}}function ot(){$("#canvas-menu").removeClass("visible")}function Tt(s){ct.remove()}function Dt(s){let t=s.target.files[0],e=document.getElementById("canvas-style");e.innerHTML="";let a=new FileReader;a.onload=n=>{let l=n.target.result.split(/\r\n|\n|(?<=\}\b)/);e.innerHTML=l.join(` + `};function rt(){$("#settings-page_type").on("click",()=>$(".canvas-modal").css("display","none")),$(".copy-ui-button").on("click",Ct),$("#settings-code-save").on("click",()=>{$("#settings-code_button").trigger("click")}),$("#settings-code-download").on("click",()=>{$("#settings-code_button").trigger("click"),Shiny.bindAll("#settings-code-download_confirm")}),$("#settings-code-download_confirm").on("click",()=>{Shiny.unbindAll("#settings-code-download_confirm")}),$("#css_style").on("change",Dt),$("#remove_label").on("change",vt),$("#remove_colour").on("change",_t),$("#remove_border").on("change",yt),$("#canvas_clear").on("click",wt),$("#confirm_clear").on("click",xt),$(".component-accordion .card-header button").on("click",Pt),$("body").on("click",()=>{document.querySelector("body").classList.contains("sidebar-mini")&&document.querySelector("body").classList.remove("sidebar-mini")}),$(document).on("click",".clickable-dropdown",s=>{s.stopPropagation()}),$("#preview").on("click",()=>{$("#settings-options_button").trigger("click"),$(".page-canvas-shell").addClass("preview")}),$("#canvas-close_preview").on("click",()=>{$(".page-canvas-shell").removeClass("preview")}),Shiny.addCustomMessageHandler("toggleBS4DashDeps",qt),Shiny.addCustomMessageHandler("runjs",function(s){(0,eval)(s.script)}),$("body").on("click contextmenu",ot),$("#canvas-canvas").on("contextmenu",kt),$("#canvas-menu").on("contextmenu",s=>{s.preventDefault()}),$("#sidebar-container").on("mousedown",ot),$("#canvas-delete").on("click",Tt),$("#settings-template-search").on("input",St),$(document).on("click",".template-option",Lt)}function vt(){this.checked?$(".designer-page-template").removeClass("hidden-after-label"):$(".designer-page-template").addClass("hidden-after-label")}function _t(){this.checked?$(".designer-page-template").removeClass("hidden-colour"):$(".designer-page-template").addClass("hidden-colour")}function yt(){this.checked?$(".designer-page-template").removeClass("hidden-borders"):$(".designer-page-template").addClass("hidden-borders")}function wt(){if($("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()==="")return null;$("#clear_modal").modal()}function xt(){$("#canvas-page").html("")}function Ct(){let s=document.getElementById("settings-code-code").textContent;navigator.clipboard.writeText(s),$("#copy_toast").toast("show")}function qt(s){let t=document.styleSheets;for(let e=0;e{document.getElementById(s).scrollIntoView({behavior:"smooth",block:"start"}),$(this).trigger("blur")},250)}var ct;function kt(s){if($(s.target).closest(".designer-element").length===0)return;s.preventDefault();let{clientX:t,clientY:e}=s,{normalizedX:a,normalizedY:n}=It(t,e);ct=$(s.target).closest(".designer-element"),$("#canvas-menu").css("top",`${n}px`),$("#canvas-menu").css("left",`${a}px`),$("#canvas-menu").removeClass("visible"),setTimeout(()=>{$("#canvas-menu").addClass("visible")})}function It(s,t){let e=document.getElementById("canvas-canvas"),a=document.getElementById("canvas-menu"),{left:n,top:i}=e.getBoundingClientRect();n=n<0?0:n,i=i<0?0:i;let l=s-n,o=t-i,r=l+a.clientWidth>e.clientWidth,d=o+a.clientHeight>e.clientHeight,u=s,p=t;return r&&(u=n+e.clientWidth-a.clientWidth),d&&(p=i+e.clientHeight-a.clientHeight),{normalizedX:u,normalizedY:p}}function ot(){$("#canvas-menu").removeClass("visible")}function Tt(s){ct.remove()}function Dt(s){let t=s.target.files[0],e=document.getElementById("canvas-style");e.innerHTML="";let a=new FileReader;a.onload=n=>{let l=n.target.result.split(/\r\n|\n|(?<=\}\b)/);e.innerHTML=l.join(` `);let o=e.sheet.cssRules;for(let r=0;ralert(n.target.error.name),a.readAsText(t)}function lt(s){return s.split(/, */g).map(t=>t==="body"?"#canvas-page":/^\.wrapper\.sidebar/.test(t)?t.replace(".wrapper",""):"#canvas-page "+t).join(", ")}var Z=!1;function tt(){return Z}function dt(){Z=!1}function St(s){let t=s.target.value?s.target.value:"";document.getElementsByClassName("template-option").forEach(e=>{let a=$(e).find(".title").html().includes(t)||$(e).find(".description").html().includes(t);e.style.display=a?null:"none"})}function Lt(s){let t=$(s.target).closest(".template-option"),e=t.data("page");Z=!0;let a=$(s.target).closest(".delete").length>0||s.target.classList.contains("delete");a||$("#settings-page_type").find(`input[value='${e}']`).trigger("click"),document.getElementById("settings-template-search").value=null,$("#settings-template-search").trigger("input"),Shiny.setInputValue("settings-template-select",t.data("value")),Shiny.setInputValue("settings-template-delete",a)}var m;function y(){let s=$("#settings-page_type input:radio:checked").val();return s==="basicPage"?m=new P:s==="fillPage"?m=new I:s==="fixedPage"?m=new T:s==="fluidPage"?m=new D:s==="bootstrapPage"?m=new S:s==="navbarPage"?m=new L:s==="dashboardPage"?m=new M:m=new P,m.updatePage(),tt()?dt():m.enable_on_load&&m.enableSortablePage("canvas-page"),m.updateComponentDropdown(),m}function ut(){let s=$(this);$(this).hasClass("canvas-page-choice")||(s=$(this).closest(".canvas-page-choice")),s.closest(".canvas-modal").css("display","none");let t=s.data("page");$("#settings-page_type").find(`input[value='${t}']`).trigger("click")}function pt(){if(tt())return null;$("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()===""?($("#canvas-page").html("
"),y()):$("#warning_modal").modal()}function mt(){$(`#settings-page_type input[value="${m.name}"]`).trigger("click")}function ht(s){let t=$(s.target).val();if($("#canvas-title").html(t),$(".navbar-brand").html(t),$(".brand-link").html(t),$("#canvas-page").data("shinyattributes")){let e=$("#canvas-page").data("shinyattributes").replace(/"[^"]+"/,`"${t}"`);$("#canvas-page").attr("data-shinyattributes",e)}if($("#canvas-page>.main-header").data("shinyattributes")){let e=$("#canvas-page>.main-header").data("shinyattributes").replace(/"[^"]+"/,`"${t}"`);$("#canvas-page>.main-header").attr("data-shinyattributes",e)}}function bt(){y(),$(".canvas-page-choice").on("click",ut),$("#settings-page_type").on("change",pt),$("#cancel_reset").on("click",mt),$("#confirm_reset").on("click",y),$("#app_name").on("change keyup",ht)}function $t(){Shiny.addCustomMessageHandler("prepare_canvas_screenshot",s=>{$(".designer-page-template").addClass("hidden-after-label"),$(".designer-page-template").addClass("hidden-colour"),$(".designer-page-template").addClass("hidden-borders")}),Shiny.addCustomMessageHandler("revert_canvas_screenshot",s=>{$("#remove_label").trigger("change"),$("#remove_colour").trigger("change"),$("#remove_border").trigger("change")})}var f,c=class{updatable=!0;display_comments=!0;display_container=!0;has_card_body=!1;is_tab=!1;html="
";sortable_settings=null;constructor(){f=this}createComponent(){return this.html}replaceHTMLPlaceholders(t,e){for(let a in e)t=t.replaceAll("$"+a+"$",e[a]);return t}updateComponent(t=!1){if(typeof window>"u")return null;$(".component-container").html(null);let e=this.createComponent();$(".component-container").html(e),this.addComments(),t&&this.enableSortable()}enableSortable(){Sortable.create(document.getElementById("sidebar-container"),{group:{name:"shared",pull:"clone",put:!1},onClone:function(t){f.sortable_settings&&(f.has_card_body?Sortable.create($(t.item).find(".card-body")[0],f.sortable_settings):f.is_tab?Sortable.create($(t.item).find(".tab-content"),f.sortable_settings):Sortable.create(t.item,f.sortable_settings))},onEnd:function(t){$('.page-canvas [data-toggle="tooltip"]').tooltip(),(f.updatable||$("#sidebar-comments").val()!=="")&&($("#sidebar-comments").val(""),f.updateComponent())}})}addComments(){let t=$("#sidebar-comments").val();t&&($(".component-container>.designer-element").attr("data-shinycomments",t),$(".component-container>.designer-element").attr("title",t),$(".component-container>.designer-element").attr("data-toggle","tooltip"))}createID(t=""){return t=t&&t+"_",t+Math.random().toString(36).substring(2,12)}validateCssUnit(t,e){return this._regex.test(t)?t:/^\d+$/.test(t)?t+"px":e}_regex=/^(auto|inherit|fit-content|calc\(.*\)|((\.\d+)|(\d+(\.\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/};var k=class extends c{html='<$tag$ class="designer-element" data-shinyfunction="$tag$">$value$';constructor(){super(),this.updateComponent(!0)}createComponent(){let t=$("#sidebar-header-tag").val(),e=$("#sidebar-header-text").val();return this.replaceHTMLPlaceholders(this.html,{tag:t,value:e})}};var w=class extends c{updatable=!1;html='
';constructor(t=!0){super(),t&&this.updateComponent(!0)}sortable_settings={group:{name:"shared",put:function(t,e,a){return a.classList.contains("col-sm")}}}};var x=class extends c{updatable=!1;html='
';sortable_settings={group:{name:"shared",put:function(t,e,a){return!a.classList.contains("col-sm")}}};constructor(t=!0){super(),t&&this.updateComponent(!0)}createComponent(){let t=$("#sidebar-column-width_num").val(),e=$("#sidebar-column-offset").val(),a=e>0?` offset-md-${e}`:"",n=e>0?`, offset = ${e}`:"";return this.replaceHTMLPlaceholders(this.html,{width:t,offset_class:a,offset_r:n})}};var B=class extends c{html='<$tag$ class="designer-element" data-shinyfunction="tags$$tag$">$value$';constructor(){super(),this.updateComponent(!0)}createComponent(){let t=$("#sidebar-text-tag").val(),e=$("#sidebar-text-textarea").val(),a=t==="p"?e.replace(/\n/g," "):this.createListItems(e);return this.replaceHTMLPlaceholders(this.html,{tag:t,value:a})}createListItems(t){return t.split(` `).map(e=>'
  • '+e+"
  • ").join("")}};var C=class extends c{updatable=!1;html='
    ';constructor(t=!0){super(),t&&this.updateComponent(!0)}sortable_settings={group:{name:"shared",put:function(t,e,a){return a.classList.contains("form-group")||a.classList.contains("btn")}}}};var H=class extends c{constructor(t){super(),this.type=t,this.updateComponent(!0)}types=[{value:"text_input",label:"Text",r_func:"textInput"},{value:"textarea",label:"Textarea",r_func:"textAreaInput"},{value:"numeric",label:"Numeric",r_func:"numericInput"},{value:"password",label:"Password",r_func:"passwordInput"}];html=`
    {\r\n Sortable.create(el, {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n })\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BasicPage extends Page {\r\n name = 'basicPage'\r\n enable_on_load = false\r\n page_html = '
    '\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FillPage extends Page {\r\n name = 'fillPage'\r\n page_html = `\r\n
    \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FixedPage extends Page {\r\n name = 'fixedPage'\r\n page_html = `\r\n
    \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FluidPage extends Page {\r\n name = 'fluidPage'\r\n page_html = `\r\n
    \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BootstrapPage extends Page {\r\n name = 'bootstrapPage'\r\n page_html = `\r\n
    \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class NavbarPage extends Page {\r\n name = 'navbarPage'\r\n navbar_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class DashboardPage extends Page {\r\n name = 'dashboardPage'\r\n navbar_item_style = ''\r\n bs4_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n `\r\n};\r\n", "export function initSettings () {\r\n $('#settings-page_type').on('click', () => $('.canvas-modal').css('display', 'none'))\r\n\r\n $('.copy-ui-button').on('click', copyUICode)\r\n $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') })\r\n $('#css_style').on('change', applyCustomStyle)\r\n\r\n $('#remove_label').on('change', toggleComponentLabels)\r\n $('#remove_colour').on('change', toggleBackgroundColours)\r\n $('#remove_border').on('change', toggleBorders)\r\n $('#canvas_clear').on('click', showClearWarning)\r\n $('#confirm_clear').on('click', clearCanvas)\r\n\r\n $('.component-accordion .card-header button').on('click', scrollToComponent)\r\n\r\n $('body').on('click', () => {\r\n if (document.querySelector('body').classList.contains('sidebar-mini')) {\r\n document.querySelector('body').classList.remove('sidebar-mini')\r\n }\r\n })\r\n\r\n $(document).on('click', '.clickable-dropdown', e => { e.stopPropagation() })\r\n $('#preview').on('click', () => {\r\n $('#settings-options_button').trigger('click')\r\n $('.page-canvas-shell').addClass('preview')\r\n })\r\n $('#canvas-close_preview').on('click', () => { $('.page-canvas-shell').removeClass('preview') })\r\n\r\n Shiny.addCustomMessageHandler('toggleBS4DashDeps', toggleBS4DashDeps)\r\n // eslint-disable-next-line no-eval\r\n Shiny.addCustomMessageHandler('runjs', function (message) { (0, eval)(message.script) })\r\n\r\n $('body').on('click contextmenu', closeCanvasMenu)\r\n $('#canvas-canvas').on('contextmenu', showCanvasMenu)\r\n $('#canvas-menu').on('contextmenu', e => { e.preventDefault() })\r\n $('#sidebar-container').on('mousedown', closeCanvasMenu)\r\n\r\n $('#canvas-delete').on('click', deleteDesignerElement)\r\n\r\n $('#settings-template-search').on('input', toggleSavedTemplates)\r\n $(document).on('click', '.template-option', sendSavedTemplateID)\r\n};\r\n\r\nfunction toggleComponentLabels () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-after-label')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n }\r\n};\r\n\r\nfunction toggleBackgroundColours () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-colour')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-colour')\r\n }\r\n};\r\n\r\nfunction toggleBorders () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-borders')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-borders')\r\n }\r\n};\r\n\r\nfunction showClearWarning () {\r\n if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n return null\r\n } else {\r\n $('#clear_modal').modal()\r\n }\r\n};\r\n\r\nfunction clearCanvas () {\r\n $('#canvas-page').html('')\r\n};\r\n\r\nfunction copyUICode () {\r\n const copyText = document.getElementById('settings-code-code').textContent\r\n navigator.clipboard.writeText(copyText)\r\n $('#copy_toast').toast('show')\r\n};\r\n\r\nfunction toggleBS4DashDeps (toggle) {\r\n const stylesheets = document.styleSheets\r\n for (let i = 0; i < stylesheets.length; i++) {\r\n const stylesheet = stylesheets.item(i)\r\n if (stylesheet.href && (stylesheet.href.includes('AdminLTE') || stylesheet.href.includes('bs4Dash'))) {\r\n stylesheet.disabled = toggle === 'hide'\r\n }\r\n }\r\n};\r\n\r\nfunction scrollToComponent () {\r\n const cardHeader = this.closest('.card-header').id\r\n setTimeout(\r\n () => {\r\n document.getElementById(cardHeader).scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n $(this).trigger('blur')\r\n },\r\n 250\r\n )\r\n}\r\n\r\nlet selectedElement\r\n\r\nfunction showCanvasMenu (event) {\r\n if ($(event.target).closest('.designer-element').length === 0) {\r\n return\r\n }\r\n event.preventDefault()\r\n\r\n const { clientX: mouseX, clientY: mouseY } = event\r\n const { normalizedX, normalizedY } = normalizeMenuPosition(mouseX, mouseY)\r\n\r\n selectedElement = $(event.target).closest('.designer-element')\r\n\r\n $('#canvas-menu').css('top', `${normalizedY}px`)\r\n $('#canvas-menu').css('left', `${normalizedX}px`)\r\n $('#canvas-menu').removeClass('visible')\r\n\r\n setTimeout(() => { $('#canvas-menu').addClass('visible') })\r\n};\r\n\r\nfunction normalizeMenuPosition (mouseX, mouseY) {\r\n const scope = document.getElementById('canvas-canvas')\r\n const contextMenu = document.getElementById('canvas-menu')\r\n\r\n let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect()\r\n\r\n scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX\r\n scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY\r\n\r\n const scopeX = mouseX - scopeOffsetX\r\n const scopeY = mouseY - scopeOffsetY\r\n\r\n const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth\r\n const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight\r\n\r\n let normalizedX = mouseX\r\n let normalizedY = mouseY\r\n\r\n if (outOfBoundsOnX) {\r\n normalizedX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth\r\n }\r\n if (outOfBoundsOnY) {\r\n normalizedY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight\r\n }\r\n\r\n return { normalizedX, normalizedY }\r\n};\r\n\r\nfunction closeCanvasMenu () {\r\n $('#canvas-menu').removeClass('visible')\r\n};\r\n\r\nfunction deleteDesignerElement (event) {\r\n selectedElement.remove()\r\n};\r\n\r\nfunction applyCustomStyle (event) {\r\n const cssFile = event.target.files[0]\r\n const canvasStyle = document.getElementById('canvas-style')\r\n canvasStyle.innerHTML = ''\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n const file = e.target.result\r\n const lines = file.split(/\\r\\n|\\n|(?<=\\}\\b)/)\r\n canvasStyle.innerHTML = lines.join('\\n')\r\n\r\n const cssRules = canvasStyle.sheet.cssRules\r\n for (let i = 0; i < cssRules.length; i++) {\r\n if (cssRules[i].selectorText) {\r\n cssRules[i].selectorText = addCanvasPageSelector(cssRules[i].selectorText)\r\n } else if (cssRules[i].media && cssRules[i].cssRules) {\r\n const cssMediaRules = cssRules[i].cssRules\r\n for (let j = 0; j < cssMediaRules.length; j++) {\r\n cssMediaRules[j].selectorText = addCanvasPageSelector(cssMediaRules[j].selectorText)\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.onerror = (e) => alert(e.target.error.name)\r\n reader.readAsText(cssFile)\r\n};\r\n\r\nfunction addCanvasPageSelector (selectors) {\r\n return selectors.split(/, */g).map((x) => {\r\n if (x === 'body') {\r\n return '#canvas-page'\r\n } else if (/^\\.wrapper\\.sidebar/.test(x)) {\r\n return x.replace('.wrapper', '')\r\n } else {\r\n return '#canvas-page ' + x\r\n }\r\n }).join(', ')\r\n};\r\n\r\nlet template_selected = false\r\nexport function templateSelected () {\r\n return template_selected\r\n};\r\n\r\nexport function templateUpated () {\r\n template_selected = false\r\n}\r\n\r\nfunction toggleSavedTemplates (event) {\r\n const search_term = event.target.value ? event.target.value : ''\r\n\r\n document.getElementsByClassName('template-option').forEach(x => {\r\n const show_template = $(x).find('.title').html().includes(search_term) || $(x).find('.description').html().includes(search_term)\r\n x.style.display = show_template ? null : 'none'\r\n })\r\n}\r\n\r\nfunction sendSavedTemplateID (event) {\r\n const selected_template = $(event.target).closest('.template-option')\r\n const page_choice = selected_template.data('page')\r\n template_selected = true\r\n\r\n const to_delete = $(event.target).closest('.delete').length > 0 || event.target.classList.contains('delete')\r\n\r\n if (!to_delete) {\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n }\r\n\r\n document.getElementById('settings-template-search').value = null\r\n $('#settings-template-search').trigger('input')\r\n\r\n Shiny.setInputValue('settings-template-select', selected_template.data('value'))\r\n Shiny.setInputValue('settings-template-delete', to_delete)\r\n};\r\n", "import { BasicPage } from './BasicPage'\r\nimport { FillPage } from './FillPage'\r\nimport { FixedPage } from './FixedPage'\r\nimport { FluidPage } from './FluidPage'\r\nimport { BootstrapPage } from './BootstrapPage'\r\nimport { NavbarPage } from './NavbarPage'\r\nimport { DashboardPage } from './DashboardPage'\r\nimport { templateSelected, templateUpated } from '../app/settings'\r\n\r\nexport let page\r\n\r\nexport function createPage () {\r\n const page_type = $('#settings-page_type input:radio:checked').val()\r\n\r\n if (page_type === 'basicPage') {\r\n page = new BasicPage()\r\n } else if (page_type === 'fillPage') {\r\n page = new FillPage()\r\n } else if (page_type === 'fixedPage') {\r\n page = new FixedPage()\r\n } else if (page_type === 'fluidPage') {\r\n page = new FluidPage()\r\n } else if (page_type === 'bootstrapPage') {\r\n page = new BootstrapPage()\r\n } else if (page_type === 'navbarPage') {\r\n page = new NavbarPage()\r\n } else if (page_type === 'dashboardPage') {\r\n page = new DashboardPage()\r\n } else {\r\n page = new BasicPage()\r\n }\r\n\r\n page.updatePage()\r\n\r\n if (templateSelected()) {\r\n templateUpated()\r\n } else if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n\r\n page.updateComponentDropdown()\r\n return page\r\n};\r\n\r\nexport function selectPage () {\r\n let button_el = $(this)\r\n if (!$(this).hasClass('canvas-page-choice')) {\r\n button_el = $(this).closest('.canvas-page-choice')\r\n }\r\n\r\n button_el.closest('.canvas-modal').css('display', 'none')\r\n\r\n const page_choice = button_el.data('page')\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n}\r\n\r\nexport function changePageCheck () {\r\n if (templateSelected()) {\r\n return null\r\n } else if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n $('#canvas-page').html('
    ')\r\n createPage()\r\n } else {\r\n $('#warning_modal').modal()\r\n }\r\n};\r\n\r\nexport function revertPageSelection () {\r\n $(`#settings-page_type input[value=\"${page.name}\"]`).trigger('click')\r\n}\r\n\r\nexport function updateTitle (el) {\r\n const title = $(el.target).val()\r\n $('#canvas-title').html(title)\r\n $('.navbar-brand').html(title)\r\n $('.brand-link').html(title)\r\n\r\n if ($('#canvas-page').data('shinyattributes')) {\r\n const shiny_atts = $('#canvas-page').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page').attr('data-shinyattributes', shiny_atts)\r\n }\r\n\r\n if ($('#canvas-page>.main-header').data('shinyattributes')) {\r\n const shiny_atts2 = $('#canvas-page>.main-header').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page>.main-header').attr('data-shinyattributes', shiny_atts2)\r\n }\r\n}\r\n", "import { selectPage, changePageCheck, createPage, updateTitle, revertPageSelection } from './utils'\r\n\r\nexport function initPage () {\r\n createPage()\r\n $('.canvas-page-choice').on('click', selectPage)\r\n $('#settings-page_type').on('change', changePageCheck)\r\n $('#cancel_reset').on('click', revertPageSelection)\r\n $('#confirm_reset').on('click', createPage)\r\n\r\n $('#app_name').on('change keyup', updateTitle)\r\n};\r\n", "export function screenshotSettings () {\r\n Shiny.addCustomMessageHandler('prepare_canvas_screenshot', (message) => {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n $('.designer-page-template').addClass('hidden-colour')\r\n $('.designer-page-template').addClass('hidden-borders')\r\n })\r\n\r\n Shiny.addCustomMessageHandler('revert_canvas_screenshot', (message) => {\r\n $('#remove_label').trigger('change')\r\n $('#remove_colour').trigger('change')\r\n $('#remove_border').trigger('change')\r\n })\r\n}\r\n", "export let component\r\n\r\nexport class Component {\r\n updatable = true\r\n display_comments = true\r\n display_container = true\r\n has_card_body = false\r\n is_tab = false\r\n html = '
    '\r\n sortable_settings = null\r\n\r\n constructor () {\r\n component = this\r\n }\r\n\r\n createComponent () {\r\n return this.html\r\n };\r\n\r\n replaceHTMLPlaceholders (html, options) {\r\n for (const property in options) {\r\n html = html.replaceAll('$' + property + '$', options[property])\r\n }\r\n return html\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n\r\n $('.component-container').html(null)\r\n const html = this.createComponent()\r\n $('.component-container').html(html)\r\n this.addComments()\r\n if (update_sortable) {\r\n this.enableSortable()\r\n }\r\n };\r\n\r\n enableSortable () {\r\n Sortable.create(\r\n document.getElementById('sidebar-container'), {\r\n group: {\r\n name: 'shared',\r\n pull: 'clone',\r\n put: false\r\n },\r\n onClone: function (evt) {\r\n if (component.sortable_settings) {\r\n if (component.has_card_body) {\r\n Sortable.create($(evt.item).find('.card-body')[0], component.sortable_settings)\r\n } else if (component.is_tab) {\r\n Sortable.create($(evt.item).find('.tab-content'), component.sortable_settings)\r\n } else {\r\n Sortable.create(evt.item, component.sortable_settings)\r\n }\r\n }\r\n },\r\n onEnd: function (_evt) {\r\n $('.page-canvas [data-toggle=\"tooltip\"]').tooltip()\r\n if (component.updatable || $('#sidebar-comments').val() !== '') {\r\n $('#sidebar-comments').val('')\r\n component.updateComponent()\r\n }\r\n }\r\n })\r\n };\r\n\r\n addComments () {\r\n const comments = $('#sidebar-comments').val()\r\n if (comments) {\r\n $('.component-container>.designer-element').attr('data-shinycomments', comments)\r\n $('.component-container>.designer-element').attr('title', comments)\r\n $('.component-container>.designer-element').attr('data-toggle', 'tooltip')\r\n }\r\n };\r\n\r\n createID (prefix = '') {\r\n prefix = prefix ? prefix + '_' : prefix\r\n return prefix + Math.random().toString(36).substring(2, 12)\r\n };\r\n\r\n validateCssUnit (x, fallback) {\r\n if (this._regex.test(x)) {\r\n return x\r\n } else if (/^\\d+$/.test(x)) {\r\n return x + 'px'\r\n } else {\r\n return fallback\r\n }\r\n };\r\n\r\n _regex = /^(auto|inherit|fit-content|calc\\(.*\\)|((\\.\\d+)|(\\d+(\\.\\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/\r\n};\r\n", "import { Component } from './Component'\r\n\r\nexport class Header extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-header-tag').val()\r\n const value = $('#sidebar-header-text').val()\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Row extends Component {\r\n updatable = false\r\n html = '
    '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Column extends Component {\r\n updatable = false\r\n html = '
    '\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n createComponent () {\r\n const width = $('#sidebar-column-width_num').val()\r\n const offset = $('#sidebar-column-offset').val()\r\n\r\n const offset_class = offset > 0 ? ` offset-md-${offset}` : ''\r\n const offset_r = offset > 0 ? `, offset = ${offset}` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { width, offset_class, offset_r })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Text extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"tags$$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-text-tag').val()\r\n const value = $('#sidebar-text-textarea').val()\r\n const contents = tag === 'p' ? value.replace(/\\n/g, ' ') : this.createListItems(value)\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value: contents })\r\n }\r\n\r\n createListItems (text) {\r\n return text.split('\\n').map(x => '
  • ' + x + '
  • ').join('')\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InputPanel extends Component {\r\n updatable = false\r\n html = '
    '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('form-group') || clone.classList.contains('btn')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Input extends Component {\r\n constructor (type) {\r\n super()\r\n this.type = type\r\n this.updateComponent(true)\r\n }\r\n\r\n types = [\r\n { value: 'text_input', label: 'Text', r_func: 'textInput' },\r\n { value: 'textarea', label: 'Textarea', r_func: 'textAreaInput' },\r\n { value: 'numeric', label: 'Numeric', r_func: 'numericInput' },\r\n { value: 'password', label: 'Password', r_func: 'passwordInput' }\r\n ]\r\n\r\n html = `\r\n
    $input_tag$
    \r\n `\r\n\r\n createComponent () {\r\n const label = $(`#sidebar-${this.type}-label`).val()\r\n\r\n let id = $(`#sidebar-${this.type}-id`).val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_info = this.types.find(x => x.value === this.type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n\r\n let input_tag\r\n if (this.type === 'textarea') {\r\n input_tag = ''\r\n } else {\r\n input_tag = ``\r\n }\r\n\r\n const width = this.validateCssUnit($(`#sidebar-${this.type}-width`).val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class FileInput extends Component {\r\n html = `\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-file-label').val()\r\n\r\n let id = $('#sidebar-file-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-file-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SelectInput extends Component {\r\n html = `\r\n
    \r\n \r\n
    \r\n \r\n `\r\n\r\n date_range_input_html = `\r\n
    \r\n \r\n \r\n to \r\n \r\n \r\n
    \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-date-label').val()\r\n\r\n let id = $('#sidebar-date-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-date-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const range = document.getElementById('sidebar-date-range').checked\r\n const r_func = range ? 'dateRangeInput' : 'dateInput'\r\n const date_class = range ? 'shiny-date-range-input' : 'shiny-date-input'\r\n const input_tag = range ? this.date_range_input_html : this.date_input_html\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n date_class,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n $('.component-container').find('input').bsDatepicker()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxInput extends Component {\r\n html = `\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-checkbox-label').val()\r\n\r\n let id = $('#sidebar-checkbox-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-checkbox-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxGroupInput extends Component {\r\n types = [\r\n { value: 'radio', label: 'Radio', r_func: 'radioButtons', role: 'radiogroup' },\r\n { value: 'checkbox', label: 'Checkbox', r_func: 'checkboxGroupInput', role: 'group' }\r\n ]\r\n\r\n html = `\r\n
    \r\n \r\n
    \r\n $choices$\r\n
    \r\n
    \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-radio-label').val()\r\n\r\n let id = $('#sidebar-radio-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const type = $('#sidebar-radio-type').val()\r\n const input_info = this.types.find(x => x.value === type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n const role = input_info.role\r\n\r\n const width = this.validateCssUnit($('#sidebar-radio-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const inline = document.getElementById('sidebar-radio-inline').checked\r\n const inline_class = inline ? '-inline' : ''\r\n const inline_str = inline ? ', inline = TRUE' : ''\r\n const css_class = `shiny-input-${type}group${inline_class}`\r\n\r\n const choices = $('#sidebar-radio-choices').val()\r\n const choices_str = `, choices = c("${choices.replace(/\\n/g, '", "')}")`\r\n const choices_html = choices.split('\\n').map(x => this.createCheckbox(x, type, inline)).join('')\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n css_class,\r\n r_func,\r\n role,\r\n choices: choices_html,\r\n choices_str,\r\n inline_str,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n createCheckbox (x, type = 'checkbox', inline = false) {\r\n const check_class = inline ? type + '-inline' : type\r\n return ``\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SliderInput extends Component {\r\n html = `\r\n
    \r\n \r\n \r\n
    \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-slider-label').val()\r\n\r\n let id = $('#sidebar-slider-id').val()\r\n id = id === '' ? this.createID('slider') : id\r\n\r\n const format = $('#sidebar-slider-type').val()\r\n\r\n const width = this.validateCssUnit($('#sidebar-slider-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const ranged = document.getElementById('sidebar-slider-range').checked\r\n const values = this.getValues(format, ranged)\r\n const range_attr = ranged ? 'data-type=\"double\" data-drag-interval=\"true\" data-to=\"$to$\"' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n range_attr,\r\n id,\r\n label,\r\n format,\r\n min: values.min,\r\n max: values.max,\r\n step: values.step,\r\n from: values.from,\r\n to: values.to,\r\n style_str,\r\n width_str,\r\n value_str: values.value_str,\r\n time_format: values.time_format\r\n })\r\n };\r\n\r\n getValues (format, range = false) {\r\n if (format === 'number') {\r\n return {\r\n step: 1,\r\n min: 0,\r\n max: 10,\r\n from: 5,\r\n to: 7,\r\n value_str: `, min = 0, max = 10, value = ${range ? 'c(5, 7)' : 5}`\r\n }\r\n }\r\n\r\n const curr_date = new Date()\r\n if (format === 'date') {\r\n curr_date.setHours(0, 0, 0, 0)\r\n }\r\n const curr_time = curr_date.getTime()\r\n const step = format === 'date' ? 1000 * 60 * 60 * 24 : 1000\r\n\r\n const min = curr_time - 5 * step\r\n const max = curr_time + 5 * step\r\n const from = curr_time\r\n const to = curr_time + 2 * step\r\n\r\n const r_datefunc = format === 'date' ? 'Sys.Date()' : 'Sys.time()'\r\n const r_mult = format === 'date' ? '' : '000'\r\n const input_value_str = range ? `\"c(${r_datefunc}, ${r_datefunc} + 2${r_mult})\"` : r_datefunc\r\n\r\n return {\r\n step,\r\n min,\r\n max,\r\n from,\r\n to,\r\n time_format: format === 'date' ? '%F' : '%F %T',\r\n value_str: `, min = ${r_datefunc} - 5${r_mult}, max = ${r_datefunc} + 5${r_mult}, value = ${input_value_str}`\r\n }\r\n }\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n const slider_type = $('#sidebar-slider-type').val()\r\n $('.component-container').find('input').ionRangeSlider({ prettify: this.getSliderPrettifier(slider_type) })\r\n };\r\n\r\n getSliderPrettifier (type) {\r\n if (type === 'date') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate()\r\n }\r\n } else if (type === 'datetime') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate() + ' ' +\r\n sel_date.getHours() + ':' + sel_date.getMinutes() + ':' + sel_date.getSeconds()\r\n }\r\n } else {\r\n return null\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Button extends Component {\r\n types = [\r\n { value: 'default', css_class: 'btn-default' },\r\n { value: 'primary', css_class: 'btn-primary' },\r\n { value: 'secondary', css_class: 'btn-secondary' },\r\n { value: 'success', css_class: 'btn-success' },\r\n { value: 'danger', css_class: 'btn-danger' },\r\n { value: 'warning', css_class: 'btn-warning' },\r\n { value: 'info', css_class: 'btn-info' },\r\n { value: 'light', css_class: 'btn-light' },\r\n { value: 'dark', css_class: 'btn-dark' }\r\n ]\r\n\r\n html = `\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-button-label').val()\r\n\r\n let id = $('#sidebar-button-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_type = $('#sidebar-button-type').val()\r\n const input_info = this.types.find(x => x.value === input_type)\r\n if (!input_info) return\r\n const btn_class = input_info.css_class\r\n const class_str = input_type === 'default' ? '' : `, class = "${btn_class}"`\r\n\r\n const downloadable = document.getElementById('sidebar-button-download').checked\r\n const r_func = downloadable ? 'downloadButton' : 'actionButton'\r\n let icon_html = downloadable ? '' : ''\r\n const id_arg = downloadable ? 'outputId' : 'inputId'\r\n\r\n const tab_icon = $('#sidebar-button-icon').val()\r\n const icon_r = tab_icon === '' || downloadable ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' || downloadable ? '' : $('#sidebar-button-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n icon_html = tab_icon === '' || downloadable ? icon_html : ``\r\n\r\n const width = this.validateCssUnit($('#sidebar-button-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n id_arg,\r\n label,\r\n r_func,\r\n icon_r,\r\n icon_html,\r\n btn_class,\r\n class_str,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Output extends Component {\r\n types = [\r\n { value: 'text', label: 'Text', css_class: 'text-output-element shiny-text-output', r_func: 'textOutput', placeholder: 'Text Output: ' },\r\n { value: 'verbatim', label: 'Verbatim Text', css_class: 'verbatimtext-output-element shiny-text-output', r_func: 'verbatimTextOutput', placeholder: 'Verbatim Text Output: ' },\r\n { value: 'plot', label: 'Plot', css_class: 'plot-output-element shiny-plot-output', r_func: 'plotOutput' },\r\n { value: 'image', label: 'Image', css_class: 'image-output-element shiny-image-output', r_func: 'imageOutput' },\r\n { value: 'table', label: 'Table', css_class: 'table-output-element shiny-datatable-output', r_func: 'DT::DTOutput' },\r\n { value: 'html', label: 'HTML', css_class: 'html-output-element shiny-html-output', r_func: 'uiOutput', placeholder: 'Placeholder for HTML Output' }\r\n ]\r\n\r\n html = `\r\n <$html_tag$ $id_str$ class=\"designer-element output-element $css_class$\"\r\n style=\"$style_str$\"\r\n data-shinyfunction=\"$r_func$\"\r\n data-shinyattributes=\"outputId = "$id$"$inline_str$$dim_str$\">\r\n $output_tag$\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-output-label').val()\r\n\r\n let id = $('#sidebar-output-id').val()\r\n id = id === '' ? this.createID('output') : id\r\n\r\n const output_type = $('#sidebar-output-type').val()\r\n const output_info = this.types.find(x => x.value === output_type)\r\n if (!output_info) return\r\n const r_func = output_info.r_func\r\n let html_tag = output_type === 'verbatim' ? 'pre' : 'div'\r\n const css_class = output_info.css_class\r\n\r\n let id_str = ''\r\n if (['plot', 'image', 'table'].includes(output_type)) {\r\n const designer_id = this.createID('output')\r\n Shiny.setInputValue('sidebar-outputid', designer_id)\r\n id_str = `id=\"sidebar-${designer_id}\"`\r\n }\r\n\r\n const inline = document.getElementById('sidebar-output-inline').checked\r\n const inline_str = inline && !['verbatim', 'table'].includes(output_type) ? ', inline = TRUE' : ''\r\n if (inline_str !== '') {\r\n html_tag = 'span'\r\n }\r\n\r\n let dim_str = ''\r\n let style_str = ''\r\n\r\n if (['plot', 'image'].includes(output_type)) {\r\n const width = this.validateCssUnit($('#sidebar-output-width').val(), '100%')\r\n style_str = `width: ${width};`\r\n dim_str = width === '100%' ? '' : `, width = "${width}"`\r\n\r\n const height = this.validateCssUnit($('#sidebar-output-height').val(), '400px')\r\n style_str = style_str + ` height: ${height};`\r\n dim_str = dim_str + (height === '400px' ? '' : `, height = "${height}"`)\r\n }\r\n\r\n let output_tag = ''\r\n if (output_info.placeholder) {\r\n if (output_type === 'html') {\r\n output_tag = `${output_info.placeholder}`\r\n } else {\r\n output_tag = `${output_info.placeholder} ${$('#sidebar-output-textarea').val()}`\r\n }\r\n }\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n html_tag,\r\n id,\r\n label,\r\n id_str,\r\n r_func,\r\n css_class,\r\n style_str,\r\n dim_str,\r\n inline_str,\r\n output_tag\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n Shiny.bindAll()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tab extends Component {\r\n _item = 1\r\n\r\n updateComponent () {};\r\n\r\n getPageType () {\r\n return $('#settings-page_type input:radio:checked').val()\r\n };\r\n\r\n addPage () {\r\n const page_type = this.getPageType()\r\n\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n if (tab_value === '') {\r\n tab_value = this.createID('tab')\r\n } else if (this.checkDuplicateIDs(tab_value, page_type)) {\r\n return\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('ul.navbar-nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
  • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
  • \r\n `)\r\n\r\n tab_panel.append(`\r\n
    \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const tab_panel = $('section.content .tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n $('.sidebarMenuSelectedTabItem').before(`\r\n
  • \r\n \r\n ${icon_html}\r\n

    ${tab_name}

    \r\n
    \r\n
  • \r\n `)\r\n\r\n if (!$('.sidebarMenuSelectedTabItem').attr('data-value')) {\r\n $('.sidebarMenuSelectedTabItem').attr('data-value', tab_value)\r\n }\r\n\r\n tab_panel.append(`\r\n
    \r\n `)\r\n\r\n this.enableSortablePage(`shiny-tab-${tab_value}`)\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
    \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
    \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-name='${tab_name}']`\r\n } else {\r\n return `ul.navbar-nav a[data-name='${tab_name}']`\r\n }\r\n };\r\n\r\n checkDuplicateIDs (tab_value, page_type) {\r\n if ($(this.getValueIdentifier(tab_value, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
    \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
    \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-value='${tab_value}']`\r\n } else {\r\n return `ul.navbar-nav a[data-value='${tab_value}']`\r\n }\r\n };\r\n\r\n deletePage () {\r\n const page_type = this.getPageType()\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n\r\n if (this.checkMissingName(tab_name, page_type)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name, page_type)).length > 1 && tab_value === '') {\r\n $('#sidebar-tab-alert').html(`\r\n
    \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
    \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`ul.nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`#tab-${tab_value}`).parent().remove()\r\n $(`#shiny-tab-${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tab-alert').html(`\r\n
    \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
    \r\n `)\r\n return true\r\n }\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tabset extends Component {\r\n _item = 1\r\n id\r\n html\r\n is_tab = true\r\n\r\n constructor () {\r\n super()\r\n this.id = this.getTabID()\r\n\r\n if (this.isDashPage()) {\r\n this.html = `\r\n
    \r\n
    \r\n
    \r\n
      $title$
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    `\r\n } else {\r\n this.html = `\r\n
    \r\n
      \r\n
      \r\n
      `\r\n }\r\n\r\n this.updateComponent(true)\r\n };\r\n\r\n createComponent () {\r\n if (this.isDashPage()) {\r\n const label = $('#sidebar-tabset-label').val()\r\n const title = label === '' ? '' : `
    • ${label}

    • `\r\n const title_r = label === '' ? '' : `title = "${label}", `\r\n\r\n const width = $('#sidebar-tabset-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-tabset-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-tabset-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n title,\r\n title_r,\r\n label,\r\n width,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n } else {\r\n const type = $('#sidebar-tabset-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n type\r\n })\r\n }\r\n };\r\n\r\n isDashPage () {\r\n return this.getPageType() === 'dashboardPage'\r\n };\r\n\r\n getPageType () {\r\n if (typeof (window) === 'undefined') {\r\n return 'navbarPage'\r\n } else {\r\n return $('#settings-page_type input:radio:checked').val()\r\n }\r\n };\r\n\r\n addPage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n if (tab_value === '') {\r\n tab_value = tab_name\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('.component-container>.tabbable>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container>.tabbable>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
    • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
    • \r\n `)\r\n\r\n tab_panel.append(`\r\n
      \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const nav_panel = $('.component-container .card-header>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container .card-body>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
    • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
    • \r\n `)\r\n\r\n tab_panel.append(`\r\n
      \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
      \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
      \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name) {\r\n return `.component-container .nav a[data-name='${tab_name}']`\r\n };\r\n\r\n checkDuplicateIDs (tab_value) {\r\n if ($(this.getValueIdentifier(tab_value)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
      \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
      \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value) {\r\n return `.component-container .nav a[data-value='${tab_value}']`\r\n };\r\n\r\n deletePage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n\r\n if (this.checkMissingName(tab_name)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name)).length > 1 && tab_value === '') {\r\n $('#sidebar-tabset-alert').html(`\r\n
      \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
      \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n if (tab_value === '') {\r\n tab_value = $(`.component-container .nav-item a[data-name='${tab_name}']`).attr('href')\r\n } else {\r\n tab_value = '#' + $(`.component-container .tab-pane[data-value='${tab_value}']`).attr('id')\r\n }\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`.component-container ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`.component-container .nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.component-container .tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`.component-container .nav-item a[href='${tab_value}']`).parent().remove()\r\n $(`${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tabset-alert').html(`\r\n
      \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
      \r\n `)\r\n return true\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Box extends Component {\r\n has_card_body = true\r\n html = `\r\n
      \r\n
      \r\n
      \r\n

      $label$

      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-box-label').val()\r\n\r\n const width = $('#sidebar-box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class UserBox extends Component {\r\n has_card_body = true\r\n html = `\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n

      $label$

      \r\n
      \r\n
      \r\n \"User\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-user_box-label').val()\r\n\r\n const width = $('#sidebar-user_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-user_box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-user_box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n const type = $('#sidebar-user_box-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class,\r\n type\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class ValueBox extends Component {\r\n html = `\r\n
      \r\n
      \r\n
      \r\n $value$\r\n

      \r\n $label$\r\n

      \r\n
      \r\n $icon_html$\r\n
      \r\n
      \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-value_box-value').val()\r\n const label = $('#sidebar-value_box-label').val()\r\n\r\n const width = $('#sidebar-value_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-value_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-value_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : `
      `\r\n\r\n const background = $('#sidebar-value_box-background').val()\r\n const background_class = `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InfoBox extends Component {\r\n html = `\r\n
      \r\n
      \r\n \r\n $icon_html$\r\n \r\n
      \r\n $label$\r\n $value$\r\n
      \r\n
      \r\n
      \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-info_box-value').val()\r\n const label = $('#sidebar-info_box-label').val()\r\n\r\n const width = $('#sidebar-info_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-info_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-info_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n const background = $('#sidebar-info_box-background').val()\r\n const background_class = `bg-${background}`\r\n const fill_box = document.getElementById('sidebar-info_box-fill').checked\r\n const fill_r = fill_box ? ', fill = TRUE' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: fill_box ? background_class : '',\r\n colour_class2: fill_box ? '' : background_class,\r\n fill_r\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class BlockQuote extends Component {\r\n html = '
      $value$
      '\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const colour = $('#sidebar-quote-colour').val()\r\n const value = $('#sidebar-quote-textarea').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { colour, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Callout extends Component {\r\n html = `\r\n
      \r\n
      \r\n
      $title$
      \r\n $value$\r\n
      \r\n `\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const title = $('#sidebar-callout-label').val()\r\n const status = $('#sidebar-callout-colour').val()\r\n const value = $('#sidebar-callout-textarea').val()\r\n\r\n const width = $('#sidebar-callout-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n title,\r\n status,\r\n value,\r\n width_r,\r\n width_class\r\n })\r\n }\r\n}\r\n", "import { Header } from './Header'\r\nimport { Row } from './Row'\r\nimport { Column } from './Column'\r\nimport { Text } from './Text'\r\nimport { InputPanel } from './InputPanel'\r\nimport { Input } from './Input'\r\nimport { FileInput } from './FileInput'\r\nimport { SelectInput } from './SelectInput'\r\nimport { DateInput } from './DateInput'\r\nimport { CheckboxInput } from './Checkbox'\r\nimport { CheckboxGroupInput } from './CheckboxGroup'\r\nimport { SliderInput } from './SliderInput'\r\nimport { Button } from './Button'\r\nimport { Output } from './Output'\r\nimport { Tab } from './Tab'\r\nimport { Tabset } from './Tabset'\r\nimport { Box } from './Box'\r\nimport { UserBox } from './UserBox'\r\nimport { ValueBox } from './ValueBox'\r\nimport { InfoBox } from './InfoBox'\r\nimport { BlockQuote } from './BlockQuote'\r\nimport { Callout } from './Callout'\r\n\r\nexport function getComponent (name) {\r\n if (name === 'header') {\r\n return new Header()\r\n } else if (name === 'row') {\r\n return new Row()\r\n } else if (name === 'column') {\r\n return new Column()\r\n } else if (name === 'text') {\r\n return new Text()\r\n } else if (name === 'input_panel') {\r\n return new InputPanel()\r\n } else if (['text_input', 'numeric', 'textarea', 'password'].includes(name)) {\r\n return new Input(name)\r\n } else if (name === 'dropdown') {\r\n return new SelectInput()\r\n } else if (name === 'file') {\r\n return new FileInput()\r\n } else if (name === 'date') {\r\n return new DateInput()\r\n } else if (name === 'checkbox') {\r\n return new CheckboxInput()\r\n } else if (name === 'radio') {\r\n return new CheckboxGroupInput()\r\n } else if (name === 'slider') {\r\n return new SliderInput()\r\n } else if (name === 'button') {\r\n return new Button()\r\n } else if (name === 'output') {\r\n return new Output()\r\n } else if (name === 'tab_panel') {\r\n return new Tab()\r\n } else if (name === 'tabset') {\r\n return new Tabset()\r\n } else if (name === 'box') {\r\n return new Box()\r\n } else if (name === 'user_box') {\r\n return new UserBox()\r\n } else if (name === 'value_box') {\r\n return new ValueBox()\r\n } else if (name === 'info_box') {\r\n return new InfoBox()\r\n } else if (name === 'quote') {\r\n return new BlockQuote()\r\n } else if (name === 'callout') {\r\n return new Callout()\r\n }\r\n\r\n return new Header()\r\n}\r\n", "import { getComponent } from './utils'\r\nimport { component } from './Component'\r\n\r\nexport function initComponents () {\r\n getComponent('header')\r\n\r\n $('.component-settings').on('change keyup', () => component.updateComponent())\r\n $('.component-comments').on('change blur', () => component.updateComponent())\r\n $('.component-container').on('mouseover', () => { $(':focus').trigger('blur') })\r\n\r\n $('.add-tab-button').on('click', () => component.addPage())\r\n $('.delete-tab-button').on('click', () => component.deletePage())\r\n\r\n $('.accordion .card-header .btn').on('click', (el) => {\r\n $(el.target).closest('.card').find('form').trigger('reset')\r\n\r\n const new_component = $(el.target).data('shinyelement')\r\n getComponent(new_component)\r\n document.getElementById('sidebar-container').style.display = new_component === 'tab_panel' ? 'none' : null\r\n })\r\n};\r\n", "export function htmlToJSON (el, inner = false) {\r\n const children = getChildrenJSON(el)\r\n\r\n const jsonElement = {\r\n tagName: el.tagName.toLowerCase(),\r\n r_function: el.dataset.shinyfunction,\r\n r_arguments: el.dataset.shinyattributes,\r\n r_comments: el.dataset.shinycomments,\r\n text: $(el).ignore().text().replace(/\\s*\\n\\s*/g, ''),\r\n htmlclass: el.className,\r\n children\r\n }\r\n\r\n if (inner) {\r\n return jsonElement\r\n } else {\r\n return JSON.stringify(jsonElement)\r\n }\r\n};\r\n\r\n$.fn.ignore = function (sel) {\r\n return this.clone().find(sel || '>*').remove().end()\r\n}\r\n\r\nfunction getChildrenJSON (el) {\r\n let children = []\r\n for (let i = 0; i < el.children.length; i++) {\r\n if (el.children[i].dataset.shinyfunction) {\r\n children.push(htmlToJSON(el.children[i], true))\r\n } else if (el.children[i].children.length) {\r\n const childContent = getChildrenJSON(el.children[i])\r\n if (childContent.length > 0) {\r\n children = children.concat(childContent)\r\n }\r\n }\r\n }\r\n return children\r\n};\r\n", "import { htmlToJSON } from './utils'\r\n\r\nexport const canvasPageBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasPageBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas')\r\n },\r\n getValue: function (el) {\r\n return htmlToJSON(document.getElementById('canvas-page'))\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas')\r\n }\r\n})\r\n", "import { page, createPage } from '../page/utils'\r\nimport { Column } from '../component/Column'\r\nimport { Row } from '../component/Row'\r\nimport { InputPanel } from '../component/InputPanel'\r\n\r\nexport const canvasBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas-shell')\r\n },\r\n getValue: function (el) {\r\n return $(el).find('.page-canvas').html()\r\n },\r\n setValue: function (el, value) {\r\n $(el).find('.page-canvas').html(value)\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas-shell')\r\n },\r\n receiveMessage (el, data) {\r\n $('.canvas-modal').css('display', 'none')\r\n\r\n createPage()\r\n page.updatePage()\r\n\r\n this.setValue(el, data)\r\n\r\n const sortableSettings = new Column(update_component = false).sortable_settings\r\n const sortableRowSettings = new Row(update_component = false).sortable_settings\r\n const sortableInputPanelSettings = new InputPanel(update_component = false).sortableSettings\r\n\r\n PARENT_DESIGNER_CLASSES.map(x => enableSortableComponent(x, sortableSettings))\r\n enableSortableComponent('designer-element row', sortableRowSettings)\r\n enableSortableComponent('designer-element shiny-input-panel', sortableInputPanelSettings)\r\n\r\n if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n page.updateComponentDropdown()\r\n }\r\n})\r\n\r\nconst PARENT_DESIGNER_CLASSES = ['tab-pane', 'designer-element col-sm', 'designer-element card-body']\r\n\r\nfunction enableSortableComponent (selector, settings) {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, settings)\r\n })\r\n}\r\n", "import { initPage } from '../page/init'\r\nimport { initSettings } from './settings'\r\nimport { screenshotSettings } from './screenshot'\r\nimport { initComponents } from '../component/init'\r\nimport { canvasPageBinding } from '../input/canvas-page-input'\r\nimport { canvasBinding } from '../input/canvas-canvas-input'\r\n\r\n$(function () {\r\n initPage()\r\n initComponents()\r\n initSettings()\r\n screenshotSettings()\r\n\r\n $('.help-icon').tooltip({ boundary: 'window', placement: 'right' })\r\n\r\n bsCustomFileInput.init()\r\n\r\n Sortable.create(document.getElementById('sidebar-bin'), {\r\n group: {\r\n name: 'shared',\r\n pull: false\r\n },\r\n handle: '.designer-element',\r\n draggable: '.designer-element',\r\n onAdd: function (evt) {\r\n this.el.removeChild(evt.item)\r\n }\r\n })\r\n})\r\n\r\nShiny.inputBindings.register(canvasPageBinding)\r\nShiny.inputBindings.register(canvasBinding)\r\n"], - "mappings": "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", + "sourcesContent": ["export class Page {\r\n name\r\n navbar_item_style = 'none'\r\n bs4_item_style = 'none'\r\n enable_on_load = true\r\n page_html\r\n\r\n updateComponentDropdown () {\r\n $('.navbar-tab-item').css('display', this.navbar_item_style)\r\n $('.bs4-item').css('display', this.bs4_item_style)\r\n\r\n const component = this.navbar_item_style === 'none' ? 'header' : 'tab'\r\n if (!$(`#sidebar-${component}-body`).hasClass('show')) {\r\n $(`#sidebar-${component}-header button`).trigger('click')\r\n }\r\n };\r\n\r\n getPageHTML (html, title = '') {\r\n return html.replaceAll('$page_id$', this.getTabID()).replaceAll('$title$', title)\r\n };\r\n\r\n updatePage () {\r\n const title = $('#canvas-title').html()\r\n $('.page-canvas').html(this.getPageHTML(this.page_html, title))\r\n };\r\n\r\n enableSortablePage (selector, by = 'id') {\r\n if (by === 'id') {\r\n Sortable.create(document.getElementById(selector), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n } else {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n })\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BasicPage extends Page {\r\n name = 'basicPage'\r\n enable_on_load = false\r\n page_html = '
      '\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FillPage extends Page {\r\n name = 'fillPage'\r\n page_html = `\r\n
      \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FixedPage extends Page {\r\n name = 'fixedPage'\r\n page_html = `\r\n
      \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FluidPage extends Page {\r\n name = 'fluidPage'\r\n page_html = `\r\n
      \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BootstrapPage extends Page {\r\n name = 'bootstrapPage'\r\n page_html = `\r\n
      \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class NavbarPage extends Page {\r\n name = 'navbarPage'\r\n navbar_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class DashboardPage extends Page {\r\n name = 'dashboardPage'\r\n navbar_item_style = ''\r\n bs4_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n `\r\n};\r\n", "export function initSettings () {\r\n $('#settings-page_type').on('click', () => $('.canvas-modal').css('display', 'none'))\r\n\r\n $('.copy-ui-button').on('click', copyUICode)\r\n $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') })\r\n $('#settings-code-download').on('click', () => {\r\n $('#settings-code_button').trigger('click')\r\n Shiny.bindAll('#settings-code-download_confirm')\r\n })\r\n $('#settings-code-download_confirm').on('click', () => {\r\n Shiny.unbindAll('#settings-code-download_confirm')\r\n })\r\n\r\n $('#css_style').on('change', applyCustomStyle)\r\n\r\n $('#remove_label').on('change', toggleComponentLabels)\r\n $('#remove_colour').on('change', toggleBackgroundColours)\r\n $('#remove_border').on('change', toggleBorders)\r\n $('#canvas_clear').on('click', showClearWarning)\r\n $('#confirm_clear').on('click', clearCanvas)\r\n\r\n $('.component-accordion .card-header button').on('click', scrollToComponent)\r\n\r\n $('body').on('click', () => {\r\n if (document.querySelector('body').classList.contains('sidebar-mini')) {\r\n document.querySelector('body').classList.remove('sidebar-mini')\r\n }\r\n })\r\n\r\n $(document).on('click', '.clickable-dropdown', e => { e.stopPropagation() })\r\n $('#preview').on('click', () => {\r\n $('#settings-options_button').trigger('click')\r\n $('.page-canvas-shell').addClass('preview')\r\n })\r\n $('#canvas-close_preview').on('click', () => { $('.page-canvas-shell').removeClass('preview') })\r\n\r\n Shiny.addCustomMessageHandler('toggleBS4DashDeps', toggleBS4DashDeps)\r\n // eslint-disable-next-line no-eval\r\n Shiny.addCustomMessageHandler('runjs', function (message) { (0, eval)(message.script) })\r\n\r\n $('body').on('click contextmenu', closeCanvasMenu)\r\n $('#canvas-canvas').on('contextmenu', showCanvasMenu)\r\n $('#canvas-menu').on('contextmenu', e => { e.preventDefault() })\r\n $('#sidebar-container').on('mousedown', closeCanvasMenu)\r\n\r\n $('#canvas-delete').on('click', deleteDesignerElement)\r\n\r\n $('#settings-template-search').on('input', toggleSavedTemplates)\r\n $(document).on('click', '.template-option', sendSavedTemplateID)\r\n};\r\n\r\nfunction toggleComponentLabels () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-after-label')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n }\r\n};\r\n\r\nfunction toggleBackgroundColours () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-colour')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-colour')\r\n }\r\n};\r\n\r\nfunction toggleBorders () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-borders')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-borders')\r\n }\r\n};\r\n\r\nfunction showClearWarning () {\r\n if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n return null\r\n } else {\r\n $('#clear_modal').modal()\r\n }\r\n};\r\n\r\nfunction clearCanvas () {\r\n $('#canvas-page').html('')\r\n};\r\n\r\nfunction copyUICode () {\r\n const copyText = document.getElementById('settings-code-code').textContent\r\n navigator.clipboard.writeText(copyText)\r\n $('#copy_toast').toast('show')\r\n};\r\n\r\nfunction toggleBS4DashDeps (toggle) {\r\n const stylesheets = document.styleSheets\r\n for (let i = 0; i < stylesheets.length; i++) {\r\n const stylesheet = stylesheets.item(i)\r\n if (stylesheet.href && (stylesheet.href.includes('AdminLTE') || stylesheet.href.includes('bs4Dash'))) {\r\n stylesheet.disabled = toggle === 'hide'\r\n }\r\n }\r\n};\r\n\r\nfunction scrollToComponent () {\r\n const cardHeader = this.closest('.card-header').id\r\n setTimeout(\r\n () => {\r\n document.getElementById(cardHeader).scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n $(this).trigger('blur')\r\n },\r\n 250\r\n )\r\n}\r\n\r\nlet selectedElement\r\n\r\nfunction showCanvasMenu (event) {\r\n if ($(event.target).closest('.designer-element').length === 0) {\r\n return\r\n }\r\n event.preventDefault()\r\n\r\n const { clientX: mouseX, clientY: mouseY } = event\r\n const { normalizedX, normalizedY } = normalizeMenuPosition(mouseX, mouseY)\r\n\r\n selectedElement = $(event.target).closest('.designer-element')\r\n\r\n $('#canvas-menu').css('top', `${normalizedY}px`)\r\n $('#canvas-menu').css('left', `${normalizedX}px`)\r\n $('#canvas-menu').removeClass('visible')\r\n\r\n setTimeout(() => { $('#canvas-menu').addClass('visible') })\r\n};\r\n\r\nfunction normalizeMenuPosition (mouseX, mouseY) {\r\n const scope = document.getElementById('canvas-canvas')\r\n const contextMenu = document.getElementById('canvas-menu')\r\n\r\n let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect()\r\n\r\n scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX\r\n scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY\r\n\r\n const scopeX = mouseX - scopeOffsetX\r\n const scopeY = mouseY - scopeOffsetY\r\n\r\n const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth\r\n const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight\r\n\r\n let normalizedX = mouseX\r\n let normalizedY = mouseY\r\n\r\n if (outOfBoundsOnX) {\r\n normalizedX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth\r\n }\r\n if (outOfBoundsOnY) {\r\n normalizedY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight\r\n }\r\n\r\n return { normalizedX, normalizedY }\r\n};\r\n\r\nfunction closeCanvasMenu () {\r\n $('#canvas-menu').removeClass('visible')\r\n};\r\n\r\nfunction deleteDesignerElement (event) {\r\n selectedElement.remove()\r\n};\r\n\r\nfunction applyCustomStyle (event) {\r\n const cssFile = event.target.files[0]\r\n const canvasStyle = document.getElementById('canvas-style')\r\n canvasStyle.innerHTML = ''\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n const file = e.target.result\r\n const lines = file.split(/\\r\\n|\\n|(?<=\\}\\b)/)\r\n canvasStyle.innerHTML = lines.join('\\n')\r\n\r\n const cssRules = canvasStyle.sheet.cssRules\r\n for (let i = 0; i < cssRules.length; i++) {\r\n if (cssRules[i].selectorText) {\r\n cssRules[i].selectorText = addCanvasPageSelector(cssRules[i].selectorText)\r\n } else if (cssRules[i].media && cssRules[i].cssRules) {\r\n const cssMediaRules = cssRules[i].cssRules\r\n for (let j = 0; j < cssMediaRules.length; j++) {\r\n cssMediaRules[j].selectorText = addCanvasPageSelector(cssMediaRules[j].selectorText)\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.onerror = (e) => alert(e.target.error.name)\r\n reader.readAsText(cssFile)\r\n};\r\n\r\nfunction addCanvasPageSelector (selectors) {\r\n return selectors.split(/, */g).map((x) => {\r\n if (x === 'body') {\r\n return '#canvas-page'\r\n } else if (/^\\.wrapper\\.sidebar/.test(x)) {\r\n return x.replace('.wrapper', '')\r\n } else {\r\n return '#canvas-page ' + x\r\n }\r\n }).join(', ')\r\n};\r\n\r\nlet template_selected = false\r\nexport function templateSelected () {\r\n return template_selected\r\n};\r\n\r\nexport function templateUpated () {\r\n template_selected = false\r\n}\r\n\r\nfunction toggleSavedTemplates (event) {\r\n const search_term = event.target.value ? event.target.value : ''\r\n\r\n document.getElementsByClassName('template-option').forEach(x => {\r\n const show_template = $(x).find('.title').html().includes(search_term) || $(x).find('.description').html().includes(search_term)\r\n x.style.display = show_template ? null : 'none'\r\n })\r\n}\r\n\r\nfunction sendSavedTemplateID (event) {\r\n const selected_template = $(event.target).closest('.template-option')\r\n const page_choice = selected_template.data('page')\r\n template_selected = true\r\n\r\n const to_delete = $(event.target).closest('.delete').length > 0 || event.target.classList.contains('delete')\r\n\r\n if (!to_delete) {\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n }\r\n\r\n document.getElementById('settings-template-search').value = null\r\n $('#settings-template-search').trigger('input')\r\n\r\n Shiny.setInputValue('settings-template-select', selected_template.data('value'))\r\n Shiny.setInputValue('settings-template-delete', to_delete)\r\n};\r\n", "import { BasicPage } from './BasicPage'\r\nimport { FillPage } from './FillPage'\r\nimport { FixedPage } from './FixedPage'\r\nimport { FluidPage } from './FluidPage'\r\nimport { BootstrapPage } from './BootstrapPage'\r\nimport { NavbarPage } from './NavbarPage'\r\nimport { DashboardPage } from './DashboardPage'\r\nimport { templateSelected, templateUpated } from '../app/settings'\r\n\r\nexport let page\r\n\r\nexport function createPage () {\r\n const page_type = $('#settings-page_type input:radio:checked').val()\r\n\r\n if (page_type === 'basicPage') {\r\n page = new BasicPage()\r\n } else if (page_type === 'fillPage') {\r\n page = new FillPage()\r\n } else if (page_type === 'fixedPage') {\r\n page = new FixedPage()\r\n } else if (page_type === 'fluidPage') {\r\n page = new FluidPage()\r\n } else if (page_type === 'bootstrapPage') {\r\n page = new BootstrapPage()\r\n } else if (page_type === 'navbarPage') {\r\n page = new NavbarPage()\r\n } else if (page_type === 'dashboardPage') {\r\n page = new DashboardPage()\r\n } else {\r\n page = new BasicPage()\r\n }\r\n\r\n page.updatePage()\r\n\r\n if (templateSelected()) {\r\n templateUpated()\r\n } else if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n\r\n page.updateComponentDropdown()\r\n return page\r\n};\r\n\r\nexport function selectPage () {\r\n let button_el = $(this)\r\n if (!$(this).hasClass('canvas-page-choice')) {\r\n button_el = $(this).closest('.canvas-page-choice')\r\n }\r\n\r\n button_el.closest('.canvas-modal').css('display', 'none')\r\n\r\n const page_choice = button_el.data('page')\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n}\r\n\r\nexport function changePageCheck () {\r\n if (templateSelected()) {\r\n return null\r\n } else if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n $('#canvas-page').html('
      ')\r\n createPage()\r\n } else {\r\n $('#warning_modal').modal()\r\n }\r\n};\r\n\r\nexport function revertPageSelection () {\r\n $(`#settings-page_type input[value=\"${page.name}\"]`).trigger('click')\r\n}\r\n\r\nexport function updateTitle (el) {\r\n const title = $(el.target).val()\r\n $('#canvas-title').html(title)\r\n $('.navbar-brand').html(title)\r\n $('.brand-link').html(title)\r\n\r\n if ($('#canvas-page').data('shinyattributes')) {\r\n const shiny_atts = $('#canvas-page').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page').attr('data-shinyattributes', shiny_atts)\r\n }\r\n\r\n if ($('#canvas-page>.main-header').data('shinyattributes')) {\r\n const shiny_atts2 = $('#canvas-page>.main-header').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page>.main-header').attr('data-shinyattributes', shiny_atts2)\r\n }\r\n}\r\n", "import { selectPage, changePageCheck, createPage, updateTitle, revertPageSelection } from './utils'\r\n\r\nexport function initPage () {\r\n createPage()\r\n $('.canvas-page-choice').on('click', selectPage)\r\n $('#settings-page_type').on('change', changePageCheck)\r\n $('#cancel_reset').on('click', revertPageSelection)\r\n $('#confirm_reset').on('click', createPage)\r\n\r\n $('#app_name').on('change keyup', updateTitle)\r\n};\r\n", "export function screenshotSettings () {\r\n Shiny.addCustomMessageHandler('prepare_canvas_screenshot', (message) => {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n $('.designer-page-template').addClass('hidden-colour')\r\n $('.designer-page-template').addClass('hidden-borders')\r\n })\r\n\r\n Shiny.addCustomMessageHandler('revert_canvas_screenshot', (message) => {\r\n $('#remove_label').trigger('change')\r\n $('#remove_colour').trigger('change')\r\n $('#remove_border').trigger('change')\r\n })\r\n}\r\n", "export let component\r\n\r\nexport class Component {\r\n updatable = true\r\n display_comments = true\r\n display_container = true\r\n has_card_body = false\r\n is_tab = false\r\n html = '
      '\r\n sortable_settings = null\r\n\r\n constructor () {\r\n component = this\r\n }\r\n\r\n createComponent () {\r\n return this.html\r\n };\r\n\r\n replaceHTMLPlaceholders (html, options) {\r\n for (const property in options) {\r\n html = html.replaceAll('$' + property + '$', options[property])\r\n }\r\n return html\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n\r\n $('.component-container').html(null)\r\n const html = this.createComponent()\r\n $('.component-container').html(html)\r\n this.addComments()\r\n if (update_sortable) {\r\n this.enableSortable()\r\n }\r\n };\r\n\r\n enableSortable () {\r\n Sortable.create(\r\n document.getElementById('sidebar-container'), {\r\n group: {\r\n name: 'shared',\r\n pull: 'clone',\r\n put: false\r\n },\r\n onClone: function (evt) {\r\n if (component.sortable_settings) {\r\n if (component.has_card_body) {\r\n Sortable.create($(evt.item).find('.card-body')[0], component.sortable_settings)\r\n } else if (component.is_tab) {\r\n Sortable.create($(evt.item).find('.tab-content'), component.sortable_settings)\r\n } else {\r\n Sortable.create(evt.item, component.sortable_settings)\r\n }\r\n }\r\n },\r\n onEnd: function (_evt) {\r\n $('.page-canvas [data-toggle=\"tooltip\"]').tooltip()\r\n if (component.updatable || $('#sidebar-comments').val() !== '') {\r\n $('#sidebar-comments').val('')\r\n component.updateComponent()\r\n }\r\n }\r\n })\r\n };\r\n\r\n addComments () {\r\n const comments = $('#sidebar-comments').val()\r\n if (comments) {\r\n $('.component-container>.designer-element').attr('data-shinycomments', comments)\r\n $('.component-container>.designer-element').attr('title', comments)\r\n $('.component-container>.designer-element').attr('data-toggle', 'tooltip')\r\n }\r\n };\r\n\r\n createID (prefix = '') {\r\n prefix = prefix ? prefix + '_' : prefix\r\n return prefix + Math.random().toString(36).substring(2, 12)\r\n };\r\n\r\n validateCssUnit (x, fallback) {\r\n if (this._regex.test(x)) {\r\n return x\r\n } else if (/^\\d+$/.test(x)) {\r\n return x + 'px'\r\n } else {\r\n return fallback\r\n }\r\n };\r\n\r\n _regex = /^(auto|inherit|fit-content|calc\\(.*\\)|((\\.\\d+)|(\\d+(\\.\\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/\r\n};\r\n", "import { Component } from './Component'\r\n\r\nexport class Header extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-header-tag').val()\r\n const value = $('#sidebar-header-text').val()\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Row extends Component {\r\n updatable = false\r\n html = '
      '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Column extends Component {\r\n updatable = false\r\n html = '
      '\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n createComponent () {\r\n const width = $('#sidebar-column-width_num').val()\r\n const offset = $('#sidebar-column-offset').val()\r\n\r\n const offset_class = offset > 0 ? ` offset-md-${offset}` : ''\r\n const offset_r = offset > 0 ? `, offset = ${offset}` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { width, offset_class, offset_r })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Text extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"tags$$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-text-tag').val()\r\n const value = $('#sidebar-text-textarea').val()\r\n const contents = tag === 'p' ? value.replace(/\\n/g, ' ') : this.createListItems(value)\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value: contents })\r\n }\r\n\r\n createListItems (text) {\r\n return text.split('\\n').map(x => '
    • ' + x + '
    • ').join('')\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InputPanel extends Component {\r\n updatable = false\r\n html = '
      '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('form-group') || clone.classList.contains('btn')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Input extends Component {\r\n constructor (type) {\r\n super()\r\n this.type = type\r\n this.updateComponent(true)\r\n }\r\n\r\n types = [\r\n { value: 'text_input', label: 'Text', r_func: 'textInput' },\r\n { value: 'textarea', label: 'Textarea', r_func: 'textAreaInput' },\r\n { value: 'numeric', label: 'Numeric', r_func: 'numericInput' },\r\n { value: 'password', label: 'Password', r_func: 'passwordInput' }\r\n ]\r\n\r\n html = `\r\n
      $input_tag$
      \r\n `\r\n\r\n createComponent () {\r\n const label = $(`#sidebar-${this.type}-label`).val()\r\n\r\n let id = $(`#sidebar-${this.type}-id`).val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_info = this.types.find(x => x.value === this.type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n\r\n let input_tag\r\n if (this.type === 'textarea') {\r\n input_tag = ''\r\n } else {\r\n input_tag = ``\r\n }\r\n\r\n const width = this.validateCssUnit($(`#sidebar-${this.type}-width`).val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class FileInput extends Component {\r\n html = `\r\n
      \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-file-label').val()\r\n\r\n let id = $('#sidebar-file-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-file-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SelectInput extends Component {\r\n html = `\r\n
      \r\n \r\n
      \r\n \r\n `\r\n\r\n date_range_input_html = `\r\n
      \r\n \r\n \r\n to \r\n \r\n \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-date-label').val()\r\n\r\n let id = $('#sidebar-date-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-date-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const range = document.getElementById('sidebar-date-range').checked\r\n const r_func = range ? 'dateRangeInput' : 'dateInput'\r\n const date_class = range ? 'shiny-date-range-input' : 'shiny-date-input'\r\n const input_tag = range ? this.date_range_input_html : this.date_input_html\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n date_class,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n $('.component-container').find('input').bsDatepicker()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxInput extends Component {\r\n html = `\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-checkbox-label').val()\r\n\r\n let id = $('#sidebar-checkbox-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-checkbox-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxGroupInput extends Component {\r\n types = [\r\n { value: 'radio', label: 'Radio', r_func: 'radioButtons', role: 'radiogroup' },\r\n { value: 'checkbox', label: 'Checkbox', r_func: 'checkboxGroupInput', role: 'group' }\r\n ]\r\n\r\n html = `\r\n
      \r\n \r\n
      \r\n $choices$\r\n
      \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-radio-label').val()\r\n\r\n let id = $('#sidebar-radio-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const type = $('#sidebar-radio-type').val()\r\n const input_info = this.types.find(x => x.value === type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n const role = input_info.role\r\n\r\n const width = this.validateCssUnit($('#sidebar-radio-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const inline = document.getElementById('sidebar-radio-inline').checked\r\n const inline_class = inline ? '-inline' : ''\r\n const inline_str = inline ? ', inline = TRUE' : ''\r\n const css_class = `shiny-input-${type}group${inline_class}`\r\n\r\n const choices = $('#sidebar-radio-choices').val()\r\n const choices_str = `, choices = c("${choices.replace(/\\n/g, '", "')}")`\r\n const choices_html = choices.split('\\n').map(x => this.createCheckbox(x, type, inline)).join('')\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n css_class,\r\n r_func,\r\n role,\r\n choices: choices_html,\r\n choices_str,\r\n inline_str,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n createCheckbox (x, type = 'checkbox', inline = false) {\r\n const check_class = inline ? type + '-inline' : type\r\n return ``\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SliderInput extends Component {\r\n html = `\r\n
      \r\n \r\n \r\n
      \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-slider-label').val()\r\n\r\n let id = $('#sidebar-slider-id').val()\r\n id = id === '' ? this.createID('slider') : id\r\n\r\n const format = $('#sidebar-slider-type').val()\r\n\r\n const width = this.validateCssUnit($('#sidebar-slider-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const ranged = document.getElementById('sidebar-slider-range').checked\r\n const values = this.getValues(format, ranged)\r\n const range_attr = ranged ? 'data-type=\"double\" data-drag-interval=\"true\" data-to=\"$to$\"' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n range_attr,\r\n id,\r\n label,\r\n format,\r\n min: values.min,\r\n max: values.max,\r\n step: values.step,\r\n from: values.from,\r\n to: values.to,\r\n style_str,\r\n width_str,\r\n value_str: values.value_str,\r\n time_format: values.time_format\r\n })\r\n };\r\n\r\n getValues (format, range = false) {\r\n if (format === 'number') {\r\n return {\r\n step: 1,\r\n min: 0,\r\n max: 10,\r\n from: 5,\r\n to: 7,\r\n value_str: `, min = 0, max = 10, value = ${range ? 'c(5, 7)' : 5}`\r\n }\r\n }\r\n\r\n const curr_date = new Date()\r\n if (format === 'date') {\r\n curr_date.setHours(0, 0, 0, 0)\r\n }\r\n const curr_time = curr_date.getTime()\r\n const step = format === 'date' ? 1000 * 60 * 60 * 24 : 1000\r\n\r\n const min = curr_time - 5 * step\r\n const max = curr_time + 5 * step\r\n const from = curr_time\r\n const to = curr_time + 2 * step\r\n\r\n const r_datefunc = format === 'date' ? 'Sys.Date()' : 'Sys.time()'\r\n const r_mult = format === 'date' ? '' : '000'\r\n const input_value_str = range ? `\"c(${r_datefunc}, ${r_datefunc} + 2${r_mult})\"` : r_datefunc\r\n\r\n return {\r\n step,\r\n min,\r\n max,\r\n from,\r\n to,\r\n time_format: format === 'date' ? '%F' : '%F %T',\r\n value_str: `, min = ${r_datefunc} - 5${r_mult}, max = ${r_datefunc} + 5${r_mult}, value = ${input_value_str}`\r\n }\r\n }\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n const slider_type = $('#sidebar-slider-type').val()\r\n $('.component-container').find('input').ionRangeSlider({ prettify: this.getSliderPrettifier(slider_type) })\r\n };\r\n\r\n getSliderPrettifier (type) {\r\n if (type === 'date') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate()\r\n }\r\n } else if (type === 'datetime') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate() + ' ' +\r\n sel_date.getHours() + ':' + sel_date.getMinutes() + ':' + sel_date.getSeconds()\r\n }\r\n } else {\r\n return null\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Button extends Component {\r\n types = [\r\n { value: 'default', css_class: 'btn-default' },\r\n { value: 'primary', css_class: 'btn-primary' },\r\n { value: 'secondary', css_class: 'btn-secondary' },\r\n { value: 'success', css_class: 'btn-success' },\r\n { value: 'danger', css_class: 'btn-danger' },\r\n { value: 'warning', css_class: 'btn-warning' },\r\n { value: 'info', css_class: 'btn-info' },\r\n { value: 'light', css_class: 'btn-light' },\r\n { value: 'dark', css_class: 'btn-dark' }\r\n ]\r\n\r\n html = `\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-button-label').val()\r\n\r\n let id = $('#sidebar-button-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_type = $('#sidebar-button-type').val()\r\n const input_info = this.types.find(x => x.value === input_type)\r\n if (!input_info) return\r\n const btn_class = input_info.css_class\r\n const class_str = input_type === 'default' ? '' : `, class = "${btn_class}"`\r\n\r\n const downloadable = document.getElementById('sidebar-button-download').checked\r\n const r_func = downloadable ? 'downloadButton' : 'actionButton'\r\n let icon_html = downloadable ? '' : ''\r\n const id_arg = downloadable ? 'outputId' : 'inputId'\r\n\r\n const tab_icon = $('#sidebar-button-icon').val()\r\n const icon_r = tab_icon === '' || downloadable ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' || downloadable ? '' : $('#sidebar-button-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n icon_html = tab_icon === '' || downloadable ? icon_html : ``\r\n\r\n const width = this.validateCssUnit($('#sidebar-button-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n id_arg,\r\n label,\r\n r_func,\r\n icon_r,\r\n icon_html,\r\n btn_class,\r\n class_str,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Output extends Component {\r\n types = [\r\n { value: 'text', label: 'Text', css_class: 'text-output-element shiny-text-output', r_func: 'textOutput', placeholder: 'Text Output: ' },\r\n { value: 'verbatim', label: 'Verbatim Text', css_class: 'verbatimtext-output-element shiny-text-output', r_func: 'verbatimTextOutput', placeholder: 'Verbatim Text Output: ' },\r\n { value: 'plot', label: 'Plot', css_class: 'plot-output-element shiny-plot-output', r_func: 'plotOutput' },\r\n { value: 'image', label: 'Image', css_class: 'image-output-element shiny-image-output', r_func: 'imageOutput' },\r\n { value: 'table', label: 'Table', css_class: 'table-output-element shiny-datatable-output', r_func: 'DT::DTOutput' },\r\n { value: 'html', label: 'HTML', css_class: 'html-output-element shiny-html-output', r_func: 'uiOutput', placeholder: 'Placeholder for HTML Output' }\r\n ]\r\n\r\n html = `\r\n <$html_tag$ $id_str$ class=\"designer-element output-element $css_class$\"\r\n style=\"$style_str$\"\r\n data-shinyfunction=\"$r_func$\"\r\n data-shinyattributes=\"outputId = "$id$"$inline_str$$dim_str$\">\r\n $output_tag$\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-output-label').val()\r\n\r\n let id = $('#sidebar-output-id').val()\r\n id = id === '' ? this.createID('output') : id\r\n\r\n const output_type = $('#sidebar-output-type').val()\r\n const output_info = this.types.find(x => x.value === output_type)\r\n if (!output_info) return\r\n const r_func = output_info.r_func\r\n let html_tag = output_type === 'verbatim' ? 'pre' : 'div'\r\n const css_class = output_info.css_class\r\n\r\n let id_str = ''\r\n if (['plot', 'image', 'table'].includes(output_type)) {\r\n const designer_id = this.createID('output')\r\n Shiny.setInputValue('sidebar-outputid', designer_id)\r\n id_str = `id=\"sidebar-${designer_id}\"`\r\n }\r\n\r\n const inline = document.getElementById('sidebar-output-inline').checked\r\n const inline_str = inline && !['verbatim', 'table'].includes(output_type) ? ', inline = TRUE' : ''\r\n if (inline_str !== '') {\r\n html_tag = 'span'\r\n }\r\n\r\n let dim_str = ''\r\n let style_str = ''\r\n\r\n if (['plot', 'image'].includes(output_type)) {\r\n const width = this.validateCssUnit($('#sidebar-output-width').val(), '100%')\r\n style_str = `width: ${width};`\r\n dim_str = width === '100%' ? '' : `, width = "${width}"`\r\n\r\n const height = this.validateCssUnit($('#sidebar-output-height').val(), '400px')\r\n style_str = style_str + ` height: ${height};`\r\n dim_str = dim_str + (height === '400px' ? '' : `, height = "${height}"`)\r\n }\r\n\r\n let output_tag = ''\r\n if (output_info.placeholder) {\r\n if (output_type === 'html') {\r\n output_tag = `${output_info.placeholder}`\r\n } else {\r\n output_tag = `${output_info.placeholder} ${$('#sidebar-output-textarea').val()}`\r\n }\r\n }\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n html_tag,\r\n id,\r\n label,\r\n id_str,\r\n r_func,\r\n css_class,\r\n style_str,\r\n dim_str,\r\n inline_str,\r\n output_tag\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n Shiny.bindAll()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tab extends Component {\r\n _item = 1\r\n\r\n updateComponent () {};\r\n\r\n getPageType () {\r\n return $('#settings-page_type input:radio:checked').val()\r\n };\r\n\r\n addPage () {\r\n const page_type = this.getPageType()\r\n\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n if (tab_value === '') {\r\n tab_value = this.createID('tab')\r\n } else if (this.checkDuplicateIDs(tab_value, page_type)) {\r\n return\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('ul.navbar-nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
    • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
    • \r\n `)\r\n\r\n tab_panel.append(`\r\n
      \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const tab_panel = $('section.content .tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n $('.sidebarMenuSelectedTabItem').before(`\r\n
    • \r\n \r\n ${icon_html}\r\n

      ${tab_name}

      \r\n
      \r\n
    • \r\n `)\r\n\r\n if (!$('.sidebarMenuSelectedTabItem').attr('data-value')) {\r\n $('.sidebarMenuSelectedTabItem').attr('data-value', tab_value)\r\n }\r\n\r\n tab_panel.append(`\r\n
      \r\n `)\r\n\r\n this.enableSortablePage(`shiny-tab-${tab_value}`)\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
      \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
      \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-name='${tab_name}']`\r\n } else {\r\n return `ul.navbar-nav a[data-name='${tab_name}']`\r\n }\r\n };\r\n\r\n checkDuplicateIDs (tab_value, page_type) {\r\n if ($(this.getValueIdentifier(tab_value, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
      \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
      \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-value='${tab_value}']`\r\n } else {\r\n return `ul.navbar-nav a[data-value='${tab_value}']`\r\n }\r\n };\r\n\r\n deletePage () {\r\n const page_type = this.getPageType()\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n\r\n if (this.checkMissingName(tab_name, page_type)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name, page_type)).length > 1 && tab_value === '') {\r\n $('#sidebar-tab-alert').html(`\r\n
      \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
      \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`ul.nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`#tab-${tab_value}`).parent().remove()\r\n $(`#shiny-tab-${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tab-alert').html(`\r\n
      \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
      \r\n `)\r\n return true\r\n }\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tabset extends Component {\r\n _item = 1\r\n id\r\n html\r\n is_tab = true\r\n\r\n constructor () {\r\n super()\r\n this.id = this.getTabID()\r\n\r\n if (this.isDashPage()) {\r\n this.html = `\r\n
      \r\n
      \r\n
      \r\n
        $title$
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      `\r\n } else {\r\n this.html = `\r\n
      \r\n
        \r\n
        \r\n
        `\r\n }\r\n\r\n this.updateComponent(true)\r\n };\r\n\r\n createComponent () {\r\n if (this.isDashPage()) {\r\n const label = $('#sidebar-tabset-label').val()\r\n const title = label === '' ? '' : `
      • ${label}

      • `\r\n const title_r = label === '' ? '' : `title = "${label}", `\r\n\r\n const width = $('#sidebar-tabset-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-tabset-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-tabset-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n title,\r\n title_r,\r\n label,\r\n width,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n } else {\r\n const type = $('#sidebar-tabset-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n type\r\n })\r\n }\r\n };\r\n\r\n isDashPage () {\r\n return this.getPageType() === 'dashboardPage'\r\n };\r\n\r\n getPageType () {\r\n if (typeof (window) === 'undefined') {\r\n return 'navbarPage'\r\n } else {\r\n return $('#settings-page_type input:radio:checked').val()\r\n }\r\n };\r\n\r\n addPage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n if (tab_value === '') {\r\n tab_value = tab_name\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('.component-container>.tabbable>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container>.tabbable>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
      • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
      • \r\n `)\r\n\r\n tab_panel.append(`\r\n
        \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const nav_panel = $('.component-container .card-header>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container .card-body>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
      • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
      • \r\n `)\r\n\r\n tab_panel.append(`\r\n
        \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
        \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
        \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name) {\r\n return `.component-container .nav a[data-name='${tab_name}']`\r\n };\r\n\r\n checkDuplicateIDs (tab_value) {\r\n if ($(this.getValueIdentifier(tab_value)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
        \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
        \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value) {\r\n return `.component-container .nav a[data-value='${tab_value}']`\r\n };\r\n\r\n deletePage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n\r\n if (this.checkMissingName(tab_name)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name)).length > 1 && tab_value === '') {\r\n $('#sidebar-tabset-alert').html(`\r\n
        \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
        \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n if (tab_value === '') {\r\n tab_value = $(`.component-container .nav-item a[data-name='${tab_name}']`).attr('href')\r\n } else {\r\n tab_value = '#' + $(`.component-container .tab-pane[data-value='${tab_value}']`).attr('id')\r\n }\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`.component-container ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`.component-container .nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.component-container .tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`.component-container .nav-item a[href='${tab_value}']`).parent().remove()\r\n $(`${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tabset-alert').html(`\r\n
        \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
        \r\n `)\r\n return true\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Box extends Component {\r\n has_card_body = true\r\n html = `\r\n
        \r\n
        \r\n
        \r\n

        $label$

        \r\n
        \r\n \r\n
        \r\n
        \r\n
        \r\n
        \r\n \r\n
        \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-box-label').val()\r\n\r\n const width = $('#sidebar-box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class UserBox extends Component {\r\n has_card_body = true\r\n html = `\r\n
        \r\n
        \r\n
        \r\n
        \r\n \r\n
        \r\n

        $label$

        \r\n
        \r\n
        \r\n \"User\r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-user_box-label').val()\r\n\r\n const width = $('#sidebar-user_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-user_box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-user_box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n const type = $('#sidebar-user_box-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class,\r\n type\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class ValueBox extends Component {\r\n html = `\r\n
        \r\n
        \r\n
        \r\n $value$\r\n

        \r\n $label$\r\n

        \r\n
        \r\n $icon_html$\r\n
        \r\n
        \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-value_box-value').val()\r\n const label = $('#sidebar-value_box-label').val()\r\n\r\n const width = $('#sidebar-value_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-value_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-value_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : `
        `\r\n\r\n const background = $('#sidebar-value_box-background').val()\r\n const background_class = `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InfoBox extends Component {\r\n html = `\r\n
        \r\n
        \r\n \r\n $icon_html$\r\n \r\n
        \r\n $label$\r\n $value$\r\n
        \r\n
        \r\n
        \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-info_box-value').val()\r\n const label = $('#sidebar-info_box-label').val()\r\n\r\n const width = $('#sidebar-info_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-info_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-info_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n const background = $('#sidebar-info_box-background').val()\r\n const background_class = `bg-${background}`\r\n const fill_box = document.getElementById('sidebar-info_box-fill').checked\r\n const fill_r = fill_box ? ', fill = TRUE' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: fill_box ? background_class : '',\r\n colour_class2: fill_box ? '' : background_class,\r\n fill_r\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class BlockQuote extends Component {\r\n html = '
        $value$
        '\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const colour = $('#sidebar-quote-colour').val()\r\n const value = $('#sidebar-quote-textarea').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { colour, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Callout extends Component {\r\n html = `\r\n
        \r\n
        \r\n
        $title$
        \r\n $value$\r\n
        \r\n `\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const title = $('#sidebar-callout-label').val()\r\n const status = $('#sidebar-callout-colour').val()\r\n const value = $('#sidebar-callout-textarea').val()\r\n\r\n const width = $('#sidebar-callout-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n title,\r\n status,\r\n value,\r\n width_r,\r\n width_class\r\n })\r\n }\r\n}\r\n", "import { Header } from './Header'\r\nimport { Row } from './Row'\r\nimport { Column } from './Column'\r\nimport { Text } from './Text'\r\nimport { InputPanel } from './InputPanel'\r\nimport { Input } from './Input'\r\nimport { FileInput } from './FileInput'\r\nimport { SelectInput } from './SelectInput'\r\nimport { DateInput } from './DateInput'\r\nimport { CheckboxInput } from './Checkbox'\r\nimport { CheckboxGroupInput } from './CheckboxGroup'\r\nimport { SliderInput } from './SliderInput'\r\nimport { Button } from './Button'\r\nimport { Output } from './Output'\r\nimport { Tab } from './Tab'\r\nimport { Tabset } from './Tabset'\r\nimport { Box } from './Box'\r\nimport { UserBox } from './UserBox'\r\nimport { ValueBox } from './ValueBox'\r\nimport { InfoBox } from './InfoBox'\r\nimport { BlockQuote } from './BlockQuote'\r\nimport { Callout } from './Callout'\r\n\r\nexport function getComponent (name) {\r\n if (name === 'header') {\r\n return new Header()\r\n } else if (name === 'row') {\r\n return new Row()\r\n } else if (name === 'column') {\r\n return new Column()\r\n } else if (name === 'text') {\r\n return new Text()\r\n } else if (name === 'input_panel') {\r\n return new InputPanel()\r\n } else if (['text_input', 'numeric', 'textarea', 'password'].includes(name)) {\r\n return new Input(name)\r\n } else if (name === 'dropdown') {\r\n return new SelectInput()\r\n } else if (name === 'file') {\r\n return new FileInput()\r\n } else if (name === 'date') {\r\n return new DateInput()\r\n } else if (name === 'checkbox') {\r\n return new CheckboxInput()\r\n } else if (name === 'radio') {\r\n return new CheckboxGroupInput()\r\n } else if (name === 'slider') {\r\n return new SliderInput()\r\n } else if (name === 'button') {\r\n return new Button()\r\n } else if (name === 'output') {\r\n return new Output()\r\n } else if (name === 'tab_panel') {\r\n return new Tab()\r\n } else if (name === 'tabset') {\r\n return new Tabset()\r\n } else if (name === 'box') {\r\n return new Box()\r\n } else if (name === 'user_box') {\r\n return new UserBox()\r\n } else if (name === 'value_box') {\r\n return new ValueBox()\r\n } else if (name === 'info_box') {\r\n return new InfoBox()\r\n } else if (name === 'quote') {\r\n return new BlockQuote()\r\n } else if (name === 'callout') {\r\n return new Callout()\r\n }\r\n\r\n return new Header()\r\n}\r\n", "import { getComponent } from './utils'\r\nimport { component } from './Component'\r\n\r\nexport function initComponents () {\r\n getComponent('header')\r\n\r\n $('.component-settings').on('change keyup', () => component.updateComponent())\r\n $('.component-comments').on('change blur', () => component.updateComponent())\r\n $('.component-container').on('mouseover', () => { $(':focus').trigger('blur') })\r\n\r\n $('.add-tab-button').on('click', () => component.addPage())\r\n $('.delete-tab-button').on('click', () => component.deletePage())\r\n\r\n $('.accordion .card-header .btn').on('click', (el) => {\r\n $(el.target).closest('.card').find('form').trigger('reset')\r\n\r\n const new_component = $(el.target).data('shinyelement')\r\n getComponent(new_component)\r\n document.getElementById('sidebar-container').style.display = new_component === 'tab_panel' ? 'none' : null\r\n })\r\n};\r\n", "export function htmlToJSON (el, inner = false) {\r\n const children = getChildrenJSON(el)\r\n\r\n const jsonElement = {\r\n tagName: el.tagName.toLowerCase(),\r\n r_function: el.dataset.shinyfunction,\r\n r_arguments: el.dataset.shinyattributes,\r\n r_comments: el.dataset.shinycomments,\r\n text: $(el).ignore().text().replace(/\\s*\\n\\s*/g, ''),\r\n htmlclass: el.className,\r\n children\r\n }\r\n\r\n if (inner) {\r\n return jsonElement\r\n } else {\r\n return JSON.stringify(jsonElement)\r\n }\r\n};\r\n\r\n$.fn.ignore = function (sel) {\r\n return this.clone().find(sel || '>*').remove().end()\r\n}\r\n\r\nfunction getChildrenJSON (el) {\r\n let children = []\r\n for (let i = 0; i < el.children.length; i++) {\r\n if (el.children[i].dataset.shinyfunction) {\r\n children.push(htmlToJSON(el.children[i], true))\r\n } else if (el.children[i].children.length) {\r\n const childContent = getChildrenJSON(el.children[i])\r\n if (childContent.length > 0) {\r\n children = children.concat(childContent)\r\n }\r\n }\r\n }\r\n return children\r\n};\r\n", "import { htmlToJSON } from './utils'\r\n\r\nexport const canvasPageBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasPageBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas')\r\n },\r\n getValue: function (el) {\r\n return htmlToJSON(document.getElementById('canvas-page'))\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas')\r\n }\r\n})\r\n", "import { page, createPage } from '../page/utils'\r\nimport { Column } from '../component/Column'\r\nimport { Row } from '../component/Row'\r\nimport { InputPanel } from '../component/InputPanel'\r\n\r\nexport const canvasBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas-shell')\r\n },\r\n getValue: function (el) {\r\n return $(el).find('.page-canvas').html()\r\n },\r\n setValue: function (el, value) {\r\n $(el).find('.page-canvas').html(value)\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas-shell')\r\n },\r\n receiveMessage (el, data) {\r\n $('.canvas-modal').css('display', 'none')\r\n\r\n createPage()\r\n page.updatePage()\r\n\r\n this.setValue(el, data)\r\n\r\n const sortableSettings = new Column(update_component = false).sortable_settings\r\n const sortableRowSettings = new Row(update_component = false).sortable_settings\r\n const sortableInputPanelSettings = new InputPanel(update_component = false).sortableSettings\r\n\r\n PARENT_DESIGNER_CLASSES.map(x => enableSortableComponent(x, sortableSettings))\r\n enableSortableComponent('designer-element row', sortableRowSettings)\r\n enableSortableComponent('designer-element shiny-input-panel', sortableInputPanelSettings)\r\n\r\n if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n page.updateComponentDropdown()\r\n }\r\n})\r\n\r\nconst PARENT_DESIGNER_CLASSES = ['tab-pane', 'designer-element col-sm', 'designer-element card-body']\r\n\r\nfunction enableSortableComponent (selector, settings) {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, settings)\r\n })\r\n}\r\n", "import { initPage } from '../page/init'\r\nimport { initSettings } from './settings'\r\nimport { screenshotSettings } from './screenshot'\r\nimport { initComponents } from '../component/init'\r\nimport { canvasPageBinding } from '../input/canvas-page-input'\r\nimport { canvasBinding } from '../input/canvas-canvas-input'\r\n\r\n$(function () {\r\n initPage()\r\n initComponents()\r\n initSettings()\r\n screenshotSettings()\r\n\r\n $('.help-icon').tooltip({ boundary: 'window', placement: 'right' })\r\n\r\n bsCustomFileInput.init()\r\n\r\n Sortable.create(document.getElementById('sidebar-bin'), {\r\n group: {\r\n name: 'shared',\r\n pull: false\r\n },\r\n handle: '.designer-element',\r\n draggable: '.designer-element',\r\n onAdd: function (evt) {\r\n this.el.removeChild(evt.item)\r\n }\r\n })\r\n})\r\n\r\nShiny.inputBindings.register(canvasPageBinding)\r\nShiny.inputBindings.register(canvasBinding)\r\n"], + "mappings": "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", "names": [] } diff --git a/srcjs/app/settings.js b/srcjs/app/settings.js index 4bf8d0e..d1ca098 100644 --- a/srcjs/app/settings.js +++ b/srcjs/app/settings.js @@ -3,6 +3,14 @@ export function initSettings () { $('.copy-ui-button').on('click', copyUICode) $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') }) + $('#settings-code-download').on('click', () => { + $('#settings-code_button').trigger('click') + Shiny.bindAll('#settings-code-download_confirm') + }) + $('#settings-code-download_confirm').on('click', () => { + Shiny.unbindAll('#settings-code-download_confirm') + }) + $('#css_style').on('change', applyCustomStyle) $('#remove_label').on('change', toggleComponentLabels) From e7ee5e31fbea1bd56b043fc40ab7ddf9ae3dc3cc Mon Sep 17 00:00:00 2001 From: Ashley Baldry Date: Sun, 18 Jun 2023 15:50:27 +0100 Subject: [PATCH 2/5] Functionality of download button works --- R/mod_code_srv.R | 89 +++----------------------------- R/mod_code_ui.R | 69 ++++++++++++++++++------- inst/app/www/designer.css | 4 ++ inst/app/www/designer.min.js | 2 +- inst/app/www/designer.min.js.map | 4 +- srcjs/app/settings.js | 10 ++-- 6 files changed, 69 insertions(+), 109 deletions(-) diff --git a/R/mod_code_srv.R b/R/mod_code_srv.R index fd82779..9bbdffb 100644 --- a/R/mod_code_srv.R +++ b/R/mod_code_srv.R @@ -3,32 +3,24 @@ #' @noRd CodeModuleServer <- function(id, ui_code) { moduleServer(id, function(input, output, session) { - setBookmarkExclude(c("save", "save_confirm", "file_type", "file_name")) + setBookmarkExclude(c("save", "download", "file_type", "file_name", "options")) ns <- session$ns observeEvent(input$save, ignoreInit = TRUE, { - showModal(saveFileModal(ns, "save")) - }) - - observeEvent(input$download, ignoreInit = TRUE, { - showModal(saveFileModal(ns, "download")) - }) - - observeEvent(input$save_confirm, ignoreInit = TRUE, { writeToUI(ui_code(), input$file_type, input$file_name, input$app_type) }) - output$download_confirm <- downloadHandler( + output$download <- downloadHandler( filename = function() { if (input$file_type == "ui") { "ui.R" } else { - paste0("mod_", paste0("mod_", tolower(gsub(" ", "_", module_name)), "_ui.R")) + paste0("mod_", tolower(gsub("\\W", "_", input$file_name)), "_ui.R") } }, content = function(file) { - mod_name <- if (input$file_type == "ui") NULL else input$file_name - r_code <- jsonToRScript(code, module_name = module_name) + module_name <- if (input$file_type == "ui") NULL else input$file_name + r_code <- jsonToRScript(ui_code(), module_name = module_name) writeLines(r_code, file) } ) @@ -39,75 +31,8 @@ CodeModuleServer <- function(id, ui_code) { }) } -saveFileModal <- function(ns, type = c("save", "download")) { - type <- match.arg(type) - - modalDialog( - tagList( - shiny::radioButtons( - inputId = ns("file_type"), - label = "File Type:", - choices = c("UI" = "ui", "Module" = "module"), - inline = TRUE - ), - conditionalPanel( - condition = "input.file_type === 'module'", - ns = ns, - tagList( - shiny::textInput( - inputId = ns("file_name"), - label = "Module Name:" - ), - if (type == "save") { - shiny::radioButtons( - inputId = ns("app_type"), - label = "App Structure:", - choices = c("{golem}" = "golem", "{rhino}" = "rhino"), - inline = TRUE - ) - } - ) - ) - ), - title = "Save UI", - footer = tagList( - tags$button( - type = "button", - class = "btn btn-secondary", - `data-dismiss` = "modal", - `data-bs-dismiss` = "modal", - shiny::icon("xmark"), - "Cancel" - ), - if (type == "save") { - tags$button( - id = ns("save_confirm"), - type = "button", - class = "btn btn-primary action-button", - `data-dismiss` = "modal", - `data-bs-dismiss` = "modal", - shiny::icon("check"), - "Confirm" - ) - } else { - tags$a( - id = ns("download_confirm"), - type = "button", - class = "btn btn-primary shiny-download-link", - `data-dismiss` = "modal", - `data-bs-dismiss` = "modal", - href = "", - target = "_blank", - download = NA, - icon = shiny::icon("check"), - label = "Confirm" - ) - } - ) - ) -} - -writeToUI <- function(code, file_type = c("ui", "module"), module_name = NULL, app_type = c("golem", "rhino")) { +writeToUI <- function(code, file_type = c("ui", "module"), module_name = NULL, + app_type = c("golem", "rhino")) { file_type <- match.arg(file_type) app_type <- match.arg(app_type) diff --git a/R/mod_code_ui.R b/R/mod_code_ui.R index 05fbfea..9ad04bd 100644 --- a/R/mod_code_ui.R +++ b/R/mod_code_ui.R @@ -15,28 +15,61 @@ CodeModUI <- function(id) { tagList( tags$form( class = "code-ui-form", - span( - toast("copy_toast", "Copied!"), - tags$button( - class = "copy-ui-button btn btn-default", - role = "button", - icon("copy"), - "Copy" + tags$fieldset( + span( + toast("copy_toast", "Copied!"), + tags$button( + class = "copy-ui-button btn btn-default", + role = "button", + icon("copy"), + "Copy" + ) + ), + downloadButton( + ns("download") + ), + if (interactive()) { + actionButton( + ns("save"), + "Save As...", + shiny::icon("floppy-disk") + ) + }, + actionButton( + ns("options"), + shiny::icon("cogs") ) + ) + ), + + tags$fieldset( + id = ns("options_fields"), + style = "display: none;", + + shiny::radioButtons( + inputId = ns("file_type"), + label = "File Type", + choices = c("UI" = "ui", "Module" = "module"), + inline = TRUE ), - actionButton( - ns("download"), - "Download", - shiny::icon("download") - ), - if (interactive()) { - actionButton( - ns("save"), - "Save As...", - shiny::icon("floppy-disk") + conditionalPanel( + condition = "input.file_type === 'module'", + ns = ns, + tagList( + shiny::textInput( + inputId = ns("file_name"), + label = "Module Name" + ), + shiny::radioButtons( + inputId = ns("app_type"), + label = "App Structure", + choices = c("{golem}" = "golem", "{rhino}" = "rhino"), + inline = TRUE + ) ) - } + ) ), + tagAppendAttributes( verbatimTextOutput(ns("code"), placeholder = TRUE), class = "code-output" diff --git a/inst/app/www/designer.css b/inst/app/www/designer.css index d27512a..c37d6b1 100644 --- a/inst/app/www/designer.css +++ b/inst/app/www/designer.css @@ -292,6 +292,10 @@ h5.modal-title { height: 50px; } +#settings-code_dropdown { + max-height: 80vh; +} + .code-ui-form { margin: 0 0.5rem 0.5rem 0.5rem; } diff --git a/inst/app/www/designer.min.js b/inst/app/www/designer.min.js index e02a9d9..a30630b 100644 --- a/inst/app/www/designer.min.js +++ b/inst/app/www/designer.min.js @@ -60,7 +60,7 @@ var b=class{name;navbar_item_style="none";bs4_item_style="none";enable_on_load=!
        - `};function rt(){$("#settings-page_type").on("click",()=>$(".canvas-modal").css("display","none")),$(".copy-ui-button").on("click",Ct),$("#settings-code-save").on("click",()=>{$("#settings-code_button").trigger("click")}),$("#settings-code-download").on("click",()=>{$("#settings-code_button").trigger("click"),Shiny.bindAll("#settings-code-download_confirm")}),$("#settings-code-download_confirm").on("click",()=>{Shiny.unbindAll("#settings-code-download_confirm")}),$("#css_style").on("change",Dt),$("#remove_label").on("change",vt),$("#remove_colour").on("change",_t),$("#remove_border").on("change",yt),$("#canvas_clear").on("click",wt),$("#confirm_clear").on("click",xt),$(".component-accordion .card-header button").on("click",Pt),$("body").on("click",()=>{document.querySelector("body").classList.contains("sidebar-mini")&&document.querySelector("body").classList.remove("sidebar-mini")}),$(document).on("click",".clickable-dropdown",s=>{s.stopPropagation()}),$("#preview").on("click",()=>{$("#settings-options_button").trigger("click"),$(".page-canvas-shell").addClass("preview")}),$("#canvas-close_preview").on("click",()=>{$(".page-canvas-shell").removeClass("preview")}),Shiny.addCustomMessageHandler("toggleBS4DashDeps",qt),Shiny.addCustomMessageHandler("runjs",function(s){(0,eval)(s.script)}),$("body").on("click contextmenu",ot),$("#canvas-canvas").on("contextmenu",kt),$("#canvas-menu").on("contextmenu",s=>{s.preventDefault()}),$("#sidebar-container").on("mousedown",ot),$("#canvas-delete").on("click",Tt),$("#settings-template-search").on("input",St),$(document).on("click",".template-option",Lt)}function vt(){this.checked?$(".designer-page-template").removeClass("hidden-after-label"):$(".designer-page-template").addClass("hidden-after-label")}function _t(){this.checked?$(".designer-page-template").removeClass("hidden-colour"):$(".designer-page-template").addClass("hidden-colour")}function yt(){this.checked?$(".designer-page-template").removeClass("hidden-borders"):$(".designer-page-template").addClass("hidden-borders")}function wt(){if($("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()==="")return null;$("#clear_modal").modal()}function xt(){$("#canvas-page").html("")}function Ct(){let s=document.getElementById("settings-code-code").textContent;navigator.clipboard.writeText(s),$("#copy_toast").toast("show")}function qt(s){let t=document.styleSheets;for(let e=0;e{document.getElementById(s).scrollIntoView({behavior:"smooth",block:"start"}),$(this).trigger("blur")},250)}var ct;function kt(s){if($(s.target).closest(".designer-element").length===0)return;s.preventDefault();let{clientX:t,clientY:e}=s,{normalizedX:a,normalizedY:n}=It(t,e);ct=$(s.target).closest(".designer-element"),$("#canvas-menu").css("top",`${n}px`),$("#canvas-menu").css("left",`${a}px`),$("#canvas-menu").removeClass("visible"),setTimeout(()=>{$("#canvas-menu").addClass("visible")})}function It(s,t){let e=document.getElementById("canvas-canvas"),a=document.getElementById("canvas-menu"),{left:n,top:i}=e.getBoundingClientRect();n=n<0?0:n,i=i<0?0:i;let l=s-n,o=t-i,r=l+a.clientWidth>e.clientWidth,d=o+a.clientHeight>e.clientHeight,u=s,p=t;return r&&(u=n+e.clientWidth-a.clientWidth),d&&(p=i+e.clientHeight-a.clientHeight),{normalizedX:u,normalizedY:p}}function ot(){$("#canvas-menu").removeClass("visible")}function Tt(s){ct.remove()}function Dt(s){let t=s.target.files[0],e=document.getElementById("canvas-style");e.innerHTML="";let a=new FileReader;a.onload=n=>{let l=n.target.result.split(/\r\n|\n|(?<=\}\b)/);e.innerHTML=l.join(` + `};function rt(){$("#settings-page_type").on("click",()=>$(".canvas-modal").css("display","none")),$(".copy-ui-button").on("click",Ct),$("#settings-code-save").on("click",()=>{$("#settings-code_button").trigger("click")}),$("#settings-code-download").on("click",()=>{$("#settings-code_button").trigger("click")}),$("#settings-code-options").on("click",()=>{let s=$("#settings-code-options_fields").css("display")==="none"?"":"none";$("#settings-code-options_fields").css({display:s})}),$("#css_style").on("change",Dt),$("#remove_label").on("change",vt),$("#remove_colour").on("change",_t),$("#remove_border").on("change",yt),$("#canvas_clear").on("click",wt),$("#confirm_clear").on("click",xt),$(".component-accordion .card-header button").on("click",Pt),$("body").on("click",()=>{document.querySelector("body").classList.contains("sidebar-mini")&&document.querySelector("body").classList.remove("sidebar-mini")}),$(document).on("click",".clickable-dropdown",s=>{s.stopPropagation()}),$("#preview").on("click",()=>{$("#settings-options_button").trigger("click"),$(".page-canvas-shell").addClass("preview")}),$("#canvas-close_preview").on("click",()=>{$(".page-canvas-shell").removeClass("preview")}),Shiny.addCustomMessageHandler("toggleBS4DashDeps",qt),Shiny.addCustomMessageHandler("runjs",function(s){(0,eval)(s.script)}),$("body").on("click contextmenu",ot),$("#canvas-canvas").on("contextmenu",kt),$("#canvas-menu").on("contextmenu",s=>{s.preventDefault()}),$("#sidebar-container").on("mousedown",ot),$("#canvas-delete").on("click",Tt),$("#settings-template-search").on("input",St),$(document).on("click",".template-option",Lt)}function vt(){this.checked?$(".designer-page-template").removeClass("hidden-after-label"):$(".designer-page-template").addClass("hidden-after-label")}function _t(){this.checked?$(".designer-page-template").removeClass("hidden-colour"):$(".designer-page-template").addClass("hidden-colour")}function yt(){this.checked?$(".designer-page-template").removeClass("hidden-borders"):$(".designer-page-template").addClass("hidden-borders")}function wt(){if($("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()==="")return null;$("#clear_modal").modal()}function xt(){$("#canvas-page").html("")}function Ct(){let s=document.getElementById("settings-code-code").textContent;navigator.clipboard.writeText(s),$("#copy_toast").toast("show")}function qt(s){let t=document.styleSheets;for(let e=0;e{document.getElementById(s).scrollIntoView({behavior:"smooth",block:"start"}),$(this).trigger("blur")},250)}var ct;function kt(s){if($(s.target).closest(".designer-element").length===0)return;s.preventDefault();let{clientX:t,clientY:e}=s,{normalizedX:a,normalizedY:n}=It(t,e);ct=$(s.target).closest(".designer-element"),$("#canvas-menu").css("top",`${n}px`),$("#canvas-menu").css("left",`${a}px`),$("#canvas-menu").removeClass("visible"),setTimeout(()=>{$("#canvas-menu").addClass("visible")})}function It(s,t){let e=document.getElementById("canvas-canvas"),a=document.getElementById("canvas-menu"),{left:n,top:i}=e.getBoundingClientRect();n=n<0?0:n,i=i<0?0:i;let l=s-n,o=t-i,r=l+a.clientWidth>e.clientWidth,d=o+a.clientHeight>e.clientHeight,u=s,p=t;return r&&(u=n+e.clientWidth-a.clientWidth),d&&(p=i+e.clientHeight-a.clientHeight),{normalizedX:u,normalizedY:p}}function ot(){$("#canvas-menu").removeClass("visible")}function Tt(s){ct.remove()}function Dt(s){let t=s.target.files[0],e=document.getElementById("canvas-style");e.innerHTML="";let a=new FileReader;a.onload=n=>{let l=n.target.result.split(/\r\n|\n|(?<=\}\b)/);e.innerHTML=l.join(` `);let o=e.sheet.cssRules;for(let r=0;ralert(n.target.error.name),a.readAsText(t)}function lt(s){return s.split(/, */g).map(t=>t==="body"?"#canvas-page":/^\.wrapper\.sidebar/.test(t)?t.replace(".wrapper",""):"#canvas-page "+t).join(", ")}var Z=!1;function tt(){return Z}function dt(){Z=!1}function St(s){let t=s.target.value?s.target.value:"";document.getElementsByClassName("template-option").forEach(e=>{let a=$(e).find(".title").html().includes(t)||$(e).find(".description").html().includes(t);e.style.display=a?null:"none"})}function Lt(s){let t=$(s.target).closest(".template-option"),e=t.data("page");Z=!0;let a=$(s.target).closest(".delete").length>0||s.target.classList.contains("delete");a||$("#settings-page_type").find(`input[value='${e}']`).trigger("click"),document.getElementById("settings-template-search").value=null,$("#settings-template-search").trigger("input"),Shiny.setInputValue("settings-template-select",t.data("value")),Shiny.setInputValue("settings-template-delete",a)}var m;function y(){let s=$("#settings-page_type input:radio:checked").val();return s==="basicPage"?m=new P:s==="fillPage"?m=new I:s==="fixedPage"?m=new T:s==="fluidPage"?m=new D:s==="bootstrapPage"?m=new S:s==="navbarPage"?m=new L:s==="dashboardPage"?m=new M:m=new P,m.updatePage(),tt()?dt():m.enable_on_load&&m.enableSortablePage("canvas-page"),m.updateComponentDropdown(),m}function ut(){let s=$(this);$(this).hasClass("canvas-page-choice")||(s=$(this).closest(".canvas-page-choice")),s.closest(".canvas-modal").css("display","none");let t=s.data("page");$("#settings-page_type").find(`input[value='${t}']`).trigger("click")}function pt(){if(tt())return null;$("#canvas-page").html()===""||$("#canvas-page.wrapper .tab-content").html()===""?($("#canvas-page").html("
        "),y()):$("#warning_modal").modal()}function mt(){$(`#settings-page_type input[value="${m.name}"]`).trigger("click")}function ht(s){let t=$(s.target).val();if($("#canvas-title").html(t),$(".navbar-brand").html(t),$(".brand-link").html(t),$("#canvas-page").data("shinyattributes")){let e=$("#canvas-page").data("shinyattributes").replace(/"[^"]+"/,`"${t}"`);$("#canvas-page").attr("data-shinyattributes",e)}if($("#canvas-page>.main-header").data("shinyattributes")){let e=$("#canvas-page>.main-header").data("shinyattributes").replace(/"[^"]+"/,`"${t}"`);$("#canvas-page>.main-header").attr("data-shinyattributes",e)}}function bt(){y(),$(".canvas-page-choice").on("click",ut),$("#settings-page_type").on("change",pt),$("#cancel_reset").on("click",mt),$("#confirm_reset").on("click",y),$("#app_name").on("change keyup",ht)}function $t(){Shiny.addCustomMessageHandler("prepare_canvas_screenshot",s=>{$(".designer-page-template").addClass("hidden-after-label"),$(".designer-page-template").addClass("hidden-colour"),$(".designer-page-template").addClass("hidden-borders")}),Shiny.addCustomMessageHandler("revert_canvas_screenshot",s=>{$("#remove_label").trigger("change"),$("#remove_colour").trigger("change"),$("#remove_border").trigger("change")})}var f,c=class{updatable=!0;display_comments=!0;display_container=!0;has_card_body=!1;is_tab=!1;html="
        ";sortable_settings=null;constructor(){f=this}createComponent(){return this.html}replaceHTMLPlaceholders(t,e){for(let a in e)t=t.replaceAll("$"+a+"$",e[a]);return t}updateComponent(t=!1){if(typeof window>"u")return null;$(".component-container").html(null);let e=this.createComponent();$(".component-container").html(e),this.addComments(),t&&this.enableSortable()}enableSortable(){Sortable.create(document.getElementById("sidebar-container"),{group:{name:"shared",pull:"clone",put:!1},onClone:function(t){f.sortable_settings&&(f.has_card_body?Sortable.create($(t.item).find(".card-body")[0],f.sortable_settings):f.is_tab?Sortable.create($(t.item).find(".tab-content"),f.sortable_settings):Sortable.create(t.item,f.sortable_settings))},onEnd:function(t){$('.page-canvas [data-toggle="tooltip"]').tooltip(),(f.updatable||$("#sidebar-comments").val()!=="")&&($("#sidebar-comments").val(""),f.updateComponent())}})}addComments(){let t=$("#sidebar-comments").val();t&&($(".component-container>.designer-element").attr("data-shinycomments",t),$(".component-container>.designer-element").attr("title",t),$(".component-container>.designer-element").attr("data-toggle","tooltip"))}createID(t=""){return t=t&&t+"_",t+Math.random().toString(36).substring(2,12)}validateCssUnit(t,e){return this._regex.test(t)?t:/^\d+$/.test(t)?t+"px":e}_regex=/^(auto|inherit|fit-content|calc\(.*\)|((\.\d+)|(\d+(\.\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/};var k=class extends c{html='<$tag$ class="designer-element" data-shinyfunction="$tag$">$value$';constructor(){super(),this.updateComponent(!0)}createComponent(){let t=$("#sidebar-header-tag").val(),e=$("#sidebar-header-text").val();return this.replaceHTMLPlaceholders(this.html,{tag:t,value:e})}};var w=class extends c{updatable=!1;html='
        ';constructor(t=!0){super(),t&&this.updateComponent(!0)}sortable_settings={group:{name:"shared",put:function(t,e,a){return a.classList.contains("col-sm")}}}};var x=class extends c{updatable=!1;html='
        ';sortable_settings={group:{name:"shared",put:function(t,e,a){return!a.classList.contains("col-sm")}}};constructor(t=!0){super(),t&&this.updateComponent(!0)}createComponent(){let t=$("#sidebar-column-width_num").val(),e=$("#sidebar-column-offset").val(),a=e>0?` offset-md-${e}`:"",n=e>0?`, offset = ${e}`:"";return this.replaceHTMLPlaceholders(this.html,{width:t,offset_class:a,offset_r:n})}};var B=class extends c{html='<$tag$ class="designer-element" data-shinyfunction="tags$$tag$">$value$';constructor(){super(),this.updateComponent(!0)}createComponent(){let t=$("#sidebar-text-tag").val(),e=$("#sidebar-text-textarea").val(),a=t==="p"?e.replace(/\n/g," "):this.createListItems(e);return this.replaceHTMLPlaceholders(this.html,{tag:t,value:a})}createListItems(t){return t.split(` `).map(e=>'
      • '+e+"
      • ").join("")}};var C=class extends c{updatable=!1;html='
        ';constructor(t=!0){super(),t&&this.updateComponent(!0)}sortable_settings={group:{name:"shared",put:function(t,e,a){return a.classList.contains("form-group")||a.classList.contains("btn")}}}};var H=class extends c{constructor(t){super(),this.type=t,this.updateComponent(!0)}types=[{value:"text_input",label:"Text",r_func:"textInput"},{value:"textarea",label:"Textarea",r_func:"textAreaInput"},{value:"numeric",label:"Numeric",r_func:"numericInput"},{value:"password",label:"Password",r_func:"passwordInput"}];html=`
        {\r\n Sortable.create(el, {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n })\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BasicPage extends Page {\r\n name = 'basicPage'\r\n enable_on_load = false\r\n page_html = '
        '\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FillPage extends Page {\r\n name = 'fillPage'\r\n page_html = `\r\n
        \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FixedPage extends Page {\r\n name = 'fixedPage'\r\n page_html = `\r\n
        \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FluidPage extends Page {\r\n name = 'fluidPage'\r\n page_html = `\r\n
        \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BootstrapPage extends Page {\r\n name = 'bootstrapPage'\r\n page_html = `\r\n
        \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class NavbarPage extends Page {\r\n name = 'navbarPage'\r\n navbar_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
        \r\n \r\n
        \r\n
        \r\n
        \r\n
        \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class DashboardPage extends Page {\r\n name = 'dashboardPage'\r\n navbar_item_style = ''\r\n bs4_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
        \r\n \r\n \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n `\r\n};\r\n", "export function initSettings () {\r\n $('#settings-page_type').on('click', () => $('.canvas-modal').css('display', 'none'))\r\n\r\n $('.copy-ui-button').on('click', copyUICode)\r\n $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') })\r\n $('#settings-code-download').on('click', () => {\r\n $('#settings-code_button').trigger('click')\r\n Shiny.bindAll('#settings-code-download_confirm')\r\n })\r\n $('#settings-code-download_confirm').on('click', () => {\r\n Shiny.unbindAll('#settings-code-download_confirm')\r\n })\r\n\r\n $('#css_style').on('change', applyCustomStyle)\r\n\r\n $('#remove_label').on('change', toggleComponentLabels)\r\n $('#remove_colour').on('change', toggleBackgroundColours)\r\n $('#remove_border').on('change', toggleBorders)\r\n $('#canvas_clear').on('click', showClearWarning)\r\n $('#confirm_clear').on('click', clearCanvas)\r\n\r\n $('.component-accordion .card-header button').on('click', scrollToComponent)\r\n\r\n $('body').on('click', () => {\r\n if (document.querySelector('body').classList.contains('sidebar-mini')) {\r\n document.querySelector('body').classList.remove('sidebar-mini')\r\n }\r\n })\r\n\r\n $(document).on('click', '.clickable-dropdown', e => { e.stopPropagation() })\r\n $('#preview').on('click', () => {\r\n $('#settings-options_button').trigger('click')\r\n $('.page-canvas-shell').addClass('preview')\r\n })\r\n $('#canvas-close_preview').on('click', () => { $('.page-canvas-shell').removeClass('preview') })\r\n\r\n Shiny.addCustomMessageHandler('toggleBS4DashDeps', toggleBS4DashDeps)\r\n // eslint-disable-next-line no-eval\r\n Shiny.addCustomMessageHandler('runjs', function (message) { (0, eval)(message.script) })\r\n\r\n $('body').on('click contextmenu', closeCanvasMenu)\r\n $('#canvas-canvas').on('contextmenu', showCanvasMenu)\r\n $('#canvas-menu').on('contextmenu', e => { e.preventDefault() })\r\n $('#sidebar-container').on('mousedown', closeCanvasMenu)\r\n\r\n $('#canvas-delete').on('click', deleteDesignerElement)\r\n\r\n $('#settings-template-search').on('input', toggleSavedTemplates)\r\n $(document).on('click', '.template-option', sendSavedTemplateID)\r\n};\r\n\r\nfunction toggleComponentLabels () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-after-label')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n }\r\n};\r\n\r\nfunction toggleBackgroundColours () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-colour')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-colour')\r\n }\r\n};\r\n\r\nfunction toggleBorders () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-borders')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-borders')\r\n }\r\n};\r\n\r\nfunction showClearWarning () {\r\n if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n return null\r\n } else {\r\n $('#clear_modal').modal()\r\n }\r\n};\r\n\r\nfunction clearCanvas () {\r\n $('#canvas-page').html('')\r\n};\r\n\r\nfunction copyUICode () {\r\n const copyText = document.getElementById('settings-code-code').textContent\r\n navigator.clipboard.writeText(copyText)\r\n $('#copy_toast').toast('show')\r\n};\r\n\r\nfunction toggleBS4DashDeps (toggle) {\r\n const stylesheets = document.styleSheets\r\n for (let i = 0; i < stylesheets.length; i++) {\r\n const stylesheet = stylesheets.item(i)\r\n if (stylesheet.href && (stylesheet.href.includes('AdminLTE') || stylesheet.href.includes('bs4Dash'))) {\r\n stylesheet.disabled = toggle === 'hide'\r\n }\r\n }\r\n};\r\n\r\nfunction scrollToComponent () {\r\n const cardHeader = this.closest('.card-header').id\r\n setTimeout(\r\n () => {\r\n document.getElementById(cardHeader).scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n $(this).trigger('blur')\r\n },\r\n 250\r\n )\r\n}\r\n\r\nlet selectedElement\r\n\r\nfunction showCanvasMenu (event) {\r\n if ($(event.target).closest('.designer-element').length === 0) {\r\n return\r\n }\r\n event.preventDefault()\r\n\r\n const { clientX: mouseX, clientY: mouseY } = event\r\n const { normalizedX, normalizedY } = normalizeMenuPosition(mouseX, mouseY)\r\n\r\n selectedElement = $(event.target).closest('.designer-element')\r\n\r\n $('#canvas-menu').css('top', `${normalizedY}px`)\r\n $('#canvas-menu').css('left', `${normalizedX}px`)\r\n $('#canvas-menu').removeClass('visible')\r\n\r\n setTimeout(() => { $('#canvas-menu').addClass('visible') })\r\n};\r\n\r\nfunction normalizeMenuPosition (mouseX, mouseY) {\r\n const scope = document.getElementById('canvas-canvas')\r\n const contextMenu = document.getElementById('canvas-menu')\r\n\r\n let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect()\r\n\r\n scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX\r\n scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY\r\n\r\n const scopeX = mouseX - scopeOffsetX\r\n const scopeY = mouseY - scopeOffsetY\r\n\r\n const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth\r\n const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight\r\n\r\n let normalizedX = mouseX\r\n let normalizedY = mouseY\r\n\r\n if (outOfBoundsOnX) {\r\n normalizedX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth\r\n }\r\n if (outOfBoundsOnY) {\r\n normalizedY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight\r\n }\r\n\r\n return { normalizedX, normalizedY }\r\n};\r\n\r\nfunction closeCanvasMenu () {\r\n $('#canvas-menu').removeClass('visible')\r\n};\r\n\r\nfunction deleteDesignerElement (event) {\r\n selectedElement.remove()\r\n};\r\n\r\nfunction applyCustomStyle (event) {\r\n const cssFile = event.target.files[0]\r\n const canvasStyle = document.getElementById('canvas-style')\r\n canvasStyle.innerHTML = ''\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n const file = e.target.result\r\n const lines = file.split(/\\r\\n|\\n|(?<=\\}\\b)/)\r\n canvasStyle.innerHTML = lines.join('\\n')\r\n\r\n const cssRules = canvasStyle.sheet.cssRules\r\n for (let i = 0; i < cssRules.length; i++) {\r\n if (cssRules[i].selectorText) {\r\n cssRules[i].selectorText = addCanvasPageSelector(cssRules[i].selectorText)\r\n } else if (cssRules[i].media && cssRules[i].cssRules) {\r\n const cssMediaRules = cssRules[i].cssRules\r\n for (let j = 0; j < cssMediaRules.length; j++) {\r\n cssMediaRules[j].selectorText = addCanvasPageSelector(cssMediaRules[j].selectorText)\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.onerror = (e) => alert(e.target.error.name)\r\n reader.readAsText(cssFile)\r\n};\r\n\r\nfunction addCanvasPageSelector (selectors) {\r\n return selectors.split(/, */g).map((x) => {\r\n if (x === 'body') {\r\n return '#canvas-page'\r\n } else if (/^\\.wrapper\\.sidebar/.test(x)) {\r\n return x.replace('.wrapper', '')\r\n } else {\r\n return '#canvas-page ' + x\r\n }\r\n }).join(', ')\r\n};\r\n\r\nlet template_selected = false\r\nexport function templateSelected () {\r\n return template_selected\r\n};\r\n\r\nexport function templateUpated () {\r\n template_selected = false\r\n}\r\n\r\nfunction toggleSavedTemplates (event) {\r\n const search_term = event.target.value ? event.target.value : ''\r\n\r\n document.getElementsByClassName('template-option').forEach(x => {\r\n const show_template = $(x).find('.title').html().includes(search_term) || $(x).find('.description').html().includes(search_term)\r\n x.style.display = show_template ? null : 'none'\r\n })\r\n}\r\n\r\nfunction sendSavedTemplateID (event) {\r\n const selected_template = $(event.target).closest('.template-option')\r\n const page_choice = selected_template.data('page')\r\n template_selected = true\r\n\r\n const to_delete = $(event.target).closest('.delete').length > 0 || event.target.classList.contains('delete')\r\n\r\n if (!to_delete) {\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n }\r\n\r\n document.getElementById('settings-template-search').value = null\r\n $('#settings-template-search').trigger('input')\r\n\r\n Shiny.setInputValue('settings-template-select', selected_template.data('value'))\r\n Shiny.setInputValue('settings-template-delete', to_delete)\r\n};\r\n", "import { BasicPage } from './BasicPage'\r\nimport { FillPage } from './FillPage'\r\nimport { FixedPage } from './FixedPage'\r\nimport { FluidPage } from './FluidPage'\r\nimport { BootstrapPage } from './BootstrapPage'\r\nimport { NavbarPage } from './NavbarPage'\r\nimport { DashboardPage } from './DashboardPage'\r\nimport { templateSelected, templateUpated } from '../app/settings'\r\n\r\nexport let page\r\n\r\nexport function createPage () {\r\n const page_type = $('#settings-page_type input:radio:checked').val()\r\n\r\n if (page_type === 'basicPage') {\r\n page = new BasicPage()\r\n } else if (page_type === 'fillPage') {\r\n page = new FillPage()\r\n } else if (page_type === 'fixedPage') {\r\n page = new FixedPage()\r\n } else if (page_type === 'fluidPage') {\r\n page = new FluidPage()\r\n } else if (page_type === 'bootstrapPage') {\r\n page = new BootstrapPage()\r\n } else if (page_type === 'navbarPage') {\r\n page = new NavbarPage()\r\n } else if (page_type === 'dashboardPage') {\r\n page = new DashboardPage()\r\n } else {\r\n page = new BasicPage()\r\n }\r\n\r\n page.updatePage()\r\n\r\n if (templateSelected()) {\r\n templateUpated()\r\n } else if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n\r\n page.updateComponentDropdown()\r\n return page\r\n};\r\n\r\nexport function selectPage () {\r\n let button_el = $(this)\r\n if (!$(this).hasClass('canvas-page-choice')) {\r\n button_el = $(this).closest('.canvas-page-choice')\r\n }\r\n\r\n button_el.closest('.canvas-modal').css('display', 'none')\r\n\r\n const page_choice = button_el.data('page')\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n}\r\n\r\nexport function changePageCheck () {\r\n if (templateSelected()) {\r\n return null\r\n } else if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n $('#canvas-page').html('
        ')\r\n createPage()\r\n } else {\r\n $('#warning_modal').modal()\r\n }\r\n};\r\n\r\nexport function revertPageSelection () {\r\n $(`#settings-page_type input[value=\"${page.name}\"]`).trigger('click')\r\n}\r\n\r\nexport function updateTitle (el) {\r\n const title = $(el.target).val()\r\n $('#canvas-title').html(title)\r\n $('.navbar-brand').html(title)\r\n $('.brand-link').html(title)\r\n\r\n if ($('#canvas-page').data('shinyattributes')) {\r\n const shiny_atts = $('#canvas-page').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page').attr('data-shinyattributes', shiny_atts)\r\n }\r\n\r\n if ($('#canvas-page>.main-header').data('shinyattributes')) {\r\n const shiny_atts2 = $('#canvas-page>.main-header').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page>.main-header').attr('data-shinyattributes', shiny_atts2)\r\n }\r\n}\r\n", "import { selectPage, changePageCheck, createPage, updateTitle, revertPageSelection } from './utils'\r\n\r\nexport function initPage () {\r\n createPage()\r\n $('.canvas-page-choice').on('click', selectPage)\r\n $('#settings-page_type').on('change', changePageCheck)\r\n $('#cancel_reset').on('click', revertPageSelection)\r\n $('#confirm_reset').on('click', createPage)\r\n\r\n $('#app_name').on('change keyup', updateTitle)\r\n};\r\n", "export function screenshotSettings () {\r\n Shiny.addCustomMessageHandler('prepare_canvas_screenshot', (message) => {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n $('.designer-page-template').addClass('hidden-colour')\r\n $('.designer-page-template').addClass('hidden-borders')\r\n })\r\n\r\n Shiny.addCustomMessageHandler('revert_canvas_screenshot', (message) => {\r\n $('#remove_label').trigger('change')\r\n $('#remove_colour').trigger('change')\r\n $('#remove_border').trigger('change')\r\n })\r\n}\r\n", "export let component\r\n\r\nexport class Component {\r\n updatable = true\r\n display_comments = true\r\n display_container = true\r\n has_card_body = false\r\n is_tab = false\r\n html = '
        '\r\n sortable_settings = null\r\n\r\n constructor () {\r\n component = this\r\n }\r\n\r\n createComponent () {\r\n return this.html\r\n };\r\n\r\n replaceHTMLPlaceholders (html, options) {\r\n for (const property in options) {\r\n html = html.replaceAll('$' + property + '$', options[property])\r\n }\r\n return html\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n\r\n $('.component-container').html(null)\r\n const html = this.createComponent()\r\n $('.component-container').html(html)\r\n this.addComments()\r\n if (update_sortable) {\r\n this.enableSortable()\r\n }\r\n };\r\n\r\n enableSortable () {\r\n Sortable.create(\r\n document.getElementById('sidebar-container'), {\r\n group: {\r\n name: 'shared',\r\n pull: 'clone',\r\n put: false\r\n },\r\n onClone: function (evt) {\r\n if (component.sortable_settings) {\r\n if (component.has_card_body) {\r\n Sortable.create($(evt.item).find('.card-body')[0], component.sortable_settings)\r\n } else if (component.is_tab) {\r\n Sortable.create($(evt.item).find('.tab-content'), component.sortable_settings)\r\n } else {\r\n Sortable.create(evt.item, component.sortable_settings)\r\n }\r\n }\r\n },\r\n onEnd: function (_evt) {\r\n $('.page-canvas [data-toggle=\"tooltip\"]').tooltip()\r\n if (component.updatable || $('#sidebar-comments').val() !== '') {\r\n $('#sidebar-comments').val('')\r\n component.updateComponent()\r\n }\r\n }\r\n })\r\n };\r\n\r\n addComments () {\r\n const comments = $('#sidebar-comments').val()\r\n if (comments) {\r\n $('.component-container>.designer-element').attr('data-shinycomments', comments)\r\n $('.component-container>.designer-element').attr('title', comments)\r\n $('.component-container>.designer-element').attr('data-toggle', 'tooltip')\r\n }\r\n };\r\n\r\n createID (prefix = '') {\r\n prefix = prefix ? prefix + '_' : prefix\r\n return prefix + Math.random().toString(36).substring(2, 12)\r\n };\r\n\r\n validateCssUnit (x, fallback) {\r\n if (this._regex.test(x)) {\r\n return x\r\n } else if (/^\\d+$/.test(x)) {\r\n return x + 'px'\r\n } else {\r\n return fallback\r\n }\r\n };\r\n\r\n _regex = /^(auto|inherit|fit-content|calc\\(.*\\)|((\\.\\d+)|(\\d+(\\.\\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/\r\n};\r\n", "import { Component } from './Component'\r\n\r\nexport class Header extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-header-tag').val()\r\n const value = $('#sidebar-header-text').val()\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Row extends Component {\r\n updatable = false\r\n html = '
        '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Column extends Component {\r\n updatable = false\r\n html = '
        '\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n createComponent () {\r\n const width = $('#sidebar-column-width_num').val()\r\n const offset = $('#sidebar-column-offset').val()\r\n\r\n const offset_class = offset > 0 ? ` offset-md-${offset}` : ''\r\n const offset_r = offset > 0 ? `, offset = ${offset}` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { width, offset_class, offset_r })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Text extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"tags$$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-text-tag').val()\r\n const value = $('#sidebar-text-textarea').val()\r\n const contents = tag === 'p' ? value.replace(/\\n/g, ' ') : this.createListItems(value)\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value: contents })\r\n }\r\n\r\n createListItems (text) {\r\n return text.split('\\n').map(x => '
      • ' + x + '
      • ').join('')\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InputPanel extends Component {\r\n updatable = false\r\n html = '
        '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('form-group') || clone.classList.contains('btn')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Input extends Component {\r\n constructor (type) {\r\n super()\r\n this.type = type\r\n this.updateComponent(true)\r\n }\r\n\r\n types = [\r\n { value: 'text_input', label: 'Text', r_func: 'textInput' },\r\n { value: 'textarea', label: 'Textarea', r_func: 'textAreaInput' },\r\n { value: 'numeric', label: 'Numeric', r_func: 'numericInput' },\r\n { value: 'password', label: 'Password', r_func: 'passwordInput' }\r\n ]\r\n\r\n html = `\r\n
        $input_tag$
        \r\n `\r\n\r\n createComponent () {\r\n const label = $(`#sidebar-${this.type}-label`).val()\r\n\r\n let id = $(`#sidebar-${this.type}-id`).val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_info = this.types.find(x => x.value === this.type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n\r\n let input_tag\r\n if (this.type === 'textarea') {\r\n input_tag = ''\r\n } else {\r\n input_tag = ``\r\n }\r\n\r\n const width = this.validateCssUnit($(`#sidebar-${this.type}-width`).val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class FileInput extends Component {\r\n html = `\r\n
        \r\n \r\n
        \r\n \r\n \r\n
        \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-file-label').val()\r\n\r\n let id = $('#sidebar-file-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-file-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SelectInput extends Component {\r\n html = `\r\n
        \r\n \r\n
        \r\n \r\n `\r\n\r\n date_range_input_html = `\r\n
        \r\n \r\n \r\n to \r\n \r\n \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-date-label').val()\r\n\r\n let id = $('#sidebar-date-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-date-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const range = document.getElementById('sidebar-date-range').checked\r\n const r_func = range ? 'dateRangeInput' : 'dateInput'\r\n const date_class = range ? 'shiny-date-range-input' : 'shiny-date-input'\r\n const input_tag = range ? this.date_range_input_html : this.date_input_html\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n date_class,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n $('.component-container').find('input').bsDatepicker()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxInput extends Component {\r\n html = `\r\n
        \r\n
        \r\n \r\n
        \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-checkbox-label').val()\r\n\r\n let id = $('#sidebar-checkbox-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-checkbox-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxGroupInput extends Component {\r\n types = [\r\n { value: 'radio', label: 'Radio', r_func: 'radioButtons', role: 'radiogroup' },\r\n { value: 'checkbox', label: 'Checkbox', r_func: 'checkboxGroupInput', role: 'group' }\r\n ]\r\n\r\n html = `\r\n
        \r\n \r\n
        \r\n $choices$\r\n
        \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-radio-label').val()\r\n\r\n let id = $('#sidebar-radio-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const type = $('#sidebar-radio-type').val()\r\n const input_info = this.types.find(x => x.value === type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n const role = input_info.role\r\n\r\n const width = this.validateCssUnit($('#sidebar-radio-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const inline = document.getElementById('sidebar-radio-inline').checked\r\n const inline_class = inline ? '-inline' : ''\r\n const inline_str = inline ? ', inline = TRUE' : ''\r\n const css_class = `shiny-input-${type}group${inline_class}`\r\n\r\n const choices = $('#sidebar-radio-choices').val()\r\n const choices_str = `, choices = c("${choices.replace(/\\n/g, '", "')}")`\r\n const choices_html = choices.split('\\n').map(x => this.createCheckbox(x, type, inline)).join('')\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n css_class,\r\n r_func,\r\n role,\r\n choices: choices_html,\r\n choices_str,\r\n inline_str,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n createCheckbox (x, type = 'checkbox', inline = false) {\r\n const check_class = inline ? type + '-inline' : type\r\n return ``\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SliderInput extends Component {\r\n html = `\r\n
        \r\n \r\n \r\n
        \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-slider-label').val()\r\n\r\n let id = $('#sidebar-slider-id').val()\r\n id = id === '' ? this.createID('slider') : id\r\n\r\n const format = $('#sidebar-slider-type').val()\r\n\r\n const width = this.validateCssUnit($('#sidebar-slider-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const ranged = document.getElementById('sidebar-slider-range').checked\r\n const values = this.getValues(format, ranged)\r\n const range_attr = ranged ? 'data-type=\"double\" data-drag-interval=\"true\" data-to=\"$to$\"' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n range_attr,\r\n id,\r\n label,\r\n format,\r\n min: values.min,\r\n max: values.max,\r\n step: values.step,\r\n from: values.from,\r\n to: values.to,\r\n style_str,\r\n width_str,\r\n value_str: values.value_str,\r\n time_format: values.time_format\r\n })\r\n };\r\n\r\n getValues (format, range = false) {\r\n if (format === 'number') {\r\n return {\r\n step: 1,\r\n min: 0,\r\n max: 10,\r\n from: 5,\r\n to: 7,\r\n value_str: `, min = 0, max = 10, value = ${range ? 'c(5, 7)' : 5}`\r\n }\r\n }\r\n\r\n const curr_date = new Date()\r\n if (format === 'date') {\r\n curr_date.setHours(0, 0, 0, 0)\r\n }\r\n const curr_time = curr_date.getTime()\r\n const step = format === 'date' ? 1000 * 60 * 60 * 24 : 1000\r\n\r\n const min = curr_time - 5 * step\r\n const max = curr_time + 5 * step\r\n const from = curr_time\r\n const to = curr_time + 2 * step\r\n\r\n const r_datefunc = format === 'date' ? 'Sys.Date()' : 'Sys.time()'\r\n const r_mult = format === 'date' ? '' : '000'\r\n const input_value_str = range ? `\"c(${r_datefunc}, ${r_datefunc} + 2${r_mult})\"` : r_datefunc\r\n\r\n return {\r\n step,\r\n min,\r\n max,\r\n from,\r\n to,\r\n time_format: format === 'date' ? '%F' : '%F %T',\r\n value_str: `, min = ${r_datefunc} - 5${r_mult}, max = ${r_datefunc} + 5${r_mult}, value = ${input_value_str}`\r\n }\r\n }\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n const slider_type = $('#sidebar-slider-type').val()\r\n $('.component-container').find('input').ionRangeSlider({ prettify: this.getSliderPrettifier(slider_type) })\r\n };\r\n\r\n getSliderPrettifier (type) {\r\n if (type === 'date') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate()\r\n }\r\n } else if (type === 'datetime') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate() + ' ' +\r\n sel_date.getHours() + ':' + sel_date.getMinutes() + ':' + sel_date.getSeconds()\r\n }\r\n } else {\r\n return null\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Button extends Component {\r\n types = [\r\n { value: 'default', css_class: 'btn-default' },\r\n { value: 'primary', css_class: 'btn-primary' },\r\n { value: 'secondary', css_class: 'btn-secondary' },\r\n { value: 'success', css_class: 'btn-success' },\r\n { value: 'danger', css_class: 'btn-danger' },\r\n { value: 'warning', css_class: 'btn-warning' },\r\n { value: 'info', css_class: 'btn-info' },\r\n { value: 'light', css_class: 'btn-light' },\r\n { value: 'dark', css_class: 'btn-dark' }\r\n ]\r\n\r\n html = `\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-button-label').val()\r\n\r\n let id = $('#sidebar-button-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_type = $('#sidebar-button-type').val()\r\n const input_info = this.types.find(x => x.value === input_type)\r\n if (!input_info) return\r\n const btn_class = input_info.css_class\r\n const class_str = input_type === 'default' ? '' : `, class = "${btn_class}"`\r\n\r\n const downloadable = document.getElementById('sidebar-button-download').checked\r\n const r_func = downloadable ? 'downloadButton' : 'actionButton'\r\n let icon_html = downloadable ? '' : ''\r\n const id_arg = downloadable ? 'outputId' : 'inputId'\r\n\r\n const tab_icon = $('#sidebar-button-icon').val()\r\n const icon_r = tab_icon === '' || downloadable ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' || downloadable ? '' : $('#sidebar-button-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n icon_html = tab_icon === '' || downloadable ? icon_html : ``\r\n\r\n const width = this.validateCssUnit($('#sidebar-button-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n id_arg,\r\n label,\r\n r_func,\r\n icon_r,\r\n icon_html,\r\n btn_class,\r\n class_str,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Output extends Component {\r\n types = [\r\n { value: 'text', label: 'Text', css_class: 'text-output-element shiny-text-output', r_func: 'textOutput', placeholder: 'Text Output: ' },\r\n { value: 'verbatim', label: 'Verbatim Text', css_class: 'verbatimtext-output-element shiny-text-output', r_func: 'verbatimTextOutput', placeholder: 'Verbatim Text Output: ' },\r\n { value: 'plot', label: 'Plot', css_class: 'plot-output-element shiny-plot-output', r_func: 'plotOutput' },\r\n { value: 'image', label: 'Image', css_class: 'image-output-element shiny-image-output', r_func: 'imageOutput' },\r\n { value: 'table', label: 'Table', css_class: 'table-output-element shiny-datatable-output', r_func: 'DT::DTOutput' },\r\n { value: 'html', label: 'HTML', css_class: 'html-output-element shiny-html-output', r_func: 'uiOutput', placeholder: 'Placeholder for HTML Output' }\r\n ]\r\n\r\n html = `\r\n <$html_tag$ $id_str$ class=\"designer-element output-element $css_class$\"\r\n style=\"$style_str$\"\r\n data-shinyfunction=\"$r_func$\"\r\n data-shinyattributes=\"outputId = "$id$"$inline_str$$dim_str$\">\r\n $output_tag$\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-output-label').val()\r\n\r\n let id = $('#sidebar-output-id').val()\r\n id = id === '' ? this.createID('output') : id\r\n\r\n const output_type = $('#sidebar-output-type').val()\r\n const output_info = this.types.find(x => x.value === output_type)\r\n if (!output_info) return\r\n const r_func = output_info.r_func\r\n let html_tag = output_type === 'verbatim' ? 'pre' : 'div'\r\n const css_class = output_info.css_class\r\n\r\n let id_str = ''\r\n if (['plot', 'image', 'table'].includes(output_type)) {\r\n const designer_id = this.createID('output')\r\n Shiny.setInputValue('sidebar-outputid', designer_id)\r\n id_str = `id=\"sidebar-${designer_id}\"`\r\n }\r\n\r\n const inline = document.getElementById('sidebar-output-inline').checked\r\n const inline_str = inline && !['verbatim', 'table'].includes(output_type) ? ', inline = TRUE' : ''\r\n if (inline_str !== '') {\r\n html_tag = 'span'\r\n }\r\n\r\n let dim_str = ''\r\n let style_str = ''\r\n\r\n if (['plot', 'image'].includes(output_type)) {\r\n const width = this.validateCssUnit($('#sidebar-output-width').val(), '100%')\r\n style_str = `width: ${width};`\r\n dim_str = width === '100%' ? '' : `, width = "${width}"`\r\n\r\n const height = this.validateCssUnit($('#sidebar-output-height').val(), '400px')\r\n style_str = style_str + ` height: ${height};`\r\n dim_str = dim_str + (height === '400px' ? '' : `, height = "${height}"`)\r\n }\r\n\r\n let output_tag = ''\r\n if (output_info.placeholder) {\r\n if (output_type === 'html') {\r\n output_tag = `${output_info.placeholder}`\r\n } else {\r\n output_tag = `${output_info.placeholder} ${$('#sidebar-output-textarea').val()}`\r\n }\r\n }\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n html_tag,\r\n id,\r\n label,\r\n id_str,\r\n r_func,\r\n css_class,\r\n style_str,\r\n dim_str,\r\n inline_str,\r\n output_tag\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n Shiny.bindAll()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tab extends Component {\r\n _item = 1\r\n\r\n updateComponent () {};\r\n\r\n getPageType () {\r\n return $('#settings-page_type input:radio:checked').val()\r\n };\r\n\r\n addPage () {\r\n const page_type = this.getPageType()\r\n\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n if (tab_value === '') {\r\n tab_value = this.createID('tab')\r\n } else if (this.checkDuplicateIDs(tab_value, page_type)) {\r\n return\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('ul.navbar-nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
      • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
      • \r\n `)\r\n\r\n tab_panel.append(`\r\n
        \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const tab_panel = $('section.content .tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n $('.sidebarMenuSelectedTabItem').before(`\r\n
      • \r\n \r\n ${icon_html}\r\n

        ${tab_name}

        \r\n
        \r\n
      • \r\n `)\r\n\r\n if (!$('.sidebarMenuSelectedTabItem').attr('data-value')) {\r\n $('.sidebarMenuSelectedTabItem').attr('data-value', tab_value)\r\n }\r\n\r\n tab_panel.append(`\r\n
        \r\n `)\r\n\r\n this.enableSortablePage(`shiny-tab-${tab_value}`)\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
        \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
        \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-name='${tab_name}']`\r\n } else {\r\n return `ul.navbar-nav a[data-name='${tab_name}']`\r\n }\r\n };\r\n\r\n checkDuplicateIDs (tab_value, page_type) {\r\n if ($(this.getValueIdentifier(tab_value, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
        \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
        \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-value='${tab_value}']`\r\n } else {\r\n return `ul.navbar-nav a[data-value='${tab_value}']`\r\n }\r\n };\r\n\r\n deletePage () {\r\n const page_type = this.getPageType()\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n\r\n if (this.checkMissingName(tab_name, page_type)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name, page_type)).length > 1 && tab_value === '') {\r\n $('#sidebar-tab-alert').html(`\r\n
        \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
        \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`ul.nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`#tab-${tab_value}`).parent().remove()\r\n $(`#shiny-tab-${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tab-alert').html(`\r\n
        \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
        \r\n `)\r\n return true\r\n }\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tabset extends Component {\r\n _item = 1\r\n id\r\n html\r\n is_tab = true\r\n\r\n constructor () {\r\n super()\r\n this.id = this.getTabID()\r\n\r\n if (this.isDashPage()) {\r\n this.html = `\r\n
        \r\n
        \r\n
        \r\n
          $title$
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n \r\n
        `\r\n } else {\r\n this.html = `\r\n
        \r\n
          \r\n
          \r\n
          `\r\n }\r\n\r\n this.updateComponent(true)\r\n };\r\n\r\n createComponent () {\r\n if (this.isDashPage()) {\r\n const label = $('#sidebar-tabset-label').val()\r\n const title = label === '' ? '' : `
        • ${label}

        • `\r\n const title_r = label === '' ? '' : `title = "${label}", `\r\n\r\n const width = $('#sidebar-tabset-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-tabset-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-tabset-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n title,\r\n title_r,\r\n label,\r\n width,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n } else {\r\n const type = $('#sidebar-tabset-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n type\r\n })\r\n }\r\n };\r\n\r\n isDashPage () {\r\n return this.getPageType() === 'dashboardPage'\r\n };\r\n\r\n getPageType () {\r\n if (typeof (window) === 'undefined') {\r\n return 'navbarPage'\r\n } else {\r\n return $('#settings-page_type input:radio:checked').val()\r\n }\r\n };\r\n\r\n addPage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n if (tab_value === '') {\r\n tab_value = tab_name\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('.component-container>.tabbable>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container>.tabbable>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
        • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
        • \r\n `)\r\n\r\n tab_panel.append(`\r\n
          \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const nav_panel = $('.component-container .card-header>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container .card-body>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
        • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
        • \r\n `)\r\n\r\n tab_panel.append(`\r\n
          \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
          \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
          \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name) {\r\n return `.component-container .nav a[data-name='${tab_name}']`\r\n };\r\n\r\n checkDuplicateIDs (tab_value) {\r\n if ($(this.getValueIdentifier(tab_value)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
          \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
          \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value) {\r\n return `.component-container .nav a[data-value='${tab_value}']`\r\n };\r\n\r\n deletePage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n\r\n if (this.checkMissingName(tab_name)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name)).length > 1 && tab_value === '') {\r\n $('#sidebar-tabset-alert').html(`\r\n
          \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
          \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n if (tab_value === '') {\r\n tab_value = $(`.component-container .nav-item a[data-name='${tab_name}']`).attr('href')\r\n } else {\r\n tab_value = '#' + $(`.component-container .tab-pane[data-value='${tab_value}']`).attr('id')\r\n }\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`.component-container ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`.component-container .nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.component-container .tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`.component-container .nav-item a[href='${tab_value}']`).parent().remove()\r\n $(`${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tabset-alert').html(`\r\n
          \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
          \r\n `)\r\n return true\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Box extends Component {\r\n has_card_body = true\r\n html = `\r\n
          \r\n
          \r\n
          \r\n

          $label$

          \r\n
          \r\n \r\n
          \r\n
          \r\n
          \r\n
          \r\n \r\n
          \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-box-label').val()\r\n\r\n const width = $('#sidebar-box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class UserBox extends Component {\r\n has_card_body = true\r\n html = `\r\n
          \r\n
          \r\n
          \r\n
          \r\n \r\n
          \r\n

          $label$

          \r\n
          \r\n
          \r\n \"User\r\n
          \r\n
          \r\n
          \r\n
          \r\n
          \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-user_box-label').val()\r\n\r\n const width = $('#sidebar-user_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-user_box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-user_box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n const type = $('#sidebar-user_box-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class,\r\n type\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class ValueBox extends Component {\r\n html = `\r\n
          \r\n
          \r\n
          \r\n $value$\r\n

          \r\n $label$\r\n

          \r\n
          \r\n $icon_html$\r\n
          \r\n
          \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-value_box-value').val()\r\n const label = $('#sidebar-value_box-label').val()\r\n\r\n const width = $('#sidebar-value_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-value_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-value_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : `
          `\r\n\r\n const background = $('#sidebar-value_box-background').val()\r\n const background_class = `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InfoBox extends Component {\r\n html = `\r\n
          \r\n
          \r\n \r\n $icon_html$\r\n \r\n
          \r\n $label$\r\n $value$\r\n
          \r\n
          \r\n
          \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-info_box-value').val()\r\n const label = $('#sidebar-info_box-label').val()\r\n\r\n const width = $('#sidebar-info_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-info_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-info_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n const background = $('#sidebar-info_box-background').val()\r\n const background_class = `bg-${background}`\r\n const fill_box = document.getElementById('sidebar-info_box-fill').checked\r\n const fill_r = fill_box ? ', fill = TRUE' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: fill_box ? background_class : '',\r\n colour_class2: fill_box ? '' : background_class,\r\n fill_r\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class BlockQuote extends Component {\r\n html = '
          $value$
          '\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const colour = $('#sidebar-quote-colour').val()\r\n const value = $('#sidebar-quote-textarea').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { colour, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Callout extends Component {\r\n html = `\r\n
          \r\n
          \r\n
          $title$
          \r\n $value$\r\n
          \r\n `\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const title = $('#sidebar-callout-label').val()\r\n const status = $('#sidebar-callout-colour').val()\r\n const value = $('#sidebar-callout-textarea').val()\r\n\r\n const width = $('#sidebar-callout-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n title,\r\n status,\r\n value,\r\n width_r,\r\n width_class\r\n })\r\n }\r\n}\r\n", "import { Header } from './Header'\r\nimport { Row } from './Row'\r\nimport { Column } from './Column'\r\nimport { Text } from './Text'\r\nimport { InputPanel } from './InputPanel'\r\nimport { Input } from './Input'\r\nimport { FileInput } from './FileInput'\r\nimport { SelectInput } from './SelectInput'\r\nimport { DateInput } from './DateInput'\r\nimport { CheckboxInput } from './Checkbox'\r\nimport { CheckboxGroupInput } from './CheckboxGroup'\r\nimport { SliderInput } from './SliderInput'\r\nimport { Button } from './Button'\r\nimport { Output } from './Output'\r\nimport { Tab } from './Tab'\r\nimport { Tabset } from './Tabset'\r\nimport { Box } from './Box'\r\nimport { UserBox } from './UserBox'\r\nimport { ValueBox } from './ValueBox'\r\nimport { InfoBox } from './InfoBox'\r\nimport { BlockQuote } from './BlockQuote'\r\nimport { Callout } from './Callout'\r\n\r\nexport function getComponent (name) {\r\n if (name === 'header') {\r\n return new Header()\r\n } else if (name === 'row') {\r\n return new Row()\r\n } else if (name === 'column') {\r\n return new Column()\r\n } else if (name === 'text') {\r\n return new Text()\r\n } else if (name === 'input_panel') {\r\n return new InputPanel()\r\n } else if (['text_input', 'numeric', 'textarea', 'password'].includes(name)) {\r\n return new Input(name)\r\n } else if (name === 'dropdown') {\r\n return new SelectInput()\r\n } else if (name === 'file') {\r\n return new FileInput()\r\n } else if (name === 'date') {\r\n return new DateInput()\r\n } else if (name === 'checkbox') {\r\n return new CheckboxInput()\r\n } else if (name === 'radio') {\r\n return new CheckboxGroupInput()\r\n } else if (name === 'slider') {\r\n return new SliderInput()\r\n } else if (name === 'button') {\r\n return new Button()\r\n } else if (name === 'output') {\r\n return new Output()\r\n } else if (name === 'tab_panel') {\r\n return new Tab()\r\n } else if (name === 'tabset') {\r\n return new Tabset()\r\n } else if (name === 'box') {\r\n return new Box()\r\n } else if (name === 'user_box') {\r\n return new UserBox()\r\n } else if (name === 'value_box') {\r\n return new ValueBox()\r\n } else if (name === 'info_box') {\r\n return new InfoBox()\r\n } else if (name === 'quote') {\r\n return new BlockQuote()\r\n } else if (name === 'callout') {\r\n return new Callout()\r\n }\r\n\r\n return new Header()\r\n}\r\n", "import { getComponent } from './utils'\r\nimport { component } from './Component'\r\n\r\nexport function initComponents () {\r\n getComponent('header')\r\n\r\n $('.component-settings').on('change keyup', () => component.updateComponent())\r\n $('.component-comments').on('change blur', () => component.updateComponent())\r\n $('.component-container').on('mouseover', () => { $(':focus').trigger('blur') })\r\n\r\n $('.add-tab-button').on('click', () => component.addPage())\r\n $('.delete-tab-button').on('click', () => component.deletePage())\r\n\r\n $('.accordion .card-header .btn').on('click', (el) => {\r\n $(el.target).closest('.card').find('form').trigger('reset')\r\n\r\n const new_component = $(el.target).data('shinyelement')\r\n getComponent(new_component)\r\n document.getElementById('sidebar-container').style.display = new_component === 'tab_panel' ? 'none' : null\r\n })\r\n};\r\n", "export function htmlToJSON (el, inner = false) {\r\n const children = getChildrenJSON(el)\r\n\r\n const jsonElement = {\r\n tagName: el.tagName.toLowerCase(),\r\n r_function: el.dataset.shinyfunction,\r\n r_arguments: el.dataset.shinyattributes,\r\n r_comments: el.dataset.shinycomments,\r\n text: $(el).ignore().text().replace(/\\s*\\n\\s*/g, ''),\r\n htmlclass: el.className,\r\n children\r\n }\r\n\r\n if (inner) {\r\n return jsonElement\r\n } else {\r\n return JSON.stringify(jsonElement)\r\n }\r\n};\r\n\r\n$.fn.ignore = function (sel) {\r\n return this.clone().find(sel || '>*').remove().end()\r\n}\r\n\r\nfunction getChildrenJSON (el) {\r\n let children = []\r\n for (let i = 0; i < el.children.length; i++) {\r\n if (el.children[i].dataset.shinyfunction) {\r\n children.push(htmlToJSON(el.children[i], true))\r\n } else if (el.children[i].children.length) {\r\n const childContent = getChildrenJSON(el.children[i])\r\n if (childContent.length > 0) {\r\n children = children.concat(childContent)\r\n }\r\n }\r\n }\r\n return children\r\n};\r\n", "import { htmlToJSON } from './utils'\r\n\r\nexport const canvasPageBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasPageBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas')\r\n },\r\n getValue: function (el) {\r\n return htmlToJSON(document.getElementById('canvas-page'))\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas')\r\n }\r\n})\r\n", "import { page, createPage } from '../page/utils'\r\nimport { Column } from '../component/Column'\r\nimport { Row } from '../component/Row'\r\nimport { InputPanel } from '../component/InputPanel'\r\n\r\nexport const canvasBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas-shell')\r\n },\r\n getValue: function (el) {\r\n return $(el).find('.page-canvas').html()\r\n },\r\n setValue: function (el, value) {\r\n $(el).find('.page-canvas').html(value)\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas-shell')\r\n },\r\n receiveMessage (el, data) {\r\n $('.canvas-modal').css('display', 'none')\r\n\r\n createPage()\r\n page.updatePage()\r\n\r\n this.setValue(el, data)\r\n\r\n const sortableSettings = new Column(update_component = false).sortable_settings\r\n const sortableRowSettings = new Row(update_component = false).sortable_settings\r\n const sortableInputPanelSettings = new InputPanel(update_component = false).sortableSettings\r\n\r\n PARENT_DESIGNER_CLASSES.map(x => enableSortableComponent(x, sortableSettings))\r\n enableSortableComponent('designer-element row', sortableRowSettings)\r\n enableSortableComponent('designer-element shiny-input-panel', sortableInputPanelSettings)\r\n\r\n if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n page.updateComponentDropdown()\r\n }\r\n})\r\n\r\nconst PARENT_DESIGNER_CLASSES = ['tab-pane', 'designer-element col-sm', 'designer-element card-body']\r\n\r\nfunction enableSortableComponent (selector, settings) {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, settings)\r\n })\r\n}\r\n", "import { initPage } from '../page/init'\r\nimport { initSettings } from './settings'\r\nimport { screenshotSettings } from './screenshot'\r\nimport { initComponents } from '../component/init'\r\nimport { canvasPageBinding } from '../input/canvas-page-input'\r\nimport { canvasBinding } from '../input/canvas-canvas-input'\r\n\r\n$(function () {\r\n initPage()\r\n initComponents()\r\n initSettings()\r\n screenshotSettings()\r\n\r\n $('.help-icon').tooltip({ boundary: 'window', placement: 'right' })\r\n\r\n bsCustomFileInput.init()\r\n\r\n Sortable.create(document.getElementById('sidebar-bin'), {\r\n group: {\r\n name: 'shared',\r\n pull: false\r\n },\r\n handle: '.designer-element',\r\n draggable: '.designer-element',\r\n onAdd: function (evt) {\r\n this.el.removeChild(evt.item)\r\n }\r\n })\r\n})\r\n\r\nShiny.inputBindings.register(canvasPageBinding)\r\nShiny.inputBindings.register(canvasBinding)\r\n"], - "mappings": "AAAO,GAAM,GAAN,KAAW,CAChB,KACA,kBAAoB,OACpB,eAAiB,OACjB,eAAiB,GACjB,UAEA,yBAA2B,CACzB,EAAE,kBAAkB,EAAE,IAAI,UAAW,KAAK,iBAAiB,EAC3D,EAAE,WAAW,EAAE,IAAI,UAAW,KAAK,cAAc,EAEjD,GAAM,GAAY,KAAK,oBAAsB,OAAS,SAAW,MACjE,AAAK,EAAE,YAAY,QAAgB,EAAE,SAAS,MAAM,GAClD,EAAE,YAAY,iBAAyB,EAAE,QAAQ,OAAO,CAE5D,CAEA,YAAa,EAAM,EAAQ,GAAI,CAC7B,MAAO,GAAK,WAAW,YAAa,KAAK,SAAS,CAAC,EAAE,WAAW,UAAW,CAAK,CAClF,CAEA,YAAc,CACZ,GAAM,GAAQ,EAAE,eAAe,EAAE,KAAK,EACtC,EAAE,cAAc,EAAE,KAAK,KAAK,YAAY,KAAK,UAAW,CAAK,CAAC,CAChE,CAEA,mBAAoB,EAAU,EAAK,KAAM,CACvC,AAAI,IAAO,KACT,SAAS,OAAO,SAAS,eAAe,CAAQ,EAAG,CACjD,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,CAAC,EAED,SAAS,uBAAuB,CAAQ,EAAE,QAAQ,GAAM,CACtD,SAAS,OAAO,EAAI,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,CAAC,CACH,CAAC,CAEL,CAEA,UAAY,CACV,MAAO,MAAK,MAAM,KAAK,OAAO,EAAI,KAAO,GAAI,CAC/C,CACF,ECnDO,GAAM,GAAN,aAAwB,EAAK,CAClC,KAAO,YACP,eAAiB,GACjB,UAAY,yEACd,ECJO,GAAM,GAAN,aAAuB,EAAK,CACjC,KAAO,WACP,UAAY;AAAA;AAAA;AAAA;AAAA,KAKd,ECPO,GAAM,GAAN,aAAwB,EAAK,CAClC,KAAO,YACP,UAAY;AAAA;AAAA;AAAA;AAAA,KAKd,ECPO,GAAM,GAAN,aAAwB,EAAK,CAClC,KAAO,YACP,UAAY;AAAA;AAAA;AAAA;AAAA,KAKd,ECPO,GAAM,GAAN,aAA4B,EAAK,CACtC,KAAO,gBACP,UAAY;AAAA;AAAA;AAAA,GAId,ECNO,GAAM,GAAN,aAAyB,EAAK,CACnC,KAAO,aACP,kBAAoB,GACpB,eAAiB,GACjB,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAiBd,ECrBO,GAAM,GAAN,aAA4B,EAAK,CACtC,KAAO,gBACP,kBAAoB,GACpB,eAAiB,GACjB,eAAiB,GACjB,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAgCd,ECvCO,aAAyB,CAC9B,EAAE,qBAAqB,EAAE,GAAG,QAAS,IAAM,EAAE,eAAe,EAAE,IAAI,UAAW,MAAM,CAAC,EAEpF,EAAE,iBAAiB,EAAE,GAAG,QAAS,EAAU,EAC3C,EAAE,qBAAqB,EAAE,GAAG,QAAS,IAAM,CAAE,EAAE,uBAAuB,EAAE,QAAQ,OAAO,CAAE,CAAC,EAC1F,EAAE,yBAAyB,EAAE,GAAG,QAAS,IAAM,CAC7C,EAAE,uBAAuB,EAAE,QAAQ,OAAO,EAC1C,MAAM,QAAQ,iCAAiC,CACjD,CAAC,EACD,EAAE,iCAAiC,EAAE,GAAG,QAAS,IAAM,CACrD,MAAM,UAAU,iCAAiC,CACnD,CAAC,EAED,EAAE,YAAY,EAAE,GAAG,SAAU,EAAgB,EAE7C,EAAE,eAAe,EAAE,GAAG,SAAU,EAAqB,EACrD,EAAE,gBAAgB,EAAE,GAAG,SAAU,EAAuB,EACxD,EAAE,gBAAgB,EAAE,GAAG,SAAU,EAAa,EAC9C,EAAE,eAAe,EAAE,GAAG,QAAS,EAAgB,EAC/C,EAAE,gBAAgB,EAAE,GAAG,QAAS,EAAW,EAE3C,EAAE,0CAA0C,EAAE,GAAG,QAAS,EAAiB,EAE3E,EAAE,MAAM,EAAE,GAAG,QAAS,IAAM,CAC1B,AAAI,SAAS,cAAc,MAAM,EAAE,UAAU,SAAS,cAAc,GAClE,SAAS,cAAc,MAAM,EAAE,UAAU,OAAO,cAAc,CAElE,CAAC,EAED,EAAE,QAAQ,EAAE,GAAG,QAAS,sBAAuB,GAAK,CAAE,EAAE,gBAAgB,CAAE,CAAC,EAC3E,EAAE,UAAU,EAAE,GAAG,QAAS,IAAM,CAC9B,EAAE,0BAA0B,EAAE,QAAQ,OAAO,EAC7C,EAAE,oBAAoB,EAAE,SAAS,SAAS,CAC5C,CAAC,EACD,EAAE,uBAAuB,EAAE,GAAG,QAAS,IAAM,CAAE,EAAE,oBAAoB,EAAE,YAAY,SAAS,CAAE,CAAC,EAE/F,MAAM,wBAAwB,oBAAqB,EAAiB,EAEpE,MAAM,wBAAwB,QAAS,SAAU,EAAS,CAAE,AAAC,GAAG,MAAM,EAAQ,MAAM,CAAE,CAAC,EAEvF,EAAE,MAAM,EAAE,GAAG,oBAAqB,EAAe,EACjD,EAAE,gBAAgB,EAAE,GAAG,cAAe,EAAc,EACpD,EAAE,cAAc,EAAE,GAAG,cAAe,GAAK,CAAE,EAAE,eAAe,CAAE,CAAC,EAC/D,EAAE,oBAAoB,EAAE,GAAG,YAAa,EAAe,EAEvD,EAAE,gBAAgB,EAAE,GAAG,QAAS,EAAqB,EAErD,EAAE,2BAA2B,EAAE,GAAG,QAAS,EAAoB,EAC/D,EAAE,QAAQ,EAAE,GAAG,QAAS,mBAAoB,EAAmB,CACjE,CAEA,aAAkC,CAChC,AAAI,KAAK,QACP,EAAE,yBAAyB,EAAE,YAAY,oBAAoB,EAE7D,EAAE,yBAAyB,EAAE,SAAS,oBAAoB,CAE9D,CAEA,aAAoC,CAClC,AAAI,KAAK,QACP,EAAE,yBAAyB,EAAE,YAAY,eAAe,EAExD,EAAE,yBAAyB,EAAE,SAAS,eAAe,CAEzD,CAEA,aAA0B,CACxB,AAAI,KAAK,QACP,EAAE,yBAAyB,EAAE,YAAY,gBAAgB,EAEzD,EAAE,yBAAyB,EAAE,SAAS,gBAAgB,CAE1D,CAEA,aAA6B,CAC3B,GAAI,EAAE,cAAc,EAAE,KAAK,IAAM,IAAM,EAAE,mCAAmC,EAAE,KAAK,IAAM,GACvF,MAAO,MAEP,EAAE,cAAc,EAAE,MAAM,CAE5B,CAEA,aAAwB,CACtB,EAAE,cAAc,EAAE,KAAK,EAAE,CAC3B,CAEA,aAAuB,CACrB,GAAM,GAAW,SAAS,eAAe,oBAAoB,EAAE,YAC/D,UAAU,UAAU,UAAU,CAAQ,EACtC,EAAE,aAAa,EAAE,MAAM,MAAM,CAC/B,CAEA,YAA4B,EAAQ,CAClC,GAAM,GAAc,SAAS,YAC7B,OAAS,GAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,GAAM,GAAa,EAAY,KAAK,CAAC,EACrC,AAAI,EAAW,MAAS,GAAW,KAAK,SAAS,UAAU,GAAK,EAAW,KAAK,SAAS,SAAS,IAChG,GAAW,SAAW,IAAW,OAErC,CACF,CAEA,aAA8B,CAC5B,GAAM,GAAa,KAAK,QAAQ,cAAc,EAAE,GAChD,WACE,IAAM,CACJ,SAAS,eAAe,CAAU,EAAE,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,EACzF,EAAE,IAAI,EAAE,QAAQ,MAAM,CACxB,EACA,GACF,CACF,CAEA,GAAI,IAEJ,YAAyB,EAAO,CAC9B,GAAI,EAAE,EAAM,MAAM,EAAE,QAAQ,mBAAmB,EAAE,SAAW,EAC1D,OAEF,EAAM,eAAe,EAErB,GAAM,CAAE,QAAS,EAAQ,QAAS,GAAW,EACvC,CAAE,cAAa,eAAgB,GAAsB,EAAQ,CAAM,EAEzE,GAAkB,EAAE,EAAM,MAAM,EAAE,QAAQ,mBAAmB,EAE7D,EAAE,cAAc,EAAE,IAAI,MAAO,GAAG,KAAe,EAC/C,EAAE,cAAc,EAAE,IAAI,OAAQ,GAAG,KAAe,EAChD,EAAE,cAAc,EAAE,YAAY,SAAS,EAEvC,WAAW,IAAM,CAAE,EAAE,cAAc,EAAE,SAAS,SAAS,CAAE,CAAC,CAC5D,CAEA,YAAgC,EAAQ,EAAQ,CAC9C,GAAM,GAAQ,SAAS,eAAe,eAAe,EAC/C,EAAc,SAAS,eAAe,aAAa,EAErD,CAAE,KAAM,EAAc,IAAK,GAAiB,EAAM,sBAAsB,EAE5E,EAAe,EAAe,EAAI,EAAI,EACtC,EAAe,EAAe,EAAI,EAAI,EAEtC,GAAM,GAAS,EAAS,EAClB,EAAS,EAAS,EAElB,EAAiB,EAAS,EAAY,YAAc,EAAM,YAC1D,EAAiB,EAAS,EAAY,aAAe,EAAM,aAE7D,EAAc,EACd,EAAc,EAElB,MAAI,IACF,GAAc,EAAe,EAAM,YAAc,EAAY,aAE3D,GACF,GAAc,EAAe,EAAM,aAAe,EAAY,cAGzD,CAAE,cAAa,aAAY,CACpC,CAEA,aAA4B,CAC1B,EAAE,cAAc,EAAE,YAAY,SAAS,CACzC,CAEA,YAAgC,EAAO,CACrC,GAAgB,OAAO,CACzB,CAEA,YAA2B,EAAO,CAChC,GAAM,GAAU,EAAM,OAAO,MAAM,GAC7B,EAAc,SAAS,eAAe,cAAc,EAC1D,EAAY,UAAY,GAExB,GAAM,GAAS,GAAI,YACnB,EAAO,OAAS,AAAC,GAAM,CAErB,GAAM,GAAQ,AADD,EAAE,OAAO,OACH,MAAM,mBAAmB,EAC5C,EAAY,UAAY,EAAM,KAAK;AAAA,CAAI,EAEvC,GAAM,GAAW,EAAY,MAAM,SACnC,OAAS,GAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,GAAI,EAAS,GAAG,aACd,EAAS,GAAG,aAAe,GAAsB,EAAS,GAAG,YAAY,UAChE,EAAS,GAAG,OAAS,EAAS,GAAG,SAAU,CACpD,GAAM,GAAgB,EAAS,GAAG,SAClC,OAAS,GAAI,EAAG,EAAI,EAAc,OAAQ,IACxC,EAAc,GAAG,aAAe,GAAsB,EAAc,GAAG,YAAY,CAEvF,CAEJ,EAEA,EAAO,QAAU,AAAC,GAAM,MAAM,EAAE,OAAO,MAAM,IAAI,EACjD,EAAO,WAAW,CAAO,CAC3B,CAEA,YAAgC,EAAW,CACzC,MAAO,GAAU,MAAM,MAAM,EAAE,IAAI,AAAC,GAC9B,IAAM,OACD,eACE,sBAAsB,KAAK,CAAC,EAC9B,EAAE,QAAQ,WAAY,EAAE,EAExB,gBAAkB,CAE5B,EAAE,KAAK,IAAI,CACd,CAEA,GAAI,GAAoB,GACjB,aAA6B,CAClC,MAAO,EACT,CAEO,aAA2B,CAChC,EAAoB,EACtB,CAEA,YAA+B,EAAO,CACpC,GAAM,GAAc,EAAM,OAAO,MAAQ,EAAM,OAAO,MAAQ,GAE9D,SAAS,uBAAuB,iBAAiB,EAAE,QAAQ,GAAK,CAC9D,GAAM,GAAgB,EAAE,CAAC,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAW,GAAK,EAAE,CAAC,EAAE,KAAK,cAAc,EAAE,KAAK,EAAE,SAAS,CAAW,EAC/H,EAAE,MAAM,QAAU,EAAgB,KAAO,MAC3C,CAAC,CACH,CAEA,YAA8B,EAAO,CACnC,GAAM,GAAoB,EAAE,EAAM,MAAM,EAAE,QAAQ,kBAAkB,EAC9D,EAAc,EAAkB,KAAK,MAAM,EACjD,EAAoB,GAEpB,GAAM,GAAY,EAAE,EAAM,MAAM,EAAE,QAAQ,SAAS,EAAE,OAAS,GAAK,EAAM,OAAO,UAAU,SAAS,QAAQ,EAE3G,AAAK,GACH,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,KAAe,EAAE,QAAQ,OAAO,EAGhF,SAAS,eAAe,0BAA0B,EAAE,MAAQ,KAC5D,EAAE,2BAA2B,EAAE,QAAQ,OAAO,EAE9C,MAAM,cAAc,2BAA4B,EAAkB,KAAK,OAAO,CAAC,EAC/E,MAAM,cAAc,2BAA4B,CAAS,CAC3D,CC3OO,GAAI,GAEJ,YAAuB,CAC5B,GAAM,GAAY,EAAE,yCAAyC,EAAE,IAAI,EAEnE,MAAI,KAAc,YAChB,EAAO,GAAI,GACN,AAAI,IAAc,WACvB,EAAO,GAAI,GACN,AAAI,IAAc,YACvB,EAAO,GAAI,GACN,AAAI,IAAc,YACvB,EAAO,GAAI,GACN,AAAI,IAAc,gBACvB,EAAO,GAAI,GACN,AAAI,IAAc,aACvB,EAAO,GAAI,GACN,AAAI,IAAc,gBACvB,EAAO,GAAI,GAEX,EAAO,GAAI,GAGb,EAAK,WAAW,EAEhB,AAAI,GAAiB,EACnB,GAAe,EACN,EAAK,gBACd,EAAK,mBAAmB,aAAa,EAGvC,EAAK,wBAAwB,EACtB,CACT,CAEO,aAAuB,CAC5B,GAAI,GAAY,EAAE,IAAI,EACtB,AAAK,EAAE,IAAI,EAAE,SAAS,oBAAoB,GACxC,GAAY,EAAE,IAAI,EAAE,QAAQ,qBAAqB,GAGnD,EAAU,QAAQ,eAAe,EAAE,IAAI,UAAW,MAAM,EAExD,GAAM,GAAc,EAAU,KAAK,MAAM,EACzC,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,KAAe,EAAE,QAAQ,OAAO,CAChF,CAEO,aAA4B,CACjC,GAAI,GAAiB,EACnB,MAAO,MACF,AAAI,EAAE,cAAc,EAAE,KAAK,IAAM,IAAM,EAAE,mCAAmC,EAAE,KAAK,IAAM,GAC9F,GAAE,cAAc,EAAE,KAAK,aAAa,EACpC,EAAW,GAEX,EAAE,gBAAgB,EAAE,MAAM,CAE9B,CAEO,aAAgC,CACrC,EAAE,oCAAoC,EAAK,QAAQ,EAAE,QAAQ,OAAO,CACtE,CAEO,YAAsB,EAAI,CAC/B,GAAM,GAAQ,EAAE,EAAG,MAAM,EAAE,IAAI,EAK/B,GAJA,EAAE,eAAe,EAAE,KAAK,CAAK,EAC7B,EAAE,eAAe,EAAE,KAAK,CAAK,EAC7B,EAAE,aAAa,EAAE,KAAK,CAAK,EAEvB,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAG,CAC7C,GAAM,GAAa,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,QAAQ,UAAW,IAAI,IAAQ,EAC5F,EAAE,cAAc,EAAE,KAAK,uBAAwB,CAAU,CAC3D,CAEA,GAAI,EAAE,2BAA2B,EAAE,KAAK,iBAAiB,EAAG,CAC1D,GAAM,GAAc,EAAE,2BAA2B,EAAE,KAAK,iBAAiB,EAAE,QAAQ,UAAW,IAAI,IAAQ,EAC1G,EAAE,2BAA2B,EAAE,KAAK,uBAAwB,CAAW,CACzE,CACF,CCpFO,aAAqB,CAC1B,EAAW,EACX,EAAE,qBAAqB,EAAE,GAAG,QAAS,EAAU,EAC/C,EAAE,qBAAqB,EAAE,GAAG,SAAU,EAAe,EACrD,EAAE,eAAe,EAAE,GAAG,QAAS,EAAmB,EAClD,EAAE,gBAAgB,EAAE,GAAG,QAAS,CAAU,EAE1C,EAAE,WAAW,EAAE,GAAG,eAAgB,EAAW,CAC/C,CCVO,aAA+B,CACpC,MAAM,wBAAwB,4BAA6B,AAAC,GAAY,CACtE,EAAE,yBAAyB,EAAE,SAAS,oBAAoB,EAC1D,EAAE,yBAAyB,EAAE,SAAS,eAAe,EACrD,EAAE,yBAAyB,EAAE,SAAS,gBAAgB,CACxD,CAAC,EAED,MAAM,wBAAwB,2BAA4B,AAAC,GAAY,CACrE,EAAE,eAAe,EAAE,QAAQ,QAAQ,EACnC,EAAE,gBAAgB,EAAE,QAAQ,QAAQ,EACpC,EAAE,gBAAgB,EAAE,QAAQ,QAAQ,CACtC,CAAC,CACH,CCZO,GAAI,GAEE,EAAN,KAAgB,CACrB,UAAY,GACZ,iBAAmB,GACnB,kBAAoB,GACpB,cAAgB,GAChB,OAAS,GACT,KAAO,cACP,kBAAoB,KAEpB,aAAe,CACb,EAAY,IACd,CAEA,iBAAmB,CACjB,MAAO,MAAK,IACd,CAEA,wBAAyB,EAAM,EAAS,CACtC,OAAW,KAAY,GACrB,EAAO,EAAK,WAAW,IAAM,EAAW,IAAK,EAAQ,EAAS,EAEhE,MAAO,EACT,CAEA,gBAAiB,EAAkB,GAAO,CACxC,GAAI,MAAQ,QAAY,IACtB,MAAO,MAGT,EAAE,sBAAsB,EAAE,KAAK,IAAI,EACnC,GAAM,GAAO,KAAK,gBAAgB,EAClC,EAAE,sBAAsB,EAAE,KAAK,CAAI,EACnC,KAAK,YAAY,EACb,GACF,KAAK,eAAe,CAExB,CAEA,gBAAkB,CAChB,SAAS,OACP,SAAS,eAAe,mBAAmB,EAAG,CAC5C,MAAO,CACL,KAAM,SACN,KAAM,QACN,IAAK,EACP,EACA,QAAS,SAAU,EAAK,CACtB,AAAI,EAAU,mBACZ,CAAI,EAAU,cACZ,SAAS,OAAO,EAAE,EAAI,IAAI,EAAE,KAAK,YAAY,EAAE,GAAI,EAAU,iBAAiB,EACzE,AAAI,EAAU,OACnB,SAAS,OAAO,EAAE,EAAI,IAAI,EAAE,KAAK,cAAc,EAAG,EAAU,iBAAiB,EAE7E,SAAS,OAAO,EAAI,KAAM,EAAU,iBAAiB,EAG3D,EACA,MAAO,SAAU,EAAM,CACrB,EAAE,sCAAsC,EAAE,QAAQ,EAC9C,GAAU,WAAa,EAAE,mBAAmB,EAAE,IAAI,IAAM,KAC1D,GAAE,mBAAmB,EAAE,IAAI,EAAE,EAC7B,EAAU,gBAAgB,EAE9B,CACF,CAAC,CACL,CAEA,aAAe,CACb,GAAM,GAAW,EAAE,mBAAmB,EAAE,IAAI,EAC5C,AAAI,GACF,GAAE,wCAAwC,EAAE,KAAK,qBAAsB,CAAQ,EAC/E,EAAE,wCAAwC,EAAE,KAAK,QAAS,CAAQ,EAClE,EAAE,wCAAwC,EAAE,KAAK,cAAe,SAAS,EAE7E,CAEA,SAAU,EAAS,GAAI,CACrB,SAAS,GAAS,EAAS,IACpB,EAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,CAC5D,CAEA,gBAAiB,EAAG,EAAU,CAC5B,MAAI,MAAK,OAAO,KAAK,CAAC,EACb,EACE,QAAQ,KAAK,CAAC,EAChB,EAAI,KAEJ,CAEX,CAEA,OAAS,mHACX,EC5FO,GAAM,GAAN,aAAqB,EAAU,CACpC,KAAO,6EAEP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAM,EAAE,qBAAqB,EAAE,IAAI,EACnC,EAAQ,EAAE,sBAAsB,EAAE,IAAI,EAC5C,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAAE,MAAK,OAAM,CAAC,CAC/D,CACF,ECbO,GAAM,GAAN,aAAkB,EAAU,CACjC,UAAY,GACZ,KAAO,sFAEP,YAAa,EAAmB,GAAM,CACpC,MAAM,EAEF,GACF,KAAK,gBAAgB,EAAI,CAE7B,CAEA,kBAAoB,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,GAAM,UAAU,SAAS,QAAQ,CAC1C,CACF,CACF,CACF,ECpBO,GAAM,GAAN,aAAqB,EAAU,CACpC,UAAY,GACZ,KAAO,wJACP,kBAAoB,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,EAEA,YAAa,EAAmB,GAAM,CACpC,MAAM,EAEF,GACF,KAAK,gBAAgB,EAAI,CAE7B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,2BAA2B,EAAE,IAAI,EAC3C,EAAS,EAAE,wBAAwB,EAAE,IAAI,EAEzC,EAAe,EAAS,EAAI,cAAc,IAAW,GACrD,EAAW,EAAS,EAAI,cAAc,IAAW,GAEvD,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAAE,QAAO,eAAc,UAAS,CAAC,CAClF,CACF,EC7BO,GAAM,GAAN,aAAmB,EAAU,CAClC,KAAO,kFAEP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAM,EAAE,mBAAmB,EAAE,IAAI,EACjC,EAAQ,EAAE,wBAAwB,EAAE,IAAI,EACxC,EAAW,IAAQ,IAAM,EAAM,QAAQ,MAAO,GAAG,EAAI,KAAK,gBAAgB,CAAK,EAErF,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAAE,MAAK,MAAO,CAAS,CAAC,CACzE,CAEA,gBAAiB,EAAM,CACrB,MAAO,GAAK,MAAM;AAAA,CAAI,EAAE,IAAI,GAAK,oCAAsC,EAAI,OAAO,EAAE,KAAK,EAAE,CAC7F,CACF,ECnBO,GAAM,GAAN,aAAyB,EAAU,CACxC,UAAY,GACZ,KAAO,2GAEP,YAAa,EAAmB,GAAM,CACpC,MAAM,EAEF,GACF,KAAK,gBAAgB,EAAI,CAE7B,CAEA,kBAAoB,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,GAAM,UAAU,SAAS,YAAY,GAAK,EAAM,UAAU,SAAS,KAAK,CACjF,CACF,CACF,CACF,ECpBO,GAAM,GAAN,aAAoB,EAAU,CACnC,YAAa,EAAM,CACjB,MAAM,EACN,KAAK,KAAO,EACZ,KAAK,gBAAgB,EAAI,CAC3B,CAEA,MAAQ,CACN,CAAE,MAAO,aAAc,MAAO,OAAQ,OAAQ,WAAY,EAC1D,CAAE,MAAO,WAAY,MAAO,WAAY,OAAQ,eAAgB,EAChE,CAAE,MAAO,UAAW,MAAO,UAAW,OAAQ,cAAe,EAC7D,CAAE,MAAO,WAAY,MAAO,WAAY,OAAQ,eAAgB,CAClE,EAEA,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAOP,iBAAmB,CACjB,GAAM,GAAQ,EAAE,YAAY,KAAK,YAAY,EAAE,IAAI,EAE/C,EAAK,EAAE,YAAY,KAAK,SAAS,EAAE,IAAI,EAC3C,EAAK,IAAO,GAAK,KAAK,SAAS,OAAO,EAAI,EAE1C,GAAM,GAAa,KAAK,MAAM,KAAK,GAAK,EAAE,QAAU,KAAK,IAAI,EAC7D,GAAI,CAAC,EAAY,OACjB,GAAM,GAAS,EAAW,OAEtB,EACJ,AAAI,KAAK,OAAS,WAChB,EAAY,0EAEZ,EAAY,qCAAqC,KAAK,sBAAsB,EAAW,gBAGzF,GAAM,GAAQ,KAAK,gBAAgB,EAAE,YAAY,KAAK,YAAY,EAAE,IAAI,CAAC,EACnE,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,SACA,YACA,YACA,WACF,CAAC,CACH,CACF,ECnDO,GAAM,GAAN,aAAwB,EAAU,CACvC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,qBAAqB,EAAE,IAAI,EAEvC,EAAK,EAAE,kBAAkB,EAAE,IAAI,EACnC,EAAK,IAAO,GAAK,KAAK,SAAS,OAAO,EAAI,EAE1C,GAAM,GAAQ,KAAK,gBAAgB,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAC3D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,YACA,WACF,CAAC,CACH,CACF,ECxCO,GAAM,GAAN,aAA0B,EAAU,CACzC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,yBAAyB,EAAE,IAAI,EAE3C,EAAK,EAAE,sBAAsB,EAAE,IAAI,EACvC,EAAK,IAAO,GAAK,KAAK,SAAS,OAAO,EAAI,EAE1C,GAAM,GAAQ,KAAK,gBAAgB,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAC/D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,YACA,WACF,CAAC,CACH,CAEA,gBAAiB,EAAkB,GAAO,CAGxC,GAFA,MAAM,gBAAgB,CAAe,EAEjC,MAAQ,QAAY,IACtB,MAAO,MAET,EAAE,sBAAsB,EAAE,KAAK,QAAQ,EAAE,UAAU,CACjD,WAAY,QACZ,WAAY,QACZ,YAAa,CAAC,OAAO,EACrB,YAAa,cACf,CAAC,CACH,CACF,EChDO,GAAM,GAAN,aAAwB,EAAU,CACvC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASP,gBAAkB;AAAA;AAAA;AAAA;AAAA,MAMlB,sBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcxB,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,qBAAqB,EAAE,IAAI,EAEvC,EAAK,EAAE,kBAAkB,EAAE,IAAI,EACnC,EAAK,IAAO,GAAK,KAAK,SAAS,OAAO,EAAI,EAE1C,GAAM,GAAQ,KAAK,gBAAgB,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAC3D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAEvD,EAAQ,SAAS,eAAe,oBAAoB,EAAE,QACtD,EAAS,EAAQ,iBAAmB,YACpC,EAAa,EAAQ,yBAA2B,mBAChD,EAAY,EAAQ,KAAK,sBAAwB,KAAK,gBAE5D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,SACA,aACA,YACA,YACA,WACF,CAAC,CACH,CAEA,gBAAiB,EAAkB,GAAO,CAGxC,GAFA,MAAM,gBAAgB,CAAe,EAEjC,MAAQ,QAAY,IACtB,MAAO,MAET,EAAE,sBAAsB,EAAE,KAAK,OAAO,EAAE,aAAa,CACvD,CACF,ECrEO,GAAM,GAAN,aAA4B,EAAU,CAC3C,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,yBAAyB,EAAE,IAAI,EAE3C,EAAK,EAAE,sBAAsB,EAAE,IAAI,EACvC,EAAK,IAAO,GAAK,KAAK,SAAS,UAAU,EAAI,EAE7C,GAAM,GAAQ,KAAK,gBAAgB,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAC/D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,YACA,WACF,CAAC,CACH,CACF,ECnCO,GAAM,GAAN,aAAiC,EAAU,CAChD,MAAQ,CACN,CAAE,MAAO,QAAS,MAAO,QAAS,OAAQ,eAAgB,KAAM,YAAa,EAC7E,CAAE,MAAO,WAAY,MAAO,WAAY,OAAQ,qBAAsB,KAAM,OAAQ,CACtF,EAEA,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,sBAAsB,EAAE,IAAI,EAExC,EAAK,EAAE,mBAAmB,EAAE,IAAI,EACpC,EAAK,IAAO,GAAK,KAAK,SAAS,UAAU,EAAI,EAE7C,GAAM,GAAO,EAAE,qBAAqB,EAAE,IAAI,EACpC,EAAa,KAAK,MAAM,KAAK,GAAK,EAAE,QAAU,CAAI,EACxD,GAAI,CAAC,EAAY,OACjB,GAAM,GAAS,EAAW,OACpB,EAAO,EAAW,KAElB,EAAQ,KAAK,gBAAgB,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAC5D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAEvD,EAAS,SAAS,eAAe,sBAAsB,EAAE,QACzD,EAAe,EAAS,UAAY,GACpC,EAAa,EAAS,kBAAoB,GAC1C,EAAY,eAAe,SAAY,IAEvC,EAAU,EAAE,wBAAwB,EAAE,IAAI,EAC1C,EAAc,uBAAuB,EAAQ,QAAQ,MAAO,gBAAgB,WAC5E,EAAe,EAAQ,MAAM;AAAA,CAAI,EAAE,IAAI,GAAK,KAAK,eAAe,EAAG,EAAM,CAAM,CAAC,EAAE,KAAK,EAAE,EAE/F,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,QACA,YACA,SACA,OACA,QAAS,EACT,cACA,aACA,YACA,WACF,CAAC,CACH,CAEA,eAAgB,EAAG,EAAO,WAAY,EAAS,GAAO,CAEpD,MAAO,iBADa,EAAS,EAAO,UAAY,mBACK,YAAe,kBACtE,CACF,EClEO,GAAM,GAAN,aAA0B,EAAU,CACzC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,uBAAuB,EAAE,IAAI,EAEzC,EAAK,EAAE,oBAAoB,EAAE,IAAI,EACrC,EAAK,IAAO,GAAK,KAAK,SAAS,QAAQ,EAAI,EAE3C,GAAM,GAAS,EAAE,sBAAsB,EAAE,IAAI,EAEvC,EAAQ,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAC7D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAEvD,EAAS,SAAS,eAAe,sBAAsB,EAAE,QACzD,EAAS,KAAK,UAAU,EAAQ,CAAM,EACtC,EAAa,EAAS,8DAAgE,GAE5F,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,aACA,KACA,QACA,SACA,IAAK,EAAO,IACZ,IAAK,EAAO,IACZ,KAAM,EAAO,KACb,KAAM,EAAO,KACb,GAAI,EAAO,GACX,YACA,YACA,UAAW,EAAO,UAClB,YAAa,EAAO,WACtB,CAAC,CACH,CAEA,UAAW,EAAQ,EAAQ,GAAO,CAChC,GAAI,IAAW,SACb,MAAO,CACL,KAAM,EACN,IAAK,EACL,IAAK,GACL,KAAM,EACN,GAAI,EACJ,UAAW,gCAAgC,EAAQ,UAAY,GACjE,EAGF,GAAM,GAAY,GAAI,MACtB,AAAI,IAAW,QACb,EAAU,SAAS,EAAG,EAAG,EAAG,CAAC,EAE/B,GAAM,GAAY,EAAU,QAAQ,EAC9B,EAAO,IAAW,OAAS,IAAO,GAAK,GAAK,GAAK,IAEjD,EAAM,EAAY,EAAI,EACtB,EAAM,EAAY,EAAI,EACtB,EAAO,EACP,EAAK,EAAY,EAAI,EAErB,EAAa,IAAW,OAAS,aAAe,aAChD,EAAS,IAAW,OAAS,GAAK,MAClC,EAAkB,EAAQ,MAAM,MAAe,QAAiB,MAAa,EAEnF,MAAO,CACL,OACA,MACA,MACA,OACA,KACA,YAAa,IAAW,OAAS,KAAO,QACxC,UAAW,WAAW,QAAiB,YAAiB,QAAiB,cAAmB,GAC9F,CACF,CAEA,gBAAiB,EAAkB,GAAO,CAGxC,GAFA,MAAM,gBAAgB,CAAe,EAEjC,MAAQ,QAAY,IACtB,MAAO,MAET,GAAM,GAAc,EAAE,sBAAsB,EAAE,IAAI,EAClD,EAAE,sBAAsB,EAAE,KAAK,OAAO,EAAE,eAAe,CAAE,SAAU,KAAK,oBAAoB,CAAW,CAAE,CAAC,CAC5G,CAEA,oBAAqB,EAAM,CACzB,MAAI,KAAS,OACJ,SAAU,EAAK,CACpB,GAAM,GAAW,GAAI,MAAK,CAAG,EAC7B,MAAO,GAAS,YAAY,EAAI,IAAO,GAAS,SAAS,EAAI,GAAK,IAAM,EAAS,QAAQ,CAC3F,EACS,IAAS,WACX,SAAU,EAAK,CACpB,GAAM,GAAW,GAAI,MAAK,CAAG,EAC7B,MAAO,GAAS,YAAY,EAAI,IAAO,GAAS,SAAS,EAAI,GAAK,IAAM,EAAS,QAAQ,EAAI,IACrF,EAAS,SAAS,EAAI,IAAM,EAAS,WAAW,EAAI,IAAM,EAAS,WAAW,CACxF,EAEO,IAEX,CACF,ECrHO,GAAM,GAAN,aAAqB,EAAU,CACpC,MAAQ,CACN,CAAE,MAAO,UAAW,UAAW,aAAc,EAC7C,CAAE,MAAO,UAAW,UAAW,aAAc,EAC7C,CAAE,MAAO,YAAa,UAAW,eAAgB,EACjD,CAAE,MAAO,UAAW,UAAW,aAAc,EAC7C,CAAE,MAAO,SAAU,UAAW,YAAa,EAC3C,CAAE,MAAO,UAAW,UAAW,aAAc,EAC7C,CAAE,MAAO,OAAQ,UAAW,UAAW,EACvC,CAAE,MAAO,QAAS,UAAW,WAAY,EACzC,CAAE,MAAO,OAAQ,UAAW,UAAW,CACzC,EAEA,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,uBAAuB,EAAE,IAAI,EAEzC,EAAK,EAAE,oBAAoB,EAAE,IAAI,EACrC,EAAK,IAAO,GAAK,KAAK,SAAS,OAAO,EAAI,EAE1C,GAAM,GAAa,EAAE,sBAAsB,EAAE,IAAI,EAC3C,EAAa,KAAK,MAAM,KAAK,GAAK,EAAE,QAAU,CAAU,EAC9D,GAAI,CAAC,EAAY,OACjB,GAAM,GAAY,EAAW,UACvB,EAAY,IAAe,UAAY,GAAK,mBAAmB,UAE/D,EAAe,SAAS,eAAe,yBAAyB,EAAE,QAClE,EAAS,EAAe,iBAAmB,eAC7C,EAAY,EAAe,gFAAkF,GAC3G,EAAS,EAAe,WAAa,UAErC,EAAW,EAAE,sBAAsB,EAAE,IAAI,EACzC,EAAS,IAAa,IAAM,EAAe,GAAK,uBAAuB,WACvE,EAAa,IAAa,IAAM,EAAe,GAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KAC5H,EAAY,IAAa,IAAM,EAAe,EAAY,gCAAgC,QAAiB,oCAE3G,GAAM,GAAQ,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAC7D,EAAY,EAAQ,iBAAiB,MAAY,GACjD,EAAY,EAAQ,mBAAmB,UAAgB,GAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,KACA,SACA,QACA,SACA,SACA,YACA,YACA,YACA,YACA,WACF,CAAC,CACH,CACF,ECnEO,GAAM,GAAN,aAAqB,EAAU,CACpC,MAAQ,CACN,CAAE,MAAO,OAAQ,MAAO,OAAQ,UAAW,wCAAyC,OAAQ,aAAc,YAAa,eAAgB,EACvI,CAAE,MAAO,WAAY,MAAO,gBAAiB,UAAW,gDAAiD,OAAQ,qBAAsB,YAAa,wBAAyB,EAC7K,CAAE,MAAO,OAAQ,MAAO,OAAQ,UAAW,wCAAyC,OAAQ,YAAa,EACzG,CAAE,MAAO,QAAS,MAAO,QAAS,UAAW,0CAA2C,OAAQ,aAAc,EAC9G,CAAE,MAAO,QAAS,MAAO,QAAS,UAAW,8CAA+C,OAAQ,cAAe,EACnH,CAAE,MAAO,OAAQ,MAAO,OAAQ,UAAW,wCAAyC,OAAQ,WAAY,YAAa,6BAA8B,CACrJ,EAEA,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,uBAAuB,EAAE,IAAI,EAEzC,EAAK,EAAE,oBAAoB,EAAE,IAAI,EACrC,EAAK,IAAO,GAAK,KAAK,SAAS,QAAQ,EAAI,EAE3C,GAAM,GAAc,EAAE,sBAAsB,EAAE,IAAI,EAC5C,EAAc,KAAK,MAAM,KAAK,GAAK,EAAE,QAAU,CAAW,EAChE,GAAI,CAAC,EAAa,OAClB,GAAM,GAAS,EAAY,OACvB,EAAW,IAAgB,WAAa,MAAQ,MAC9C,EAAY,EAAY,UAE1B,EAAS,GACb,GAAI,CAAC,OAAQ,QAAS,OAAO,EAAE,SAAS,CAAW,EAAG,CACpD,GAAM,GAAc,KAAK,SAAS,QAAQ,EAC1C,MAAM,cAAc,mBAAoB,CAAW,EACnD,EAAS,eAAe,IAC1B,CAGA,GAAM,GAAa,AADJ,SAAS,eAAe,uBAAuB,EAAE,SACnC,CAAC,CAAC,WAAY,OAAO,EAAE,SAAS,CAAW,EAAI,kBAAoB,GAChG,AAAI,IAAe,IACjB,GAAW,QAGb,GAAI,GAAU,GACV,EAAY,GAEhB,GAAI,CAAC,OAAQ,OAAO,EAAE,SAAS,CAAW,EAAG,CAC3C,GAAM,GAAQ,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,EAAG,MAAM,EAC3E,EAAY,UAAU,KACtB,EAAU,IAAU,OAAS,GAAK,mBAAmB,UAErD,GAAM,GAAS,KAAK,gBAAgB,EAAE,wBAAwB,EAAE,IAAI,EAAG,OAAO,EAC9E,EAAY,EAAY,YAAY,KACpC,EAAU,EAAW,KAAW,QAAU,GAAK,oBAAoB,UACrE,CAEA,GAAI,GAAa,GACjB,MAAI,GAAY,aACd,CAAI,IAAgB,OAClB,EAAa,SAAS,EAAY,qBAElC,EAAa,SAAS,EAAY,eAAe,EAAE,0BAA0B,EAAE,IAAI,YAIhF,KAAK,wBAAwB,KAAK,KAAM,CAC7C,WACA,KACA,QACA,SACA,SACA,YACA,YACA,UACA,aACA,YACF,CAAC,CACH,CAEA,gBAAiB,EAAkB,GAAO,CAGxC,GAFA,MAAM,gBAAgB,CAAe,EAEjC,MAAQ,QAAY,IACtB,MAAO,MAET,MAAM,QAAQ,CAChB,CACF,EC9FO,GAAM,GAAN,aAAkB,EAAU,CACjC,MAAQ,EAER,iBAAmB,CAAC,CAEpB,aAAe,CACb,MAAO,GAAE,yCAAyC,EAAE,IAAI,CAC1D,CAEA,SAAW,CACT,GAAM,GAAY,KAAK,YAAY,EAE7B,EAAW,EAAE,mBAAmB,EAAE,IAAI,EACxC,EAAY,EAAE,oBAAoB,EAAE,IAAI,EAC5C,GAAI,IAAc,GAChB,EAAY,KAAK,SAAS,KAAK,UACtB,KAAK,kBAAkB,EAAW,CAAS,EACpD,OAGF,EAAE,wBAAwB,EAAE,MAAM,OAAO,EAEzC,AAAI,IAAc,gBAChB,KAAK,YAAY,EAAU,CAAS,EAEpC,KAAK,OAAO,EAAU,CAAS,CAEnC,CAEA,OAAQ,EAAU,EAAW,CAC3B,GAAM,GAAY,EAAE,eAAe,EAC7B,EAAS,EAAU,KAAK,UAAU,EAElC,EAAY,EAAE,cAAc,EAC5B,EAAe,EAAU,KAAK,IAAM,GAAK,SAAW,GAEpD,EAAW,EAAE,mBAAmB,EAAE,IAAI,EACtC,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACnG,EAAY,IAAa,GAAK,GAAK,gCAAgC,QAAiB,oCAE1F,EAAU,OAAO;AAAA,yBACI;AAAA,gCACO,KAAU,KAAK;AAAA,sDACO,iBAAyB;AAAA,qBAC1D;AAAA,qBACA;AAAA;AAAA;AAAA,SAGZ,EAEL,EAAU,OAAO;AAAA,mCACc,kBAA6B,cAAsB,KAAU,KAAK;AAAA,qFAChB,0BAAiC,UAAkB;AAAA,SAC/H,EAEL,KAAK,mBAAmB,OAAO,KAAU,KAAK,OAAO,EACrD,KAAK,MAAQ,KAAK,MAAQ,CAC5B,CAEA,YAAa,EAAU,EAAW,CAChC,GAAM,GAAY,EAAE,8BAA8B,EAC5C,EAAe,EAAU,KAAK,IAAM,GAAK,SAAW,GAEpD,EAAW,EAAE,mBAAmB,EAAE,IAAI,EACtC,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACnG,EAAY,IAAa,GAAK,GAAK,gCAAgC,QAAiB,uCAE1F,EAAE,6BAA6B,EAAE,OAAO;AAAA;AAAA,qDAES,4BAAmC,UAAkB;AAAA,qCACrE,cAAyB;AAAA,+DACC;AAAA,iCAC9B,iBAAyB;AAAA,qBACrC;AAAA,yBACI;AAAA;AAAA;AAAA,SAGhB,EAEA,EAAE,6BAA6B,EAAE,KAAK,YAAY,GACrD,EAAE,6BAA6B,EAAE,KAAK,aAAc,CAAS,EAG/D,EAAU,OAAO;AAAA,+CAC0B,oBAA4B;AAAA,mDACxB;AAAA,kGAC+C;AAAA,SACzF,EAEL,KAAK,mBAAmB,aAAa,GAAW,CAClD,CAEA,mBAAoB,EAAI,CACtB,SAAS,OAAO,SAAS,eAAe,CAAE,EAAG,CAC3C,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,CAAC,CACH,CAEA,oBAAqB,EAAU,EAAW,CACxC,MAAI,GAAE,KAAK,kBAAkB,EAAU,CAAS,CAAC,EAAE,OAAS,EAC1D,GAAE,oBAAoB,EAAE,KAAK;AAAA;AAAA,sBAEb;AAAA;AAAA;AAAA;AAAA;AAAA,aAKT,EACA,IAEA,EAEX,CAEA,kBAAmB,EAAU,EAAW,CACtC,MAAI,KAAc,gBACT,gCAAgC,MAEhC,8BAA8B,KAEzC,CAEA,kBAAmB,EAAW,EAAW,CACvC,MAAI,GAAE,KAAK,mBAAmB,EAAW,CAAS,CAAC,EAAE,OAAS,EAC5D,GAAE,oBAAoB,EAAE,KAAK;AAAA;AAAA,sBAEb;AAAA;AAAA;AAAA;AAAA;AAAA,aAKT,EACA,IAEA,EAEX,CAEA,mBAAoB,EAAW,EAAW,CACxC,MAAI,KAAc,gBACT,iCAAiC,MAEjC,+BAA+B,KAE1C,CAEA,YAAc,CACZ,GAAM,GAAY,KAAK,YAAY,EAC7B,EAAW,EAAE,mBAAmB,EAAE,IAAI,EACxC,EAAY,EAAE,oBAAoB,EAAE,IAAI,EAE5C,GAAI,KAAK,iBAAiB,EAAU,CAAS,EAC3C,MAAO,GACF,GAAI,EAAE,KAAK,kBAAkB,EAAU,CAAS,CAAC,EAAE,OAAS,GAAK,IAAc,GACpF,SAAE,oBAAoB,EAAE,KAAK;AAAA;AAAA,uDAEoB;AAAA;AAAA;AAAA;AAAA;AAAA,aAK1C,EACA,GAGT,EAAE,wBAAwB,EAAE,MAAM,OAAO,EAEzC,AAAI,IAAc,gBAChB,GAAY,IAAc,GAAK,EAAE,uBAAuB,KAAY,EAAE,KAAK,OAAO,EAAI,EACtF,KAAK,eAAe,CAAS,GAE7B,GAAY,IAAc,GAAK,EAAE,uBAAuB,KAAY,EAAE,KAAK,OAAO,EAAI,EACtF,KAAK,UAAU,CAAS,EAE5B,CAEA,UAAW,EAAW,CACpB,EAAE,wBAAwB,KAAa,EAAE,OAAO,EAAE,OAAO,EACzD,EAAE,sCAAsC,KAAa,EAAE,OAAO,CAChE,CAEA,eAAgB,EAAW,CACzB,EAAE,QAAQ,GAAW,EAAE,OAAO,EAAE,OAAO,EACvC,EAAE,cAAc,GAAW,EAAE,OAAO,CACtC,CAEA,iBAAkB,EAAU,EAAW,CACrC,MAAI,GAAE,KAAK,kBAAkB,EAAU,CAAS,CAAC,EAAE,OAAS,EACnD,GAEP,GAAE,oBAAoB,EAAE,KAAK;AAAA;AAAA,0DAEuB;AAAA;AAAA;AAAA;AAAA;AAAA,aAK7C,EACA,GAEX,CACF,EChNO,GAAM,GAAN,aAAqB,EAAU,CACpC,MAAQ,EACR,GACA,KACA,OAAS,GAET,aAAe,CACb,MAAM,EACN,KAAK,GAAK,KAAK,SAAS,EAExB,AAAI,KAAK,WAAW,EAClB,KAAK,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAiBZ,KAAK,KAAO;AAAA;AAAA;AAAA;AAAA,oBAOd,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAI,KAAK,WAAW,EAAG,CACrB,GAAM,GAAQ,EAAE,uBAAuB,EAAE,IAAI,EACvC,EAAQ,IAAU,GAAK,GAAK,gDAAgD,cAC5E,EAAU,IAAU,GAAK,GAAK,iBAAiB,YAE/C,EAAQ,EAAE,2BAA2B,EAAE,IAAI,EAC3C,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAE9B,EAAS,EAAE,wBAAwB,EAAE,IAAI,EACzC,EAAe,IAAW,QAAU,GAAK,qBAAqB,IAE9D,EAAa,EAAE,4BAA4B,EAAE,IAAI,EACjD,EAAmB,IAAe,QAAU,GAAK,MAAM,IAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,GAAI,KAAK,GACT,QACA,UACA,QACA,QACA,cACA,UACA,SACA,eACA,aACA,kBACF,CAAC,CACH,KAAO,CACL,GAAM,GAAO,EAAE,sBAAsB,EAAE,IAAI,EAE3C,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,GAAI,KAAK,GACT,MACF,CAAC,CACH,CACF,CAEA,YAAc,CACZ,MAAO,MAAK,YAAY,IAAM,eAChC,CAEA,aAAe,CACb,MAAI,OAAQ,QAAY,IACf,aAEA,EAAE,yCAAyC,EAAE,IAAI,CAE5D,CAEA,SAAW,CACT,GAAM,GAAW,EAAE,sBAAsB,EAAE,IAAI,EAC3C,EAAY,EAAE,uBAAuB,EAAE,IAAI,EAC/C,AAAI,IAAc,IAChB,GAAY,GAGd,EAAE,2BAA2B,EAAE,MAAM,OAAO,EAE5C,AAAI,KAAK,WAAW,EAClB,KAAK,YAAY,EAAU,CAAS,EAEpC,KAAK,OAAO,EAAU,CAAS,CAEnC,CAEA,OAAQ,EAAU,EAAW,CAC3B,GAAM,GAAY,EAAE,qCAAqC,EACnD,EAAS,EAAU,KAAK,UAAU,EAElC,EAAY,EAAE,6CAA6C,EAC3D,EAAe,EAAU,SAAS,EAAE,SAAW,EAAI,SAAW,GAE9D,EAAW,EAAE,sBAAsB,EAAE,IAAI,EACzC,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACtG,EAAY,IAAa,GAAK,GAAK,gCAAgC,QAAiB,oCAE1F,EAAU,OAAO;AAAA,yBACI;AAAA,gCACO,KAAU,KAAK;AAAA,sDACO,iBAAyB;AAAA,qBAC1D;AAAA,qBACA;AAAA;AAAA;AAAA,SAGZ,EAEL,EAAU,OAAO;AAAA,mCACc,kBAA6B,cAAsB,KAAU,KAAK;AAAA,qFAChB,0BAAiC,UAAkB;AAAA,SAC/H,EAEL,KAAK,mBAAmB,OAAO,KAAU,KAAK,OAAO,EACrD,KAAK,MAAQ,KAAK,MAAQ,CAC5B,CAEA,YAAa,EAAU,EAAW,CAChC,GAAM,GAAY,EAAE,wCAAwC,EACtD,EAAS,EAAU,KAAK,UAAU,EAElC,EAAY,EAAE,8CAA8C,EAC5D,EAAe,EAAU,SAAS,EAAE,SAAW,EAAI,SAAW,GAE9D,EAAW,EAAE,sBAAsB,EAAE,IAAI,EACzC,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACtG,EAAY,IAAa,GAAK,GAAK,gCAAgC,QAAiB,oCAE1F,EAAU,OAAO;AAAA;AAAA,gCAEW,KAAU,KAAK,0BAA0B;AAAA,sDACnB,iBAAyB;AAAA,qBAC1D;AAAA,qBACA;AAAA;AAAA;AAAA,SAGZ,EAEL,EAAU,OAAO;AAAA,mCACc,kBAA6B,cAAsB,KAAU,KAAK;AAAA,qFAChB,0BAAiC,UAAkB;AAAA,SAC/H,EAEL,KAAK,mBAAmB,OAAO,KAAU,KAAK,OAAO,EACrD,KAAK,MAAQ,KAAK,MAAQ,CAC5B,CAEA,mBAAoB,EAAI,CACtB,SAAS,OAAO,SAAS,eAAe,CAAE,EAAG,CAC3C,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,CAAC,CACH,CAEA,oBAAqB,EAAU,CAC7B,MAAI,GAAE,KAAK,kBAAkB,CAAQ,CAAC,EAAE,OAAS,EAC/C,GAAE,uBAAuB,EAAE,KAAK;AAAA;AAAA,sBAEhB;AAAA;AAAA;AAAA;AAAA;AAAA,aAKT,EACA,IAEA,EAEX,CAEA,kBAAmB,EAAU,CAC3B,MAAO,0CAA0C,KACnD,CAEA,kBAAmB,EAAW,CAC5B,MAAI,GAAE,KAAK,mBAAmB,CAAS,CAAC,EAAE,OAAS,EACjD,GAAE,uBAAuB,EAAE,KAAK;AAAA;AAAA,sBAEhB;AAAA;AAAA;AAAA;AAAA;AAAA,aAKT,EACA,IAEA,EAEX,CAEA,mBAAoB,EAAW,CAC7B,MAAO,2CAA2C,KACpD,CAEA,YAAc,CACZ,GAAM,GAAW,EAAE,sBAAsB,EAAE,IAAI,EAC3C,EAAY,EAAE,uBAAuB,EAAE,IAAI,EAE/C,GAAI,KAAK,iBAAiB,CAAQ,EAChC,MAAO,GACF,GAAI,EAAE,KAAK,kBAAkB,CAAQ,CAAC,EAAE,OAAS,GAAK,IAAc,GACzE,SAAE,uBAAuB,EAAE,KAAK;AAAA;AAAA,uDAEiB;AAAA;AAAA;AAAA;AAAA;AAAA,aAK1C,EACA,GAGT,EAAE,2BAA2B,EAAE,MAAM,OAAO,EAE5C,AAAI,KAAK,WAAW,EAClB,CAAI,IAAc,GAChB,EAAY,EAAE,+CAA+C,KAAY,EAAE,KAAK,MAAM,EAEtF,EAAY,IAAM,EAAE,8CAA8C,KAAa,EAAE,KAAK,IAAI,EAE5F,KAAK,eAAe,CAAS,GAE7B,GAAY,IAAc,GAAK,EAAE,4CAA4C,KAAY,EAAE,KAAK,OAAO,EAAI,EAC3G,KAAK,UAAU,CAAS,EAE5B,CAEA,UAAW,EAAW,CACpB,EAAE,2CAA2C,KAAa,EAAE,OAAO,EAAE,OAAO,EAC5E,EAAE,2DAA2D,KAAa,EAAE,OAAO,CACrF,CAEA,eAAgB,EAAW,CACzB,EAAE,0CAA0C,KAAa,EAAE,OAAO,EAAE,OAAO,EAC3E,EAAE,GAAG,GAAW,EAAE,OAAO,CAC3B,CAEA,iBAAkB,EAAU,CAC1B,MAAI,GAAE,KAAK,kBAAkB,CAAQ,CAAC,EAAE,OAAS,EACxC,GAEP,GAAE,uBAAuB,EAAE,KAAK;AAAA;AAAA,0DAEoB;AAAA;AAAA;AAAA;AAAA;AAAA,aAK7C,EACA,GAEX,CAEA,UAAY,CACV,MAAO,MAAK,MAAM,KAAK,OAAO,EAAI,KAAO,GAAI,CAC/C,CACF,ECxRO,GAAM,GAAN,aAAkB,EAAU,CACjC,cAAgB,GAChB,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBP,kBAAoB,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,EAEA,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,oBAAoB,EAAE,IAAI,EAEpC,EAAQ,EAAE,wBAAwB,EAAE,IAAI,EACxC,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAE9B,EAAS,EAAE,qBAAqB,EAAE,IAAI,EACtC,EAAe,IAAW,QAAU,GAAK,qBAAqB,IAE9D,EAAa,EAAE,yBAAyB,EAAE,IAAI,EAC9C,EAAmB,IAAe,QAAU,GAAK,MAAM,IAE7D,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,QACA,cACA,UACA,SACA,eACA,aACA,kBACF,CAAC,CACH,CACF,EC7DO,GAAM,GAAN,aAAsB,EAAU,CACrC,cAAgB,GAChB,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBP,kBAAoB,CAClB,MAAO,CACL,KAAM,SACN,IAAK,SAAU,EAAK,EAAO,EAAO,CAChC,MAAO,CAAC,EAAM,UAAU,SAAS,QAAQ,CAC3C,CACF,CACF,EAEA,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,yBAAyB,EAAE,IAAI,EAEzC,EAAQ,EAAE,6BAA6B,EAAE,IAAI,EAC7C,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAE9B,EAAS,EAAE,0BAA0B,EAAE,IAAI,EAC3C,EAAe,IAAW,QAAU,GAAK,qBAAqB,IAE9D,EAAa,EAAE,8BAA8B,EAAE,IAAI,EACnD,EAAmB,IAAe,QAAU,GAAK,MAAM,IAEvD,EAAO,EAAE,wBAAwB,EAAE,IAAI,EAE7C,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,QACA,cACA,UACA,SACA,eACA,aACA,mBACA,MACF,CAAC,CACH,CACF,EChEO,GAAM,GAAN,aAAuB,EAAU,CACtC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,0BAA0B,EAAE,IAAI,EAC1C,EAAQ,EAAE,0BAA0B,EAAE,IAAI,EAE1C,EAAQ,EAAE,8BAA8B,EAAE,IAAI,EAC9C,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAE9B,EAAW,EAAE,yBAAyB,EAAE,IAAI,EAC5C,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACzG,EAAY,IAAa,GAAK,GAAK,kDAAkD,QAAiB,0CAEtG,EAAa,EAAE,+BAA+B,EAAE,IAAI,EACpD,EAAmB,MAAM,IAE/B,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,QACA,QACA,cACA,UACA,YACA,SACA,OAAQ,EACR,aAAc,CAChB,CAAC,CACH,CACF,EClDO,GAAM,GAAN,aAAsB,EAAU,CACrC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,yBAAyB,EAAE,IAAI,EACzC,EAAQ,EAAE,yBAAyB,EAAE,IAAI,EAEzC,EAAQ,EAAE,6BAA6B,EAAE,IAAI,EAC7C,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAE9B,EAAW,EAAE,wBAAwB,EAAE,IAAI,EAC3C,EAAS,IAAa,GAAK,GAAK,uBAAuB,WACvD,EAAa,IAAa,GAAK,GAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,SAAS,KAAK,EAAI,MAAQ,KACxG,EAAY,IAAa,GAAK,GAAK,gCAAgC,QAAiB,oCAEpF,EAAa,EAAE,8BAA8B,EAAE,IAAI,EACnD,EAAmB,MAAM,IACzB,EAAW,SAAS,eAAe,uBAAuB,EAAE,QAC5D,EAAS,EAAW,gBAAkB,GAE5C,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,QACA,QACA,cACA,UACA,YACA,SACA,OAAQ,EACR,aAAc,EAAW,EAAmB,GAC5C,cAAe,EAAW,GAAK,EAC/B,QACF,CAAC,CACH,CACF,ECtDO,GAAM,GAAN,aAAyB,EAAU,CACxC,KAAO,wKAEP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAS,EAAE,uBAAuB,EAAE,IAAI,EACxC,EAAQ,EAAE,yBAAyB,EAAE,IAAI,EAE/C,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAAE,SAAQ,OAAM,CAAC,CAClE,CACF,ECdO,GAAM,GAAN,aAAsB,EAAU,CACrC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQP,aAAe,CACb,MAAM,EACN,KAAK,gBAAgB,EAAI,CAC3B,CAEA,iBAAmB,CACjB,GAAM,GAAQ,EAAE,wBAAwB,EAAE,IAAI,EACxC,EAAS,EAAE,yBAAyB,EAAE,IAAI,EAC1C,EAAQ,EAAE,2BAA2B,EAAE,IAAI,EAE3C,EAAQ,EAAE,4BAA4B,EAAE,IAAI,EAC5C,EAAc,EAAQ,EAAI,iBAAiB,IAAU,GACrD,EAAU,EAAQ,EAAI,EAAQ,OAEpC,MAAO,MAAK,wBAAwB,KAAK,KAAM,CAC7C,QACA,SACA,QACA,UACA,aACF,CAAC,CACH,CACF,ECVO,YAAuB,EAAM,CAClC,MAAI,KAAS,SACJ,GAAI,GACF,IAAS,MACX,GAAI,GACF,IAAS,SACX,GAAI,GACF,IAAS,OACX,GAAI,GACF,IAAS,cACX,GAAI,GACF,CAAC,aAAc,UAAW,WAAY,UAAU,EAAE,SAAS,CAAI,EACjE,GAAI,GAAM,CAAI,EACZ,IAAS,WACX,GAAI,GACF,IAAS,OACX,GAAI,GACF,IAAS,OACX,GAAI,GACF,IAAS,WACX,GAAI,GACF,IAAS,QACX,GAAI,GACF,IAAS,SACX,GAAI,GACF,IAAS,SACX,GAAI,GACF,IAAS,SACX,GAAI,GACF,IAAS,YACX,GAAI,GACF,IAAS,SACX,GAAI,GACF,IAAS,MACX,GAAI,GACF,IAAS,WACX,GAAI,GACF,IAAS,YACX,GAAI,GACF,IAAS,WACX,GAAI,GACF,IAAS,QACX,GAAI,GACF,IAAS,UACX,GAAI,GAGN,GAAI,EACb,CCpEO,aAA2B,CAChC,GAAa,QAAQ,EAErB,EAAE,qBAAqB,EAAE,GAAG,eAAgB,IAAM,EAAU,gBAAgB,CAAC,EAC7E,EAAE,qBAAqB,EAAE,GAAG,cAAe,IAAM,EAAU,gBAAgB,CAAC,EAC5E,EAAE,sBAAsB,EAAE,GAAG,YAAa,IAAM,CAAE,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAE,CAAC,EAE/E,EAAE,iBAAiB,EAAE,GAAG,QAAS,IAAM,EAAU,QAAQ,CAAC,EAC1D,EAAE,oBAAoB,EAAE,GAAG,QAAS,IAAM,EAAU,WAAW,CAAC,EAEhE,EAAE,8BAA8B,EAAE,GAAG,QAAS,AAAC,GAAO,CACpD,EAAE,EAAG,MAAM,EAAE,QAAQ,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,OAAO,EAE1D,GAAM,GAAgB,EAAE,EAAG,MAAM,EAAE,KAAK,cAAc,EACtD,GAAa,CAAa,EAC1B,SAAS,eAAe,mBAAmB,EAAE,MAAM,QAAU,IAAkB,YAAc,OAAS,IACxG,CAAC,CACH,CCpBO,YAAqB,EAAI,EAAQ,GAAO,CAC7C,GAAM,GAAW,GAAgB,CAAE,EAE7B,EAAc,CAClB,QAAS,EAAG,QAAQ,YAAY,EAChC,WAAY,EAAG,QAAQ,cACvB,YAAa,EAAG,QAAQ,gBACxB,WAAY,EAAG,QAAQ,cACvB,KAAM,EAAE,CAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,YAAa,EAAE,EACnD,UAAW,EAAG,UACd,UACF,EAEA,MAAI,GACK,EAEA,KAAK,UAAU,CAAW,CAErC,CAEA,EAAE,GAAG,OAAS,SAAU,EAAK,CAC3B,MAAO,MAAK,MAAM,EAAE,KAAK,GAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CACrD,EAEA,YAA0B,EAAI,CAC5B,GAAI,GAAW,CAAC,EAChB,OAAS,GAAI,EAAG,EAAI,EAAG,SAAS,OAAQ,IACtC,GAAI,EAAG,SAAS,GAAG,QAAQ,cACzB,EAAS,KAAK,GAAW,EAAG,SAAS,GAAI,EAAI,CAAC,UACrC,EAAG,SAAS,GAAG,SAAS,OAAQ,CACzC,GAAM,GAAe,GAAgB,EAAG,SAAS,EAAE,EACnD,AAAI,EAAa,OAAS,GACxB,GAAW,EAAS,OAAO,CAAY,EAE3C,CAEF,MAAO,EACT,CCnCO,GAAM,IAAoB,GAAI,OAAM,aAE3C,EAAE,OAAO,GAAmB,CAC1B,KAAM,SAAU,EAAO,CACrB,MAAO,GAAE,CAAK,EAAE,KAAK,cAAc,CACrC,EACA,SAAU,SAAU,EAAI,CACtB,MAAO,IAAW,SAAS,eAAe,aAAa,CAAC,CAC1D,EACA,UAAW,SAAU,EAAI,EAAU,CAEjC,AADiB,GAAI,kBAAiB,UAAY,CAAE,EAAS,CAAE,CAAC,EACvD,QAAQ,EAAI,CAAE,QAAS,GAAM,UAAW,GAAM,WAAY,EAAK,CAAC,CAC3E,EACA,YAAa,SAAU,EAAI,CACzB,EAAE,CAAE,EAAE,IAAI,cAAc,CAC1B,CACF,CAAC,ECbM,GAAM,IAAgB,GAAI,OAAM,aAEvC,EAAE,OAAO,GAAe,CACtB,KAAM,SAAU,EAAO,CACrB,MAAO,GAAE,CAAK,EAAE,KAAK,oBAAoB,CAC3C,EACA,SAAU,SAAU,EAAI,CACtB,MAAO,GAAE,CAAE,EAAE,KAAK,cAAc,EAAE,KAAK,CACzC,EACA,SAAU,SAAU,EAAI,EAAO,CAC7B,EAAE,CAAE,EAAE,KAAK,cAAc,EAAE,KAAK,CAAK,CACvC,EACA,UAAW,SAAU,EAAI,EAAU,CAEjC,AADiB,GAAI,kBAAiB,UAAY,CAAE,EAAS,CAAE,CAAC,EACvD,QAAQ,EAAI,CAAE,QAAS,GAAM,UAAW,GAAM,WAAY,EAAK,CAAC,CAC3E,EACA,YAAa,SAAU,EAAI,CACzB,EAAE,CAAE,EAAE,IAAI,oBAAoB,CAChC,EACA,eAAgB,EAAI,EAAM,CACxB,EAAE,eAAe,EAAE,IAAI,UAAW,MAAM,EAExC,EAAW,EACX,EAAK,WAAW,EAEhB,KAAK,SAAS,EAAI,CAAI,EAEtB,GAAM,GAAmB,GAAI,GAAO,iBAAmB,EAAK,EAAE,kBACxD,EAAsB,GAAI,GAAI,iBAAmB,EAAK,EAAE,kBACxD,EAA6B,GAAI,GAAW,iBAAmB,EAAK,EAAE,iBAE5E,GAAwB,IAAI,GAAK,GAAwB,EAAG,CAAgB,CAAC,EAC7E,GAAwB,uBAAwB,CAAmB,EACnE,GAAwB,qCAAsC,CAA0B,EAEpF,EAAK,gBACP,EAAK,mBAAmB,aAAa,EAEvC,EAAK,wBAAwB,CAC/B,CACF,CAAC,EAED,GAAM,IAA0B,CAAC,WAAY,0BAA2B,4BAA4B,EAEpG,YAAkC,EAAU,EAAU,CACpD,SAAS,uBAAuB,CAAQ,EAAE,QAAQ,GAAM,CACtD,SAAS,OAAO,EAAI,CAAQ,CAC9B,CAAC,CACH,CC9CA,EAAE,UAAY,CACZ,GAAS,EACT,GAAe,EACf,GAAa,EACb,GAAmB,EAEnB,EAAE,YAAY,EAAE,QAAQ,CAAE,SAAU,SAAU,UAAW,OAAQ,CAAC,EAElE,kBAAkB,KAAK,EAEvB,SAAS,OAAO,SAAS,eAAe,aAAa,EAAG,CACtD,MAAO,CACL,KAAM,SACN,KAAM,EACR,EACA,OAAQ,oBACR,UAAW,oBACX,MAAO,SAAU,EAAK,CACpB,KAAK,GAAG,YAAY,EAAI,IAAI,CAC9B,CACF,CAAC,CACH,CAAC,EAED,MAAM,cAAc,SAAS,EAAiB,EAC9C,MAAM,cAAc,SAAS,EAAa", + "sourcesContent": ["export class Page {\r\n name\r\n navbar_item_style = 'none'\r\n bs4_item_style = 'none'\r\n enable_on_load = true\r\n page_html\r\n\r\n updateComponentDropdown () {\r\n $('.navbar-tab-item').css('display', this.navbar_item_style)\r\n $('.bs4-item').css('display', this.bs4_item_style)\r\n\r\n const component = this.navbar_item_style === 'none' ? 'header' : 'tab'\r\n if (!$(`#sidebar-${component}-body`).hasClass('show')) {\r\n $(`#sidebar-${component}-header button`).trigger('click')\r\n }\r\n };\r\n\r\n getPageHTML (html, title = '') {\r\n return html.replaceAll('$page_id$', this.getTabID()).replaceAll('$title$', title)\r\n };\r\n\r\n updatePage () {\r\n const title = $('#canvas-title').html()\r\n $('.page-canvas').html(this.getPageHTML(this.page_html, title))\r\n };\r\n\r\n enableSortablePage (selector, by = 'id') {\r\n if (by === 'id') {\r\n Sortable.create(document.getElementById(selector), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n } else {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n })\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BasicPage extends Page {\r\n name = 'basicPage'\r\n enable_on_load = false\r\n page_html = '
          '\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FillPage extends Page {\r\n name = 'fillPage'\r\n page_html = `\r\n
          \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FixedPage extends Page {\r\n name = 'fixedPage'\r\n page_html = `\r\n
          \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class FluidPage extends Page {\r\n name = 'fluidPage'\r\n page_html = `\r\n
          \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class BootstrapPage extends Page {\r\n name = 'bootstrapPage'\r\n page_html = `\r\n
          \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class NavbarPage extends Page {\r\n name = 'navbarPage'\r\n navbar_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
          \r\n \r\n
          \r\n
          \r\n
          \r\n
          \r\n `\r\n};\r\n", "import { Page } from './Page'\r\n\r\nexport class DashboardPage extends Page {\r\n name = 'dashboardPage'\r\n navbar_item_style = ''\r\n bs4_item_style = ''\r\n enable_on_load = false\r\n page_html = `\r\n
          \r\n \r\n \r\n
          \r\n
          \r\n
          \r\n
          \r\n
          \r\n
          \r\n `\r\n};\r\n", "export function initSettings () {\r\n $('#settings-page_type').on('click', () => $('.canvas-modal').css('display', 'none'))\r\n\r\n $('.copy-ui-button').on('click', copyUICode)\r\n $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') })\r\n $('#settings-code-download').on('click', () => { $('#settings-code_button').trigger('click') })\r\n $('#settings-code-options').on('click', () => {\r\n const options_visiblity = $('#settings-code-options_fields').css('display') === 'none' ? '' : 'none'\r\n $('#settings-code-options_fields').css({ display: options_visiblity })\r\n })\r\n\r\n $('#css_style').on('change', applyCustomStyle)\r\n\r\n $('#remove_label').on('change', toggleComponentLabels)\r\n $('#remove_colour').on('change', toggleBackgroundColours)\r\n $('#remove_border').on('change', toggleBorders)\r\n $('#canvas_clear').on('click', showClearWarning)\r\n $('#confirm_clear').on('click', clearCanvas)\r\n\r\n $('.component-accordion .card-header button').on('click', scrollToComponent)\r\n\r\n $('body').on('click', () => {\r\n if (document.querySelector('body').classList.contains('sidebar-mini')) {\r\n document.querySelector('body').classList.remove('sidebar-mini')\r\n }\r\n })\r\n\r\n $(document).on('click', '.clickable-dropdown', e => { e.stopPropagation() })\r\n $('#preview').on('click', () => {\r\n $('#settings-options_button').trigger('click')\r\n $('.page-canvas-shell').addClass('preview')\r\n })\r\n $('#canvas-close_preview').on('click', () => { $('.page-canvas-shell').removeClass('preview') })\r\n\r\n Shiny.addCustomMessageHandler('toggleBS4DashDeps', toggleBS4DashDeps)\r\n // eslint-disable-next-line no-eval\r\n Shiny.addCustomMessageHandler('runjs', function (message) { (0, eval)(message.script) })\r\n\r\n $('body').on('click contextmenu', closeCanvasMenu)\r\n $('#canvas-canvas').on('contextmenu', showCanvasMenu)\r\n $('#canvas-menu').on('contextmenu', e => { e.preventDefault() })\r\n $('#sidebar-container').on('mousedown', closeCanvasMenu)\r\n\r\n $('#canvas-delete').on('click', deleteDesignerElement)\r\n\r\n $('#settings-template-search').on('input', toggleSavedTemplates)\r\n $(document).on('click', '.template-option', sendSavedTemplateID)\r\n};\r\n\r\nfunction toggleComponentLabels () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-after-label')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n }\r\n};\r\n\r\nfunction toggleBackgroundColours () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-colour')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-colour')\r\n }\r\n};\r\n\r\nfunction toggleBorders () {\r\n if (this.checked) {\r\n $('.designer-page-template').removeClass('hidden-borders')\r\n } else {\r\n $('.designer-page-template').addClass('hidden-borders')\r\n }\r\n};\r\n\r\nfunction showClearWarning () {\r\n if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n return null\r\n } else {\r\n $('#clear_modal').modal()\r\n }\r\n};\r\n\r\nfunction clearCanvas () {\r\n $('#canvas-page').html('')\r\n};\r\n\r\nfunction copyUICode () {\r\n const copyText = document.getElementById('settings-code-code').textContent\r\n navigator.clipboard.writeText(copyText)\r\n $('#copy_toast').toast('show')\r\n};\r\n\r\nfunction toggleBS4DashDeps (toggle) {\r\n const stylesheets = document.styleSheets\r\n for (let i = 0; i < stylesheets.length; i++) {\r\n const stylesheet = stylesheets.item(i)\r\n if (stylesheet.href && (stylesheet.href.includes('AdminLTE') || stylesheet.href.includes('bs4Dash'))) {\r\n stylesheet.disabled = toggle === 'hide'\r\n }\r\n }\r\n};\r\n\r\nfunction scrollToComponent () {\r\n const cardHeader = this.closest('.card-header').id\r\n setTimeout(\r\n () => {\r\n document.getElementById(cardHeader).scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n $(this).trigger('blur')\r\n },\r\n 250\r\n )\r\n}\r\n\r\nlet selectedElement\r\n\r\nfunction showCanvasMenu (event) {\r\n if ($(event.target).closest('.designer-element').length === 0) {\r\n return\r\n }\r\n event.preventDefault()\r\n\r\n const { clientX: mouseX, clientY: mouseY } = event\r\n const { normalizedX, normalizedY } = normalizeMenuPosition(mouseX, mouseY)\r\n\r\n selectedElement = $(event.target).closest('.designer-element')\r\n\r\n $('#canvas-menu').css('top', `${normalizedY}px`)\r\n $('#canvas-menu').css('left', `${normalizedX}px`)\r\n $('#canvas-menu').removeClass('visible')\r\n\r\n setTimeout(() => { $('#canvas-menu').addClass('visible') })\r\n};\r\n\r\nfunction normalizeMenuPosition (mouseX, mouseY) {\r\n const scope = document.getElementById('canvas-canvas')\r\n const contextMenu = document.getElementById('canvas-menu')\r\n\r\n let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect()\r\n\r\n scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX\r\n scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY\r\n\r\n const scopeX = mouseX - scopeOffsetX\r\n const scopeY = mouseY - scopeOffsetY\r\n\r\n const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth\r\n const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight\r\n\r\n let normalizedX = mouseX\r\n let normalizedY = mouseY\r\n\r\n if (outOfBoundsOnX) {\r\n normalizedX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth\r\n }\r\n if (outOfBoundsOnY) {\r\n normalizedY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight\r\n }\r\n\r\n return { normalizedX, normalizedY }\r\n};\r\n\r\nfunction closeCanvasMenu () {\r\n $('#canvas-menu').removeClass('visible')\r\n};\r\n\r\nfunction deleteDesignerElement (event) {\r\n selectedElement.remove()\r\n};\r\n\r\nfunction applyCustomStyle (event) {\r\n const cssFile = event.target.files[0]\r\n const canvasStyle = document.getElementById('canvas-style')\r\n canvasStyle.innerHTML = ''\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n const file = e.target.result\r\n const lines = file.split(/\\r\\n|\\n|(?<=\\}\\b)/)\r\n canvasStyle.innerHTML = lines.join('\\n')\r\n\r\n const cssRules = canvasStyle.sheet.cssRules\r\n for (let i = 0; i < cssRules.length; i++) {\r\n if (cssRules[i].selectorText) {\r\n cssRules[i].selectorText = addCanvasPageSelector(cssRules[i].selectorText)\r\n } else if (cssRules[i].media && cssRules[i].cssRules) {\r\n const cssMediaRules = cssRules[i].cssRules\r\n for (let j = 0; j < cssMediaRules.length; j++) {\r\n cssMediaRules[j].selectorText = addCanvasPageSelector(cssMediaRules[j].selectorText)\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.onerror = (e) => alert(e.target.error.name)\r\n reader.readAsText(cssFile)\r\n};\r\n\r\nfunction addCanvasPageSelector (selectors) {\r\n return selectors.split(/, */g).map((x) => {\r\n if (x === 'body') {\r\n return '#canvas-page'\r\n } else if (/^\\.wrapper\\.sidebar/.test(x)) {\r\n return x.replace('.wrapper', '')\r\n } else {\r\n return '#canvas-page ' + x\r\n }\r\n }).join(', ')\r\n};\r\n\r\nlet template_selected = false\r\nexport function templateSelected () {\r\n return template_selected\r\n};\r\n\r\nexport function templateUpated () {\r\n template_selected = false\r\n}\r\n\r\nfunction toggleSavedTemplates (event) {\r\n const search_term = event.target.value ? event.target.value : ''\r\n\r\n document.getElementsByClassName('template-option').forEach(x => {\r\n const show_template = $(x).find('.title').html().includes(search_term) || $(x).find('.description').html().includes(search_term)\r\n x.style.display = show_template ? null : 'none'\r\n })\r\n}\r\n\r\nfunction sendSavedTemplateID (event) {\r\n const selected_template = $(event.target).closest('.template-option')\r\n const page_choice = selected_template.data('page')\r\n template_selected = true\r\n\r\n const to_delete = $(event.target).closest('.delete').length > 0 || event.target.classList.contains('delete')\r\n\r\n if (!to_delete) {\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n }\r\n\r\n document.getElementById('settings-template-search').value = null\r\n $('#settings-template-search').trigger('input')\r\n\r\n Shiny.setInputValue('settings-template-select', selected_template.data('value'))\r\n Shiny.setInputValue('settings-template-delete', to_delete)\r\n};\r\n", "import { BasicPage } from './BasicPage'\r\nimport { FillPage } from './FillPage'\r\nimport { FixedPage } from './FixedPage'\r\nimport { FluidPage } from './FluidPage'\r\nimport { BootstrapPage } from './BootstrapPage'\r\nimport { NavbarPage } from './NavbarPage'\r\nimport { DashboardPage } from './DashboardPage'\r\nimport { templateSelected, templateUpated } from '../app/settings'\r\n\r\nexport let page\r\n\r\nexport function createPage () {\r\n const page_type = $('#settings-page_type input:radio:checked').val()\r\n\r\n if (page_type === 'basicPage') {\r\n page = new BasicPage()\r\n } else if (page_type === 'fillPage') {\r\n page = new FillPage()\r\n } else if (page_type === 'fixedPage') {\r\n page = new FixedPage()\r\n } else if (page_type === 'fluidPage') {\r\n page = new FluidPage()\r\n } else if (page_type === 'bootstrapPage') {\r\n page = new BootstrapPage()\r\n } else if (page_type === 'navbarPage') {\r\n page = new NavbarPage()\r\n } else if (page_type === 'dashboardPage') {\r\n page = new DashboardPage()\r\n } else {\r\n page = new BasicPage()\r\n }\r\n\r\n page.updatePage()\r\n\r\n if (templateSelected()) {\r\n templateUpated()\r\n } else if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n\r\n page.updateComponentDropdown()\r\n return page\r\n};\r\n\r\nexport function selectPage () {\r\n let button_el = $(this)\r\n if (!$(this).hasClass('canvas-page-choice')) {\r\n button_el = $(this).closest('.canvas-page-choice')\r\n }\r\n\r\n button_el.closest('.canvas-modal').css('display', 'none')\r\n\r\n const page_choice = button_el.data('page')\r\n $('#settings-page_type').find(`input[value='${page_choice}']`).trigger('click')\r\n}\r\n\r\nexport function changePageCheck () {\r\n if (templateSelected()) {\r\n return null\r\n } else if ($('#canvas-page').html() === '' || $('#canvas-page.wrapper .tab-content').html() === '') {\r\n $('#canvas-page').html('
          ')\r\n createPage()\r\n } else {\r\n $('#warning_modal').modal()\r\n }\r\n};\r\n\r\nexport function revertPageSelection () {\r\n $(`#settings-page_type input[value=\"${page.name}\"]`).trigger('click')\r\n}\r\n\r\nexport function updateTitle (el) {\r\n const title = $(el.target).val()\r\n $('#canvas-title').html(title)\r\n $('.navbar-brand').html(title)\r\n $('.brand-link').html(title)\r\n\r\n if ($('#canvas-page').data('shinyattributes')) {\r\n const shiny_atts = $('#canvas-page').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page').attr('data-shinyattributes', shiny_atts)\r\n }\r\n\r\n if ($('#canvas-page>.main-header').data('shinyattributes')) {\r\n const shiny_atts2 = $('#canvas-page>.main-header').data('shinyattributes').replace(/\"[^\"]+\"/, `\"${title}\"`)\r\n $('#canvas-page>.main-header').attr('data-shinyattributes', shiny_atts2)\r\n }\r\n}\r\n", "import { selectPage, changePageCheck, createPage, updateTitle, revertPageSelection } from './utils'\r\n\r\nexport function initPage () {\r\n createPage()\r\n $('.canvas-page-choice').on('click', selectPage)\r\n $('#settings-page_type').on('change', changePageCheck)\r\n $('#cancel_reset').on('click', revertPageSelection)\r\n $('#confirm_reset').on('click', createPage)\r\n\r\n $('#app_name').on('change keyup', updateTitle)\r\n};\r\n", "export function screenshotSettings () {\r\n Shiny.addCustomMessageHandler('prepare_canvas_screenshot', (message) => {\r\n $('.designer-page-template').addClass('hidden-after-label')\r\n $('.designer-page-template').addClass('hidden-colour')\r\n $('.designer-page-template').addClass('hidden-borders')\r\n })\r\n\r\n Shiny.addCustomMessageHandler('revert_canvas_screenshot', (message) => {\r\n $('#remove_label').trigger('change')\r\n $('#remove_colour').trigger('change')\r\n $('#remove_border').trigger('change')\r\n })\r\n}\r\n", "export let component\r\n\r\nexport class Component {\r\n updatable = true\r\n display_comments = true\r\n display_container = true\r\n has_card_body = false\r\n is_tab = false\r\n html = '
          '\r\n sortable_settings = null\r\n\r\n constructor () {\r\n component = this\r\n }\r\n\r\n createComponent () {\r\n return this.html\r\n };\r\n\r\n replaceHTMLPlaceholders (html, options) {\r\n for (const property in options) {\r\n html = html.replaceAll('$' + property + '$', options[property])\r\n }\r\n return html\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n\r\n $('.component-container').html(null)\r\n const html = this.createComponent()\r\n $('.component-container').html(html)\r\n this.addComments()\r\n if (update_sortable) {\r\n this.enableSortable()\r\n }\r\n };\r\n\r\n enableSortable () {\r\n Sortable.create(\r\n document.getElementById('sidebar-container'), {\r\n group: {\r\n name: 'shared',\r\n pull: 'clone',\r\n put: false\r\n },\r\n onClone: function (evt) {\r\n if (component.sortable_settings) {\r\n if (component.has_card_body) {\r\n Sortable.create($(evt.item).find('.card-body')[0], component.sortable_settings)\r\n } else if (component.is_tab) {\r\n Sortable.create($(evt.item).find('.tab-content'), component.sortable_settings)\r\n } else {\r\n Sortable.create(evt.item, component.sortable_settings)\r\n }\r\n }\r\n },\r\n onEnd: function (_evt) {\r\n $('.page-canvas [data-toggle=\"tooltip\"]').tooltip()\r\n if (component.updatable || $('#sidebar-comments').val() !== '') {\r\n $('#sidebar-comments').val('')\r\n component.updateComponent()\r\n }\r\n }\r\n })\r\n };\r\n\r\n addComments () {\r\n const comments = $('#sidebar-comments').val()\r\n if (comments) {\r\n $('.component-container>.designer-element').attr('data-shinycomments', comments)\r\n $('.component-container>.designer-element').attr('title', comments)\r\n $('.component-container>.designer-element').attr('data-toggle', 'tooltip')\r\n }\r\n };\r\n\r\n createID (prefix = '') {\r\n prefix = prefix ? prefix + '_' : prefix\r\n return prefix + Math.random().toString(36).substring(2, 12)\r\n };\r\n\r\n validateCssUnit (x, fallback) {\r\n if (this._regex.test(x)) {\r\n return x\r\n } else if (/^\\d+$/.test(x)) {\r\n return x + 'px'\r\n } else {\r\n return fallback\r\n }\r\n };\r\n\r\n _regex = /^(auto|inherit|fit-content|calc\\(.*\\)|((\\.\\d+)|(\\d+(\\.\\d+)?))(%|in|cm|mm|ch|em|ex|rem|pt|pc|px|vh|vw|vmin|vmax))$/\r\n};\r\n", "import { Component } from './Component'\r\n\r\nexport class Header extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-header-tag').val()\r\n const value = $('#sidebar-header-text').val()\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Row extends Component {\r\n updatable = false\r\n html = '
          '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Column extends Component {\r\n updatable = false\r\n html = '
          '\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n createComponent () {\r\n const width = $('#sidebar-column-width_num').val()\r\n const offset = $('#sidebar-column-offset').val()\r\n\r\n const offset_class = offset > 0 ? ` offset-md-${offset}` : ''\r\n const offset_r = offset > 0 ? `, offset = ${offset}` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { width, offset_class, offset_r })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Text extends Component {\r\n html = '<$tag$ class=\"designer-element\" data-shinyfunction=\"tags$$tag$\">$value$'\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const tag = $('#sidebar-text-tag').val()\r\n const value = $('#sidebar-text-textarea').val()\r\n const contents = tag === 'p' ? value.replace(/\\n/g, ' ') : this.createListItems(value)\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { tag, value: contents })\r\n }\r\n\r\n createListItems (text) {\r\n return text.split('\\n').map(x => '
        • ' + x + '
        • ').join('')\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InputPanel extends Component {\r\n updatable = false\r\n html = '
          '\r\n\r\n constructor (update_component = true) {\r\n super()\r\n\r\n if (update_component) {\r\n this.updateComponent(true)\r\n }\r\n }\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return clone.classList.contains('form-group') || clone.classList.contains('btn')\r\n }\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Input extends Component {\r\n constructor (type) {\r\n super()\r\n this.type = type\r\n this.updateComponent(true)\r\n }\r\n\r\n types = [\r\n { value: 'text_input', label: 'Text', r_func: 'textInput' },\r\n { value: 'textarea', label: 'Textarea', r_func: 'textAreaInput' },\r\n { value: 'numeric', label: 'Numeric', r_func: 'numericInput' },\r\n { value: 'password', label: 'Password', r_func: 'passwordInput' }\r\n ]\r\n\r\n html = `\r\n
          $input_tag$
          \r\n `\r\n\r\n createComponent () {\r\n const label = $(`#sidebar-${this.type}-label`).val()\r\n\r\n let id = $(`#sidebar-${this.type}-id`).val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_info = this.types.find(x => x.value === this.type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n\r\n let input_tag\r\n if (this.type === 'textarea') {\r\n input_tag = ''\r\n } else {\r\n input_tag = ``\r\n }\r\n\r\n const width = this.validateCssUnit($(`#sidebar-${this.type}-width`).val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class FileInput extends Component {\r\n html = `\r\n
          \r\n \r\n
          \r\n \r\n \r\n
          \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-file-label').val()\r\n\r\n let id = $('#sidebar-file-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-file-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SelectInput extends Component {\r\n html = `\r\n
          \r\n \r\n
          \r\n \r\n `\r\n\r\n date_range_input_html = `\r\n
          \r\n \r\n \r\n to \r\n \r\n \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-date-label').val()\r\n\r\n let id = $('#sidebar-date-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-date-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const range = document.getElementById('sidebar-date-range').checked\r\n const r_func = range ? 'dateRangeInput' : 'dateInput'\r\n const date_class = range ? 'shiny-date-range-input' : 'shiny-date-input'\r\n const input_tag = range ? this.date_range_input_html : this.date_input_html\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n r_func,\r\n date_class,\r\n input_tag,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n $('.component-container').find('input').bsDatepicker()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxInput extends Component {\r\n html = `\r\n
          \r\n
          \r\n \r\n
          \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-checkbox-label').val()\r\n\r\n let id = $('#sidebar-checkbox-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const width = this.validateCssUnit($('#sidebar-checkbox-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class CheckboxGroupInput extends Component {\r\n types = [\r\n { value: 'radio', label: 'Radio', r_func: 'radioButtons', role: 'radiogroup' },\r\n { value: 'checkbox', label: 'Checkbox', r_func: 'checkboxGroupInput', role: 'group' }\r\n ]\r\n\r\n html = `\r\n
          \r\n \r\n
          \r\n $choices$\r\n
          \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-radio-label').val()\r\n\r\n let id = $('#sidebar-radio-id').val()\r\n id = id === '' ? this.createID('checkbox') : id\r\n\r\n const type = $('#sidebar-radio-type').val()\r\n const input_info = this.types.find(x => x.value === type)\r\n if (!input_info) return\r\n const r_func = input_info.r_func\r\n const role = input_info.role\r\n\r\n const width = this.validateCssUnit($('#sidebar-radio-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const inline = document.getElementById('sidebar-radio-inline').checked\r\n const inline_class = inline ? '-inline' : ''\r\n const inline_str = inline ? ', inline = TRUE' : ''\r\n const css_class = `shiny-input-${type}group${inline_class}`\r\n\r\n const choices = $('#sidebar-radio-choices').val()\r\n const choices_str = `, choices = c("${choices.replace(/\\n/g, '", "')}")`\r\n const choices_html = choices.split('\\n').map(x => this.createCheckbox(x, type, inline)).join('')\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n label,\r\n css_class,\r\n r_func,\r\n role,\r\n choices: choices_html,\r\n choices_str,\r\n inline_str,\r\n style_str,\r\n width_str\r\n })\r\n };\r\n\r\n createCheckbox (x, type = 'checkbox', inline = false) {\r\n const check_class = inline ? type + '-inline' : type\r\n return ``\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class SliderInput extends Component {\r\n html = `\r\n
          \r\n \r\n \r\n
          \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-slider-label').val()\r\n\r\n let id = $('#sidebar-slider-id').val()\r\n id = id === '' ? this.createID('slider') : id\r\n\r\n const format = $('#sidebar-slider-type').val()\r\n\r\n const width = this.validateCssUnit($('#sidebar-slider-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n const ranged = document.getElementById('sidebar-slider-range').checked\r\n const values = this.getValues(format, ranged)\r\n const range_attr = ranged ? 'data-type=\"double\" data-drag-interval=\"true\" data-to=\"$to$\"' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n range_attr,\r\n id,\r\n label,\r\n format,\r\n min: values.min,\r\n max: values.max,\r\n step: values.step,\r\n from: values.from,\r\n to: values.to,\r\n style_str,\r\n width_str,\r\n value_str: values.value_str,\r\n time_format: values.time_format\r\n })\r\n };\r\n\r\n getValues (format, range = false) {\r\n if (format === 'number') {\r\n return {\r\n step: 1,\r\n min: 0,\r\n max: 10,\r\n from: 5,\r\n to: 7,\r\n value_str: `, min = 0, max = 10, value = ${range ? 'c(5, 7)' : 5}`\r\n }\r\n }\r\n\r\n const curr_date = new Date()\r\n if (format === 'date') {\r\n curr_date.setHours(0, 0, 0, 0)\r\n }\r\n const curr_time = curr_date.getTime()\r\n const step = format === 'date' ? 1000 * 60 * 60 * 24 : 1000\r\n\r\n const min = curr_time - 5 * step\r\n const max = curr_time + 5 * step\r\n const from = curr_time\r\n const to = curr_time + 2 * step\r\n\r\n const r_datefunc = format === 'date' ? 'Sys.Date()' : 'Sys.time()'\r\n const r_mult = format === 'date' ? '' : '000'\r\n const input_value_str = range ? `\"c(${r_datefunc}, ${r_datefunc} + 2${r_mult})\"` : r_datefunc\r\n\r\n return {\r\n step,\r\n min,\r\n max,\r\n from,\r\n to,\r\n time_format: format === 'date' ? '%F' : '%F %T',\r\n value_str: `, min = ${r_datefunc} - 5${r_mult}, max = ${r_datefunc} + 5${r_mult}, value = ${input_value_str}`\r\n }\r\n }\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n const slider_type = $('#sidebar-slider-type').val()\r\n $('.component-container').find('input').ionRangeSlider({ prettify: this.getSliderPrettifier(slider_type) })\r\n };\r\n\r\n getSliderPrettifier (type) {\r\n if (type === 'date') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate()\r\n }\r\n } else if (type === 'datetime') {\r\n return function (num) {\r\n const sel_date = new Date(num)\r\n return sel_date.getFullYear() + '-' + (sel_date.getMonth() + 1) + '-' + sel_date.getDate() + ' ' +\r\n sel_date.getHours() + ':' + sel_date.getMinutes() + ':' + sel_date.getSeconds()\r\n }\r\n } else {\r\n return null\r\n }\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Button extends Component {\r\n types = [\r\n { value: 'default', css_class: 'btn-default' },\r\n { value: 'primary', css_class: 'btn-primary' },\r\n { value: 'secondary', css_class: 'btn-secondary' },\r\n { value: 'success', css_class: 'btn-success' },\r\n { value: 'danger', css_class: 'btn-danger' },\r\n { value: 'warning', css_class: 'btn-warning' },\r\n { value: 'info', css_class: 'btn-info' },\r\n { value: 'light', css_class: 'btn-light' },\r\n { value: 'dark', css_class: 'btn-dark' }\r\n ]\r\n\r\n html = `\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-button-label').val()\r\n\r\n let id = $('#sidebar-button-id').val()\r\n id = id === '' ? this.createID('input') : id\r\n\r\n const input_type = $('#sidebar-button-type').val()\r\n const input_info = this.types.find(x => x.value === input_type)\r\n if (!input_info) return\r\n const btn_class = input_info.css_class\r\n const class_str = input_type === 'default' ? '' : `, class = "${btn_class}"`\r\n\r\n const downloadable = document.getElementById('sidebar-button-download').checked\r\n const r_func = downloadable ? 'downloadButton' : 'actionButton'\r\n let icon_html = downloadable ? '' : ''\r\n const id_arg = downloadable ? 'outputId' : 'inputId'\r\n\r\n const tab_icon = $('#sidebar-button-icon').val()\r\n const icon_r = tab_icon === '' || downloadable ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' || downloadable ? '' : $('#sidebar-button-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n icon_html = tab_icon === '' || downloadable ? icon_html : ``\r\n\r\n const width = this.validateCssUnit($('#sidebar-button-width').val())\r\n const style_str = width ? `style=\"width: ${width};\"` : ''\r\n const width_str = width ? `, width = "${width}"` : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id,\r\n id_arg,\r\n label,\r\n r_func,\r\n icon_r,\r\n icon_html,\r\n btn_class,\r\n class_str,\r\n style_str,\r\n width_str\r\n })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Output extends Component {\r\n types = [\r\n { value: 'text', label: 'Text', css_class: 'text-output-element shiny-text-output', r_func: 'textOutput', placeholder: 'Text Output: ' },\r\n { value: 'verbatim', label: 'Verbatim Text', css_class: 'verbatimtext-output-element shiny-text-output', r_func: 'verbatimTextOutput', placeholder: 'Verbatim Text Output: ' },\r\n { value: 'plot', label: 'Plot', css_class: 'plot-output-element shiny-plot-output', r_func: 'plotOutput' },\r\n { value: 'image', label: 'Image', css_class: 'image-output-element shiny-image-output', r_func: 'imageOutput' },\r\n { value: 'table', label: 'Table', css_class: 'table-output-element shiny-datatable-output', r_func: 'DT::DTOutput' },\r\n { value: 'html', label: 'HTML', css_class: 'html-output-element shiny-html-output', r_func: 'uiOutput', placeholder: 'Placeholder for HTML Output' }\r\n ]\r\n\r\n html = `\r\n <$html_tag$ $id_str$ class=\"designer-element output-element $css_class$\"\r\n style=\"$style_str$\"\r\n data-shinyfunction=\"$r_func$\"\r\n data-shinyattributes=\"outputId = "$id$"$inline_str$$dim_str$\">\r\n $output_tag$\r\n \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-output-label').val()\r\n\r\n let id = $('#sidebar-output-id').val()\r\n id = id === '' ? this.createID('output') : id\r\n\r\n const output_type = $('#sidebar-output-type').val()\r\n const output_info = this.types.find(x => x.value === output_type)\r\n if (!output_info) return\r\n const r_func = output_info.r_func\r\n let html_tag = output_type === 'verbatim' ? 'pre' : 'div'\r\n const css_class = output_info.css_class\r\n\r\n let id_str = ''\r\n if (['plot', 'image', 'table'].includes(output_type)) {\r\n const designer_id = this.createID('output')\r\n Shiny.setInputValue('sidebar-outputid', designer_id)\r\n id_str = `id=\"sidebar-${designer_id}\"`\r\n }\r\n\r\n const inline = document.getElementById('sidebar-output-inline').checked\r\n const inline_str = inline && !['verbatim', 'table'].includes(output_type) ? ', inline = TRUE' : ''\r\n if (inline_str !== '') {\r\n html_tag = 'span'\r\n }\r\n\r\n let dim_str = ''\r\n let style_str = ''\r\n\r\n if (['plot', 'image'].includes(output_type)) {\r\n const width = this.validateCssUnit($('#sidebar-output-width').val(), '100%')\r\n style_str = `width: ${width};`\r\n dim_str = width === '100%' ? '' : `, width = "${width}"`\r\n\r\n const height = this.validateCssUnit($('#sidebar-output-height').val(), '400px')\r\n style_str = style_str + ` height: ${height};`\r\n dim_str = dim_str + (height === '400px' ? '' : `, height = "${height}"`)\r\n }\r\n\r\n let output_tag = ''\r\n if (output_info.placeholder) {\r\n if (output_type === 'html') {\r\n output_tag = `${output_info.placeholder}`\r\n } else {\r\n output_tag = `${output_info.placeholder} ${$('#sidebar-output-textarea').val()}`\r\n }\r\n }\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n html_tag,\r\n id,\r\n label,\r\n id_str,\r\n r_func,\r\n css_class,\r\n style_str,\r\n dim_str,\r\n inline_str,\r\n output_tag\r\n })\r\n };\r\n\r\n updateComponent (update_sortable = false) {\r\n super.updateComponent(update_sortable)\r\n\r\n if (typeof (window) === 'undefined') {\r\n return null\r\n }\r\n Shiny.bindAll()\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tab extends Component {\r\n _item = 1\r\n\r\n updateComponent () {};\r\n\r\n getPageType () {\r\n return $('#settings-page_type input:radio:checked').val()\r\n };\r\n\r\n addPage () {\r\n const page_type = this.getPageType()\r\n\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n if (tab_value === '') {\r\n tab_value = this.createID('tab')\r\n } else if (this.checkDuplicateIDs(tab_value, page_type)) {\r\n return\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('ul.navbar-nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
        • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
        • \r\n `)\r\n\r\n tab_panel.append(`\r\n
          \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const tab_panel = $('section.content .tab-content')\r\n const active_class = tab_panel.html() === '' ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tab-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tab-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n $('.sidebarMenuSelectedTabItem').before(`\r\n
        • \r\n \r\n ${icon_html}\r\n

          ${tab_name}

          \r\n
          \r\n
        • \r\n `)\r\n\r\n if (!$('.sidebarMenuSelectedTabItem').attr('data-value')) {\r\n $('.sidebarMenuSelectedTabItem').attr('data-value', tab_value)\r\n }\r\n\r\n tab_panel.append(`\r\n
          \r\n `)\r\n\r\n this.enableSortablePage(`shiny-tab-${tab_value}`)\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
          \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
          \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-name='${tab_name}']`\r\n } else {\r\n return `ul.navbar-nav a[data-name='${tab_name}']`\r\n }\r\n };\r\n\r\n checkDuplicateIDs (tab_value, page_type) {\r\n if ($(this.getValueIdentifier(tab_value, page_type)).length > 0) {\r\n $('#sidebar-tab-alert').html(`\r\n
          \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
          \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value, page_type) {\r\n if (page_type === 'dashboardPage') {\r\n return `ul.sidebar-menu a[data-value='${tab_value}']`\r\n } else {\r\n return `ul.navbar-nav a[data-value='${tab_value}']`\r\n }\r\n };\r\n\r\n deletePage () {\r\n const page_type = this.getPageType()\r\n const tab_name = $('#sidebar-tab-name').val()\r\n let tab_value = $('#sidebar-tab-value').val()\r\n\r\n if (this.checkMissingName(tab_name, page_type)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name, page_type)).length > 1 && tab_value === '') {\r\n $('#sidebar-tab-alert').html(`\r\n
          \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
          \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tab-alert div').alert('close')\r\n\r\n if (page_type === 'dashboardPage') {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`ul.nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`#tab-${tab_value}`).parent().remove()\r\n $(`#shiny-tab-${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name, page_type) {\r\n if ($(this.getNameIdentifier(tab_name, page_type)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tab-alert').html(`\r\n
          \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
          \r\n `)\r\n return true\r\n }\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Tabset extends Component {\r\n _item = 1\r\n id\r\n html\r\n is_tab = true\r\n\r\n constructor () {\r\n super()\r\n this.id = this.getTabID()\r\n\r\n if (this.isDashPage()) {\r\n this.html = `\r\n
          \r\n
          \r\n
          \r\n
            $title$
          \r\n
          \r\n
          \r\n
          \r\n
          \r\n
          \r\n \r\n
          `\r\n } else {\r\n this.html = `\r\n
          \r\n
            \r\n
            \r\n
            `\r\n }\r\n\r\n this.updateComponent(true)\r\n };\r\n\r\n createComponent () {\r\n if (this.isDashPage()) {\r\n const label = $('#sidebar-tabset-label').val()\r\n const title = label === '' ? '' : `
          • ${label}

          • `\r\n const title_r = label === '' ? '' : `title = "${label}", `\r\n\r\n const width = $('#sidebar-tabset-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-tabset-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-tabset-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n title,\r\n title_r,\r\n label,\r\n width,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n } else {\r\n const type = $('#sidebar-tabset-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n id: this.id,\r\n type\r\n })\r\n }\r\n };\r\n\r\n isDashPage () {\r\n return this.getPageType() === 'dashboardPage'\r\n };\r\n\r\n getPageType () {\r\n if (typeof (window) === 'undefined') {\r\n return 'navbarPage'\r\n } else {\r\n return $('#settings-page_type input:radio:checked').val()\r\n }\r\n };\r\n\r\n addPage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n if (tab_value === '') {\r\n tab_value = tab_name\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n this.addMenuItem(tab_name, tab_value)\r\n } else {\r\n this.addTab(tab_name, tab_value)\r\n }\r\n };\r\n\r\n addTab (tab_name, tab_value) {\r\n const nav_panel = $('.component-container>.tabbable>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container>.tabbable>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
          • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
          • \r\n `)\r\n\r\n tab_panel.append(`\r\n
            \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n addMenuItem (tab_name, tab_value) {\r\n const nav_panel = $('.component-container .card-header>.nav')\r\n const nav_id = nav_panel.data('tabsetid')\r\n\r\n const tab_panel = $('.component-container .card-body>.tab-content')\r\n const active_class = tab_panel.children().length === 0 ? 'active' : ''\r\n\r\n const tab_icon = $('#sidebar-tabset-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-tabset-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n nav_panel.append(`\r\n
          • \r\n \r\n ${icon_html}\r\n ${tab_name}\r\n \r\n
          • \r\n `)\r\n\r\n tab_panel.append(`\r\n
            \r\n `)\r\n\r\n this.enableSortablePage(`tab-${nav_id}-${this._item}`)\r\n this._item = this._item + 1\r\n };\r\n\r\n enableSortablePage (id) {\r\n Sortable.create(document.getElementById(id), {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n })\r\n };\r\n\r\n checkDuplicateNames (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
            \r\n ${tab_name} is the name of an existing menu item. Please choose a unique name\r\n \r\n
            \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getNameIdentifier (tab_name) {\r\n return `.component-container .nav a[data-name='${tab_name}']`\r\n };\r\n\r\n checkDuplicateIDs (tab_value) {\r\n if ($(this.getValueIdentifier(tab_value)).length > 0) {\r\n $('#sidebar-tabset-alert').html(`\r\n
            \r\n ${tab_value} is the ID of an existing menu item. Please choose a unique ID\r\n \r\n
            \r\n `)\r\n return true\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n getValueIdentifier (tab_value) {\r\n return `.component-container .nav a[data-value='${tab_value}']`\r\n };\r\n\r\n deletePage () {\r\n const tab_name = $('#sidebar-tabset-name').val()\r\n let tab_value = $('#sidebar-tabset-value').val()\r\n\r\n if (this.checkMissingName(tab_name)) {\r\n return true\r\n } else if ($(this.getNameIdentifier(tab_name)).length > 1 && tab_value === '') {\r\n $('#sidebar-tabset-alert').html(`\r\n
            \r\n Duplicate tabs contain the name \"${tab_name}\" and no value has been provided. Please provide the specific ID of the tab to delete.\r\n \r\n
            \r\n `)\r\n return true\r\n }\r\n\r\n $('#sidebar-tabset-alert div').alert('close')\r\n\r\n if (this.isDashPage()) {\r\n if (tab_value === '') {\r\n tab_value = $(`.component-container .nav-item a[data-name='${tab_name}']`).attr('href')\r\n } else {\r\n tab_value = '#' + $(`.component-container .tab-pane[data-value='${tab_value}']`).attr('id')\r\n }\r\n this.deleteMenuItem(tab_value)\r\n } else {\r\n tab_value = tab_value === '' ? $(`.component-container ul.nav a[data-name='${tab_name}']`).data('value') : tab_value\r\n this.deleteTab(tab_value)\r\n }\r\n };\r\n\r\n deleteTab (tab_value) {\r\n $(`.component-container .nav a[data-value='${tab_value}']`).parent().remove()\r\n $(`.component-container .tab-content .tab-pane[data-value='${tab_value}']`).remove()\r\n };\r\n\r\n deleteMenuItem (tab_value) {\r\n $(`.component-container .nav-item a[href='${tab_value}']`).parent().remove()\r\n $(`${tab_value}`).remove()\r\n };\r\n\r\n checkMissingName (tab_name) {\r\n if ($(this.getNameIdentifier(tab_name)).length > 0) {\r\n return false\r\n } else {\r\n $('#sidebar-tabset-alert').html(`\r\n
            \r\n Unable to find a tab with the name \"${tab_name}\"\r\n \r\n
            \r\n `)\r\n return true\r\n }\r\n };\r\n\r\n getTabID () {\r\n return Math.round(Math.random() * 8999 + 1000)\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Box extends Component {\r\n has_card_body = true\r\n html = `\r\n
            \r\n
            \r\n
            \r\n

            $label$

            \r\n
            \r\n \r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-box-label').val()\r\n\r\n const width = $('#sidebar-box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class UserBox extends Component {\r\n has_card_body = true\r\n html = `\r\n
            \r\n
            \r\n
            \r\n
            \r\n \r\n
            \r\n

            $label$

            \r\n
            \r\n
            \r\n \"User\r\n
            \r\n
            \r\n
            \r\n
            \r\n
            \r\n `\r\n\r\n sortable_settings = {\r\n group: {\r\n name: 'shared',\r\n put: function (_to, _from, clone) {\r\n return !clone.classList.contains('col-sm')\r\n }\r\n }\r\n }\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const label = $('#sidebar-user_box-label').val()\r\n\r\n const width = $('#sidebar-user_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const colour = $('#sidebar-user_box-colour').val()\r\n const colour_class = colour === 'white' ? '' : `card-outline card-${colour}`\r\n\r\n const background = $('#sidebar-user_box-background').val()\r\n const background_class = background === 'white' ? '' : `bg-${background}`\r\n\r\n const type = $('#sidebar-user_box-type').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n label,\r\n width_class,\r\n width_r,\r\n colour,\r\n colour_class,\r\n background,\r\n background_class,\r\n type\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class ValueBox extends Component {\r\n html = `\r\n
            \r\n
            \r\n
            \r\n $value$\r\n

            \r\n $label$\r\n

            \r\n
            \r\n $icon_html$\r\n
            \r\n
            \r\n
            \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-value_box-value').val()\r\n const label = $('#sidebar-value_box-label').val()\r\n\r\n const width = $('#sidebar-value_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-value_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-value_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : `
            `\r\n\r\n const background = $('#sidebar-value_box-background').val()\r\n const background_class = `bg-${background}`\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: background_class\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class InfoBox extends Component {\r\n html = `\r\n
            \r\n
            \r\n \r\n $icon_html$\r\n \r\n
            \r\n $label$\r\n $value$\r\n
            \r\n
            \r\n
            \r\n
            \r\n `\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const value = $('#sidebar-info_box-value').val()\r\n const label = $('#sidebar-info_box-label').val()\r\n\r\n const width = $('#sidebar-info_box-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n const tab_icon = $('#sidebar-info_box-icon').val()\r\n const icon_r = tab_icon === '' ? '' : `, icon = icon("${tab_icon}")`\r\n const icon_class = tab_icon === '' ? '' : $('#sidebar-info_box-icon option').html().includes('fab') ? 'fab' : 'fa'\r\n const icon_html = tab_icon === '' ? '' : ``\r\n\r\n const background = $('#sidebar-info_box-background').val()\r\n const background_class = `bg-${background}`\r\n const fill_box = document.getElementById('sidebar-info_box-fill').checked\r\n const fill_r = fill_box ? ', fill = TRUE' : ''\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n value,\r\n label,\r\n width_class,\r\n width_r,\r\n icon_html,\r\n icon_r,\r\n colour: background,\r\n colour_class: fill_box ? background_class : '',\r\n colour_class2: fill_box ? '' : background_class,\r\n fill_r\r\n })\r\n };\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class BlockQuote extends Component {\r\n html = '
            $value$
            '\r\n\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const colour = $('#sidebar-quote-colour').val()\r\n const value = $('#sidebar-quote-textarea').val()\r\n\r\n return this.replaceHTMLPlaceholders(this.html, { colour, value })\r\n }\r\n}\r\n", "import { Component } from './Component'\r\n\r\nexport class Callout extends Component {\r\n html = `\r\n
            \r\n
            \r\n
            $title$
            \r\n $value$\r\n
            \r\n `\r\n constructor () {\r\n super()\r\n this.updateComponent(true)\r\n }\r\n\r\n createComponent () {\r\n const title = $('#sidebar-callout-label').val()\r\n const status = $('#sidebar-callout-colour').val()\r\n const value = $('#sidebar-callout-textarea').val()\r\n\r\n const width = $('#sidebar-callout-width_num').val()\r\n const width_class = width > 0 ? `col-sm col-sm-${width}` : ''\r\n const width_r = width > 0 ? width : 'NULL'\r\n\r\n return this.replaceHTMLPlaceholders(this.html, {\r\n title,\r\n status,\r\n value,\r\n width_r,\r\n width_class\r\n })\r\n }\r\n}\r\n", "import { Header } from './Header'\r\nimport { Row } from './Row'\r\nimport { Column } from './Column'\r\nimport { Text } from './Text'\r\nimport { InputPanel } from './InputPanel'\r\nimport { Input } from './Input'\r\nimport { FileInput } from './FileInput'\r\nimport { SelectInput } from './SelectInput'\r\nimport { DateInput } from './DateInput'\r\nimport { CheckboxInput } from './Checkbox'\r\nimport { CheckboxGroupInput } from './CheckboxGroup'\r\nimport { SliderInput } from './SliderInput'\r\nimport { Button } from './Button'\r\nimport { Output } from './Output'\r\nimport { Tab } from './Tab'\r\nimport { Tabset } from './Tabset'\r\nimport { Box } from './Box'\r\nimport { UserBox } from './UserBox'\r\nimport { ValueBox } from './ValueBox'\r\nimport { InfoBox } from './InfoBox'\r\nimport { BlockQuote } from './BlockQuote'\r\nimport { Callout } from './Callout'\r\n\r\nexport function getComponent (name) {\r\n if (name === 'header') {\r\n return new Header()\r\n } else if (name === 'row') {\r\n return new Row()\r\n } else if (name === 'column') {\r\n return new Column()\r\n } else if (name === 'text') {\r\n return new Text()\r\n } else if (name === 'input_panel') {\r\n return new InputPanel()\r\n } else if (['text_input', 'numeric', 'textarea', 'password'].includes(name)) {\r\n return new Input(name)\r\n } else if (name === 'dropdown') {\r\n return new SelectInput()\r\n } else if (name === 'file') {\r\n return new FileInput()\r\n } else if (name === 'date') {\r\n return new DateInput()\r\n } else if (name === 'checkbox') {\r\n return new CheckboxInput()\r\n } else if (name === 'radio') {\r\n return new CheckboxGroupInput()\r\n } else if (name === 'slider') {\r\n return new SliderInput()\r\n } else if (name === 'button') {\r\n return new Button()\r\n } else if (name === 'output') {\r\n return new Output()\r\n } else if (name === 'tab_panel') {\r\n return new Tab()\r\n } else if (name === 'tabset') {\r\n return new Tabset()\r\n } else if (name === 'box') {\r\n return new Box()\r\n } else if (name === 'user_box') {\r\n return new UserBox()\r\n } else if (name === 'value_box') {\r\n return new ValueBox()\r\n } else if (name === 'info_box') {\r\n return new InfoBox()\r\n } else if (name === 'quote') {\r\n return new BlockQuote()\r\n } else if (name === 'callout') {\r\n return new Callout()\r\n }\r\n\r\n return new Header()\r\n}\r\n", "import { getComponent } from './utils'\r\nimport { component } from './Component'\r\n\r\nexport function initComponents () {\r\n getComponent('header')\r\n\r\n $('.component-settings').on('change keyup', () => component.updateComponent())\r\n $('.component-comments').on('change blur', () => component.updateComponent())\r\n $('.component-container').on('mouseover', () => { $(':focus').trigger('blur') })\r\n\r\n $('.add-tab-button').on('click', () => component.addPage())\r\n $('.delete-tab-button').on('click', () => component.deletePage())\r\n\r\n $('.accordion .card-header .btn').on('click', (el) => {\r\n $(el.target).closest('.card').find('form').trigger('reset')\r\n\r\n const new_component = $(el.target).data('shinyelement')\r\n getComponent(new_component)\r\n document.getElementById('sidebar-container').style.display = new_component === 'tab_panel' ? 'none' : null\r\n })\r\n};\r\n", "export function htmlToJSON (el, inner = false) {\r\n const children = getChildrenJSON(el)\r\n\r\n const jsonElement = {\r\n tagName: el.tagName.toLowerCase(),\r\n r_function: el.dataset.shinyfunction,\r\n r_arguments: el.dataset.shinyattributes,\r\n r_comments: el.dataset.shinycomments,\r\n text: $(el).ignore().text().replace(/\\s*\\n\\s*/g, ''),\r\n htmlclass: el.className,\r\n children\r\n }\r\n\r\n if (inner) {\r\n return jsonElement\r\n } else {\r\n return JSON.stringify(jsonElement)\r\n }\r\n};\r\n\r\n$.fn.ignore = function (sel) {\r\n return this.clone().find(sel || '>*').remove().end()\r\n}\r\n\r\nfunction getChildrenJSON (el) {\r\n let children = []\r\n for (let i = 0; i < el.children.length; i++) {\r\n if (el.children[i].dataset.shinyfunction) {\r\n children.push(htmlToJSON(el.children[i], true))\r\n } else if (el.children[i].children.length) {\r\n const childContent = getChildrenJSON(el.children[i])\r\n if (childContent.length > 0) {\r\n children = children.concat(childContent)\r\n }\r\n }\r\n }\r\n return children\r\n};\r\n", "import { htmlToJSON } from './utils'\r\n\r\nexport const canvasPageBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasPageBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas')\r\n },\r\n getValue: function (el) {\r\n return htmlToJSON(document.getElementById('canvas-page'))\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas')\r\n }\r\n})\r\n", "import { page, createPage } from '../page/utils'\r\nimport { Column } from '../component/Column'\r\nimport { Row } from '../component/Row'\r\nimport { InputPanel } from '../component/InputPanel'\r\n\r\nexport const canvasBinding = new Shiny.InputBinding()\r\n\r\n$.extend(canvasBinding, {\r\n find: function (scope) {\r\n return $(scope).find('.page-canvas-shell')\r\n },\r\n getValue: function (el) {\r\n return $(el).find('.page-canvas').html()\r\n },\r\n setValue: function (el, value) {\r\n $(el).find('.page-canvas').html(value)\r\n },\r\n subscribe: function (el, callback) {\r\n const observer = new MutationObserver(function () { callback() })\r\n observer.observe(el, { subtree: true, childList: true, attributes: true })\r\n },\r\n unsubscribe: function (el) {\r\n $(el).off('.page-canvas-shell')\r\n },\r\n receiveMessage (el, data) {\r\n $('.canvas-modal').css('display', 'none')\r\n\r\n createPage()\r\n page.updatePage()\r\n\r\n this.setValue(el, data)\r\n\r\n const sortableSettings = new Column(update_component = false).sortable_settings\r\n const sortableRowSettings = new Row(update_component = false).sortable_settings\r\n const sortableInputPanelSettings = new InputPanel(update_component = false).sortableSettings\r\n\r\n PARENT_DESIGNER_CLASSES.map(x => enableSortableComponent(x, sortableSettings))\r\n enableSortableComponent('designer-element row', sortableRowSettings)\r\n enableSortableComponent('designer-element shiny-input-panel', sortableInputPanelSettings)\r\n\r\n if (page.enable_on_load) {\r\n page.enableSortablePage('canvas-page')\r\n }\r\n page.updateComponentDropdown()\r\n }\r\n})\r\n\r\nconst PARENT_DESIGNER_CLASSES = ['tab-pane', 'designer-element col-sm', 'designer-element card-body']\r\n\r\nfunction enableSortableComponent (selector, settings) {\r\n document.getElementsByClassName(selector).forEach(el => {\r\n Sortable.create(el, settings)\r\n })\r\n}\r\n", "import { initPage } from '../page/init'\r\nimport { initSettings } from './settings'\r\nimport { screenshotSettings } from './screenshot'\r\nimport { initComponents } from '../component/init'\r\nimport { canvasPageBinding } from '../input/canvas-page-input'\r\nimport { canvasBinding } from '../input/canvas-canvas-input'\r\n\r\n$(function () {\r\n initPage()\r\n initComponents()\r\n initSettings()\r\n screenshotSettings()\r\n\r\n $('.help-icon').tooltip({ boundary: 'window', placement: 'right' })\r\n\r\n bsCustomFileInput.init()\r\n\r\n Sortable.create(document.getElementById('sidebar-bin'), {\r\n group: {\r\n name: 'shared',\r\n pull: false\r\n },\r\n handle: '.designer-element',\r\n draggable: '.designer-element',\r\n onAdd: function (evt) {\r\n this.el.removeChild(evt.item)\r\n }\r\n })\r\n})\r\n\r\nShiny.inputBindings.register(canvasPageBinding)\r\nShiny.inputBindings.register(canvasBinding)\r\n"], + "mappings": "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", "names": [] } diff --git a/srcjs/app/settings.js b/srcjs/app/settings.js index d1ca098..315edaa 100644 --- a/srcjs/app/settings.js +++ b/srcjs/app/settings.js @@ -3,12 +3,10 @@ export function initSettings () { $('.copy-ui-button').on('click', copyUICode) $('#settings-code-save').on('click', () => { $('#settings-code_button').trigger('click') }) - $('#settings-code-download').on('click', () => { - $('#settings-code_button').trigger('click') - Shiny.bindAll('#settings-code-download_confirm') - }) - $('#settings-code-download_confirm').on('click', () => { - Shiny.unbindAll('#settings-code-download_confirm') + $('#settings-code-download').on('click', () => { $('#settings-code_button').trigger('click') }) + $('#settings-code-options').on('click', () => { + const options_visiblity = $('#settings-code-options_fields').css('display') === 'none' ? '' : 'none' + $('#settings-code-options_fields').css({ display: options_visiblity }) }) $('#css_style').on('change', applyCustomStyle) From 3b798f21a4ba0db4ee71427714d3ad27c0f48d12 Mon Sep 17 00:00:00 2001 From: Ashley Baldry Date: Sun, 18 Jun 2023 16:15:38 +0100 Subject: [PATCH 3/5] Improve save options style --- R/mod_code_srv.R | 5 ++- R/mod_code_ui.R | 65 ++++++++++++++++++++++++--------------- inst/app/www/designer.css | 25 +++++++++++++-- 3 files changed, 67 insertions(+), 28 deletions(-) diff --git a/R/mod_code_srv.R b/R/mod_code_srv.R index 9bbdffb..f88e1bf 100644 --- a/R/mod_code_srv.R +++ b/R/mod_code_srv.R @@ -25,7 +25,10 @@ CodeModuleServer <- function(id, ui_code) { } ) - r_code <- reactive(jsonToRScript(ui_code())) + r_code <- reactive({ + module_name <- if (input$file_type == "ui") NULL else input$file_name + jsonToRScript(ui_code(), module_name = module_name) + }) output$code <- renderPrint(cat(r_code())) }) diff --git a/R/mod_code_ui.R b/R/mod_code_ui.R index 9ad04bd..f7db464 100644 --- a/R/mod_code_ui.R +++ b/R/mod_code_ui.R @@ -32,39 +32,54 @@ CodeModUI <- function(id) { actionButton( ns("save"), "Save As...", - shiny::icon("floppy-disk") + icon("floppy-disk") ) }, actionButton( ns("options"), - shiny::icon("cogs") + icon("cogs"), + title = "Saving options" ) - ) - ), + ), - tags$fieldset( - id = ns("options_fields"), - style = "display: none;", + tags$fieldset( + id = ns("options_fields"), + class = "save-code-options", + style = "display: none;", - shiny::radioButtons( - inputId = ns("file_type"), - label = "File Type", - choices = c("UI" = "ui", "Module" = "module"), - inline = TRUE - ), - conditionalPanel( - condition = "input.file_type === 'module'", - ns = ns, - tagList( - shiny::textInput( - inputId = ns("file_name"), - label = "Module Name" - ), - shiny::radioButtons( - inputId = ns("app_type"), - label = "App Structure", - choices = c("{golem}" = "golem", "{rhino}" = "rhino"), + tagAppendAttributes( + radioButtons( + inputId = ns("file_type"), + label = "File Type", + choices = c("UI" = "ui", "Module" = "module"), inline = TRUE + ), + class = "form-inline" + ), + conditionalPanel( + condition = "input.file_type === 'module'", + ns = ns, + tagList( + tagAppendAttributes( + textInput( + inputId = ns("file_name"), + label = "Module Name", + width = "100%", + value = "Template" + ), + class = "form-inline" + ), + if (interactive()) { + tagAppendAttributes( + radioButtons( + inputId = ns("app_type"), + label = "App Structure", + choices = c("{golem}" = "golem", "{rhino}" = "rhino"), + inline = TRUE + ), + class = "form-inline" + ) + } ) ) ) diff --git a/inst/app/www/designer.css b/inst/app/www/designer.css index c37d6b1..4560128 100644 --- a/inst/app/www/designer.css +++ b/inst/app/www/designer.css @@ -293,7 +293,28 @@ h5.modal-title { } #settings-code_dropdown { - max-height: 80vh; + max-height: 75vh; +} + +.show#settings-code_dropdown { + display: flex; + flex-direction: column; +} + +.save-code-options { + margin-top: 0.5rem; +} + +.save-code-options .form-inline>label { + margin-right: 0.5rem; +} + +.save-code-options .shiny-options-group { + display: flex; +} + +.save-code-options input[type="radio"] { + margin-right: 0.25rem; } .code-ui-form { @@ -311,7 +332,7 @@ h5.modal-title { .code-output { overflow-y: auto; - height: 75vh; + min-height: 20vh; margin-bottom: -0.5rem; } From ae287897533d309c02b7165bb86aff34c9cfdb51 Mon Sep 17 00:00:00 2001 From: Ashley Baldry Date: Sun, 18 Jun 2023 16:22:15 +0100 Subject: [PATCH 4/5] Allow custom ui.R file name --- R/mod_code_srv.R | 18 ++++++++++++++---- R/mod_code_ui.R | 32 ++++++++++++++++---------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/R/mod_code_srv.R b/R/mod_code_srv.R index f88e1bf..463c206 100644 --- a/R/mod_code_srv.R +++ b/R/mod_code_srv.R @@ -6,6 +6,15 @@ CodeModuleServer <- function(id, ui_code) { setBookmarkExclude(c("save", "download", "file_type", "file_name", "options")) ns <- session$ns + observeEvent(input$file_type, { + updateTextInput( + session = session, + inputId = "file_name", + label = switch(input$file_type, "ui" = "File Name", "module" = "Module Name"), + value = switch(input$file_type, "ui" = "ui.R", "module" = "Template"), + ) + }) + observeEvent(input$save, ignoreInit = TRUE, { writeToUI(ui_code(), input$file_type, input$file_name, input$app_type) }) @@ -13,7 +22,7 @@ CodeModuleServer <- function(id, ui_code) { output$download <- downloadHandler( filename = function() { if (input$file_type == "ui") { - "ui.R" + input$file_name } else { paste0("mod_", tolower(gsub("\\W", "_", input$file_name)), "_ui.R") } @@ -39,13 +48,14 @@ writeToUI <- function(code, file_type = c("ui", "module"), module_name = NULL, file_type <- match.arg(file_type) app_type <- match.arg(app_type) + r_dir <- if (app_type == "golem") "R" else "app/view" + if (!file.exists(r_dir)) dir.create(r_dir, recursive = TRUE) + if (file_type == "ui") { r_code <- jsonToRScript(code) - file_name <- "ui.R" + file_name <- file.path(r_dir, module_name) } else { r_code <- jsonToRScript(code, module_name = module_name) - r_dir <- if (app_type == "golem") "R" else "app/view" - if (!file.exists(r_dir)) dir.create(r_dir, recursive = TRUE) file_name <- file.path(r_dir, paste0("mod_", tolower(gsub(" ", "_", module_name)), "_ui.R")) } diff --git a/R/mod_code_ui.R b/R/mod_code_ui.R index f7db464..32b6e0e 100644 --- a/R/mod_code_ui.R +++ b/R/mod_code_ui.R @@ -56,20 +56,20 @@ CodeModUI <- function(id) { ), class = "form-inline" ), - conditionalPanel( - condition = "input.file_type === 'module'", - ns = ns, - tagList( - tagAppendAttributes( - textInput( - inputId = ns("file_name"), - label = "Module Name", - width = "100%", - value = "Template" - ), - class = "form-inline" - ), - if (interactive()) { + tagAppendAttributes( + textInput( + inputId = ns("file_name"), + label = "File Name", + width = "100%", + value = "ui.R" + ), + class = "form-inline" + ), + tagList( + if (interactive()) { + conditionalPanel( + condition = "input.file_type === 'module'", + ns = ns, tagAppendAttributes( radioButtons( inputId = ns("app_type"), @@ -79,8 +79,8 @@ CodeModUI <- function(id) { ), class = "form-inline" ) - } - ) + ) + } ) ) ), From c1901cb79cdacdc79b2b5645bdfc2d70e23d7bfb Mon Sep 17 00:00:00 2001 From: Ashley Baldry Date: Sun, 18 Jun 2023 16:44:09 +0100 Subject: [PATCH 5/5] Update code to reflect application type --- R/json_to_rscript.R | 34 ++++++++++++++++++++++++++++------ R/mod_code_srv.R | 6 +++--- R/mod_code_ui.R | 24 ++++++++---------------- 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/R/json_to_rscript.R b/R/json_to_rscript.R index c006499..a4f52cf 100644 --- a/R/json_to_rscript.R +++ b/R/json_to_rscript.R @@ -6,18 +6,21 @@ #' #' @param json A string containing JSON code of the "App UI" page #' @param module_name Optional string the allows the function to be written as a module +#' @param app_type Structure of the application. Either `app`, with an app.R/ui.R and server.R, +#' `golem` or `rhino` with the relevant project structure. #' #' @return A string that can be written to a \code{ui.R} file #' #' @noRd -jsonToRScript <- function(json, module_name = NULL) { +jsonToRScript <- function(json, module_name = NULL, app_type = c("app", "golem", "rhino")) { if (is.null(json)) return("") valid_json <- jsonlite::validate(json) if (valid_json) { + app_type <- match.arg(app_type) html_list <- jsonlite::fromJSON(json, simplifyDataFrame = FALSE) - htmlToRScript(html_list, module_name = module_name) + htmlToRScript(html_list, module_name = module_name, app_type = app_type) } else { message(attr(valid_json, "err"), "Returning NA") NA_character_ @@ -37,10 +40,11 @@ jsonToRScript <- function(json, module_name = NULL) { #' @return A string that can be written to a \code{ui.R} file #' #' @noRd -htmlToRScript <- function(html_list, indent = 0L, module_name = NULL) { +htmlToRScript <- function(html_list, indent = 0L, module_name = NULL, app_type = c("app", "golem", "rhino")) { if (is.null(html_list$r_function)) return("") + app_type <- match.arg(app_type) - module_home <- indent == 0L && is.character(module_name) + module_home <- indent == 0L && (is.character(module_name) || app_type != "app") indent_space <- paste0(rep(" ", indent), collapse = "") indent_text_space <- paste0(rep(" ", indent + 2L), collapse = "") @@ -80,9 +84,27 @@ htmlToRScript <- function(html_list, indent = 0L, module_name = NULL) { r_comments <- paste0(indent_space, "# ", strsplit(html_list$r_comments, "\n")[[1L]], "\n", collapse = "") } - if (module_home) { + if (module_home && is.character(module_name)) { r_comments <- paste0("#' ", module_name, " Module\n#' @export\n") - rfunc <- paste0(gsub("\\W", "", tools::toTitleCase(module_name)), "UI <- function(id) {\n tagList(\n") + if (app_type == "rhino") { + pkgs <- c("shiny", if (html_list$r_function == "dashboardPage") "shinydashboard") + r_comments <- paste0("box::use(", toString(pkgs), ")\n\n", r_comments) + } + + rfunc <- paste0( + gsub("\\W", "", tools::toTitleCase(module_name)), + "UI <- function(id) {\n tagList(\n" + ) + rfunc_arguments <- NULL + rfunc_end <- " )\n}" + } else if (module_home) { + r_comments <- paste0("#' Application UI \n#' @export\n") + if (app_type == "rhino") { + pkgs <- c("shiny", if (html_list$r_function == "dashboardPage") "shinydashboard") + r_comments <- paste0("box::use(", toString(pkgs), ")\n\n", r_comments) + } + + rfunc <- paste0("AppUI <- function(id) {\n ", html_list$r_function, "(\n") rfunc_arguments <- NULL rfunc_end <- " )\n}" } else { diff --git a/R/mod_code_srv.R b/R/mod_code_srv.R index 463c206..f040c9c 100644 --- a/R/mod_code_srv.R +++ b/R/mod_code_srv.R @@ -36,7 +36,7 @@ CodeModuleServer <- function(id, ui_code) { r_code <- reactive({ module_name <- if (input$file_type == "ui") NULL else input$file_name - jsonToRScript(ui_code(), module_name = module_name) + jsonToRScript(ui_code(), module_name = module_name, app_type = input$app_type) }) output$code <- renderPrint(cat(r_code())) @@ -44,11 +44,11 @@ CodeModuleServer <- function(id, ui_code) { } writeToUI <- function(code, file_type = c("ui", "module"), module_name = NULL, - app_type = c("golem", "rhino")) { + app_type = c("app", "golem", "rhino")) { file_type <- match.arg(file_type) app_type <- match.arg(app_type) - r_dir <- if (app_type == "golem") "R" else "app/view" + r_dir <- switch(app_type, "app" = ".", "golem" = "R", "rhino" = "app/view") if (!file.exists(r_dir)) dir.create(r_dir, recursive = TRUE) if (file_type == "ui") { diff --git a/R/mod_code_ui.R b/R/mod_code_ui.R index 32b6e0e..85825ee 100644 --- a/R/mod_code_ui.R +++ b/R/mod_code_ui.R @@ -65,22 +65,14 @@ CodeModUI <- function(id) { ), class = "form-inline" ), - tagList( - if (interactive()) { - conditionalPanel( - condition = "input.file_type === 'module'", - ns = ns, - tagAppendAttributes( - radioButtons( - inputId = ns("app_type"), - label = "App Structure", - choices = c("{golem}" = "golem", "{rhino}" = "rhino"), - inline = TRUE - ), - class = "form-inline" - ) - ) - } + tagAppendAttributes( + radioButtons( + inputId = ns("app_type"), + label = "App Structure", + choices = c("Stanard" = "app", "{golem}" = "golem", "{rhino}" = "rhino"), + inline = TRUE + ), + class = "form-inline" ) ) ),