diff --git a/NAMESPACE b/NAMESPACE index 5a9b78e3d..4e9f931ff 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -167,6 +167,7 @@ export(toolbar) export(toolbar_divider) export(toolbar_input_button) export(toolbar_input_select) +export(toolbar_input_switch) export(toolbar_spacer) export(tooltip) export(update_code_editor) @@ -176,6 +177,7 @@ export(update_switch) export(update_task_button) export(update_toolbar_input_button) export(update_toolbar_input_select) +export(update_toolbar_input_switch) export(update_tooltip) export(value_box) export(value_box_theme) diff --git a/R/sysdata.rda b/R/sysdata.rda index a9b80cc68..49b8b0f26 100644 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/R/toolbar.R b/R/toolbar.R index d36243ca5..471d6863b 100644 --- a/R/toolbar.R +++ b/R/toolbar.R @@ -960,3 +960,128 @@ toolbar_divider <- function(..., width = NULL, gap = NULL) { toolbar_spacer <- function() { div(class = "bslib-toolbar-spacer") } + + +#' Toolbar Input Switch +#' +#' @description +#' Create a switch input control suitable for use within a [toolbar()]. This is +#' a convenience wrapper around [input_switch()] with sensible defaults for +#' toolbar contexts. +#' +#' @section Updating toolbar switches: +#' +#' You can dynamically update a toolbar switch using [update_toolbar_input_switch()], +#' which is a convenience wrapper around [update_switch()]. This allows you to +#' update the switch's label and value from the server. +#' +#' For example: +#' +#' ```r +#' library(shiny) +#' library(bslib) +#' +#' ui <- page_fluid( +#' card( +#' card_header( +#' "Settings", +#' toolbar( +#' align = "right", +#' toolbar_input_switch( +#' id = "auto_save", +#' label = "Auto-save", +#' value = FALSE +#' ) +#' ) +#' ), +#' card_body( +#' actionButton("toggle", "Toggle Auto-save"), +#' verbatimTextOutput("status") +#' ) +#' ) +#' ) +#' +#' server <- function(input, output, session) { +#' output$status <- renderPrint({ +#' list(auto_save = input$auto_save) +#' }) +#' +#' observeEvent(input$toggle, { +#' update_toolbar_input_switch( +#' "auto_save", +#' value = !input$auto_save +#' ) +#' }) +#' } +#' +#' shinyApp(ui, server) +#' ``` +#' +#' @examplesIf rlang::is_interactive() +#' # Basic toolbar with switches +#' toolbar( +#' align = "right", +#' toolbar_input_switch(id = "notifications", label = "Notifications", value = TRUE), +#' toolbar_divider(), +#' toolbar_input_switch(id = "dark_mode", label = "Dark Mode", value = FALSE) +#' ) +#' +#' # Switch in card header +#' card( +#' card_header( +#' "Chart Options", +#' toolbar( +#' align = "right", +#' toolbar_input_switch(id = "show_legend", label = "Show Legend", value = TRUE), +#' toolbar_input_switch(id = "show_grid", label = "Show Grid", value = TRUE) +#' ) +#' ), +#' card_body("Chart content here") +#' ) +#' +#' # Switch with toolbar_spacer for alignment +#' toolbar( +#' width = "100%", +#' "Enable feature", +#' toolbar_spacer(), +#' toolbar_input_switch(id = "feature", label = "Enable feature", value = FALSE) +#' ) +#' +#' @inheritParams input_switch +#' +#' @return Returns a switch input suitable for use in a toolbar. +#' +#' @describeIn toolbar_input_switch Create a toolbar switch input. +#' @family toolbar components +#' @export +toolbar_input_switch <- function( + id, + label = NULL, + value = FALSE +) { + input_switch( + id = id, + label = label, + value = value, + width = NULL + ) +} + +#' @param session A Shiny session object (the default should almost always be +#' used). +#' +#' @describeIn toolbar_input_switch Update a toolbar switch input. +#' @export +update_toolbar_input_switch <- function( + id, + label = NULL, + value = NULL, + session = get_current_session() +) { + update_switch( + id = id, + label = label, + value = value, + session = session + ) +} diff --git a/inst/components/dist/code-editor.js b/inst/components/dist/code-editor.js index dd2bf22df..ee43d0403 100644 --- a/inst/components/dist/code-editor.js +++ b/inst/components/dist/code-editor.js @@ -1,4 +1,4 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); diff --git a/inst/components/dist/code-editor.min.js b/inst/components/dist/code-editor.min.js index d1aedff83..d135b47fc 100644 --- a/inst/components/dist/code-editor.min.js +++ b/inst/components/dist/code-editor.min.js @@ -1,3 +1,3 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ var O=(n,r,e)=>{if(!r.has(n))throw TypeError("Cannot "+e)};var p=(n,r,e)=>(O(n,r,"read from private field"),e?e.call(n):r.get(n)),b=(n,r,e)=>{if(r.has(n))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(n):r.set(n,e)},U=(n,r,e,t)=>(O(n,r,"write to private field"),t?t.call(n,e):r.set(n,e),e);var m=(n,r,e)=>(O(n,r,"access private method"),e);var h=(n,r,e)=>new Promise((t,i)=>{var s=a=>{try{l(e.next(a))}catch(g){i(g)}},u=a=>{try{l(e.throw(a))}catch(g){i(g)}},l=a=>a.done?t(a.value):Promise.resolve(a.value).then(s,u);l((e=e.apply(n,r)).next())});function R(n,{type:r=null}={}){if(!window.Shiny)return;class e extends window.Shiny.InputBinding{constructor(){super()}find(i){return $(i).find(n)}getValue(i){return"getValue"in i?i.getValue():i.value}getType(i){return r}subscribe(i,s){i.onChangeCallback=s}unsubscribe(i){i.onChangeCallback=s=>{}}receiveMessage(i,s){i.receiveMessage(i,s)}}window.Shiny.inputBindings.register(new e,`${n}-Binding`)}var E=window.Shiny,ee=E?E.InputBinding:class{};function P({headline:n="",message:r,status:e="warning"}){document.dispatchEvent(new CustomEvent("shiny:client-message",{detail:{headline:n,message:r,status:e}}))}function c(n,r){return Object.prototype.hasOwnProperty.call(n,r)&&n[r]!==void 0}function X(...n){return h(this,null,function*(){if(!E)throw new Error("This function must be called in a Shiny app.");return E.renderContentAsync?yield E.renderContentAsync.apply(null,n):yield E.renderContent.apply(null,n)})}function j(n,r){return h(this,null,function*(){if(typeof n!="undefined"){if(r.length!==1)throw new Error("labelNode must be of length 1");typeof n=="string"&&(n={html:n,deps:[]}),n.html===""?r.addClass("shiny-label-null"):(yield X(r,n),r.removeClass("shiny-label-null"))}})}var q="plain",z=2,J="github-light",Q="github-dark",V=400,S,w,y,f,L,M,_,C,x,o=class extends HTMLElement{constructor(){super(...arguments);this.onChangeCallback=()=>{}}get language(){var e;return(e=this.getAttribute("language"))!=null?e:q}set language(e){this.setAttribute("language",e)}get readonly(){return this.hasAttribute("readonly")&&this.getAttribute("readonly")!=="false"}set readonly(e){this.setAttribute("readonly",String(e))}get lineNumbers(){return this.getAttribute("line-numbers")!=="false"}set lineNumbers(e){this.setAttribute("line-numbers",String(e))}get wordWrap(){return this.getAttribute("word-wrap")==="true"}set wordWrap(e){this.setAttribute("word-wrap",String(e))}get tabSize(){let e=this.getAttribute("tab-size"),t=e?parseInt(e):z;return isNaN(t)?z:t}set tabSize(e){this.setAttribute("tab-size",String(e))}get insertSpaces(){return this.getAttribute("insert-spaces")!=="false"}set insertSpaces(e){this.setAttribute("insert-spaces",String(e))}get themeLight(){var e;return(e=this.getAttribute("theme-light"))!=null?e:J}set themeLight(e){this.setAttribute("theme-light",e)}get themeDark(){var e;return(e=this.getAttribute("theme-dark"))!=null?e:Q}set themeDark(e){this.setAttribute("theme-dark",e)}get value(){var e,t;return(t=(e=this.prismEditor)==null?void 0:e.value)!=null?t:""}set value(e){this.prismEditor&&this.prismEditor.setOptions({value:e})}getValue(){if(this.prismEditor)return this.value}connectedCallback(){if(this.prismEditor)return;this.initPromise=this._initializeEditor(),this.initPromise.then(()=>{this.onChangeCallback(!1)}).catch(t=>{P({headline:"Code Editor Initialization Error",message:"An error occurred while initializing the code editor. See console for details.",status:"error"}),console.error("Failed to initialize code editor:",t)});let e=()=>this.onChangeCallback(!0);this.addEventListener("bslibCodeEditorUpdate",e)}disconnectedCallback(){var e,t;(e=this.darkLightObserver)==null||e.disconnect(),this.darkLightObserver=void 0,(t=this.readonlyTooltipCleanup)==null||t.call(this),this.readonlyTooltipCleanup=void 0}attributeChangedCallback(e,t,i){var u,l;if(t===i||!this.prismEditor)return;let s=this.prismEditor;switch(e){case"language":i&&(this.languageChangePromise=this._handleLanguageChange(i));break;case"readonly":{let a=i==="true";s.setOptions({readOnly:a}),a&&!this.readonlyTooltipCleanup?this._setupReadOnlyTooltip(s):!a&&this.readonlyTooltipCleanup&&(this.readonlyTooltipCleanup(),this.readonlyTooltipCleanup=void 0);break}case"line-numbers":s.setOptions({lineNumbers:i!=="false"});break;case"word-wrap":s.setOptions({wordWrap:i==="true"});break;case"tab-size":{let a=i?parseInt(i):z;isNaN(a)||s.setOptions({tabSize:a});break}case"insert-spaces":s.setOptions({insertSpaces:i!=="false"});break;case"theme-light":i&&m(u=o,C,x).call(u,i);break;case"theme-dark":i&&m(l=o,C,x).call(l,i);break;default:break}}_initializeEditor(){return h(this,null,function*(){var D,B,N;let e=this.querySelector(".code-editor");if(!e){P({headline:"Code Editor Initialization Error",message:"Expected to find `.code-editor` inside `` container element.",status:"error"});return}let t=this.language,i=(D=this.getAttribute("value"))!=null?D:"";this.removeAttribute("value");let s=this.readonly,u=this.lineNumbers,l=this.wordWrap,a=this.tabSize,g=this.insertSpaces,v=m(B=o,f,L).call(B);yield m(N=o,M,_).call(N,t);let[{createEditor:T},{copyButton:F},{defaultCommands:W}]=yield Promise.all([import(`${v}/index.js`),import(`${v}/extensions/copyButton/index.js`),import(`${v}/extensions/commands.js`)]),k=T(e,{language:t,value:i,tabSize:a,insertSpaces:g,lineNumbers:u,wordWrap:l,readOnly:s},F(),W()),A=k.keyCommandMap.Enter;k.keyCommandMap.Enter=(I,G,K)=>I.metaKey||I.ctrlKey?(this.dispatchEvent(new CustomEvent("bslibCodeEditorUpdate")),e.classList.add("code-editor-submit-flash"),setTimeout(()=>{e.classList.remove("code-editor-submit-flash")},V),!0):A==null?void 0:A(I,G,K),this.prismEditor=k,this.darkLightObserver=this._setupThemeWatcher();let H=this.querySelector("textarea");return H&&H.addEventListener("blur",()=>{this.dispatchEvent(new CustomEvent("bslibCodeEditorUpdate"))}),s&&this._setupReadOnlyTooltip(k),k})}_setupThemeWatcher(){let e=()=>{var l;let u=document.documentElement.getAttribute("data-bs-theme")==="dark"?this.themeDark:this.themeLight;m(l=o,C,x).call(l,u)};e();let t=new MutationObserver(()=>e());return t.observe(document.documentElement,{attributes:!0,attributeFilter:["data-bs-theme"]}),t}_handleLanguageChange(e){return h(this,null,function*(){var i;let t=this.prismEditor;if(t)try{yield m(i=o,M,_).call(i,e),t.setOptions({language:e}),t.update()}catch(s){P({headline:"Code Editor Language Load Error",message:`Failed to load language '${e}'. See console for details.`,status:"error"}),console.error(`Failed to load language '${e}':`,s)}})}_setupReadOnlyTooltip(e){return h(this,null,function*(){var t;try{let i=m(t=o,f,L).call(t),[{addTooltip:s},{cursorPosition:u}]=yield Promise.all([import(`${i}/tooltips.js`),import(`${i}/extensions/cursor.js`)]);u()(e);let l=document.createElement("div");l.className="code-editor-readonly-tooltip alert alert-danger",l.textContent="Cannot edit read-only editor.";let[a,g]=s(e,l,!1),v=()=>{this.classList.add("is-invalid"),a()},T=()=>{this.classList.remove("is-invalid"),g()};e.textarea.addEventListener("beforeinput",v,!0),e.on("selectionChange",T),e.textarea.addEventListener("click",T),this.readonlyTooltipCleanup=()=>{e.textarea.removeEventListener("beforeinput",v,!0),e.textarea.removeEventListener("click",T),g()}}catch(i){console.error("Failed to setup read-only tooltip:",i)}})}receiveMessage(e,t){return h(this,null,function*(){var i;if(this.initPromise&&(yield this.initPromise),!this.prismEditor){P({headline:"Code Editor could not update",message:"An update was ignored because the editor is not yet initialized.",status:"warning"});return}if(c(t,"value")&&(this.value=(i=t.value)!=null?i:""),c(t,"label")){let s=$(this).find("label");yield j(t.label,s)}c(t,"tab_size")&&t.tab_size!==void 0&&(this.tabSize=t.tab_size),c(t,"indentation")&&(this.insertSpaces=t.indentation==="space"),c(t,"read_only")&&t.read_only!==void 0&&(this.readonly=t.read_only),c(t,"line_numbers")&&t.line_numbers!==void 0&&(this.lineNumbers=t.line_numbers),c(t,"word_wrap")&&t.word_wrap!==void 0&&(this.wordWrap=t.word_wrap),c(t,"language")&&t.language&&(this.language=t.language,this.languageChangePromise&&(yield this.languageChangePromise,this.languageChangePromise=void 0)),c(t,"theme_light")&&t.theme_light&&(this.themeLight=t.theme_light),c(t,"theme_dark")&&t.theme_dark&&(this.themeDark=t.theme_dark),this.dispatchEvent(new CustomEvent("bslibCodeEditorUpdate"))})}},d=o;S=new WeakMap,w=new WeakMap,y=new WeakMap,f=new WeakSet,L=function(){if(p(o,y)!==null)return p(o,y);let e=document.querySelector('script[src*="prism-code-editor"][src$="index.js"]');if(!e)throw new Error("Could not find prism-code-editor script element. Ensure the prism-code-editor dependency is properly loaded.");let t=e.getAttribute("src");if(!t)throw new Error("prism-code-editor script element has no src attribute");let i=new URL(t,document.baseURI).href;return U(o,y,i.replace(/\/index\.js$/,"")),p(o,y)},M=new WeakSet,_=function(e){return h(this,null,function*(){var s;if(p(o,S).has(e)||["plain","plaintext","text","txt"].includes(e))return;let t=e;e==="html"&&(t="markup"),yield import(`${m(s=o,f,L).call(s)}/prism/languages/${t}.js`),p(o,S).add(e)})},C=new WeakSet,x=function(e){var u;if(p(o,w).has(e))return;let t=`code-editor-theme-${e}`;if(document.getElementById(t)){p(o,w).add(e);return}let i=m(u=o,f,L).call(u),s=document.createElement("link");s.id=t,s.rel="stylesheet",s.href=`${i}/themes/${e}.css`,s.addEventListener("load",()=>{p(o,w).add(e)}),s.addEventListener("error",()=>{console.error(`Failed to load code editor theme: ${e}`)}),document.head.appendChild(s)},b(d,f),b(d,M),b(d,C),d.tagName="bslib-code-editor",d.isShinyInput=!0,d.observedAttributes=["language","readonly","line-numbers","word-wrap","tab-size","insert-spaces","theme-light","theme-dark"],b(d,S,new Set),b(d,w,new Set),b(d,y,null);customElements.define(d.tagName,d);window.Shiny&&R(d.tagName);export{d as BslibCodeEditor}; //# sourceMappingURL=code-editor.min.js.map diff --git a/inst/components/dist/components.css b/inst/components/dist/components.css index 9d110ca80..f7bf63fee 100644 --- a/inst/components/dist/components.css +++ b/inst/components/dist/components.css @@ -1 +1 @@ -.accordion .accordion-header{font-size:calc(1.325rem + .9vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media (min-width: 1200px){.accordion .accordion-header{font-size:2rem}}.accordion .accordion-icon:not(:empty){margin-right:0.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen="true"]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header{display:flex;flex-direction:row;align-items:center;align-self:stretch;min-height:2.5rem;padding-block:calc(var(--bs-card-cap-padding-y) / 2);gap:0.25rem}.bslib-card .card-header>.nav{flex:1;min-width:0}.bslib-card .card-header>.bslib-nav-spacer{margin-left:auto}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border="true"]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius="true"]){border-top-left-radius:0;border-top-right-radius:0}.bslib-card[data-full-screen="true"]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,0.15);margin:0.2rem 0.4rem;padding:0.55rem !important;font-size:.8rem;cursor:pointer;opacity:0;z-index:1070}.card:hover>*>.bslib-full-screen-enter,.card:focus-within>*>.bslib-full-screen-enter{opacity:0.6}.card:hover>*>.bslib-full-screen-enter:hover,.card:hover>*>.bslib-full-screen-enter:focus,.card:focus-within>*>.bslib-full-screen-enter:hover,.card:focus-within>*>.bslib-full-screen-enter:focus{opacity:1}.card[data-full-screen="false"]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .bslib-full-screen-enter{display:none !important}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:0.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:0.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}@media (max-width: 575.98px){.bslib-card[data-full-screen="true"]{inset:2.5rem 0.5rem 0.5rem}.bslib-full-screen-exit{top:0.75rem;margin-right:1.25rem}}.bslib-grid{--_item-column-span: 1;display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid>*{grid-column:auto/span var(--_item-column-span, 1)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media (min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media (min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media (min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media (min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media (min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}bslib-layout-columns.bslib-grid{--_item-column-span: 6}bslib-layout-columns[hidden-until-init]>*{display:none}@media (max-width: 767.98px){bslib-layout-columns:where(.bslib-grid)>*{grid-column:1 / -1}}@media (max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important}}.bslib-input-submit-textarea{margin:0 auto}.bslib-submit-textarea-container{display:flex;flex-direction:column;gap:0.5rem;padding:0.5rem;border:var(--bs-border-width, 1px) solid var(--bs-gray-500, #ced4da);border-radius:var(--bs-border-radius-sm, 4px);background-color:var(--bs-body-bg, white);transition:border-color 0.2s, box-shadow 0.2s}.bslib-submit-textarea-container:focus-within{border-color:var(--bs-primary, #007bff);box-shadow:0 0 0 var(--bs-focus-ring-width, 0.25rem) var(--bs-focus-ring-color, rgba(13,110,253,0.25))}.bslib-submit-textarea-container>textarea{border:none;resize:none;min-height:1rem;max-height:10rem;background-color:transparent;padding:0;color:var(--bs-body-color, #212529)}.bslib-submit-textarea-container>textarea:focus{outline:none;box-shadow:none}.bslib-submit-textarea-container>footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:0.5rem}.bslib-submit-textarea-container .bslib-submit-textarea-btn{margin-left:auto}.bslib-toolbar{display:flex;align-items:center;gap:0.25rem}.bslib-submit-key{border-radius:var(--bs-border-radius-sm, 4px);padding:0.25em 0.5em;font-weight:300;font-size:0.7em;vertical-align:0.15em}:not(.disabled) .bslib-submit-key{background-color:rgba(var(--bs-body-color-rgb, 0, 0, 0), 0.2)}@media (min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media (max-width: 575.98px){.bslib-flow-mobile>.html-fill-item{flex:0 0 auto}.bslib-flow-mobile.bslib-page-sidebar>.html-fill-item,.bslib-flow-mobile.bslib-page-navbar.has-page-sidebar>.html-fill-item{flex:1 1 auto}.bslib-flow-mobile.bslib-page-sidebar>.bslib-sidebar-layout>.main>.html-fill-item,.bslib-flow-mobile.bslib-page-navbar.has-page-sidebar>.html-fill-container>.bslib-sidebar-layout>.main>.html-fill-item{flex:0 0 auto}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border="true"]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius="true"]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}:root{--bslib-page-sidebar-title-bg: #202020;--bslib-page-sidebar-title-color: #fff}.bslib-page-sidebar>.navbar{--bs-navbar-brand-color: var(--bslib-page-sidebar-title-color);border-bottom:var(--bs-border-width) solid var(--bs-border-color-translucent);background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color)}.bslib-page-sidebar .bslib-page-title{margin-bottom:0;line-height:var(--bs-body-line-height)}@media (max-width: 991.98px){.bslib-page-sidebar>.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main,.bslib-page-navbar>div>.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-right:var(--_padding)}.bslib-page-sidebar>.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main,.bslib-page-navbar>div>.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-left:var(--_padding)}}@media (min-width: 576px){.bslib-sidebar-layout .bslib-page-main.html-fill-container{min-height:var(--bslib-page-main-min-height, 576px)}.bslib-sidebar-layout:not(.sidebar-collapsed) .bslib-page-main.html-fill-container,.bslib-sidebar-layout.transitioning .bslib-page-main.html-fill-container{min-width:var(--bslib-page-main-min-width, 576px)}}.bslib-sidebar-layout{container-type:style;--_transition-duration: 0;--_transition-easing-x: var(--bslib-sidebar-transition-easing-x, cubic-bezier(0.8, 0.78, 0.22, 1.07));--_border: var(--bslib-sidebar-border, var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent)));--_border-radius: var(--bslib-sidebar-border-radius, var(--bs-border-radius));--_vert-border: var(--bslib-sidebar-vert-border, var(--_border));--_sidebar-width: var(--bslib-sidebar-width, 250px);--_sidebar-bg: var(--bslib-sidebar-bg, RGBA(var(--bs-body-bg-rgb), 0.05));--_sidebar-fg: var(--bslib-sidebar-fg, var(--_main-fg));--_main-fg: var(--bslib-sidebar-main-fg, var(--bs-body-color));--_main-bg: var(--bslib-sidebar-main-bg, transparent);--_toggle-bg: var(--bslib-sidebar-toggle-bg, rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1));--_padding: var(--bslib-sidebar-padding, var(--bslib-spacer, 1.5rem));--_icon-size: var(--bslib-sidebar-icon-size, 1rem);--_icon-button-size: var(--bslib-sidebar-icon-button-size, calc(var(--_icon-size, 1rem) * 2));--_padding-icon: calc(var(--_icon-button-size, 2rem) * 1.5);--_toggle-border-radius: var(--bslib-collapse-toggle-border-radius, var(--bs-border-radius, 3px));--_toggle-transform: var(--bslib-collapse-toggle-transform, 0deg);--_toggle-transition-easing: var(--bslib-sidebar-toggle-transition-easing, cubic-bezier(1, 0, 0, 1));--_toggle-right-transform: var(--bslib-collapse-toggle-right-transform, 180deg);--_toggle-position-y: calc(var(--_js-toggle-count-this-side, 0) * calc(var(--_icon-size) + var(--_padding)) + var(--_icon-size, 1rem) / 2);--_toggle-position-x: calc(-2.5 * var(--_icon-size) - var(--bs-card-border-width, 1px));--_mobile-max-height: var(--bslib-sidebar-mobile-max-height, var(--bslib-sidebar-max-height-mobile));--_sidebar-mobile-opacity: var(--bslib-sidebar-mobile-opacity);--_main-mobile-expanded-opacity: var(--bslib-sidebar-main-mobile-expanded-opacity, 0);--_sidebar-mobile-max-width: var(--bslib-sidebar-mobile-max-width);--_sidebar-mobile-box-shadow: var(--bslib-sidebar-mobile-box-shadow);--_column-main: minmax(0, 1fr);--_toggle-collective-height: calc(calc(var(--_icon-button-size) + 0.5em) * var(--_js-toggle-count-max-side, 1));--_resize-handle-width: var(--bslib-sidebar-resize-handle-width, 12px);--_resize-indicator-color: var(--_sidebar-fg, var(--bs-emphasis-color, black));--_resize-indicator-color-active: var(--bslib-sidebar-resize-indicator-color-active, var(--bs-primary, #0d6efd));display:grid !important;grid-template-columns:Min(calc(100% - var(--_padding-icon)), var(--_sidebar-width)) var(--_column-main);position:relative;transition:grid-template-columns ease-in-out var(--_transition-duration),background-color linear var(--_transition-duration);border:var(--_border);border-radius:var(--_border-radius)}@container style(--bs-card-color: not " "){.bslib-sidebar-layout{--_main-fg: var(--bslib-sidebar-main-fg, var(--bs-card-color, var(--bs-body-color)))}}.bslib-sidebar-layout.transitioning{--_transition-duration: max(var(--bslib-sidebar-transition-duration, 300ms), 5ms)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout,.html-fill-container>.bslib-sidebar-layout.html-fill-item{min-height:var(--_toggle-collective-height)}.bslib-sidebar-layout[data-bslib-sidebar-border="false"]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius="false"]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1 / 2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2 / 3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--_padding);transition:padding var(--_transition-easing-x) var(--_transition-duration);color:var(--_main-fg);background-color:var(--_main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;border-right:var(--_vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--_sidebar-fg);background-color:var(--_sidebar-bg);position:relative}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--_padding);padding-top:var(--_padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1 * var(--_padding));margin-right:calc(-1 * var(--_padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--_padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;z-index:1000;display:inline-flex;align-items:center;position:absolute;right:calc(var(--_icon-size));top:calc(var(--_icon-size, 1rem) / 2);border:none;border-radius:var(--_toggle-border-radius);height:var(--_icon-button-size, 2rem);width:var(--_icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--_sidebar-fg);background-color:unset;transition:color var(--_transition-easing-x) var(--_transition-duration),top var(--_transition-easing-x) var(--_transition-duration),right var(--_transition-easing-x) var(--_transition-duration),left var(--_transition-easing-x) var(--_transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--_toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--_icon-size);height:var(--_icon-size);transform:rotateY(var(--_toggle-transform));transition:transform var(--_toggle-transition-easing) var(--_transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--_border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--_column-main) Min(calc(100% - var(--_padding-icon)), var(--_sidebar-width))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2 / 3;border-right:none;border-left:var(--_vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2 / 3;left:var(--_icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--_toggle-right-transform))}.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}.bslib-sidebar-layout.sidebar-collapsed{--_toggle-transform: 180deg;--_toggle-right-transform: 0deg;--_vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit;padding-left:var(--_padding-icon);padding-right:var(--_padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--_main-fg);top:var(--_toggle-position-y);right:var(--_toggle-position-x)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:var(--_toggle-position-x);right:unset}.bslib-sidebar-layout .bslib-sidebar-resize-handle{position:absolute;top:0;bottom:0;width:var(--_resize-handle-width);left:calc(calc(-1 * var(--_resize-handle-width)) - 2px);grid-column:2;cursor:ew-resize;user-select:none;z-index:calc(1000 + 1)}.bslib-sidebar-layout .bslib-sidebar-resize-handle::before{content:"";position:absolute;top:0;bottom:0;left:0;right:calc(-1 * var(--_resize-handle-width) - 2px);z-index:calc(1000 + 1)}.bslib-sidebar-layout .bslib-sidebar-resize-handle .resize-indicator{position:absolute;top:50%;right:2px;width:2px;height:30px;transform:translate(-50%, -50%);background-color:var(--_resize-indicator-color);opacity:0.1;border-radius:1px;transition:all 0.15s ease}.bslib-sidebar-layout .bslib-sidebar-resize-handle:hover .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:active .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{opacity:1}.bslib-sidebar-layout .bslib-sidebar-resize-handle:hover .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{width:3px;height:40px}.bslib-sidebar-layout .bslib-sidebar-resize-handle:active .resize-indicator{background-color:var(--_resize-indicator-color-active);width:4px;height:50px}.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus{outline:none}.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{outline:2px solid var(--bs-focus-ring-color, rgba(13,110,253,0.25));outline-offset:2px}.bslib-sidebar-layout.sidebar-right>.bslib-sidebar-resize-handle{left:2px}.bslib-sidebar-layout.transitioning>.bslib-sidebar-resize-handle,.bslib-sidebar-layout.sidebar-collapsed>.bslib-sidebar-resize-handle{display:none}.bslib-sidebar-layout.sidebar-resizing{user-select:none}.bslib-sidebar-layout.sidebar-resizing>.bslib-sidebar-resize-handle .resize-indicator{background-color:var(--_resize-indicator-color-active);width:4px;height:50px}.bslib-sidebar-layout{--bslib-sidebar-js-window-size: desktop}@media (max-width: 575.98px){.bslib-sidebar-layout{--bslib-sidebar-js-window-size: mobile}.bslib-sidebar-layout .bslib-sidebar-resize-handle{display:none !important}}@media (min-width: 576px){.bslib-sidebar-layout[data-collapsible-desktop="false"]{--_padding-icon: var(--_padding)}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.collapse-toggle{display:none}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.sidebar[hidden]{display:block !important}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.sidebar[hidden]>.sidebar-content{display:flex !important}}@media (max-width: 575.98px){.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]{grid-template-rows:calc(var(--_icon-button-size) + var(--_padding)) 1fr;grid-template-columns:100% 0}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.collapse-toggle{grid-row:1 / 2}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{grid-row:2 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{grid-row:1 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-collapsed)>.sidebar,.bslib-sidebar-layout[data-collapsible-mobile="true"].transitioning>.sidebar{z-index:1045}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-collapsed)>.collapse-toggle,.bslib-sidebar-layout[data-collapsible-mobile="true"].transitioning>.collapse-toggle{z-index:1045}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.collapse-toggle{top:unset;position:relative;align-self:center}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-right)>.collapse-toggle{left:var(--_icon-size);right:unset;justify-self:left}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right>.collapse-toggle{right:var(--_icon-size);left:unset;justify-self:right}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{opacity:var(--_sidebar-mobile-opacity, 1);max-width:var(--_sidebar-mobile-max-width, 100%);box-shadow:var(--_sidebar-mobile-box-shadow)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{margin:0;padding-top:var(--_padding-icon)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar>.sidebar-content{padding-top:0;height:100%;overflow-y:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-right)>.sidebar{margin-right:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right>.sidebar{margin-left:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{padding-top:1px;padding-left:var(--_padding);padding-right:var(--_padding)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{opacity:var(--_main-mobile-expanded-opacity);transition:opacity var(--_transition-easing-x) var(--_transition-duration)}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed>.main{opacity:1}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{background-color:none}.bslib-sidebar-layout[data-collapsible-mobile="true"],.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed{background-color:var(--_main-bg)}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-collapsible-mobile="false"]{display:block !important;--_padding-icon: var(--_padding);--_vert-border: var(--_border)}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar[hidden]{display:block !important}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar[hidden]>.sidebar-content{display:flex !important}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar{max-height:var(--_mobile-max-height);overflow-y:auto}.bslib-sidebar-layout[data-collapsible-mobile="false"][data-open-mobile="always"]>.sidebar{border-top:var(--_vert-border)}.bslib-sidebar-layout[data-collapsible-mobile="false"][data-open-mobile="always-above"]>.sidebar{border-bottom:var(--_vert-border)}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.collapse-toggle{display:none}}html[data-bslib-sidebar-resizing="true"]{cursor:ew-resize !important;user-select:none !important}.toast{--bslib-toast-shadow: var(--bs-box-shadow);box-shadow:var(--bslib-toast-shadow);position:relative;overflow:hidden}.toast-body:empty{display:none}.text-bg-primary.toast .toast-body .btn-close,.text-bg-secondary.toast .toast-body .btn-close,.text-bg-success.toast .toast-body .btn-close,.text-bg-info.toast .toast-body .btn-close,.text-bg-warning.toast .toast-body .btn-close,.text-bg-danger.toast .toast-body .btn-close,.text-bg-dark.toast .toast-body .btn-close,.text-white.toast .toast-body .btn-close,.text-light.toast .toast-body .btn-close{filter:var(--bs-btn-close-white-filter)}@keyframes bslib-toast-progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}.bslib-toast-progress-bar{position:absolute;top:0;left:0;height:2px;width:100%;pointer-events:none;z-index:1;transform-origin:left;border-radius:inherit;pointer-events:none;background-color:currentColor}.bslib-toolbar{--_divider-height: var(--bslib-toolbar-divider-height, 1lh);--_divider-width: var(--bslib-toolbar-divider-width, 2px);--_divider-gap: var(--bslib-toolbar-divider-gap, 1rem);--_divider-color: var(--bslib-toolbar-divider-color, var(--bs-border-color-translucent, rgba(40, 70, 94, 0.1)));--_toolbar-btn-size: var(--bslib-toolbar-btn-size, 1.75rem);display:flex;flex-wrap:wrap;align-items:center;gap:0}.bslib-toolbar[data-align="left"]{margin-right:auto;justify-content:start}.bslib-toolbar[data-align="right"]{margin-left:auto;justify-content:end}.bslib-toolbar .bslib-toolbar-input-button{align-items:center;justify-content:center;line-height:1;height:var(--_toolbar-btn-size)}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark){background-color:transparent !important;background-image:none !important;color:currentColor !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):hover{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.08) !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):active{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.16) !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):focus-within{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.12) !important;box-shadow:0 0 0 0.25rem rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.25) !important}.bslib-toolbar .bslib-toolbar-input-button[data-type="label"] .action-label{padding-left:0}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"]{aspect-ratio:1;line-height:1 !important}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"] .action-label{padding-left:0}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"]>.action-icon{display:flex;align-items:center;justify-content:center;line-height:1;margin:0}.bslib-toolbar .bslib-toolbar-divider{align-self:center;height:var(--_divider-height);width:var(--_divider-gap)}.bslib-toolbar .bslib-toolbar-divider::before{content:"";display:block;width:var(--_divider-width);height:100%;background-color:var(--_divider-color);margin:0 auto}.bslib-toolbar .bslib-toolbar-spacer{margin-left:auto}.bslib-toolbar,.bslib-toolbar *{font-size:0.9rem}.bslib-toolbar>*{margin-bottom:0 !important;width:auto;align-self:center}label:has(>.bslib-toolbar){width:100%}label>.bslib-toolbar{width:100%}.bslib-toolbar-input-select{padding-inline:0.25rem;height:var(--_toolbar-btn-size, 1.75rem);display:inline-flex;align-items:center;width:auto !important;border-radius:var(--bs-border-radius-sm, 0.25rem);gap:0.05rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}.bslib-toolbar-input-select select{appearance:auto;background-image:none;padding:0.1rem 0.5rem 0.1rem 0.1rem;border:none;background-color:transparent;color:currentColor;line-height:1;width:auto;min-width:fit-content;font-family:inherit}.bslib-toolbar-input-select select:focus{outline:none;box-shadow:none}.bslib-toolbar-input-select:hover{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.08)}.bslib-toolbar-input-select:active{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.16)}.bslib-toolbar-input-select:focus-within{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.12);box-shadow:0 0 0 0.25rem rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.25)}.bslib-toolbar-input-select .bslib-toolbar-icon{display:inline-flex;align-items:center;color:var(--bs-secondary-color);margin-left:0.15rem}.bslib-toolbar-input-select .bslib-toolbar-icon:empty{display:none}.bslib-toolbar-input-select label,.bslib-toolbar-input-select label.control-label{font-weight:600;margin-bottom:0}.bslib-toolbar-input-select .bslib-toolbar-label{margin-left:0.15rem}.bslib-value-box{container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, var(--bs-border-color-translucent));color:var(--bslib-value-box-color, var(--bs-body-color));background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen="true"] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:'\00a0 '}.bslib-value-box .value-box-value{font-size:calc(1.325rem + .9vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media (min-width: 1200px){.bslib-value-box .value-box-value{font-size:2rem}}.bslib-value-box .value-box-value:empty::after{content:'\00a0 '}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen="true"] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen="true"] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen="true"]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen="true"]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen="true"] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen="true"]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen="true"]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen="true"] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen="true"] .value-box-grid .value-box-showcase{padding:1rem} +.accordion .accordion-header{font-size:calc(1.325rem + .9vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media (min-width: 1200px){.accordion .accordion-header{font-size:2rem}}.accordion .accordion-icon:not(:empty){margin-right:0.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen="true"]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header{display:flex;flex-direction:row;align-items:center;align-self:stretch;min-height:2.5rem;padding-block:calc(var(--bs-card-cap-padding-y) / 2);gap:0.25rem}.bslib-card .card-header>.nav{flex:1;min-width:0}.bslib-card .card-header>.bslib-nav-spacer{margin-left:auto}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border="true"]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius="true"]){border-top-left-radius:0;border-top-right-radius:0}.bslib-card[data-full-screen="true"]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,0.15);margin:0.2rem 0.4rem;padding:0.55rem !important;font-size:.8rem;cursor:pointer;opacity:0;z-index:1070}.card:hover>*>.bslib-full-screen-enter,.card:focus-within>*>.bslib-full-screen-enter{opacity:0.6}.card:hover>*>.bslib-full-screen-enter:hover,.card:hover>*>.bslib-full-screen-enter:focus,.card:focus-within>*>.bslib-full-screen-enter:hover,.card:focus-within>*>.bslib-full-screen-enter:focus{opacity:1}.card[data-full-screen="false"]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .bslib-full-screen-enter{display:none !important}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:0.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:0.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}@media (max-width: 575.98px){.bslib-card[data-full-screen="true"]{inset:2.5rem 0.5rem 0.5rem}.bslib-full-screen-exit{top:0.75rem;margin-right:1.25rem}}.bslib-grid{--_item-column-span: 1;display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid>*{grid-column:auto/span var(--_item-column-span, 1)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media (min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media (min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media (min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media (min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media (min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}bslib-layout-columns.bslib-grid{--_item-column-span: 6}bslib-layout-columns[hidden-until-init]>*{display:none}@media (max-width: 767.98px){bslib-layout-columns:where(.bslib-grid)>*{grid-column:1 / -1}}@media (max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important}}.bslib-input-submit-textarea{margin:0 auto}.bslib-submit-textarea-container{display:flex;flex-direction:column;gap:0.5rem;padding:0.5rem;border:var(--bs-border-width, 1px) solid var(--bs-gray-500, #ced4da);border-radius:var(--bs-border-radius-sm, 4px);background-color:var(--bs-body-bg, white);transition:border-color 0.2s, box-shadow 0.2s}.bslib-submit-textarea-container:focus-within{border-color:var(--bs-primary, #007bff);box-shadow:0 0 0 var(--bs-focus-ring-width, 0.25rem) var(--bs-focus-ring-color, rgba(13,110,253,0.25))}.bslib-submit-textarea-container>textarea{border:none;resize:none;min-height:1rem;max-height:10rem;background-color:transparent;padding:0;color:var(--bs-body-color, #212529)}.bslib-submit-textarea-container>textarea:focus{outline:none;box-shadow:none}.bslib-submit-textarea-container>footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:0.5rem}.bslib-submit-textarea-container .bslib-submit-textarea-btn{margin-left:auto}.bslib-toolbar{display:flex;align-items:center;gap:0.25rem}.bslib-submit-key{border-radius:var(--bs-border-radius-sm, 4px);padding:0.25em 0.5em;font-weight:300;font-size:0.7em;vertical-align:0.15em}:not(.disabled) .bslib-submit-key{background-color:rgba(var(--bs-body-color-rgb, 0, 0, 0), 0.2)}@media (min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media (max-width: 575.98px){.bslib-flow-mobile>.html-fill-item{flex:0 0 auto}.bslib-flow-mobile.bslib-page-sidebar>.html-fill-item,.bslib-flow-mobile.bslib-page-navbar.has-page-sidebar>.html-fill-item{flex:1 1 auto}.bslib-flow-mobile.bslib-page-sidebar>.bslib-sidebar-layout>.main>.html-fill-item,.bslib-flow-mobile.bslib-page-navbar.has-page-sidebar>.html-fill-container>.bslib-sidebar-layout>.main>.html-fill-item{flex:0 0 auto}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border="true"]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius="true"]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}:root{--bslib-page-sidebar-title-bg: #202020;--bslib-page-sidebar-title-color: #fff}.bslib-page-sidebar>.navbar{--bs-navbar-brand-color: var(--bslib-page-sidebar-title-color);border-bottom:var(--bs-border-width) solid var(--bs-border-color-translucent);background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color)}.bslib-page-sidebar .bslib-page-title{margin-bottom:0;line-height:var(--bs-body-line-height)}@media (max-width: 991.98px){.bslib-page-sidebar>.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main,.bslib-page-navbar>div>.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-right:var(--_padding)}.bslib-page-sidebar>.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main,.bslib-page-navbar>div>.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-left:var(--_padding)}}@media (min-width: 576px){.bslib-sidebar-layout .bslib-page-main.html-fill-container{min-height:var(--bslib-page-main-min-height, 576px)}.bslib-sidebar-layout:not(.sidebar-collapsed) .bslib-page-main.html-fill-container,.bslib-sidebar-layout.transitioning .bslib-page-main.html-fill-container{min-width:var(--bslib-page-main-min-width, 576px)}}.bslib-sidebar-layout{container-type:style;--_transition-duration: 0;--_transition-easing-x: var(--bslib-sidebar-transition-easing-x, cubic-bezier(0.8, 0.78, 0.22, 1.07));--_border: var(--bslib-sidebar-border, var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent)));--_border-radius: var(--bslib-sidebar-border-radius, var(--bs-border-radius));--_vert-border: var(--bslib-sidebar-vert-border, var(--_border));--_sidebar-width: var(--bslib-sidebar-width, 250px);--_sidebar-bg: var(--bslib-sidebar-bg, RGBA(var(--bs-body-bg-rgb), 0.05));--_sidebar-fg: var(--bslib-sidebar-fg, var(--_main-fg));--_main-fg: var(--bslib-sidebar-main-fg, var(--bs-body-color));--_main-bg: var(--bslib-sidebar-main-bg, transparent);--_toggle-bg: var(--bslib-sidebar-toggle-bg, rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1));--_padding: var(--bslib-sidebar-padding, var(--bslib-spacer, 1.5rem));--_icon-size: var(--bslib-sidebar-icon-size, 1rem);--_icon-button-size: var(--bslib-sidebar-icon-button-size, calc(var(--_icon-size, 1rem) * 2));--_padding-icon: calc(var(--_icon-button-size, 2rem) * 1.5);--_toggle-border-radius: var(--bslib-collapse-toggle-border-radius, var(--bs-border-radius, 3px));--_toggle-transform: var(--bslib-collapse-toggle-transform, 0deg);--_toggle-transition-easing: var(--bslib-sidebar-toggle-transition-easing, cubic-bezier(1, 0, 0, 1));--_toggle-right-transform: var(--bslib-collapse-toggle-right-transform, 180deg);--_toggle-position-y: calc(var(--_js-toggle-count-this-side, 0) * calc(var(--_icon-size) + var(--_padding)) + var(--_icon-size, 1rem) / 2);--_toggle-position-x: calc(-2.5 * var(--_icon-size) - var(--bs-card-border-width, 1px));--_mobile-max-height: var(--bslib-sidebar-mobile-max-height, var(--bslib-sidebar-max-height-mobile));--_sidebar-mobile-opacity: var(--bslib-sidebar-mobile-opacity);--_main-mobile-expanded-opacity: var(--bslib-sidebar-main-mobile-expanded-opacity, 0);--_sidebar-mobile-max-width: var(--bslib-sidebar-mobile-max-width);--_sidebar-mobile-box-shadow: var(--bslib-sidebar-mobile-box-shadow);--_column-main: minmax(0, 1fr);--_toggle-collective-height: calc(calc(var(--_icon-button-size) + 0.5em) * var(--_js-toggle-count-max-side, 1));--_resize-handle-width: var(--bslib-sidebar-resize-handle-width, 12px);--_resize-indicator-color: var(--_sidebar-fg, var(--bs-emphasis-color, black));--_resize-indicator-color-active: var(--bslib-sidebar-resize-indicator-color-active, var(--bs-primary, #0d6efd));display:grid !important;grid-template-columns:Min(calc(100% - var(--_padding-icon)), var(--_sidebar-width)) var(--_column-main);position:relative;transition:grid-template-columns ease-in-out var(--_transition-duration),background-color linear var(--_transition-duration);border:var(--_border);border-radius:var(--_border-radius)}@container style(--bs-card-color: not " "){.bslib-sidebar-layout{--_main-fg: var(--bslib-sidebar-main-fg, var(--bs-card-color, var(--bs-body-color)))}}.bslib-sidebar-layout.transitioning{--_transition-duration: max(var(--bslib-sidebar-transition-duration, 300ms), 5ms)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout,.html-fill-container>.bslib-sidebar-layout.html-fill-item{min-height:var(--_toggle-collective-height)}.bslib-sidebar-layout[data-bslib-sidebar-border="false"]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius="false"]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1 / 2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2 / 3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--_padding);transition:padding var(--_transition-easing-x) var(--_transition-duration);color:var(--_main-fg);background-color:var(--_main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;border-right:var(--_vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--_sidebar-fg);background-color:var(--_sidebar-bg);position:relative}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--_padding);padding-top:var(--_padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1 * var(--_padding));margin-right:calc(-1 * var(--_padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--_padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;z-index:1000;display:inline-flex;align-items:center;position:absolute;right:calc(var(--_icon-size));top:calc(var(--_icon-size, 1rem) / 2);border:none;border-radius:var(--_toggle-border-radius);height:var(--_icon-button-size, 2rem);width:var(--_icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--_sidebar-fg);background-color:unset;transition:color var(--_transition-easing-x) var(--_transition-duration),top var(--_transition-easing-x) var(--_transition-duration),right var(--_transition-easing-x) var(--_transition-duration),left var(--_transition-easing-x) var(--_transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--_toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--_icon-size);height:var(--_icon-size);transform:rotateY(var(--_toggle-transform));transition:transform var(--_toggle-transition-easing) var(--_transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--_border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--_column-main) Min(calc(100% - var(--_padding-icon)), var(--_sidebar-width))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2 / 3;border-right:none;border-left:var(--_vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2 / 3;left:var(--_icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--_toggle-right-transform))}.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}.bslib-sidebar-layout.sidebar-collapsed{--_toggle-transform: 180deg;--_toggle-right-transform: 0deg;--_vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit;padding-left:var(--_padding-icon);padding-right:var(--_padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--_main-fg);top:var(--_toggle-position-y);right:var(--_toggle-position-x)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:var(--_toggle-position-x);right:unset}.bslib-sidebar-layout .bslib-sidebar-resize-handle{position:absolute;top:0;bottom:0;width:var(--_resize-handle-width);left:calc(calc(-1 * var(--_resize-handle-width)) - 2px);grid-column:2;cursor:ew-resize;user-select:none;z-index:calc(1000 + 1)}.bslib-sidebar-layout .bslib-sidebar-resize-handle::before{content:"";position:absolute;top:0;bottom:0;left:0;right:calc(-1 * var(--_resize-handle-width) - 2px);z-index:calc(1000 + 1)}.bslib-sidebar-layout .bslib-sidebar-resize-handle .resize-indicator{position:absolute;top:50%;right:2px;width:2px;height:30px;transform:translate(-50%, -50%);background-color:var(--_resize-indicator-color);opacity:0.1;border-radius:1px;transition:all 0.15s ease}.bslib-sidebar-layout .bslib-sidebar-resize-handle:hover .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:active .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{opacity:1}.bslib-sidebar-layout .bslib-sidebar-resize-handle:hover .resize-indicator,.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{width:3px;height:40px}.bslib-sidebar-layout .bslib-sidebar-resize-handle:active .resize-indicator{background-color:var(--_resize-indicator-color-active);width:4px;height:50px}.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus{outline:none}.bslib-sidebar-layout .bslib-sidebar-resize-handle:focus .resize-indicator{outline:2px solid var(--bs-focus-ring-color, rgba(13,110,253,0.25));outline-offset:2px}.bslib-sidebar-layout.sidebar-right>.bslib-sidebar-resize-handle{left:2px}.bslib-sidebar-layout.transitioning>.bslib-sidebar-resize-handle,.bslib-sidebar-layout.sidebar-collapsed>.bslib-sidebar-resize-handle{display:none}.bslib-sidebar-layout.sidebar-resizing{user-select:none}.bslib-sidebar-layout.sidebar-resizing>.bslib-sidebar-resize-handle .resize-indicator{background-color:var(--_resize-indicator-color-active);width:4px;height:50px}.bslib-sidebar-layout{--bslib-sidebar-js-window-size: desktop}@media (max-width: 575.98px){.bslib-sidebar-layout{--bslib-sidebar-js-window-size: mobile}.bslib-sidebar-layout .bslib-sidebar-resize-handle{display:none !important}}@media (min-width: 576px){.bslib-sidebar-layout[data-collapsible-desktop="false"]{--_padding-icon: var(--_padding)}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.collapse-toggle{display:none}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.sidebar[hidden]{display:block !important}.bslib-sidebar-layout[data-collapsible-desktop="false"]>.sidebar[hidden]>.sidebar-content{display:flex !important}}@media (max-width: 575.98px){.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]{grid-template-rows:calc(var(--_icon-button-size) + var(--_padding)) 1fr;grid-template-columns:100% 0}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.collapse-toggle{grid-row:1 / 2}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{grid-row:2 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{grid-row:1 / 3}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-collapsed)>.sidebar,.bslib-sidebar-layout[data-collapsible-mobile="true"].transitioning>.sidebar{z-index:1045}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-collapsed)>.collapse-toggle,.bslib-sidebar-layout[data-collapsible-mobile="true"].transitioning>.collapse-toggle{z-index:1045}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.collapse-toggle{top:unset;position:relative;align-self:center}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-right)>.collapse-toggle{left:var(--_icon-size);right:unset;justify-self:left}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right>.collapse-toggle{right:var(--_icon-size);left:unset;justify-self:right}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{opacity:var(--_sidebar-mobile-opacity, 1);max-width:var(--_sidebar-mobile-max-width, 100%);box-shadow:var(--_sidebar-mobile-box-shadow)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar{margin:0;padding-top:var(--_padding-icon)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.sidebar>.sidebar-content{padding-top:0;height:100%;overflow-y:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"]:not(.sidebar-right)>.sidebar{margin-right:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right>.sidebar{margin-left:auto}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{padding-top:1px;padding-left:var(--_padding);padding-right:var(--_padding)}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{opacity:var(--_main-mobile-expanded-opacity);transition:opacity var(--_transition-easing-x) var(--_transition-duration)}.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed>.main{opacity:1}.bslib-sidebar-layout[data-collapsible-mobile="true"]>.main{background-color:none}.bslib-sidebar-layout[data-collapsible-mobile="true"],.bslib-sidebar-layout[data-collapsible-mobile="true"].sidebar-collapsed{background-color:var(--_main-bg)}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-collapsible-mobile="false"]{display:block !important;--_padding-icon: var(--_padding);--_vert-border: var(--_border)}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar[hidden]{display:block !important}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar[hidden]>.sidebar-content{display:flex !important}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.sidebar{max-height:var(--_mobile-max-height);overflow-y:auto}.bslib-sidebar-layout[data-collapsible-mobile="false"][data-open-mobile="always"]>.sidebar{border-top:var(--_vert-border)}.bslib-sidebar-layout[data-collapsible-mobile="false"][data-open-mobile="always-above"]>.sidebar{border-bottom:var(--_vert-border)}.bslib-sidebar-layout[data-collapsible-mobile="false"]>.collapse-toggle{display:none}}html[data-bslib-sidebar-resizing="true"]{cursor:ew-resize !important;user-select:none !important}.toast{--bslib-toast-shadow: var(--bs-box-shadow);box-shadow:var(--bslib-toast-shadow);position:relative;overflow:hidden}.toast-body:empty{display:none}.text-bg-primary.toast .toast-body .btn-close,.text-bg-secondary.toast .toast-body .btn-close,.text-bg-success.toast .toast-body .btn-close,.text-bg-info.toast .toast-body .btn-close,.text-bg-warning.toast .toast-body .btn-close,.text-bg-danger.toast .toast-body .btn-close,.text-bg-dark.toast .toast-body .btn-close,.text-white.toast .toast-body .btn-close,.text-light.toast .toast-body .btn-close{filter:var(--bs-btn-close-white-filter)}@keyframes bslib-toast-progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}.bslib-toast-progress-bar{position:absolute;top:0;left:0;height:2px;width:100%;pointer-events:none;z-index:1;transform-origin:left;border-radius:inherit;pointer-events:none;background-color:currentColor}.bslib-toolbar{--_divider-height: var(--bslib-toolbar-divider-height, 1lh);--_divider-width: var(--bslib-toolbar-divider-width, 2px);--_divider-gap: var(--bslib-toolbar-divider-gap, 1rem);--_divider-color: var(--bslib-toolbar-divider-color, var(--bs-border-color-translucent, rgba(40, 70, 94, 0.1)));--_toolbar-btn-size: var(--bslib-toolbar-btn-size, 1.75rem);display:flex;flex-wrap:wrap;align-items:center;gap:0}.bslib-toolbar[data-align="left"]{margin-right:auto;justify-content:start}.bslib-toolbar[data-align="right"]{margin-left:auto;justify-content:end}.bslib-toolbar .bslib-toolbar-input-button{align-items:center;justify-content:center;line-height:1;height:var(--_toolbar-btn-size)}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark){background-color:transparent !important;background-image:none !important;color:currentColor !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):hover{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.08) !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):active{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.16) !important}.bslib-toolbar .bslib-toolbar-input-button.btn-default:not(.btn-primary):not(.btn-secondary):not(.btn-success):not(.btn-danger):not(.btn-warning):not(.btn-info):not(.btn-light):not(.btn-dark):focus-within{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.12) !important;box-shadow:0 0 0 0.25rem rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.25) !important}.bslib-toolbar .bslib-toolbar-input-button[data-type="label"] .action-label{padding-left:0}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"]{aspect-ratio:1;line-height:1 !important}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"] .action-label{padding-left:0}.bslib-toolbar .bslib-toolbar-input-button[data-type="icon"]>.action-icon{display:flex;align-items:center;justify-content:center;line-height:1;margin:0}.bslib-toolbar .bslib-toolbar-divider{align-self:center;height:var(--_divider-height);width:var(--_divider-gap)}.bslib-toolbar .bslib-toolbar-divider::before{content:"";display:block;width:var(--_divider-width);height:100%;background-color:var(--_divider-color);margin:0 auto}.bslib-toolbar .bslib-toolbar-spacer{margin-left:auto}.bslib-toolbar,.bslib-toolbar *{font-size:0.9rem}.bslib-toolbar>*{margin-bottom:0 !important;width:auto;align-self:center}label:has(>.bslib-toolbar){width:100%}label>.bslib-toolbar{width:100%}.bslib-toolbar-input-select{padding-inline:0.25rem;height:var(--_toolbar-btn-size, 1.75rem);display:inline-flex;align-items:center;width:auto !important;border-radius:var(--bs-border-radius-sm, 0.25rem);gap:0.05rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}.bslib-toolbar-input-select select{appearance:auto;background-image:none;padding:0.1rem 0.5rem 0.1rem 0.1rem;border:none;background-color:transparent;color:currentColor;line-height:1;width:auto;min-width:fit-content;font-family:inherit}.bslib-toolbar-input-select select:focus{outline:none;box-shadow:none}.bslib-toolbar-input-select:hover{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.08)}.bslib-toolbar-input-select:active{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.16)}.bslib-toolbar-input-select:focus-within{background-color:rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.12);box-shadow:0 0 0 0.25rem rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.25)}.bslib-toolbar-input-select .bslib-toolbar-icon{display:inline-flex;align-items:center;color:var(--bs-secondary-color);margin-left:0.15rem}.bslib-toolbar-input-select .bslib-toolbar-icon:empty{display:none}.bslib-toolbar-input-select label,.bslib-toolbar-input-select label.control-label{font-weight:600;margin-bottom:0}.bslib-toolbar-input-select .bslib-toolbar-label{margin-left:0.15rem}.form-group.shiny-input-container:has(.form-switch){width:auto}.bslib-input-switch.form-check{margin-bottom:0;margin-inline:0.5rem;display:flex;align-items:center}.bslib-input-switch.form-check .form-check-label{font-weight:500;line-height:1;padding-left:0.25rem;padding-top:0;margin-bottom:0}.bslib-value-box{container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, var(--bs-border-color-translucent));color:var(--bslib-value-box-color, var(--bs-body-color));background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen="true"] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:'\00a0 '}.bslib-value-box .value-box-value{font-size:calc(1.325rem + .9vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media (min-width: 1200px){.bslib-value-box .value-box-value{font-size:2rem}}.bslib-value-box .value-box-value:empty::after{content:'\00a0 '}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen="true"] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen="true"] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen="true"]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen="true"]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen="true"] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen="true"]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen="true"]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen="true"] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen="true"] .value-box-grid .value-box-showcase{padding:1rem} diff --git a/inst/components/dist/components.js b/inst/components/dist/components.js index 489438dcf..89a54cfe1 100644 --- a/inst/components/dist/components.js +++ b/inst/components/dist/components.js @@ -1,4 +1,4 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ "use strict"; (() => { var __getOwnPropNames = Object.getOwnPropertyNames; diff --git a/inst/components/dist/components.min.js b/inst/components/dist/components.min.js index 8f41e259c..55d61cfa0 100644 --- a/inst/components/dist/components.min.js +++ b/inst/components/dist/components.min.js @@ -1,9 +1,9 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ -"use strict";(()=>{var p=(s,e)=>()=>(s&&(e=s(s=0)),e);var pe=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var Q=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var M=(s,e,t)=>(Q(s,e,"read from private field"),t?t.call(s):e.get(s)),x=(s,e,t)=>{if(e.has(s))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(s):e.set(s,t)};var D=(s,e,t)=>(Q(s,e,"access private method"),t);var h=(s,e,t)=>new Promise((i,n)=>{var r=a=>{try{d(t.next(a))}catch(u){n(u)}},o=a=>{try{d(t.throw(a))}catch(u){n(u)}},d=a=>a.done?i(a.value):Promise.resolve(a.value).then(r,o);d((t=t.apply(s,e)).next())});function g(s,e){b&&b.inputBindings.register(new s,"bslib."+e)}function k(s,e){window.bslib=window.bslib||{},window.bslib[s]?console.error(`[bslib] Global window.bslib.${s} was already defined, using previous definition.`):window.bslib[s]=e}function N({headline:s="",message:e,status:t="warning"}){document.dispatchEvent(new CustomEvent("shiny:client-message",{detail:{headline:s,message:e,status:t}}))}function I(s,e){return Object.prototype.hasOwnProperty.call(s,e)&&s[e]!==void 0}function ee(s){let e=["a[href]","area[href]","button","details summary","input","iframe","select","textarea",'[contentEditable=""]','[contentEditable="true"]','[contentEditable="TRUE"]',"[tabindex]"],t=[':not([tabindex="-1"])',":not([disabled])"],i=e.map(r=>r+t.join("")),n=s.querySelectorAll(i.join(", "));return Array.from(n)}function v(...s){return h(this,null,function*(){if(!b)throw new Error("This function must be called in a Shiny app.");return b.renderContentAsync?yield b.renderContentAsync.apply(null,s):yield b.renderContent.apply(null,s)})}function te(s,e){return h(this,null,function*(){if(typeof s!="undefined"){if(e.length!==1)throw new Error("labelNode must be of length 1");typeof s=="string"&&(s={html:s,deps:[]}),s.html===""?e.addClass("shiny-label-null"):(yield v(e,s),e.removeClass("shiny-label-null"))}})}var b,m,E=p(()=>{"use strict";b=window.Shiny,m=b?b.InputBinding:class{}});var W,ie=p(()=>{"use strict";E();W=class extends m{find(e){return $(e).find(".accordion.bslib-accordion-input")}getValue(e){let i=this._getItemInfo(e).filter(n=>n.isOpen()).map(n=>n.value);return i.length===0?null:i}subscribe(e,t){$(e).on("shown.bs.collapse.accordionInputBinding hidden.bs.collapse.accordionInputBinding",function(i){t(!0)})}unsubscribe(e){$(e).off(".accordionInputBinding")}receiveMessage(e,t){return h(this,null,function*(){let i=t.method;if(i==="set")this._setItems(e,t);else if(i==="open")this._openItems(e,t);else if(i==="close")this._closeItems(e,t);else if(i==="remove")this._removeItem(e,t);else if(i==="insert")yield this._insertItem(e,t);else if(i==="update")yield this._updateItem(e,t);else throw new Error(`Method not yet implemented: ${i}`)})}_setItems(e,t){let i=this._getItemInfo(e),n=this._getValues(e,i,t.values);i.forEach(r=>{n.indexOf(r.value)>-1?r.show():r.hide()})}_openItems(e,t){let i=this._getItemInfo(e),n=this._getValues(e,i,t.values);i.forEach(r=>{n.indexOf(r.value)>-1&&r.show()})}_closeItems(e,t){let i=this._getItemInfo(e),n=this._getValues(e,i,t.values);i.forEach(r=>{n.indexOf(r.value)>-1&&r.hide()})}_insertItem(e,t){return h(this,null,function*(){let i=this._findItem(e,t.target);i||(i=t.position==="before"?e.firstElementChild:e.lastElementChild);let n=t.panel;if(i?yield v(i,n,t.position==="before"?"beforeBegin":"afterEnd"):yield v(e,n),this._isAutoClosing(e)){let r=$(n.html).attr("data-value");$(e).find(`[data-value="${r}"] .accordion-collapse`).attr("data-bs-parent","#"+e.id)}})}_removeItem(e,t){var r;let i=this._getItemInfo(e).filter(o=>t.target.indexOf(o.value)>-1),n=(r=window.Shiny)==null?void 0:r.unbindAll;i.forEach(o=>{n&&n(o.item),o.item.remove()})}_updateItem(e,t){return h(this,null,function*(){let i=this._findItem(e,t.target);if(!i)throw new Error(`Unable to find an accordion_panel() with a value of ${t.target}`);if(I(t,"value")&&(i.dataset.value=t.value),I(t,"body")){let r=i.querySelector(".accordion-body");yield v(r,t.body)}let n=i.querySelector(".accordion-header");if(I(t,"title")){let r=n.querySelector(".accordion-title");yield v(r,t.title)}if(I(t,"icon")){let r=n.querySelector(".accordion-button > .accordion-icon");yield v(r,t.icon)}})}_getItemInfo(e){return Array.from(e.querySelectorAll(":scope > .accordion-item")).map(i=>this._getSingleItemInfo(i))}_getSingleItemInfo(e){let t=e.querySelector(".accordion-collapse"),i=()=>$(t).hasClass("show");return{item:e,value:e.dataset.value,isOpen:i,show:()=>{i()||$(t).collapse("show")},hide:()=>{i()&&$(t).collapse("hide")}}}_getValues(e,t,i){let n=i!==!0?i:t.map(o=>o.value);return this._isAutoClosing(e)&&(n=n.slice(n.length-1,n.length)),n}_findItem(e,t){return e.querySelector(`[data-value="${t}"]`)}_isAutoClosing(e){return e.classList.contains("autoclose")}};g(W,"accordion")});var H,U=p(()=>{"use strict";H=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let i=[];for(let n of e)n.target instanceof HTMLElement&&n.target.querySelector(".shiny-bound-output")&&n.target.querySelectorAll(".shiny-bound-output").forEach(r=>{if(i.includes(r))return;let{binding:o,onResize:d}=$(r).data("shinyOutputBinding");if(!o||!o.resize)return;let a=r.shinyResizeObserver;if(a&&a!==this||(a||(r.shinyResizeObserver=this),d(r),i.push(r),!r.classList.contains("shiny-plot-output")))return;let u=r.querySelector('img:not([width="100%"])');u&&u.setAttribute("width","100%")})})}observe(e){this.resizeObserver.observe(e),this.resizeObserverEntries.push(e)}unobserve(e){let t=this.resizeObserverEntries.indexOf(e);t<0||(this.resizeObserver.unobserve(e),this.resizeObserverEntries.splice(t,1))}flush(){this.resizeObserverEntries.forEach(e=>{document.body.contains(e)||this.unobserve(e)})}}});var F,se=p(()=>{"use strict";F=class{constructor(e,t){this.watching=new Set,this.observer=new MutationObserver(i=>{let n=new Set;for(let{type:r,removedNodes:o}of i)if(r==="childList"&&o.length!==0)for(let d of o)d instanceof HTMLElement&&(d.matches(e)&&n.add(d),d.querySelector(e)&&d.querySelectorAll(e).forEach(a=>n.add(a)));if(n.size!==0)for(let r of n)try{t(r)}catch(o){console.error(o)}})}observe(e){let t=this._flush();if(this.watching.has(e)){if(!t)return}else this.watching.add(e);t?this._restartObserver():this.observer.observe(e,{childList:!0,subtree:!0})}unobserve(e){this.watching.has(e)&&(this.watching.delete(e),this._flush(),this._restartObserver())}_restartObserver(){this.observer.disconnect();for(let e of this.watching)this.observer.observe(e,{childList:!0,subtree:!0})}_flush(){let e=!1,t=Array.from(this.watching);for(let i of t)document.body.contains(i)||(this.watching.delete(i),e=!0);return e}}});var l,y,ne=p(()=>{"use strict";E();U();se();l=class{constructor(e){var t;e.removeAttribute(l.attr.ATTR_INIT),(t=e.querySelector(`script[${l.attr.ATTR_INIT}]`))==null||t.remove(),this.card=e,l.instanceMap.set(e,this),l.shinyResizeObserver.observe(this.card),l.cardRemovedObserver.observe(document.body),this._addEventListeners(),this.overlay=this._createOverlay(),this._setShinyInput(),this._exitFullScreenOnEscape=this._exitFullScreenOnEscape.bind(this),this._trapFocusExit=this._trapFocusExit.bind(this)}enterFullScreen(e){var t;e&&e.preventDefault(),this.card.id&&this.overlay.anchor.setAttribute("aria-controls",this.card.id),document.addEventListener("keydown",this._exitFullScreenOnEscape,!1),document.addEventListener("keydown",this._trapFocusExit,!0),this.card.setAttribute(l.attr.ATTR_FULL_SCREEN,"true"),document.body.classList.add(l.attr.CLASS_HAS_FULL_SCREEN),this.card.insertAdjacentElement("beforebegin",this.overlay.container),(!this.card.contains(document.activeElement)||(t=document.activeElement)!=null&&t.classList.contains(l.attr.CLASS_FULL_SCREEN_ENTER))&&(this.card.setAttribute("tabindex","-1"),this.card.focus()),this._emitFullScreenEvent(!0),this._setShinyInput()}exitFullScreen(){document.removeEventListener("keydown",this._exitFullScreenOnEscape,!1),document.removeEventListener("keydown",this._trapFocusExit,!0),this.overlay.container.remove(),this.card.setAttribute(l.attr.ATTR_FULL_SCREEN,"false"),this.card.removeAttribute("tabindex"),document.body.classList.remove(l.attr.CLASS_HAS_FULL_SCREEN),this._emitFullScreenEvent(!1),this._setShinyInput()}_setShinyInput(){if(!this.card.classList.contains(l.attr.CLASS_SHINY_INPUT)||!b)return;if(!b.setInputValue){setTimeout(()=>this._setShinyInput(),0);return}let e=this.card.getAttribute(l.attr.ATTR_FULL_SCREEN);b.setInputValue(this.card.id+"_full_screen",e==="true")}_emitFullScreenEvent(e){let t=new CustomEvent("bslib.card",{bubbles:!0,detail:{fullScreen:e}});this.card.dispatchEvent(t)}_addEventListeners(){let e=this.card.querySelector(`:scope > * > .${l.attr.CLASS_FULL_SCREEN_ENTER}`);e&&e.addEventListener("click",t=>this.enterFullScreen(t))}_exitFullScreenOnEscape(e){if(!(e.target instanceof HTMLElement))return;let t=["select[open]","input[aria-expanded='true']"];e.target.matches(t.join(", "))||e.key==="Escape"&&this.exitFullScreen()}_trapFocusExit(e){if(!(e instanceof KeyboardEvent)||e.key!=="Tab")return;let t=e.target===this.card,i=e.target===this.overlay.anchor,n=this.card.contains(e.target),r=()=>{e.preventDefault(),e.stopImmediatePropagation()};if(!(n||t||i)){r(),this.card.focus();return}let o=ee(this.card).filter(w=>!w.classList.contains(l.attr.CLASS_FULL_SCREEN_ENTER));if(!(o.length>0)){r(),this.overlay.anchor.focus();return}if(t)return;let a=o[o.length-1],u=e.target===a;if(i&&e.shiftKey){r(),a.focus();return}if(u&&!e.shiftKey){r(),this.overlay.anchor.focus();return}}_createOverlay(){let e=document.createElement("div");e.id=l.attr.ID_FULL_SCREEN_OVERLAY,e.onclick=this.exitFullScreen.bind(this);let t=this._createOverlayCloseAnchor();return e.appendChild(t),{container:e,anchor:t}}_createOverlayCloseAnchor(){let e=document.createElement("a");return e.classList.add(l.attr.CLASS_FULL_SCREEN_EXIT),e.tabIndex=0,e.setAttribute("aria-expanded","true"),e.setAttribute("aria-label","Close card"),e.setAttribute("role","button"),e.onclick=t=>{this.exitFullScreen(),t.stopPropagation()},e.onkeydown=t=>{(t.key==="Enter"||t.key===" ")&&this.exitFullScreen()},e.innerHTML=this._overlayCloseHtml(),e}_overlayCloseHtml(){return"Close "}static getInstance(e){return l.instanceMap.get(e)}static initializeAllCards(e=!0){if(document.readyState==="loading"){l.onReadyScheduled||(l.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{l.initializeAllCards(!1)}));return}e&&l.shinyResizeObserver.flush();let t=`.${l.attr.CLASS_CARD}[${l.attr.ATTR_INIT}]`;if(!document.querySelector(t))return;document.querySelectorAll(t).forEach(n=>new l(n))}},y=l;y.attr={ATTR_INIT:"data-bslib-card-init",CLASS_CARD:"bslib-card",ATTR_FULL_SCREEN:"data-full-screen",CLASS_HAS_FULL_SCREEN:"bslib-has-full-screen",CLASS_FULL_SCREEN_ENTER:"bslib-full-screen-enter",CLASS_FULL_SCREEN_EXIT:"bslib-full-screen-exit",ID_FULL_SCREEN_OVERLAY:"bslib-full-screen-overlay",CLASS_SHINY_INPUT:"bslib-card-input"},y.shinyResizeObserver=new H,y.cardRemovedObserver=new F(`.${l.attr.CLASS_CARD}`,e=>{let t=l.getInstance(e);t&&t.card.getAttribute(l.attr.ATTR_FULL_SCREEN)==="true"&&t.exitFullScreen()}),y.instanceMap=new WeakMap,y.onReadyScheduled=!1;k("Card",y)});function re(s,e){let t=s();return()=>{let i=s();i!==t&&e(),t=i}}var c,f,q,oe=p(()=>{"use strict";E();U();c=class{constructor(e){this.resizeState={isResizing:!1,startX:0,startWidth:0,minWidth:150,maxWidth:()=>window.innerWidth-50,constrainedWidth:e=>Math.max(this.resizeState.minWidth,Math.min(this.resizeState.maxWidth(),e))};this.windowSize="";var n;c.instanceMap.set(e,this),this.layout={container:e,main:e.querySelector(":scope > .main"),sidebar:e.querySelector(":scope > .sidebar"),toggle:e.querySelector(":scope > .collapse-toggle")};let t=this.layout.sidebar.querySelector(":scope > .sidebar-content > .accordion");t&&((n=t==null?void 0:t.parentElement)==null||n.classList.add("has-accordion"),t.classList.add("accordion-flush")),this._initSidebarCounters(),this._initSidebarState(),(this._isCollapsible("desktop")||this._isCollapsible("mobile"))&&this._initEventListeners(),this._initResizeHandle(),c.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let i=e.querySelector(":scope > script[data-bslib-sidebar-init]");i&&e.removeChild(i)}get isClosed(){return this.layout.container.classList.contains(c.classes.COLLAPSE)}static getInstance(e){return c.instanceMap.get(e)}_isCollapsible(e="desktop"){let{container:t}=this.layout,i=e==="desktop"?"collapsibleDesktop":"collapsibleMobile",n=t.dataset[i];return n===void 0?!0:n.trim().toLowerCase()!=="false"}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){c.onReadyScheduled||(c.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{c.initCollapsibleAll(!1)}));return}let t=`.${c.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&c.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(n=>new c(n))}_initResizeHandle(){if(!this.layout.resizeHandle){let e=this._createResizeHandle();this.layout.container.appendChild(e),this.layout.resizeHandle=e,this._attachResizeEventListeners(e)}this._updateResizeAvailability()}_createResizeHandle(){let e=document.createElement("div");e.className=c.classes.RESIZE_HANDLE,e.setAttribute("role","separator"),e.setAttribute("aria-orientation","vertical"),e.setAttribute("aria-label","Resize sidebar"),e.setAttribute("tabindex","0"),e.setAttribute("aria-keyshortcuts","ArrowLeft ArrowRight Home End"),e.title="Drag to resize sidebar";let t=document.createElement("div");t.className="resize-indicator",e.appendChild(t);let i=document.createElement("div");return i.className="visually-hidden",i.textContent="Use arrow keys to resize the sidebar, Shift for larger steps, Home/End for min/max width.",e.appendChild(i),e}_attachResizeEventListeners(e){e.addEventListener("mousedown",this._onResizeStart.bind(this)),document.addEventListener("mousemove",this._onResizeMove.bind(this)),document.addEventListener("mouseup",this._onResizeEnd.bind(this)),e.addEventListener("touchstart",this._onResizeStart.bind(this),{passive:!1}),document.addEventListener("touchmove",this._onResizeMove.bind(this),{passive:!1}),document.addEventListener("touchend",this._onResizeEnd.bind(this)),e.addEventListener("keydown",this._onResizeKeyDown.bind(this)),window.addEventListener("resize",re(()=>this._getWindowSize(),()=>this._updateResizeAvailability()))}_shouldEnableResize(){let e=this._getWindowSize()==="desktop",t=!this.layout.container.classList.contains(c.classes.TRANSITIONING),i=!this.isClosed;return e&&t&&i}_onResizeStart(e){if(!this._shouldEnableResize())return;e.preventDefault();let t="touches"in e?e.touches[0].clientX:e.clientX;this.resizeState.isResizing=!0,this.resizeState.startX=t,this.resizeState.startWidth=this._getCurrentSidebarWidth(),this.layout.container.style.setProperty("--_transition-duration","0ms"),this.layout.container.classList.add(c.classes.RESIZING),document.documentElement.setAttribute(`data-bslib-${c.classes.RESIZING}`,"true"),this._dispatchResizeEvent("start",this.resizeState.startWidth)}_onResizeMove(e){if(!this.resizeState.isResizing)return;e.preventDefault();let i=("touches"in e?e.touches[0].clientX:e.clientX)-this.resizeState.startX,r=this._isRightSidebar()?this.resizeState.startWidth-i:this.resizeState.startWidth+i,o=this.resizeState.constrainedWidth(r);this._updateSidebarWidth(o),this._dispatchResizeEvent("move",o)}_onResizeEnd(){this.resizeState.isResizing&&(this.resizeState.isResizing=!1,this.layout.container.style.removeProperty("--_transition-duration"),this.layout.container.classList.remove(c.classes.RESIZING),document.documentElement.removeAttribute(`data-bslib-${c.classes.RESIZING}`),c.shinyResizeObserver.flush(),this._dispatchResizeEvent("end",this._getCurrentSidebarWidth()))}_onResizeKeyDown(e){if(!this._shouldEnableResize())return;let t=e.shiftKey?50:10,i=this._getCurrentSidebarWidth();switch(e.key){case"ArrowLeft":i=this._isRightSidebar()?i+t:i-t;break;case"ArrowRight":i=this._isRightSidebar()?i-t:i+t;break;case"Home":i=this.resizeState.minWidth;break;case"End":i=this.resizeState.maxWidth();break;default:return}e.preventDefault(),i=this.resizeState.constrainedWidth(i),this._updateSidebarWidth(i),c.shinyResizeObserver.flush(),this._dispatchResizeEvent("keyboard",i)}_getCurrentSidebarWidth(){return this.layout.sidebar.getBoundingClientRect().width||250}_updateSidebarWidth(e){let{container:t,resizeHandle:i}=this.layout;t.style.setProperty("--_sidebar-width",`${e}px`),i&&(i.setAttribute("aria-valuenow",e.toString()),i.setAttribute("aria-valuemin",this.resizeState.minWidth.toString()),i.setAttribute("aria-valuemax",this.resizeState.maxWidth().toString()))}_isRightSidebar(){return this.layout.container.classList.contains("sidebar-right")}_updateResizeAvailability(){if(!this.layout.resizeHandle)return;let e=this._shouldEnableResize();this.layout.resizeHandle.style.display=e?"":"none",this.layout.resizeHandle.setAttribute("aria-hidden",e?"false":"true"),e?this.layout.resizeHandle.setAttribute("tabindex","0"):this.layout.resizeHandle.removeAttribute("tabindex")}_dispatchResizeEvent(e,t){let i=new CustomEvent("bslib.sidebar.resize",{bubbles:!0,detail:{phase:e,width:t,sidebar:this}});this.layout.sidebar.dispatchEvent(i)}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",i=>{i.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>{this._finalizeState()}),!(this._isCollapsible("desktop")&&this._isCollapsible("mobile"))&&window.addEventListener("resize",re(()=>this._getWindowSize(),()=>this._initSidebarState()))}_initSidebarCounters(){let{container:e}=this.layout,t=`.${c.classes.LAYOUT}> .main > .${c.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function n(a){return a=a?a.parentElement:null,a&&a.classList.contains("main")&&(a=a.parentElement),a&&a.classList.contains(c.classes.LAYOUT)?a:null}let r=[e],o=n(e);for(;o;)r.unshift(o),o=n(o);let d={left:0,right:0};r.forEach(function(a){let w=a.classList.contains("sidebar-right")?d.right++:d.left++;a.style.setProperty("--_js-toggle-count-this-side",w.toString()),a.style.setProperty("--_js-toggle-count-max-side",Math.max(d.right,d.left).toString())})}_getWindowSize(){let{container:e}=this.layout;return window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-window-size").trim()}_initialToggleState(){var n,r;let{container:e}=this.layout,t=this.windowSize==="desktop"?"openDesktop":"openMobile",i=(r=(n=e.dataset[t])==null?void 0:n.trim())==null?void 0:r.toLowerCase();return i===void 0||["open","always"].includes(i)?"open":["close","closed"].includes(i)?"close":"open"}_initSidebarState(){this.windowSize=this._getWindowSize();let e=this._initialToggleState();this.toggle(e,!0)}toggle(e,t=!1){typeof e=="undefined"?e="toggle":e==="closed"&&(e="close");let{container:i,sidebar:n}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);if(e==="toggle"&&(e=r?"open":"close"),r&&e==="close"||!r&&e==="open"){t&&this._finalizeState();return}e==="open"&&(n.hidden=!1),i.classList.toggle(c.classes.TRANSITIONING,!t),i.classList.toggle(c.classes.COLLAPSE),t&&this._finalizeState()}_finalizeState(){let{container:e,sidebar:t,toggle:i}=this.layout;e.classList.remove(c.classes.TRANSITIONING),t.hidden=this.isClosed,i.setAttribute("aria-expanded",this.isClosed?"false":"true"),this._updateResizeAvailability();let n=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(n),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},f=c;f.shinyResizeObserver=new H,f.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning",RESIZE_HANDLE:"bslib-sidebar-resize-handle",RESIZING:"sidebar-resizing"},f.onReadyScheduled=!1,f.instanceMap=new WeakMap;q=class extends m{find(e){return $(e).find(`.${f.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=f.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let i=t?"open":"close";this.receiveMessage(e,{method:i})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(i){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let i=f.getInstance(e.parentElement);i&&i.toggle(t.method)}};g(q,"sidebar");k("Sidebar",f)});var _,C,R,K,V,ae=p(()=>{"use strict";E();V=class extends m{constructor(){super(...arguments);x(this,R);x(this,_,new WeakMap);x(this,C,new WeakMap)}find(t){return $(t).find(".bslib-task-button")}getValue(t){var i;return{value:(i=M(this,_).get(t))!=null?i:0,autoReset:t.hasAttribute("data-auto-reset")}}getType(){return"bslib.taskbutton"}subscribe(t,i){M(this,C).has(t)&&this.unsubscribe(t);let n=()=>{var r;M(this,_).set(t,((r=M(this,_).get(t))!=null?r:0)+1),i(!0),D(this,R,K).call(this,t,"busy")};M(this,C).set(t,n),t.addEventListener("click",n)}unsubscribe(t){let i=M(this,C).get(t);i&&t.removeEventListener("click",i)}receiveMessage(n,r){return h(this,arguments,function*(t,{state:i}){D(this,R,K).call(this,t,i)})}};_=new WeakMap,C=new WeakMap,R=new WeakSet,K=function(t,i){t.disabled=i==="busy";let n=t.querySelector("bslib-switch-inline");n&&(n.case=i)};g(V,"task-button")});function de(s){let e=P(s),t=!s.value;e.classList.toggle("disabled",t),e.setAttribute("aria-disabled",t.toString()),t?e.setAttribute("tabindex","-1"):e.removeAttribute("tabindex")}function G(s){s.scrollHeight!==0&&(s.style.height="auto",s.style.height=s.scrollHeight+"px")}function me(s){if(!s.hasAttribute("data-needs-modifier"))return;let e=P(s);if(!e.querySelector(`.${L.submitKey}`))return;let t=navigator.userAgent.indexOf("Mac")!==-1;e.querySelectorAll(`.${L.submitKey}`).forEach(r=>{let o=t?"\u2318":"Ctrl";r.textContent=`${o} \u23CE`});let i=t?"Command":"Ctrl";e.title=e.title.replace("Press Enter",`Press ${i}+Enter`);let n=e.getAttribute("aria-label");n&&e.setAttribute("aria-label",n.replace("Press Enter",`Press ${i}+Enter`))}function P(s){var t;let e=(t=s.parentElement)==null?void 0:t.querySelector(`.${L.button}`);if(e instanceof HTMLButtonElement)return e;throw new Error("Expected input_submit_textarea()'s container to have a button with class of 'bslib-submit-textarea-btn'")}function fe(s){let e=s.selectionStart,t=s.selectionEnd;s.value=s.value.substring(0,e)+` -`+s.value.substring(t),s.selectionStart=s.selectionEnd=e+1,s.dispatchEvent(new Event("input",{bubbles:!0}))}var S,L,le,X,ce=p(()=>{"use strict";E();S="textSubmitInputBinding",L={input:"bslib-input-submit-textarea",container:"bslib-submit-textarea-container",button:"bslib-submit-textarea-btn",submitKey:"bslib-submit-key"},le=new IntersectionObserver(s=>{s.forEach(e=>{e.isIntersecting&&G(e.target)})}),X=class extends m{find(e){return $(e).find(`.${L.input} textarea`)}initialize(e){de(e),G(e),me(e)}getValue(e){return $(e).data("val")}setValue(e,t){e.value=t}subscribe(e,t){function i(){$(e).data("val",e.value),e.value="",e.dispatchEvent(new Event("input",{bubbles:!0})),t("event")}let n=P(e);n.classList.contains("shiny-bound-input")?$(n).on(`shiny:inputchanged.${S}`,i):$(n).on(`click.${S}`,i),$(e).on(`input.${S}`,function(){de(e),G(e)}),$(e).on(`keydown.${S}`,function(o){if(o.key!=="Enter")return;if(!e.value){o.preventDefault();return}if(o.shiftKey)return;if(o.altKey){o.preventDefault(),fe(e);return}let d=e.hasAttribute("data-needs-modifier");if(!d){o.preventDefault(),n.click();return}let a=o.ctrlKey||o.metaKey;if(d&&a){o.preventDefault(),n.click();return}});let r=e.closest(`.${L.container}`);$(r).on(`click.${S}`,o=>{o.target.classList.contains(L.container)&&e.focus()}),le.observe(e)}unsubscribe(e){$(e).off(`.${S}`);let t=e.nextElementSibling;$(t).off(`.${S}`);let i=e.closest(`.${L.container}`);$(i).off(`.${S}`),le.unobserve(e)}receiveMessage(e,t){return h(this,null,function*(){let i=e.value;if(t.value!==void 0&&(e.value=t.value,e.dispatchEvent(new Event("input",{bubbles:!0}))),t.placeholder!==void 0&&(e.placeholder=t.placeholder),t.label!==void 0){let n=$(e).closest(`.${L.input}`).find("label");yield te(t.label,n)}t.submit&&(P(e).click(),e.value=i),t.focus&&e.focus()})}};g(X,"submit-text-area")});function B(s){if(window.Shiny)for(let[e,t]of Object.entries(s))window.Shiny.addCustomMessageHandler(e,t)}var j=p(()=>{"use strict"});function Ee(s){return h(this,null,function*(){var O,Z;let{html:e,deps:t,autohide:i,duration:n,position:r,id:o}=s;if(!window.bootstrap||!window.bootstrap.Toast){N({headline:"Bootstrap 5 Required",message:"Toast notifications require Bootstrap 5.",status:"error"});return}let d=document.getElementById(o);if(d){let T=z.get(d);T&&(T.hide(),z.delete(d)),(Z=(O=window==null?void 0:window.Shiny)==null?void 0:O.unbindAll)==null||Z.call(O,d),d.remove()}let a=ge.getOrCreateToaster(r);yield v(a,{html:e,deps:t},"beforeEnd");let u=document.getElementById(o);if(!u){N({headline:"Toast Creation Failed",message:`Failed to create toast with id "${o}".`,status:"error"});return}let w=new Y(u,{autohide:i,duration:n});z.set(u,w),w.show(),u.addEventListener("hidden.bs.toast",()=>{var T,J;(J=(T=window==null?void 0:window.Shiny)==null?void 0:T.unbindAll)==null||J.call(T,u),u.remove(),z.delete(u),a.children.length===0&&a.remove()})})}function ye(s){let{id:e}=s,t=document.getElementById(e);if(!t){N({headline:"Toast Not Found",message:`No toast with id "${e}" was found.`,status:"warning"});return}let i=z.get(t);i&&i.hide()}var ve,A,ge,Y,z,ue=p(()=>{"use strict";j();E();ve=window.bootstrap?window.bootstrap.Toast:class{},A=class{constructor(){this.containers=new Map}getOrCreateToaster(e){let t=this.containers.get(e);return(!t||!document.body.contains(t))&&(t=A._createToaster(e),document.body.appendChild(t),this.containers.set(e,t)),t}static _createToaster(e){let t=document.createElement("div");return t.className="toast-container position-fixed p-1 p-md-2",t.setAttribute("data-bslib-toast-container",e),t.classList.add(...A._positionClasses(e)),t}static _positionClasses(e){return{"top-left":["top-0","start-0"],"top-center":["top-0","start-50","translate-middle-x"],"top-right":["top-0","end-0"],"middle-left":["top-50","start-0","translate-middle-y"],"middle-center":["top-50","start-50","translate-middle"],"middle-right":["top-50","end-0","translate-middle-y"],"bottom-left":["bottom-0","start-0"],"bottom-center":["bottom-0","start-50","translate-middle-x"],"bottom-right":["bottom-0","end-0"]}[e]}},ge=new A,Y=class{constructor(e,t){this.progressBar=null;this.timeStart=0;this.timeRemaining=0;this.hideTimeoutId=null;this.isPaused=!1;this.isPointerOver=!1;this.hasFocus=!1;this.element=e,this.timeRemaining=t.duration||5e3;let i={animation:!0,autohide:!1};this.bsToast=new ve(e,i),t.autohide&&(this._addProgressBar(),this._setupInteractionPause())}show(){this.bsToast.show()}hide(){this.hideTimeoutId!==null&&(clearTimeout(this.hideTimeoutId),this.hideTimeoutId=null),this.bsToast.hide()}_addProgressBar(){this.progressBar=document.createElement("div"),this.progressBar.className="bslib-toast-progress-bar",this.progressBar.style.cssText=` +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +"use strict";(()=>{var v=(n,e)=>()=>(n&&(e=n(n=0)),e);var Me=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var re=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var m=(n,e,t)=>(re(n,e,"read from private field"),t?t.call(n):e.get(n)),y=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)};var _=(n,e,t)=>(re(n,e,"access private method"),t);var u=(n,e,t)=>new Promise((i,s)=>{var r=a=>{try{d(t.next(a))}catch(h){s(h)}},o=a=>{try{d(t.throw(a))}catch(h){s(h)}},d=a=>a.done?i(a.value):Promise.resolve(a.value).then(r,o);d((t=t.apply(n,e)).next())});function E(n,e){g&&g.inputBindings.register(new n,"bslib."+e)}function F(n,e){window.bslib=window.bslib||{},window.bslib[n]?console.error(`[bslib] Global window.bslib.${n} was already defined, using previous definition.`):window.bslib[n]=e}function P({headline:n="",message:e,status:t="warning"}){document.dispatchEvent(new CustomEvent("shiny:client-message",{detail:{headline:n,message:e,status:t}}))}function b(n,e){return Object.prototype.hasOwnProperty.call(n,e)&&n[e]!==void 0}function oe(n){let e=["a[href]","area[href]","button","details summary","input","iframe","select","textarea",'[contentEditable=""]','[contentEditable="true"]','[contentEditable="TRUE"]',"[tabindex]"],t=[':not([tabindex="-1"])',":not([disabled])"],i=e.map(r=>r+t.join("")),s=n.querySelectorAll(i.join(", "));return Array.from(s)}function p(...n){return u(this,null,function*(){if(!g)throw new Error("This function must be called in a Shiny app.");return g.renderContentAsync?yield g.renderContentAsync.apply(null,n):yield g.renderContent.apply(null,n)})}function ae(n,e){return u(this,null,function*(){if(typeof n!="undefined"){if(e.length!==1)throw new Error("labelNode must be of length 1");typeof n=="string"&&(n={html:n,deps:[]}),n.html===""?e.addClass("shiny-label-null"):(yield p(e,n),e.removeClass("shiny-label-null"))}})}var g,f,L=v(()=>{"use strict";g=window.Shiny,f=g?g.InputBinding:class{}});var K,le=v(()=>{"use strict";L();K=class extends f{find(e){return $(e).find(".accordion.bslib-accordion-input")}getValue(e){let i=this._getItemInfo(e).filter(s=>s.isOpen()).map(s=>s.value);return i.length===0?null:i}subscribe(e,t){$(e).on("shown.bs.collapse.accordionInputBinding hidden.bs.collapse.accordionInputBinding",function(i){t(!0)})}unsubscribe(e){$(e).off(".accordionInputBinding")}receiveMessage(e,t){return u(this,null,function*(){let i=t.method;if(i==="set")this._setItems(e,t);else if(i==="open")this._openItems(e,t);else if(i==="close")this._closeItems(e,t);else if(i==="remove")this._removeItem(e,t);else if(i==="insert")yield this._insertItem(e,t);else if(i==="update")yield this._updateItem(e,t);else throw new Error(`Method not yet implemented: ${i}`)})}_setItems(e,t){let i=this._getItemInfo(e),s=this._getValues(e,i,t.values);i.forEach(r=>{s.indexOf(r.value)>-1?r.show():r.hide()})}_openItems(e,t){let i=this._getItemInfo(e),s=this._getValues(e,i,t.values);i.forEach(r=>{s.indexOf(r.value)>-1&&r.show()})}_closeItems(e,t){let i=this._getItemInfo(e),s=this._getValues(e,i,t.values);i.forEach(r=>{s.indexOf(r.value)>-1&&r.hide()})}_insertItem(e,t){return u(this,null,function*(){let i=this._findItem(e,t.target);i||(i=t.position==="before"?e.firstElementChild:e.lastElementChild);let s=t.panel;if(i?yield p(i,s,t.position==="before"?"beforeBegin":"afterEnd"):yield p(e,s),this._isAutoClosing(e)){let r=$(s.html).attr("data-value");$(e).find(`[data-value="${r}"] .accordion-collapse`).attr("data-bs-parent","#"+e.id)}})}_removeItem(e,t){var r;let i=this._getItemInfo(e).filter(o=>t.target.indexOf(o.value)>-1),s=(r=window.Shiny)==null?void 0:r.unbindAll;i.forEach(o=>{s&&s(o.item),o.item.remove()})}_updateItem(e,t){return u(this,null,function*(){let i=this._findItem(e,t.target);if(!i)throw new Error(`Unable to find an accordion_panel() with a value of ${t.target}`);if(b(t,"value")&&(i.dataset.value=t.value),b(t,"body")){let r=i.querySelector(".accordion-body");yield p(r,t.body)}let s=i.querySelector(".accordion-header");if(b(t,"title")){let r=s.querySelector(".accordion-title");yield p(r,t.title)}if(b(t,"icon")){let r=s.querySelector(".accordion-button > .accordion-icon");yield p(r,t.icon)}})}_getItemInfo(e){return Array.from(e.querySelectorAll(":scope > .accordion-item")).map(i=>this._getSingleItemInfo(i))}_getSingleItemInfo(e){let t=e.querySelector(".accordion-collapse"),i=()=>$(t).hasClass("show");return{item:e,value:e.dataset.value,isOpen:i,show:()=>{i()||$(t).collapse("show")},hide:()=>{i()&&$(t).collapse("hide")}}}_getValues(e,t,i){let s=i!==!0?i:t.map(o=>o.value);return this._isAutoClosing(e)&&(s=s.slice(s.length-1,s.length)),s}_findItem(e,t){return e.querySelector(`[data-value="${t}"]`)}_isAutoClosing(e){return e.classList.contains("autoclose")}};E(K,"accordion")});var I,X=v(()=>{"use strict";I=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let i=[];for(let s of e)s.target instanceof HTMLElement&&s.target.querySelector(".shiny-bound-output")&&s.target.querySelectorAll(".shiny-bound-output").forEach(r=>{if(i.includes(r))return;let{binding:o,onResize:d}=$(r).data("shinyOutputBinding");if(!o||!o.resize)return;let a=r.shinyResizeObserver;if(a&&a!==this||(a||(r.shinyResizeObserver=this),d(r),i.push(r),!r.classList.contains("shiny-plot-output")))return;let h=r.querySelector('img:not([width="100%"])');h&&h.setAttribute("width","100%")})})}observe(e){this.resizeObserver.observe(e),this.resizeObserverEntries.push(e)}unobserve(e){let t=this.resizeObserverEntries.indexOf(e);t<0||(this.resizeObserver.unobserve(e),this.resizeObserverEntries.splice(t,1))}flush(){this.resizeObserverEntries.forEach(e=>{document.body.contains(e)||this.unobserve(e)})}}});var D,de=v(()=>{"use strict";D=class{constructor(e,t){this.watching=new Set,this.observer=new MutationObserver(i=>{let s=new Set;for(let{type:r,removedNodes:o}of i)if(r==="childList"&&o.length!==0)for(let d of o)d instanceof HTMLElement&&(d.matches(e)&&s.add(d),d.querySelector(e)&&d.querySelectorAll(e).forEach(a=>s.add(a)));if(s.size!==0)for(let r of s)try{t(r)}catch(o){console.error(o)}})}observe(e){let t=this._flush();if(this.watching.has(e)){if(!t)return}else this.watching.add(e);t?this._restartObserver():this.observer.observe(e,{childList:!0,subtree:!0})}unobserve(e){this.watching.has(e)&&(this.watching.delete(e),this._flush(),this._restartObserver())}_restartObserver(){this.observer.disconnect();for(let e of this.watching)this.observer.observe(e,{childList:!0,subtree:!0})}_flush(){let e=!1,t=Array.from(this.watching);for(let i of t)document.body.contains(i)||(this.watching.delete(i),e=!0);return e}}});var l,T,ce=v(()=>{"use strict";L();X();de();l=class{constructor(e){var t;e.removeAttribute(l.attr.ATTR_INIT),(t=e.querySelector(`script[${l.attr.ATTR_INIT}]`))==null||t.remove(),this.card=e,l.instanceMap.set(e,this),l.shinyResizeObserver.observe(this.card),l.cardRemovedObserver.observe(document.body),this._addEventListeners(),this.overlay=this._createOverlay(),this._setShinyInput(),this._exitFullScreenOnEscape=this._exitFullScreenOnEscape.bind(this),this._trapFocusExit=this._trapFocusExit.bind(this)}enterFullScreen(e){var t;e&&e.preventDefault(),this.card.id&&this.overlay.anchor.setAttribute("aria-controls",this.card.id),document.addEventListener("keydown",this._exitFullScreenOnEscape,!1),document.addEventListener("keydown",this._trapFocusExit,!0),this.card.setAttribute(l.attr.ATTR_FULL_SCREEN,"true"),document.body.classList.add(l.attr.CLASS_HAS_FULL_SCREEN),this.card.insertAdjacentElement("beforebegin",this.overlay.container),(!this.card.contains(document.activeElement)||(t=document.activeElement)!=null&&t.classList.contains(l.attr.CLASS_FULL_SCREEN_ENTER))&&(this.card.setAttribute("tabindex","-1"),this.card.focus()),this._emitFullScreenEvent(!0),this._setShinyInput()}exitFullScreen(){document.removeEventListener("keydown",this._exitFullScreenOnEscape,!1),document.removeEventListener("keydown",this._trapFocusExit,!0),this.overlay.container.remove(),this.card.setAttribute(l.attr.ATTR_FULL_SCREEN,"false"),this.card.removeAttribute("tabindex"),document.body.classList.remove(l.attr.CLASS_HAS_FULL_SCREEN),this._emitFullScreenEvent(!1),this._setShinyInput()}_setShinyInput(){if(!this.card.classList.contains(l.attr.CLASS_SHINY_INPUT)||!g)return;if(!g.setInputValue){setTimeout(()=>this._setShinyInput(),0);return}let e=this.card.getAttribute(l.attr.ATTR_FULL_SCREEN);g.setInputValue(this.card.id+"_full_screen",e==="true")}_emitFullScreenEvent(e){let t=new CustomEvent("bslib.card",{bubbles:!0,detail:{fullScreen:e}});this.card.dispatchEvent(t)}_addEventListeners(){let e=this.card.querySelector(`:scope > * > .${l.attr.CLASS_FULL_SCREEN_ENTER}`);e&&e.addEventListener("click",t=>this.enterFullScreen(t))}_exitFullScreenOnEscape(e){if(!(e.target instanceof HTMLElement))return;let t=["select[open]","input[aria-expanded='true']"];e.target.matches(t.join(", "))||e.key==="Escape"&&this.exitFullScreen()}_trapFocusExit(e){if(!(e instanceof KeyboardEvent)||e.key!=="Tab")return;let t=e.target===this.card,i=e.target===this.overlay.anchor,s=this.card.contains(e.target),r=()=>{e.preventDefault(),e.stopImmediatePropagation()};if(!(s||t||i)){r(),this.card.focus();return}let o=oe(this.card).filter(C=>!C.classList.contains(l.attr.CLASS_FULL_SCREEN_ENTER));if(!(o.length>0)){r(),this.overlay.anchor.focus();return}if(t)return;let a=o[o.length-1],h=e.target===a;if(i&&e.shiftKey){r(),a.focus();return}if(h&&!e.shiftKey){r(),this.overlay.anchor.focus();return}}_createOverlay(){let e=document.createElement("div");e.id=l.attr.ID_FULL_SCREEN_OVERLAY,e.onclick=this.exitFullScreen.bind(this);let t=this._createOverlayCloseAnchor();return e.appendChild(t),{container:e,anchor:t}}_createOverlayCloseAnchor(){let e=document.createElement("a");return e.classList.add(l.attr.CLASS_FULL_SCREEN_EXIT),e.tabIndex=0,e.setAttribute("aria-expanded","true"),e.setAttribute("aria-label","Close card"),e.setAttribute("role","button"),e.onclick=t=>{this.exitFullScreen(),t.stopPropagation()},e.onkeydown=t=>{(t.key==="Enter"||t.key===" ")&&this.exitFullScreen()},e.innerHTML=this._overlayCloseHtml(),e}_overlayCloseHtml(){return"Close "}static getInstance(e){return l.instanceMap.get(e)}static initializeAllCards(e=!0){if(document.readyState==="loading"){l.onReadyScheduled||(l.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{l.initializeAllCards(!1)}));return}e&&l.shinyResizeObserver.flush();let t=`.${l.attr.CLASS_CARD}[${l.attr.ATTR_INIT}]`;if(!document.querySelector(t))return;document.querySelectorAll(t).forEach(s=>new l(s))}},T=l;T.attr={ATTR_INIT:"data-bslib-card-init",CLASS_CARD:"bslib-card",ATTR_FULL_SCREEN:"data-full-screen",CLASS_HAS_FULL_SCREEN:"bslib-has-full-screen",CLASS_FULL_SCREEN_ENTER:"bslib-full-screen-enter",CLASS_FULL_SCREEN_EXIT:"bslib-full-screen-exit",ID_FULL_SCREEN_OVERLAY:"bslib-full-screen-overlay",CLASS_SHINY_INPUT:"bslib-card-input"},T.shinyResizeObserver=new I,T.cardRemovedObserver=new D(`.${l.attr.CLASS_CARD}`,e=>{let t=l.getInstance(e);t&&t.card.getAttribute(l.attr.ATTR_FULL_SCREEN)==="true"&&t.exitFullScreen()}),T.instanceMap=new WeakMap,T.onReadyScheduled=!1;F("Card",T)});function ue(n,e){let t=n();return()=>{let i=n();i!==t&&e(),t=i}}var c,S,G,he=v(()=>{"use strict";L();X();c=class{constructor(e){this.resizeState={isResizing:!1,startX:0,startWidth:0,minWidth:150,maxWidth:()=>window.innerWidth-50,constrainedWidth:e=>Math.max(this.resizeState.minWidth,Math.min(this.resizeState.maxWidth(),e))};this.windowSize="";var s;c.instanceMap.set(e,this),this.layout={container:e,main:e.querySelector(":scope > .main"),sidebar:e.querySelector(":scope > .sidebar"),toggle:e.querySelector(":scope > .collapse-toggle")};let t=this.layout.sidebar.querySelector(":scope > .sidebar-content > .accordion");t&&((s=t==null?void 0:t.parentElement)==null||s.classList.add("has-accordion"),t.classList.add("accordion-flush")),this._initSidebarCounters(),this._initSidebarState(),(this._isCollapsible("desktop")||this._isCollapsible("mobile"))&&this._initEventListeners(),this._initResizeHandle(),c.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let i=e.querySelector(":scope > script[data-bslib-sidebar-init]");i&&e.removeChild(i)}get isClosed(){return this.layout.container.classList.contains(c.classes.COLLAPSE)}static getInstance(e){return c.instanceMap.get(e)}_isCollapsible(e="desktop"){let{container:t}=this.layout,i=e==="desktop"?"collapsibleDesktop":"collapsibleMobile",s=t.dataset[i];return s===void 0?!0:s.trim().toLowerCase()!=="false"}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){c.onReadyScheduled||(c.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{c.initCollapsibleAll(!1)}));return}let t=`.${c.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&c.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(s=>new c(s))}_initResizeHandle(){if(!this.layout.resizeHandle){let e=this._createResizeHandle();this.layout.container.appendChild(e),this.layout.resizeHandle=e,this._attachResizeEventListeners(e)}this._updateResizeAvailability()}_createResizeHandle(){let e=document.createElement("div");e.className=c.classes.RESIZE_HANDLE,e.setAttribute("role","separator"),e.setAttribute("aria-orientation","vertical"),e.setAttribute("aria-label","Resize sidebar"),e.setAttribute("tabindex","0"),e.setAttribute("aria-keyshortcuts","ArrowLeft ArrowRight Home End"),e.title="Drag to resize sidebar";let t=document.createElement("div");t.className="resize-indicator",e.appendChild(t);let i=document.createElement("div");return i.className="visually-hidden",i.textContent="Use arrow keys to resize the sidebar, Shift for larger steps, Home/End for min/max width.",e.appendChild(i),e}_attachResizeEventListeners(e){e.addEventListener("mousedown",this._onResizeStart.bind(this)),document.addEventListener("mousemove",this._onResizeMove.bind(this)),document.addEventListener("mouseup",this._onResizeEnd.bind(this)),e.addEventListener("touchstart",this._onResizeStart.bind(this),{passive:!1}),document.addEventListener("touchmove",this._onResizeMove.bind(this),{passive:!1}),document.addEventListener("touchend",this._onResizeEnd.bind(this)),e.addEventListener("keydown",this._onResizeKeyDown.bind(this)),window.addEventListener("resize",ue(()=>this._getWindowSize(),()=>this._updateResizeAvailability()))}_shouldEnableResize(){let e=this._getWindowSize()==="desktop",t=!this.layout.container.classList.contains(c.classes.TRANSITIONING),i=!this.isClosed;return e&&t&&i}_onResizeStart(e){if(!this._shouldEnableResize())return;e.preventDefault();let t="touches"in e?e.touches[0].clientX:e.clientX;this.resizeState.isResizing=!0,this.resizeState.startX=t,this.resizeState.startWidth=this._getCurrentSidebarWidth(),this.layout.container.style.setProperty("--_transition-duration","0ms"),this.layout.container.classList.add(c.classes.RESIZING),document.documentElement.setAttribute(`data-bslib-${c.classes.RESIZING}`,"true"),this._dispatchResizeEvent("start",this.resizeState.startWidth)}_onResizeMove(e){if(!this.resizeState.isResizing)return;e.preventDefault();let i=("touches"in e?e.touches[0].clientX:e.clientX)-this.resizeState.startX,r=this._isRightSidebar()?this.resizeState.startWidth-i:this.resizeState.startWidth+i,o=this.resizeState.constrainedWidth(r);this._updateSidebarWidth(o),this._dispatchResizeEvent("move",o)}_onResizeEnd(){this.resizeState.isResizing&&(this.resizeState.isResizing=!1,this.layout.container.style.removeProperty("--_transition-duration"),this.layout.container.classList.remove(c.classes.RESIZING),document.documentElement.removeAttribute(`data-bslib-${c.classes.RESIZING}`),c.shinyResizeObserver.flush(),this._dispatchResizeEvent("end",this._getCurrentSidebarWidth()))}_onResizeKeyDown(e){if(!this._shouldEnableResize())return;let t=e.shiftKey?50:10,i=this._getCurrentSidebarWidth();switch(e.key){case"ArrowLeft":i=this._isRightSidebar()?i+t:i-t;break;case"ArrowRight":i=this._isRightSidebar()?i-t:i+t;break;case"Home":i=this.resizeState.minWidth;break;case"End":i=this.resizeState.maxWidth();break;default:return}e.preventDefault(),i=this.resizeState.constrainedWidth(i),this._updateSidebarWidth(i),c.shinyResizeObserver.flush(),this._dispatchResizeEvent("keyboard",i)}_getCurrentSidebarWidth(){return this.layout.sidebar.getBoundingClientRect().width||250}_updateSidebarWidth(e){let{container:t,resizeHandle:i}=this.layout;t.style.setProperty("--_sidebar-width",`${e}px`),i&&(i.setAttribute("aria-valuenow",e.toString()),i.setAttribute("aria-valuemin",this.resizeState.minWidth.toString()),i.setAttribute("aria-valuemax",this.resizeState.maxWidth().toString()))}_isRightSidebar(){return this.layout.container.classList.contains("sidebar-right")}_updateResizeAvailability(){if(!this.layout.resizeHandle)return;let e=this._shouldEnableResize();this.layout.resizeHandle.style.display=e?"":"none",this.layout.resizeHandle.setAttribute("aria-hidden",e?"false":"true"),e?this.layout.resizeHandle.setAttribute("tabindex","0"):this.layout.resizeHandle.removeAttribute("tabindex")}_dispatchResizeEvent(e,t){let i=new CustomEvent("bslib.sidebar.resize",{bubbles:!0,detail:{phase:e,width:t,sidebar:this}});this.layout.sidebar.dispatchEvent(i)}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",i=>{i.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>{this._finalizeState()}),!(this._isCollapsible("desktop")&&this._isCollapsible("mobile"))&&window.addEventListener("resize",ue(()=>this._getWindowSize(),()=>this._initSidebarState()))}_initSidebarCounters(){let{container:e}=this.layout,t=`.${c.classes.LAYOUT}> .main > .${c.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function s(a){return a=a?a.parentElement:null,a&&a.classList.contains("main")&&(a=a.parentElement),a&&a.classList.contains(c.classes.LAYOUT)?a:null}let r=[e],o=s(e);for(;o;)r.unshift(o),o=s(o);let d={left:0,right:0};r.forEach(function(a){let C=a.classList.contains("sidebar-right")?d.right++:d.left++;a.style.setProperty("--_js-toggle-count-this-side",C.toString()),a.style.setProperty("--_js-toggle-count-max-side",Math.max(d.right,d.left).toString())})}_getWindowSize(){let{container:e}=this.layout;return window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-window-size").trim()}_initialToggleState(){var s,r;let{container:e}=this.layout,t=this.windowSize==="desktop"?"openDesktop":"openMobile",i=(r=(s=e.dataset[t])==null?void 0:s.trim())==null?void 0:r.toLowerCase();return i===void 0||["open","always"].includes(i)?"open":["close","closed"].includes(i)?"close":"open"}_initSidebarState(){this.windowSize=this._getWindowSize();let e=this._initialToggleState();this.toggle(e,!0)}toggle(e,t=!1){typeof e=="undefined"?e="toggle":e==="closed"&&(e="close");let{container:i,sidebar:s}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);if(e==="toggle"&&(e=r?"open":"close"),r&&e==="close"||!r&&e==="open"){t&&this._finalizeState();return}e==="open"&&(s.hidden=!1),i.classList.toggle(c.classes.TRANSITIONING,!t),i.classList.toggle(c.classes.COLLAPSE),t&&this._finalizeState()}_finalizeState(){let{container:e,sidebar:t,toggle:i}=this.layout;e.classList.remove(c.classes.TRANSITIONING),t.hidden=this.isClosed,i.setAttribute("aria-expanded",this.isClosed?"false":"true"),this._updateResizeAvailability();let s=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(s),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},S=c;S.shinyResizeObserver=new I,S.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning",RESIZE_HANDLE:"bslib-sidebar-resize-handle",RESIZING:"sidebar-resizing"},S.onReadyScheduled=!1,S.instanceMap=new WeakMap;G=class extends f{find(e){return $(e).find(`.${S.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=S.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let i=t?"open":"close";this.receiveMessage(e,{method:i})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(i){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let i=S.getInstance(e.parentElement);i&&i.toggle(t.method)}};E(G,"sidebar");F("Sidebar",S)});var A,R,k,Y,j,be=v(()=>{"use strict";L();j=class extends f{constructor(){super(...arguments);y(this,k);y(this,A,new WeakMap);y(this,R,new WeakMap)}find(t){return $(t).find(".bslib-task-button")}getValue(t){var i;return{value:(i=m(this,A).get(t))!=null?i:0,autoReset:t.hasAttribute("data-auto-reset")}}getType(){return"bslib.taskbutton"}subscribe(t,i){m(this,R).has(t)&&this.unsubscribe(t);let s=()=>{var r;m(this,A).set(t,((r=m(this,A).get(t))!=null?r:0)+1),i(!0),_(this,k,Y).call(this,t,"busy")};m(this,R).set(t,s),t.addEventListener("click",s)}unsubscribe(t){let i=m(this,R).get(t);i&&t.removeEventListener("click",i)}receiveMessage(s,r){return u(this,arguments,function*(t,{state:i}){_(this,k,Y).call(this,t,i)})}};A=new WeakMap,R=new WeakMap,k=new WeakSet,Y=function(t,i){t.disabled=i==="busy";let s=t.querySelector("bslib-switch-inline");s&&(s.case=i)};E(j,"task-button")});var z,x,W,pe,Z,me=v(()=>{"use strict";L();Z=class extends f{constructor(){super(...arguments);y(this,W);y(this,z,new WeakMap);y(this,x,new WeakMap)}find(t){return $(t).find(".bslib-toolbar-input-button")}getValue(t){var i;return(i=m(this,z).get(t))!=null?i:0}getType(){return"bslib.toolbar.button"}subscribe(t,i){m(this,x).has(t)&&this.unsubscribe(t);let s=()=>{var r;m(this,z).set(t,((r=m(this,z).get(t))!=null?r:0)+1),_(this,W,pe).call(this,t),i(!0)};m(this,x).set(t,s),t.addEventListener("click",s)}unsubscribe(t){let i=m(this,x).get(t);i&&t.removeEventListener("click",i)}receiveMessage(t,i){return u(this,null,function*(){if(b(i,"disabled")&&i.disabled&&(t.disabled=i.disabled),b(i,"label")&&i.label!==void 0){let s=t.querySelector(".bslib-toolbar-label");yield p(s,i.label)}if(b(i,"showLabel")){let s=t.querySelector(".bslib-toolbar-label");i.showLabel===!1?(s.setAttribute("hidden",""),t.setAttribute("data-type","icon")):(s.removeAttribute("hidden"),t.setAttribute("data-type","both"))}if(b(i,"icon")&&i.icon!==void 0){let s=t.querySelector(".bslib-toolbar-icon");yield p(s,i.icon)}})}};z=new WeakMap,x=new WeakMap,W=new WeakSet,pe=function(t){let i=t.closest("bslib-tooltip");i&&i.hide()};E(Z,"toolbar-input-button")});var q,fe,J,ve=v(()=>{"use strict";L();J=class extends f{constructor(){super(...arguments);y(this,q)}find(t){return $(t).find(".bslib-toolbar-input-select")}getId(t){return t.id||""}getValue(t){let i=t.querySelector("select");return i==null?void 0:i.value}subscribe(t,i){let s=t.querySelector("select");s&&$(s).on("change.bslibToolbarInputSelect",()=>{_(this,q,fe).call(this,t),i(!1)})}unsubscribe(t){let i=t.querySelector("select");i&&$(i).off(".bslibToolbarInputSelect")}receiveMessage(t,i){return u(this,null,function*(){let s=t.querySelector("select");if(b(i,"label")&&i.label!==void 0){let r=t.querySelector(".bslib-toolbar-label");yield p(r,i.label)}if(b(i,"showLabel")){let r=t.querySelector(".bslib-toolbar-label");i.showLabel===!1?r.classList.add("visually-hidden"):r.classList.remove("visually-hidden")}if(b(i,"icon")&&i.icon!==void 0){let r=t.querySelector(".bslib-toolbar-icon");yield p(r,i.icon)}b(i,"options")&&s&&i.options&&(s.innerHTML=i.options),b(i,"value")&&s&&i.value!==void 0&&(s.value=i.value,$(s).trigger("change"))})}};q=new WeakSet,fe=function(t){let i=t.closest("bslib-tooltip");i&&i.hide()};E(J,"toolbar-input-select")});function Ee(n){let e=U(n),t=!n.value;e.classList.toggle("disabled",t),e.setAttribute("aria-disabled",t.toString()),t?e.setAttribute("tabindex","-1"):e.removeAttribute("tabindex")}function ee(n){n.scrollHeight!==0&&(n.style.height="auto",n.style.height=n.scrollHeight+"px")}function we(n){if(!n.hasAttribute("data-needs-modifier"))return;let e=U(n);if(!e.querySelector(`.${w.submitKey}`))return;let t=navigator.userAgent.indexOf("Mac")!==-1;e.querySelectorAll(`.${w.submitKey}`).forEach(r=>{let o=t?"\u2318":"Ctrl";r.textContent=`${o} \u23CE`});let i=t?"Command":"Ctrl";e.title=e.title.replace("Press Enter",`Press ${i}+Enter`);let s=e.getAttribute("aria-label");s&&e.setAttribute("aria-label",s.replace("Press Enter",`Press ${i}+Enter`))}function U(n){var t;let e=(t=n.parentElement)==null?void 0:t.querySelector(`.${w.button}`);if(e instanceof HTMLButtonElement)return e;throw new Error("Expected input_submit_textarea()'s container to have a button with class of 'bslib-submit-textarea-btn'")}function He(n){let e=n.selectionStart,t=n.selectionEnd;n.value=n.value.substring(0,e)+` +`+n.value.substring(t),n.selectionStart=n.selectionEnd=e+1,n.dispatchEvent(new Event("input",{bubbles:!0}))}var M,w,ge,Q,ye=v(()=>{"use strict";L();M="textSubmitInputBinding",w={input:"bslib-input-submit-textarea",container:"bslib-submit-textarea-container",button:"bslib-submit-textarea-btn",submitKey:"bslib-submit-key"},ge=new IntersectionObserver(n=>{n.forEach(e=>{e.isIntersecting&&ee(e.target)})}),Q=class extends f{find(e){return $(e).find(`.${w.input} textarea`)}initialize(e){Ee(e),ee(e),we(e)}getValue(e){return $(e).data("val")}setValue(e,t){e.value=t}subscribe(e,t){function i(){$(e).data("val",e.value),e.value="",e.dispatchEvent(new Event("input",{bubbles:!0})),t("event")}let s=U(e);s.classList.contains("shiny-bound-input")?$(s).on(`shiny:inputchanged.${M}`,i):$(s).on(`click.${M}`,i),$(e).on(`input.${M}`,function(){Ee(e),ee(e)}),$(e).on(`keydown.${M}`,function(o){if(o.key!=="Enter")return;if(!e.value){o.preventDefault();return}if(o.shiftKey)return;if(o.altKey){o.preventDefault(),He(e);return}let d=e.hasAttribute("data-needs-modifier");if(!d){o.preventDefault(),s.click();return}let a=o.ctrlKey||o.metaKey;if(d&&a){o.preventDefault(),s.click();return}});let r=e.closest(`.${w.container}`);$(r).on(`click.${M}`,o=>{o.target.classList.contains(w.container)&&e.focus()}),ge.observe(e)}unsubscribe(e){$(e).off(`.${M}`);let t=e.nextElementSibling;$(t).off(`.${M}`);let i=e.closest(`.${w.container}`);$(i).off(`.${M}`),ge.unobserve(e)}receiveMessage(e,t){return u(this,null,function*(){let i=e.value;if(t.value!==void 0&&(e.value=t.value,e.dispatchEvent(new Event("input",{bubbles:!0}))),t.placeholder!==void 0&&(e.placeholder=t.placeholder),t.label!==void 0){let s=$(e).closest(`.${w.input}`).find("label");yield ae(t.label,s)}t.submit&&(U(e).click(),e.value=i),t.focus&&e.focus()})}};E(Q,"submit-text-area")});function V(n){if(window.Shiny)for(let[e,t]of Object.entries(n))window.Shiny.addCustomMessageHandler(e,t)}var te=v(()=>{"use strict"});function Ie(n){return u(this,null,function*(){var B,se;let{html:e,deps:t,autohide:i,duration:s,position:r,id:o}=n;if(!window.bootstrap||!window.bootstrap.Toast){P({headline:"Bootstrap 5 Required",message:"Toast notifications require Bootstrap 5.",status:"error"});return}let d=document.getElementById(o);if(d){let H=N.get(d);H&&(H.hide(),N.delete(d)),(se=(B=window==null?void 0:window.Shiny)==null?void 0:B.unbindAll)==null||se.call(B,d),d.remove()}let a=Ce.getOrCreateToaster(r);yield p(a,{html:e,deps:t},"beforeEnd");let h=document.getElementById(o);if(!h){P({headline:"Toast Creation Failed",message:`Failed to create toast with id "${o}".`,status:"error"});return}let C=new ie(h,{autohide:i,duration:s});N.set(h,C),C.show(),h.addEventListener("hidden.bs.toast",()=>{var H,ne;(ne=(H=window==null?void 0:window.Shiny)==null?void 0:H.unbindAll)==null||ne.call(H,h),h.remove(),N.delete(h),a.children.length===0&&a.remove()})})}function Ae(n){let{id:e}=n,t=document.getElementById(e);if(!t){P({headline:"Toast Not Found",message:`No toast with id "${e}" was found.`,status:"warning"});return}let i=N.get(t);i&&i.hide()}var _e,O,Ce,ie,N,Le=v(()=>{"use strict";te();L();_e=window.bootstrap?window.bootstrap.Toast:class{},O=class{constructor(){this.containers=new Map}getOrCreateToaster(e){let t=this.containers.get(e);return(!t||!document.body.contains(t))&&(t=O._createToaster(e),document.body.appendChild(t),this.containers.set(e,t)),t}static _createToaster(e){let t=document.createElement("div");return t.className="toast-container position-fixed p-1 p-md-2",t.setAttribute("data-bslib-toast-container",e),t.classList.add(...O._positionClasses(e)),t}static _positionClasses(e){return{"top-left":["top-0","start-0"],"top-center":["top-0","start-50","translate-middle-x"],"top-right":["top-0","end-0"],"middle-left":["top-50","start-0","translate-middle-y"],"middle-center":["top-50","start-50","translate-middle"],"middle-right":["top-50","end-0","translate-middle-y"],"bottom-left":["bottom-0","start-0"],"bottom-center":["bottom-0","start-50","translate-middle-x"],"bottom-right":["bottom-0","end-0"]}[e]}},Ce=new O,ie=class{constructor(e,t){this.progressBar=null;this.timeStart=0;this.timeRemaining=0;this.hideTimeoutId=null;this.isPaused=!1;this.isPointerOver=!1;this.hasFocus=!1;this.element=e,this.timeRemaining=t.duration||5e3;let i={animation:!0,autohide:!1};this.bsToast=new _e(e,i),t.autohide&&(this._addProgressBar(),this._setupInteractionPause())}show(){this.bsToast.show()}hide(){this.hideTimeoutId!==null&&(clearTimeout(this.hideTimeoutId),this.hideTimeoutId=null),this.bsToast.hide()}_addProgressBar(){this.progressBar=document.createElement("div"),this.progressBar.className="bslib-toast-progress-bar",this.progressBar.style.cssText=` animation: bslib-toast-progress ${this.timeRemaining}ms linear forwards; animation-play-state: running; - `;let e=this.element.querySelector(".toast-header");e?e.insertBefore(this.progressBar,e.firstChild):this.element.insertBefore(this.progressBar,this.element.firstChild)}_setupInteractionPause(){this.timeStart=Date.now(),this._startHideTimeout(this.timeRemaining),this.element.addEventListener("pointerenter",()=>this._handlePointerEnter()),this.element.addEventListener("pointerleave",()=>this._handlePointerLeave()),this.element.addEventListener("focusin",()=>this._handleFocusIn()),this.element.addEventListener("focusout",()=>this._handleFocusOut())}_handlePointerEnter(){this.isPointerOver=!0,this._pause()}_handlePointerLeave(){this.isPointerOver=!1,this.hasFocus||this._resume()}_handleFocusIn(){this.hasFocus=!0,this._pause()}_handleFocusOut(){this.hasFocus=!1,this.isPointerOver||this._resume()}_pause(){if(this.isPaused)return;this.isPaused=!0;let e=Date.now()-this.timeStart;this.timeRemaining=Math.max(100,this.timeRemaining-e),this.hideTimeoutId!==null&&clearTimeout(this.hideTimeoutId),this.progressBar&&(this.progressBar.style.animationPlayState="paused")}_resume(){this.isPaused&&(this.isPaused=!1,this.timeStart=Date.now(),this._startHideTimeout(this.timeRemaining),this.progressBar&&(this.progressBar.style.animationPlayState="running"))}_startHideTimeout(e){this.hideTimeoutId!==null&&clearTimeout(this.hideTimeoutId),this.hideTimeoutId=window.setTimeout(()=>{this.bsToast.hide()},e)}},z=new WeakMap;B({"bslib.show-toast":Ee,"bslib.hide-toast":ye})});var Le=pe(be=>{ie();ne();oe();ae();ce();ue();E();j();var Se={"bslib.toggle-input-binary":s=>h(be,null,function*(){let e=document.getElementById(s.id);e||console.warn("[bslib.toggle-input-binary] No element found",s);let t=$(e).data("shiny-input-binding");if(!(t instanceof m)){console.warn("[bslib.toggle-input-binary] No input binding found",s);return}let i=s.value;typeof i=="undefined"&&(i=!t.getValue(e)),yield t.receiveMessage(e,{value:i})})};window.Shiny&&B(Se);function he(){let s=document.createElement("div");s.innerHTML=` + `;let e=this.element.querySelector(".toast-header");e?e.insertBefore(this.progressBar,e.firstChild):this.element.insertBefore(this.progressBar,this.element.firstChild)}_setupInteractionPause(){this.timeStart=Date.now(),this._startHideTimeout(this.timeRemaining),this.element.addEventListener("pointerenter",()=>this._handlePointerEnter()),this.element.addEventListener("pointerleave",()=>this._handlePointerLeave()),this.element.addEventListener("focusin",()=>this._handleFocusIn()),this.element.addEventListener("focusout",()=>this._handleFocusOut())}_handlePointerEnter(){this.isPointerOver=!0,this._pause()}_handlePointerLeave(){this.isPointerOver=!1,this.hasFocus||this._resume()}_handleFocusIn(){this.hasFocus=!0,this._pause()}_handleFocusOut(){this.hasFocus=!1,this.isPointerOver||this._resume()}_pause(){if(this.isPaused)return;this.isPaused=!0;let e=Date.now()-this.timeStart;this.timeRemaining=Math.max(100,this.timeRemaining-e),this.hideTimeoutId!==null&&clearTimeout(this.hideTimeoutId),this.progressBar&&(this.progressBar.style.animationPlayState="paused")}_resume(){this.isPaused&&(this.isPaused=!1,this.timeStart=Date.now(),this._startHideTimeout(this.timeRemaining),this.progressBar&&(this.progressBar.style.animationPlayState="running"))}_startHideTimeout(e){this.hideTimeoutId!==null&&clearTimeout(this.hideTimeoutId),this.hideTimeoutId=window.setTimeout(()=>{this.bsToast.hide()},e)}},N=new WeakMap;V({"bslib.show-toast":Ie,"bslib.hide-toast":Ae})});var ze=Me(Te=>{le();ce();he();be();me();ve();ye();Le();L();te();var Re={"bslib.toggle-input-binary":n=>u(Te,null,function*(){let e=document.getElementById(n.id);e||console.warn("[bslib.toggle-input-binary] No element found",n);let t=$(e).data("shiny-input-binding");if(!(t instanceof f)){console.warn("[bslib.toggle-input-binary] No input binding found",n);return}let i=n.value;typeof i=="undefined"&&(i=!t.getValue(e)),yield t.receiveMessage(e,{value:i})})};window.Shiny&&V(Re);function Se(){let n=document.createElement("div");n.innerHTML=` `,document.body.appendChild(s.children[0])}document.readyState==="complete"?he():document.addEventListener("DOMContentLoaded",he)});Le();})(); + `,document.body.appendChild(n.children[0])}document.readyState==="complete"?Se():document.addEventListener("DOMContentLoaded",Se)});ze();})(); //# sourceMappingURL=components.min.js.map diff --git a/inst/components/dist/web-components.js b/inst/components/dist/web-components.js index 5de0ba306..b17a2d8c7 100644 --- a/inst/components/dist/web-components.js +++ b/inst/components/dist/web-components.js @@ -1,4 +1,4 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ "use strict"; (() => { var __defProp = Object.defineProperty; diff --git a/inst/components/dist/web-components.min.js b/inst/components/dist/web-components.min.js index 303f64562..bca4bf3f9 100644 --- a/inst/components/dist/web-components.min.js +++ b/inst/components/dist/web-components.min.js @@ -1,4 +1,4 @@ -/*! bslib 0.10.0 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ +/*! bslib 0.10.0.9000 | (c) 2012-2026 RStudio, PBC. | License: MIT + file LICENSE */ "use strict";(()=>{var He=Object.defineProperty,Ze=Object.defineProperties,et=Object.getOwnPropertyDescriptor,tt=Object.getOwnPropertyDescriptors;var xe=Object.getOwnPropertySymbols;var it=Object.prototype.hasOwnProperty,st=Object.prototype.propertyIsEnumerable;var Me=(n,t,e)=>t in n?He(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,k=(n,t)=>{for(var e in t||(t={}))it.call(t,e)&&Me(n,e,t[e]);if(xe)for(var e of xe(t))st.call(t,e)&&Me(n,e,t[e]);return n},Q=(n,t)=>Ze(n,tt(t));var y=(n,t,e,i)=>{for(var s=i>1?void 0:i?et(t,e):t,r=n.length-1,o;r>=0;r--)(o=n[r])&&(s=(i?o(t,e,s):o(s))||s);return i&&s&&He(t,e,s),s};var oe=(n,t,e)=>new Promise((i,s)=>{var r=a=>{try{c(e.next(a))}catch(l){s(l)}},o=a=>{try{c(e.throw(a))}catch(l){s(l)}},c=a=>a.done?i(a.value):Promise.resolve(a.value).then(r,o);c((e=e.apply(n,t)).next())});var nt=(n,t)=>t.kind==="method"&&t.descriptor&&!("value"in t.descriptor)?Q(k({},t),{finisher(e){e.createProperty(t.key,n)}}):{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:t.key,initializer(){typeof t.initializer=="function"&&(this[t.key]=t.initializer.call(this))},finisher(e){e.createProperty(t.key,n)}},rt=(n,t,e)=>{t.constructor.createProperty(e,n)};function g(n){return(t,e)=>e!==void 0?rt(n,t,e):nt(n,t)}var ae,Nt=((ae=window.HTMLSlotElement)===null||ae===void 0?void 0:ae.prototype.assignedElements)!=null?(n,t)=>n.assignedElements(t):(n,t)=>n.assignedNodes(t).filter(e=>e.nodeType===Node.ELEMENT_NODE);var X=window,Y=X.ShadowRoot&&(X.ShadyCSS===void 0||X.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,le=Symbol(),Le=new WeakMap,j=class{constructor(t,e,i){if(this._$cssResult$=!0,i!==le)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(Y&&t===void 0){let i=e!==void 0&&e.length===1;i&&(t=Le.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),i&&Le.set(e,t))}return t}toString(){return this.cssText}},Oe=n=>new j(typeof n=="string"?n:n+"",void 0,le),b=(n,...t)=>{let e=n.length===1?n[0]:t.reduce((i,s,r)=>i+(o=>{if(o._$cssResult$===!0)return o.cssText;if(typeof o=="number")return o;throw Error("Value passed to 'css' function must be a 'css' function result: "+o+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+n[r+1],n[0]);return new j(e,n,le)},he=(n,t)=>{Y?n.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet):t.forEach(e=>{let i=document.createElement("style"),s=X.litNonce;s!==void 0&&i.setAttribute("nonce",s),i.textContent=e.cssText,n.appendChild(i)})},Z=Y?n=>n:n=>n instanceof CSSStyleSheet?(t=>{let e="";for(let i of t.cssRules)e+=i.cssText;return Oe(e)})(n):n;var de,ee=window,Pe=ee.trustedTypes,ot=Pe?Pe.emptyScript:"",Ne=ee.reactiveElementPolyfillSupport,pe={toAttribute(n,t){switch(t){case Boolean:n=n?ot:null;break;case Object:case Array:n=n==null?n:JSON.stringify(n)}return n},fromAttribute(n,t){let e=n;switch(t){case Boolean:e=n!==null;break;case Number:e=n===null?null:Number(n);break;case Object:case Array:try{e=JSON.parse(n)}catch(i){e=null}}return e}},ze=(n,t)=>t!==n&&(t==t||n==n),ce={attribute:!0,type:String,converter:pe,reflect:!1,hasChanged:ze},ue="finalized",E=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;this.finalize(),((e=this.h)!==null&&e!==void 0?e:this.h=[]).push(t)}static get observedAttributes(){this.finalize();let t=[];return this.elementProperties.forEach((e,i)=>{let s=this._$Ep(i,e);s!==void 0&&(this._$Ev.set(s,i),t.push(s))}),t}static createProperty(t,e=ce){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){let i=typeof t=="symbol"?Symbol():"__"+t,s=this.getPropertyDescriptor(t,i,e);s!==void 0&&Object.defineProperty(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(s){let r=this[t];this[e]=s,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||ce}static finalize(){if(this.hasOwnProperty(ue))return!1;this[ue]=!0;let t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let e=this.properties,i=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(let s of i)this.createProperty(s,e[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let i=new Set(t.flat(1/0).reverse());for(let s of i)e.unshift(Z(s))}else t!==void 0&&e.push(Z(t));return e}static _$Ep(t,e){let i=e.attribute;return i===!1?void 0:typeof i=="string"?i:typeof t=="string"?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(e=>e(this))}addController(t){var e,i;((e=this._$ES)!==null&&e!==void 0?e:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((i=t.hostConnected)===null||i===void 0||i.call(t))}removeController(t){var e;(e=this._$ES)===null||e===void 0||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])})}createRenderRoot(){var t;let e=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return he(e,this.constructor.elementStyles),e}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(e=>{var i;return(i=e.hostConnected)===null||i===void 0?void 0:i.call(e)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(e=>{var i;return(i=e.hostDisconnected)===null||i===void 0?void 0:i.call(e)})}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$EO(t,e,i=ce){var s;let r=this.constructor._$Ep(t,i);if(r!==void 0&&i.reflect===!0){let o=(((s=i.converter)===null||s===void 0?void 0:s.toAttribute)!==void 0?i.converter:pe).toAttribute(e,i.type);this._$El=t,o==null?this.removeAttribute(r):this.setAttribute(r,o),this._$El=null}}_$AK(t,e){var i;let s=this.constructor,r=s._$Ev.get(t);if(r!==void 0&&this._$El!==r){let o=s.getPropertyOptions(r),c=typeof o.converter=="function"?{fromAttribute:o.converter}:((i=o.converter)===null||i===void 0?void 0:i.fromAttribute)!==void 0?o.converter:pe;this._$El=r,this[r]=c.fromAttribute(e,o.type),this._$El=null}}requestUpdate(t,e,i){let s=!0;t!==void 0&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||ze)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),i.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,i))):s=!1),!this.isUpdatePending&&s&&(this._$E_=this._$Ej())}_$Ej(){return oe(this,null,function*(){this.isUpdatePending=!0;try{yield this._$E_}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&(yield t),!this.isUpdatePending})}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((s,r)=>this[r]=s),this._$Ei=void 0);let e=!1,i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),(t=this._$ES)===null||t===void 0||t.forEach(s=>{var r;return(r=s.hostUpdate)===null||r===void 0?void 0:r.call(s)}),this.update(i)):this._$Ek()}catch(s){throw e=!1,this._$Ek(),s}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;(e=this._$ES)===null||e===void 0||e.forEach(i=>{var s;return(s=i.hostUpdated)===null||s===void 0?void 0:s.call(i)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((e,i)=>this._$EO(i,this[i],e)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};E[ue]=!0,E.elementProperties=new Map,E.elementStyles=[],E.shadowRootOptions={mode:"open"},Ne==null||Ne({ReactiveElement:E}),((de=ee.reactiveElementVersions)!==null&&de!==void 0?de:ee.reactiveElementVersions=[]).push("1.6.2");var me,te=window,U=te.trustedTypes,Re=U?U.createPolicy("lit-html",{createHTML:n=>n}):void 0,fe="$lit$",x=`lit$${(Math.random()+"").slice(9)}$`,qe="?"+x,at=`<${qe}>`,O=document,F=()=>O.createComment(""),G=n=>n===null||typeof n!="object"&&typeof n!="function",je=Array.isArray,lt=n=>je(n)||typeof(n==null?void 0:n[Symbol.iterator])=="function",ve=`[ \f\r]`,K=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ue=/-->/g,Ie=/>/g,H=RegExp(`>|${ve}(?:([^\\s"'>=/]+)(${ve}*=${ve}*(?:[^ \f\r"'\`<>=]|("|')|))|$)`,"g"),Be=/'/g,De=/"/g,Ke=/^(?:script|style|textarea|title)$/i,Fe=n=>(t,...e)=>({_$litType$:n,strings:t,values:e}),_=Fe(1),ii=Fe(2),P=Symbol.for("lit-noChange"),m=Symbol.for("lit-nothing"),We=new WeakMap,L=O.createTreeWalker(O,129,null,!1);function Ge(n,t){if(!Array.isArray(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return Re!==void 0?Re.createHTML(t):t}var ht=(n,t)=>{let e=n.length-1,i=[],s,r=t===2?"":"",o=K;for(let c=0;c"?(o=s!=null?s:K,p=-1):h[1]===void 0?p=-2:(p=o.lastIndex-h[2].length,l=h[1],o=h[3]===void 0?H:h[3]==='"'?De:Be):o===De||o===Be?o=H:o===Ue||o===Ie?o=K:(o=H,s=void 0);let u=o===H&&n[c+1].startsWith("/>")?" ":"";r+=o===K?a+at:p>=0?(i.push(l),a.slice(0,p)+fe+a.slice(p)+x+u):a+x+(p===-2?(i.push(void 0),c):u)}return[Ge(n,r+(n[e]||"")+(t===2?"":"")),i]},N=class{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let r=0,o=0,c=t.length-1,a=this.parts,[l,h]=ht(t,e);if(this.el=N.createElement(l,i),L.currentNode=this.el.content,e===2){let p=this.el.content,d=p.firstChild;d.remove(),p.append(...d.childNodes)}for(;(s=L.nextNode())!==null&&a.length0){s.textContent=U?U.emptyScript:"";for(let u=0;u2||i[0]!==""||i[1]!==""?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=m}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,s){let r=this.strings,o=!1;if(r===void 0)t=I(this,t,e,0),o=!G(t)||t!==this._$AH&&t!==P,o&&(this._$AH=t);else{let c=t,a,l;for(t=r[0],a=0;a{var i,s;let r=(i=e==null?void 0:e.renderBefore)!==null&&i!==void 0?i:t,o=r._$litPart$;if(o===void 0){let c=(s=e==null?void 0:e.renderBefore)!==null&&s!==void 0?s:null;r._$litPart$=o=new z(t.insertBefore(F(),c),c,void 0,e!=null?e:{})}return o._$AI(n),o};var $e,we;var v=class extends E{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,e;let i=super.createRenderRoot();return(t=(e=this.renderOptions).renderBefore)!==null&&t!==void 0||(e.renderBefore=i.firstChild),i}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=J(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!1)}render(){return P}};v.finalized=!0,v._$litElement$=!0,($e=globalThis.litElementHydrateSupport)===null||$e===void 0||$e.call(globalThis,{LitElement:v});var Je=globalThis.litElementPolyfillSupport;Je==null||Je({LitElement:v});((we=globalThis.litElementVersions)!==null&&we!==void 0?we:globalThis.litElementVersions=[]).push("3.3.2");var M=class extends v{connectedCallback(){this.maybeCarryFill(),super.connectedCallback()}render(){return _``}maybeCarryFill(){this.isFillCarrier?(this.classList.add("html-fill-container"),this.classList.add("html-fill-item")):(this.classList.remove("html-fill-container"),this.classList.remove("html-fill-item"))}get isFillCarrier(){if(!this.parentElement)return!1;let t=this.parentElement.classList.contains("html-fill-container"),e=Array.from(this.children).some(i=>i.classList.contains("html-fill-item"));return t&&e}};M.isShinyInput=!1,M.styles=b` diff --git a/inst/components/scss/toolbar.scss b/inst/components/scss/toolbar.scss index 6bee082da..cc8b48f74 100644 --- a/inst/components/scss/toolbar.scss +++ b/inst/components/scss/toolbar.scss @@ -203,3 +203,27 @@ label > .bslib-toolbar { margin-left: 0.15rem; } } + + + /* ---- Toolbar Input Switch ---- */ + + .form-group.shiny-input-container:has(.form-switch) { + width: auto; // Overrides default width which adds unnecessary space + } + + .bslib-input-switch.form-check { + margin-bottom: 0; // Remove extra form check to ensure alignment with other items + margin-inline: 0.5rem; // Spacing so it's not crunched against other toolbar items + display: flex; // Use flexbox to control alignment + align-items: center; // Vertically center the checkbox and label + + // Match button label styling - Bootstrap buttons default to font-weight: 500 + .form-check-label { + font-weight: 500; // Match Bootstrap button default font-weight + line-height: 1; // Match button line-height for consistent vertical alignment + padding-left: 0.25rem; // Add space between switch and label + padding-top: 0; // Remove any default padding that might affect alignment + margin-bottom: 0; // Remove any default margin + } + } + diff --git a/man/toolbar.Rd b/man/toolbar.Rd index a3188e7b4..b60b2ea1b 100644 --- a/man/toolbar.Rd +++ b/man/toolbar.Rd @@ -254,6 +254,7 @@ shinyApp(ui, server) Other toolbar components: \code{\link{toolbar_divider}()}, \code{\link{toolbar_input_button}()}, -\code{\link{toolbar_input_select}()} +\code{\link{toolbar_input_select}()}, +\code{\link{toolbar_input_switch}()} } \concept{toolbar components} diff --git a/man/toolbar_divider.Rd b/man/toolbar_divider.Rd index 854b7187a..9718f1863 100644 --- a/man/toolbar_divider.Rd +++ b/man/toolbar_divider.Rd @@ -63,6 +63,7 @@ toolbar( Other toolbar components: \code{\link{toolbar}()}, \code{\link{toolbar_input_button}()}, -\code{\link{toolbar_input_select}()} +\code{\link{toolbar_input_select}()}, +\code{\link{toolbar_input_switch}()} } \concept{toolbar components} diff --git a/man/toolbar_input_button.Rd b/man/toolbar_input_button.Rd index 4904868c8..6c80a11f4 100644 --- a/man/toolbar_input_button.Rd +++ b/man/toolbar_input_button.Rd @@ -167,6 +167,7 @@ toolbar( Other toolbar components: \code{\link{toolbar}()}, \code{\link{toolbar_divider}()}, -\code{\link{toolbar_input_select}()} +\code{\link{toolbar_input_select}()}, +\code{\link{toolbar_input_switch}()} } \concept{toolbar components} diff --git a/man/toolbar_input_select.Rd b/man/toolbar_input_select.Rd index e5e1ecbba..16b88d61e 100644 --- a/man/toolbar_input_select.Rd +++ b/man/toolbar_input_select.Rd @@ -167,6 +167,7 @@ toolbar( Other toolbar components: \code{\link{toolbar}()}, \code{\link{toolbar_divider}()}, -\code{\link{toolbar_input_button}()} +\code{\link{toolbar_input_button}()}, +\code{\link{toolbar_input_switch}()} } \concept{toolbar components} diff --git a/man/toolbar_input_switch.Rd b/man/toolbar_input_switch.Rd new file mode 100644 index 000000000..463b7ac97 --- /dev/null +++ b/man/toolbar_input_switch.Rd @@ -0,0 +1,130 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/toolbar.R +\name{toolbar_input_switch} +\alias{toolbar_input_switch} +\alias{update_toolbar_input_switch} +\title{Toolbar Input Switch} +\usage{ +toolbar_input_switch(id, label = NULL, value = FALSE) + +update_toolbar_input_switch( + id, + label = NULL, + value = NULL, + session = get_current_session() +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{A label for the switch.} + +\item{value}{Whether or not the switch should be checked by default.} + +\item{session}{A Shiny session object (the default should almost always be +used).} +} +\value{ +Returns a switch input suitable for use in a toolbar. +} +\description{ +Create a switch input control suitable for use within a \code{\link[=toolbar]{toolbar()}}. This is +a convenience wrapper around \code{\link[=input_switch]{input_switch()}} with sensible defaults for +toolbar contexts. +} +\section{Functions}{ +\itemize{ +\item \code{toolbar_input_switch()}: Create a toolbar switch input. + +\item \code{update_toolbar_input_switch()}: Update a toolbar switch input. + +}} +\section{Updating toolbar switches}{ + + +You can dynamically update a toolbar switch using \code{\link[=update_toolbar_input_switch]{update_toolbar_input_switch()}}, +which is a convenience wrapper around \code{\link[=update_switch]{update_switch()}}. This allows you to +update the switch's label and value from the server. + +For example: + +\if{html}{\out{
}}\preformatted{library(shiny) +library(bslib) + +ui <- page_fluid( + card( + card_header( + "Settings", + toolbar( + align = "right", + toolbar_input_switch( + id = "auto_save", + label = "Auto-save", + value = FALSE + ) + ) + ), + card_body( + actionButton("toggle", "Toggle Auto-save"), + verbatimTextOutput("status") + ) + ) +) + +server <- function(input, output, session) \{ + output$status <- renderPrint(\{ + list(auto_save = input$auto_save) + \}) + + observeEvent(input$toggle, \{ + update_toolbar_input_switch( + "auto_save", + value = !input$auto_save + ) + \}) +\} + +shinyApp(ui, server) +}\if{html}{\out{
}} +} + +\examples{ +\dontshow{if (rlang::is_interactive()) withAutoprint(\{ # examplesIf} +# Basic toolbar with switches +toolbar( + align = "right", + toolbar_input_switch(id = "notifications", label = "Notifications", value = TRUE), + toolbar_divider(), + toolbar_input_switch(id = "dark_mode", label = "Dark Mode", value = FALSE) +) + +# Switch in card header +card( + card_header( + "Chart Options", + toolbar( + align = "right", + toolbar_input_switch(id = "show_legend", label = "Show Legend", value = TRUE), + toolbar_input_switch(id = "show_grid", label = "Show Grid", value = TRUE) + ) + ), + card_body("Chart content here") +) + +# Switch with toolbar_spacer for alignment +toolbar( + width = "100\%", + "Enable feature", + toolbar_spacer(), + toolbar_input_switch(id = "feature", label = "Enable feature", value = FALSE) +) +\dontshow{\}) # examplesIf} +} +\seealso{ +Other toolbar components: +\code{\link{toolbar}()}, +\code{\link{toolbar_divider}()}, +\code{\link{toolbar_input_button}()}, +\code{\link{toolbar_input_select}()} +} +\concept{toolbar components} diff --git a/tests/testthat/_snaps/toolbar.md b/tests/testthat/_snaps/toolbar.md index 9762ffe29..e711e96f1 100644 --- a/tests/testthat/_snaps/toolbar.md +++ b/tests/testthat/_snaps/toolbar.md @@ -461,3 +461,217 @@ Warning: `selected` value 'D' is not in `choices`. +# toolbar_input_switch() basic functionality + + Code + show_raw_html(switch1) + Output +
+
+ + +
+
+ +# toolbar_input_switch() with default value + + Code + show_raw_html(switch_default) + Output +
+
+ + +
+
+ +--- + + Code + show_raw_html(switch_true) + Output +
+
+ + +
+
+ +# toolbar_input_switch() with NULL label + + Code + show_raw_html(switch_no_label) + Output +
+
+ + +
+
+ +# toolbar_input_switch() markup variations + + Code + show_raw_html(toolbar_input_switch(id = "simple", label = "Simple Switch")) + Output +
+
+ + +
+
+ +--- + + Code + show_raw_html(toolbar_input_switch(id = "enabled", label = "Enabled Switch", + value = TRUE)) + Output +
+
+ + +
+
+ +--- + + Code + show_raw_html(toolbar_input_switch(id = "disabled", label = "Disabled Switch", + value = FALSE)) + Output +
+
+ + +
+
+ +# toolbar_input_switch() in toolbar context + + Code + show_raw_html(tb) + Output +
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+ +# toolbar_input_switch() integration with card headers + + Code + show_raw_html(card_with_switch) + Output +
+
+ Settings +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
Content
+ +
+ +# toolbar_input_switch() with toolbar_spacer + + Code + show_raw_html(tb_spacer) + Output +
+ Enable feature +
+
+
+ + +
+
+
+ +# toolbar_input_switch() multiple switches in sequence + + Code + show_raw_html(tb_multi) + Output +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ diff --git a/tests/testthat/test-toolbar.R b/tests/testthat/test-toolbar.R index f07122e3b..e6f3a80fb 100644 --- a/tests/testthat/test-toolbar.R +++ b/tests/testthat/test-toolbar.R @@ -976,3 +976,275 @@ test_that("update_toolbar_input_button() warns for blank label", { "non-empty string label" ) }) + +# Tests for toolbar_input_switch() # + +test_that("toolbar_input_switch() basic functionality", { + # Basic switch with all parameters + switch1 <- toolbar_input_switch( + id = "test_switch", + label = "Enable feature", + value = TRUE + ) + + expect_snapshot_html(switch1) + + # Check that it's a switch input + switch_tag <- as.tags(switch1) + expect_match( + htmltools::tagGetAttribute( + tagQuery(switch_tag)$find("input")$selectedTags()[[1]], + "type" + ), + "checkbox" + ) + + # Verify it has form-switch class + expect_match( + htmltools::tagGetAttribute( + tagQuery(switch_tag)$find(".form-check")$selectedTags()[[1]], + "class" + ), + "form-switch" + ) +}) + +test_that("toolbar_input_switch() with default value", { + # Default value should be FALSE + switch_default <- toolbar_input_switch( + id = "switch_default", + label = "Default switch" + ) + + expect_snapshot_html(switch_default) + + # Value TRUE + switch_true <- toolbar_input_switch( + id = "switch_true", + label = "Enabled switch", + value = TRUE + ) + + expect_snapshot_html(switch_true) +}) + +test_that("toolbar_input_switch() with NULL label", { + # NULL label should work (delegated to input_switch) + switch_no_label <- toolbar_input_switch( + id = "no_label", + label = NULL, + value = FALSE + ) + + expect_snapshot_html(switch_no_label) +}) + +test_that("toolbar_input_switch() passes through to input_switch correctly", { + # Verify that toolbar_input_switch produces same output as input_switch + # with width = NULL + + switch_toolbar <- as.character(as.tags( + toolbar_input_switch( + id = "test", + label = "Test", + value = TRUE + ) + )) + + switch_regular <- as.character(as.tags( + input_switch( + id = "test", + label = "Test", + value = TRUE, + width = NULL + ) + )) + + expect_equal(switch_toolbar, switch_regular) +}) + +test_that("toolbar_input_switch() markup variations", { + # Simple switch + expect_snapshot_html( + toolbar_input_switch( + id = "simple", + label = "Simple Switch" + ) + ) + + # Switch with TRUE value + expect_snapshot_html( + toolbar_input_switch( + id = "enabled", + label = "Enabled Switch", + value = TRUE + ) + ) + + # Switch with FALSE value (explicit) + expect_snapshot_html( + toolbar_input_switch( + id = "disabled", + label = "Disabled Switch", + value = FALSE + ) + ) +}) + +test_that("toolbar_input_switch() in toolbar context", { + # Switch in a toolbar with other inputs + tb <- toolbar( + align = "right", + toolbar_input_switch( + id = "switch1", + label = "Feature 1", + value = TRUE + ), + toolbar_divider(), + toolbar_input_switch( + id = "switch2", + label = "Feature 2", + value = FALSE + ), + toolbar_input_button( + id = "submit", + label = "Submit", + show_label = TRUE + ) + ) + + expect_snapshot_html(tb) + + # Check that switches are present + tb_html <- as.character(as.tags(tb)) + expect_match(tb_html, "switch1") + expect_match(tb_html, "switch2") + expect_match(tb_html, "form-switch") +}) + +test_that("toolbar_input_switch() integration with card headers", { + # Switch in card header toolbar (common use case) + card_with_switch <- card( + card_header( + "Settings", + toolbar( + align = "right", + toolbar_input_switch( + id = "auto_save", + label = "Auto-save", + value = TRUE + ), + toolbar_input_switch( + id = "notifications", + label = "Notifications", + value = FALSE + ) + ) + ), + card_body("Content") + ) + + expect_snapshot_html(card_with_switch) +}) + +test_that("toolbar_input_switch() with toolbar_spacer", { + # Common pattern: label on left, switch on right + tb_spacer <- toolbar( + width = "100%", + "Enable feature", + toolbar_spacer(), + toolbar_input_switch( + id = "feature", + label = "Enable feature", + value = FALSE + ) + ) + + expect_snapshot_html(tb_spacer) +}) + +test_that("toolbar_input_switch() multiple switches in sequence", { + # Multiple switches without dividers + tb_multi <- toolbar( + align = "right", + toolbar_input_switch(id = "opt1", label = "Option 1", value = TRUE), + toolbar_input_switch(id = "opt2", label = "Option 2", value = TRUE), + toolbar_input_switch(id = "opt3", label = "Option 3", value = FALSE) + ) + + expect_snapshot_html(tb_multi) + + # Verify all three switches are present + tb_html <- as.character(as.tags(tb_multi)) + expect_match(tb_html, "opt1") + expect_match(tb_html, "opt2") + expect_match(tb_html, "opt3") +}) + +# Tests for update_toolbar_input_switch() # + +test_that("update_toolbar_input_switch() calls update_switch correctly", { + # Mock session to capture the message + session <- list( + sendInputMessage = function(id, message) { + session$last_id <<- id + session$last_message <<- message + }, + ns = function(id) id + ) + + # Update with all parameters + update_toolbar_input_switch( + "test_switch", + label = "New Label", + value = TRUE, + session = session + ) + + expect_equal(session$last_id, "test_switch") + expect_equal(session$last_message$label, "New Label") + expect_equal(session$last_message$value, TRUE) +}) + +test_that("update_toolbar_input_switch() handles NULL values", { + session <- list( + sendInputMessage = function(id, message) { + session$last_message <<- message + }, + ns = function(id) id + ) + + # Update with only value + update_toolbar_input_switch( + "test_switch", + value = FALSE, + session = session + ) + + expect_null(session$last_message$label) + expect_equal(session$last_message$value, FALSE) + + # Update with only label + update_toolbar_input_switch( + "test_switch", + label = "Only Label", + session = session + ) + + expect_equal(session$last_message$label, "Only Label") + expect_null(session$last_message$value) +}) + +test_that("update_toolbar_input_switch() works with default session", { + # This test verifies that get_current_session() is used as default + # We can't test the actual function call without a running Shiny app, + # but we can verify the function signature accepts no session argument + expect_no_error( + formals(update_toolbar_input_switch)$session + ) + + # Verify default value is get_current_session() + default_session <- formals(update_toolbar_input_switch)$session + expect_true(is.call(default_session)) + expect_equal(as.character(default_session[[1]]), "get_current_session") +})