From f14ee87f934b623299780297097823c56f32d40f Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Tue, 25 Jul 2023 09:32:55 -0400 Subject: [PATCH 01/29] feat(sidebar): New collapse toggle design Doesn't include mobile layout yet --- R/sidebar.R | 3 +- inst/components/scss/sidebar.scss | 84 ++++++++++++++++++------------- srcts/src/components/sidebar.ts | 3 ++ 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/R/sidebar.R b/R/sidebar.R index f49377a2b..f9d2abb18 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -124,6 +124,7 @@ sidebar <- function( title = "Toggle sidebar", "aria-expanded" = if (open %in% c("open", "desktop")) "true" else "false", "aria-controls" = id, + div(class = "collapse-backdrop"), collapse_icon() ) } @@ -294,7 +295,7 @@ collapse_icon <- function() { icon <- "" return(HTML(icon)) } - bsicons::bs_icon("chevron-down", class = "collapse-icon", size = NULL) + bsicons::bs_icon("chevron-left", class = "collapse-icon", size = NULL) } sidebar_init_js <- function() { diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 9628a1a96..97417152c 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -1,20 +1,25 @@ $bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0,0,0), 0.05) !default; $bslib-sidebar-fg: var(--bs-emphasis-color, black) !default; +$bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0,0,0), 0.1) !default; $bslib-sidebar-border: var(--bs-card-border-width, #{$card-border-width}) solid var(--bs-card-border-color, #{$card-border-color}) !default; $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)); .bslib-sidebar-layout { --bslib-sidebar-transition-duration: 500ms; + --bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07); --bslib-sidebar-border: #{$bslib-sidebar-border}; --bslib-sidebar-border-radius: var(--bs-border-radius); --bslib-sidebar-vert-border: #{$bslib-sidebar-border}; --bslib-sidebar-bg: #{$bslib-sidebar-bg}; --bslib-sidebar-fg: #{$bslib-sidebar-fg}; + --bslib-sidebar-toggle-bg: #{$bslib-sidebar-toggle-bg}; --bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5); --bslib-sidebar-icon-size: var(--bslib-spacer, 1rem); - --bslib-collapse-toggle-border: #{$bslib-sidebar-border}; - --bslib-collapse-toggle-transform: 90deg; - --bslib-collapse-toggle-right-transform: -90deg; + // --bslib-collapse-toggle-border: ; + --bslib-collapse-toggle-border-radius: var(--bs-border-radius, #{$border-radius}); + --bslib-collapse-toggle-transform: 0deg; + --bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1); + --bslib-collapse-toggle-right-transform: 180deg; --bslib-sidebar-column-main: minmax(0, 1fr); @@ -45,6 +50,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-top-left-radius: 0; border-bottom-left-radius: 0; padding: var(--bslib-sidebar-padding); + transition: padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration); } > .sidebar { @@ -62,6 +68,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), flex-direction: column; gap: var(--bslib-spacer, 1rem); padding: var(--bslib-sidebar-padding); + padding-top: calc(var(--bslib-sidebar-padding, 1rem) * 2); > :last-child:not(.sidebar-title) { // Remove margin-bottom from the last item because sidebar has padding. @@ -73,9 +80,6 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), > .accordion { margin-left: calc(-1 * var(--bslib-sidebar-padding)); margin-right: calc(-1 * var(--bslib-sidebar-padding)); - &:first-child { - margin-top: calc(-1 * var(--bslib-sidebar-padding)); - } &:last-child { margin-bottom: calc(-1 * var(--bslib-sidebar-padding)); } @@ -99,17 +103,9 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-bottom: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color); } - // When a sidebar title appears just above an accordion, we use the - // accordion's top border as the "underline". The fiddly margin-top bit - // adjusts the accordion to cover the title bottom border in browsers - // that don't yet support :has(). - // TODO: this can be removed once :has() has better browser support - > .sidebar-title + .accordion { - margin-top: calc(-#{$spacer} - var(--bs-card-border-width, #{$card-border-width})); - } - - > .sidebar-title:has(+ .accordion) { + &.has-accordion > .sidebar-title { border-bottom: none; + padding-bottom: 0; } } @@ -124,24 +120,39 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), display: inline-flex; align-items: center; position: absolute; - right: calc(-1 * var(--bslib-sidebar-icon-size)); + right: calc(var(--bslib-sidebar-icon-size)); // The CSS variable (set via JS) is here to help avoid overlapping toggles - bottom: calc(var(--bslib-sidebar-padding) + var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding))); - border: var(--bslib-collapse-toggle-border); - border-left: none; - border-radius: 0 var(--bs-border-radius) var(--bs-border-radius) 0; - padding: 7px 0; - background-color: var(--bslib-sidebar-bg); + top: calc( + var(--bslib-sidebar-overlap-counter, 0) * + calc(var(--bslib-sidebar-icon-size) + + var(--bslib-sidebar-padding) + ) + var(--bslib-sidebar-icon-size, 1rem) / 2); + border: none; + border-radius: var(--bslib-collapse-toggle-border-radius); + height: calc(var(--bslib-sidebar-icon-size) * 2); + width: calc(var(--bslib-sidebar-icon-size) * 2); + display: flex; + align-items: center; + justify-content: center; + padding: 0; color: var(--bslib-sidebar-fg); + background-color: unset; + transition: + right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), + left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration); + + &:hover { + background-color: var(--bslib-sidebar-toggle-bg); + } > .collapse-icon { opacity: 0.8; width: var(--bslib-sidebar-icon-size); height: var(--bslib-sidebar-icon-size); - transform: rotate(var(--bslib-collapse-toggle-transform)); + transform: rotateY(var(--bslib-collapse-toggle-transform)); // N.B. since mobile view won't trigger a transition of grid-template-columns, // we transition this toggle to ensure _some_ transition event always happens. - transition: transform cubic-bezier(0.68, -0.55, 0.27, 1.55) var(--bslib-sidebar-transition-duration); + transition: transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration); } &:hover > .collapse-icon { @@ -179,20 +190,18 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), > .collapse-toggle { grid-column: 2 / 3; - left: calc(-1 * var(--bslib-sidebar-icon-size)); + left: var(--bslib-sidebar-icon-size); right: unset; - border-radius: var(--bs-border-radius) 0 0 var(--bs-border-radius); - border-right: none; - border-left: var(--bslib-collapse-toggle-border); + border: var(--bslib-collapse-toggle-border); > .collapse-icon { - transform: rotate(var(--bslib-collapse-toggle-right-transform)); + transform: rotateY(var(--bslib-collapse-toggle-right-transform)); } } } &.sidebar-collapsed { - --bslib-collapse-toggle-transform: -90deg; - --bslib-collapse-toggle-right-transform: 90deg; + --bslib-collapse-toggle-transform: 180deg; + --bslib-collapse-toggle-right-transform: 0deg; --bslib-sidebar-vert-border: none; grid-template-columns: 0 minmax(0, 1fr); @@ -215,12 +224,19 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-radius: inherit; } + &:not(.sidebar-right) > .main { + padding-left: calc(var(--bslib-sidebar-padding) * 2); + } + &.sidebar-right > .main { + padding-right: calc(var(--bslib-sidebar-padding) * 2); + } + > .collapse-toggle { - right: calc(-1 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px)); + right: calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px)); } &.sidebar-right > .collapse-toggle { - left: calc(-1 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px)); + left: calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px)); right: unset; } } diff --git a/srcts/src/components/sidebar.ts b/srcts/src/components/sidebar.ts index c23fcce36..2972fa45f 100644 --- a/srcts/src/components/sidebar.ts +++ b/srcts/src/components/sidebar.ts @@ -93,6 +93,9 @@ class Sidebar { ":scope > .sidebar-content > .accordion" ); if (sideAccordion) { + this.layout.sidebar + .querySelector(".sidebar-content") + ?.classList?.add("has-accordion"); sideAccordion.classList.add("accordion-flush"); } From dff8a84d25839df2fe56f00a41dd6cc9e13bbbd7 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 09:30:45 -0400 Subject: [PATCH 02/29] feat(sidebar): Use css vars for main sidebar color too --- R/sidebar.R | 8 ++++---- inst/components/scss/sidebar.scss | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/R/sidebar.R b/R/sidebar.R index f9d2abb18..248c2f732 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -211,8 +211,6 @@ layout_sidebar <- function( class = "main", class = if (fillable) "bslib-gap-spacing", style = css( - background_color = bg, - color = fg, padding = validateCssPadding(padding), gap = validateCssUnit(gap) ), @@ -238,8 +236,10 @@ layout_sidebar <- function( `data-bslib-sidebar-border-radius` = if (!is.null(border_radius)) tolower(border_radius), style = css( "--bslib-sidebar-width" = sidebar$width, - "--bslib-sidebar-bg" = if (!is.null(sidebar$color$bg)) sidebar$color$bg, - "--bslib-sidebar-fg" = if (!is.null(sidebar$color$fg)) sidebar$color$fg, + "--bslib-sidebar-bg" = sidebar$color$bg, + "--bslib-sidebar-fg" = sidebar$color$fg, + "--bslib-sidebar-main-fg" = fg, + "--bslib-sidebar-main-bg" = bg, "--bs-card-border-color" = border_color, height = validateCssUnit(height), "--bslib-sidebar-max-height-mobile" = max_height_mobile diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 97417152c..4081b81bf 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -12,6 +12,8 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), --bslib-sidebar-vert-border: #{$bslib-sidebar-border}; --bslib-sidebar-bg: #{$bslib-sidebar-bg}; --bslib-sidebar-fg: #{$bslib-sidebar-fg}; + --bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color)); + --bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg)); --bslib-sidebar-toggle-bg: #{$bslib-sidebar-toggle-bg}; --bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5); --bslib-sidebar-icon-size: var(--bslib-spacer, 1rem); @@ -51,6 +53,8 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-bottom-left-radius: 0; padding: var(--bslib-sidebar-padding); transition: padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration); + color: var(--bslib-sidebar-main-fg); + background-color: var(--bslib-sidebar-main-bg); } > .sidebar { @@ -121,12 +125,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), align-items: center; position: absolute; right: calc(var(--bslib-sidebar-icon-size)); - // The CSS variable (set via JS) is here to help avoid overlapping toggles - top: calc( - var(--bslib-sidebar-overlap-counter, 0) * - calc(var(--bslib-sidebar-icon-size) + - var(--bslib-sidebar-padding) - ) + var(--bslib-sidebar-icon-size, 1rem) / 2); + top: calc(var(--bslib-sidebar-icon-size, 1rem) / 2); border: none; border-radius: var(--bslib-collapse-toggle-border-radius); height: calc(var(--bslib-sidebar-icon-size) * 2); @@ -138,6 +137,8 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), color: var(--bslib-sidebar-fg); background-color: unset; transition: + color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), + top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration); @@ -232,6 +233,13 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } > .collapse-toggle { + color: var(--bslib-sidebar-main-fg); + // The CSS variable (set via JS) is here to help avoid overlapping toggles + top: calc( + var(--bslib-sidebar-overlap-counter, 0) * + calc(var(--bslib-sidebar-icon-size) + + var(--bslib-sidebar-padding) + ) + var(--bslib-sidebar-icon-size, 1rem) / 2); right: calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px)); } From 0dd1e15b60d5e26f16e7b3f41e1c164acaec5526 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 11:36:42 -0400 Subject: [PATCH 03/29] feat(sidebar): Sidebar on mobile screens --- inst/components/scss/sidebar.scss | 89 ++++++++----------------------- 1 file changed, 21 insertions(+), 68 deletions(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 4081b81bf..6c64da6c8 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -260,90 +260,43 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), @include media-breakpoint-down(sm) { .bslib-sidebar-layout, .bslib-sidebar-layout.sidebar-right { - --bslib-sidebar-vert-border: none; - --bslib-sidebar-horiz-border: #{$bslib-sidebar-border}; - --bslib-collapse-toggle-transform: -180deg; - --bslib-collapse-toggle-right-transform: -180deg; - // required by sidebar init js when `sidebar(open = "desktop")` &[data-bslib-sidebar-open="desktop"] { --bslib-sidebar-js-init-collapsed: true; } + } - grid-template-columns: 1fr !important; - // Sidebar height is constrained on mobile where upper bound is determined - // by bslib UI functions. The minimax() is important to ensure the main main - // content is allowed to grow/shrink. - grid-template-rows: - fit-content(var(--bslib-sidebar-max-height-mobile, auto)) - minmax(0, 1fr); - - > .sidebar { - grid-row: 1 / 2; - grid-column: 1 / 2; - width: 100%; - border: none; - border-bottom: var(--bslib-sidebar-horiz-border); - border-radius: 0; + .bslib-sidebar-layout { + &:not(.sidebar-collapsed) { + > .sidebar { z-index: 1; } + > .collapse-toggle { z-index: 1; } } - > .main { - grid-row: 2 / 3; - grid-column: 1 / 2; - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: inherit; - border-bottom-left-radius: inherit; + $full-closed: 100% 0; + $closed-full: 0 100%; + grid-template-columns: $full-closed; + &.sidebar-right { + grid-template-columns: $closed-full; } - > .collapse-toggle { - grid-row: 2 / 3; - grid-column: 1 / 2; - border-top: none !important; - border: var(--bslib-collapse-toggle-border); - border-radius: 0 0 var(--bs-border-radius) var(--bs-border-radius); - padding: 0 4px; - > .collapse-icon { - // On mobile we can transition the icon orientation immediately and quickly - transition-duration: calc(var(--bslib-sidebar-transition-duration) * 0.33); + &.sidebar-collapsed { + grid-template-columns: $closed-full; + &.sidebar-right { + grid-template-columns: $full-closed; } } - // Apply same collapse-toggle position adjustment to all states and layouts &, &.sidebar-right { - > .collapse-toggle { - top: calc(-1 * var(--bs-card-border-width, 1px)); - } - &.sidebar-collapsed > .collapse-toggle { - top: 0; - } - &, &.sidebar-collapsed { - > .collapse-toggle { - // The CSS variable (set via JS) is here to help avoid overlapping toggles - right: calc(var(--bslib-sidebar-padding) + var(--bslib-sidebar-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding))); - bottom: initial; - left: initial; - } - } - } - - &.sidebar-collapsed { - --bslib-collapse-toggle-transform: 0deg; - --bslib-collapse-toggle-right-transform: 0deg; - - grid-template-rows: 0 minmax(0, 1fr); - // TODO: according to the spec, grid-template-rows should be animatable, - // but this doesn't behave quite right, and I'm not sure why - // transition: grid-template-rows ease-in-out var(--bslib-sidebar-transition-duration); - > .main { - border-top-left-radius: inherit; - border-top-right-radius: inherit; + grid-column: 1 / 3; } + } - > .sidebar { - border-bottom: none; - } + &:not(.sidebar-right) > .main { + padding-left: calc(var(--bslib-sidebar-padding) * 2); + } + &.sidebar-right > .main { + padding-right: calc(var(--bslib-sidebar-padding) * 2); } } } From a64ce31107a05a70bd4e6dcfa2d1aa2aabcb2912 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 11:46:26 -0400 Subject: [PATCH 04/29] fix(sidebar): Add backdrop blur to sidebar in case its transparent --- inst/components/scss/sidebar.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 6c64da6c8..56b26a362 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -64,8 +64,10 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-right: var(--bslib-sidebar-vert-border); border-top-right-radius: 0; border-bottom-right-radius: 0; - background-color: var(--bslib-sidebar-bg); color: var(--bslib-sidebar-fg); + background-color: var(--bslib-sidebar-bg); + // TODO: background can be transparent to be dark mode adaptive, need opaque "subtle" variant + backdrop-filter: blur(5px); > .sidebar-content { display: flex; From 745b890d8de55701c628723691452227215ba89e Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 11:46:44 -0400 Subject: [PATCH 05/29] chore: yarn build --- inst/components/dist/sidebar/sidebar.js | 2 ++ inst/components/dist/sidebar/sidebar.js.map | 4 ++-- inst/components/dist/sidebar/sidebar.min.js | 2 +- inst/components/dist/sidebar/sidebar.min.js.map | 6 +++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/inst/components/dist/sidebar/sidebar.js b/inst/components/dist/sidebar/sidebar.js index af18ddb40..8289480eb 100644 --- a/inst/components/dist/sidebar/sidebar.js +++ b/inst/components/dist/sidebar/sidebar.js @@ -123,6 +123,7 @@ * @param {HTMLElement} container */ constructor(container) { + var _a, _b; _Sidebar.instanceMap.set(container, this); this.layout = { container, @@ -136,6 +137,7 @@ ":scope > .sidebar-content > .accordion" ); if (sideAccordion) { + (_b = (_a = this.layout.sidebar.querySelector(".sidebar-content")) == null ? void 0 : _a.classList) == null ? void 0 : _b.add("has-accordion"); sideAccordion.classList.add("accordion-flush"); } if (this.layout.toggle) { diff --git a/inst/components/dist/sidebar/sidebar.js.map b/inst/components/dist/sidebar/sidebar.js.map index 922ebdfcc..549a46816 100644 --- a/inst/components/dist/sidebar/sidebar.js.map +++ b/inst/components/dist/sidebar/sidebar.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../../srcts/src/components/_utils.ts", "../../../../srcts/src/components/_shinyResizeObserver.ts", "../../../../srcts/src/components/sidebar.ts"], - "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], - "mappings": "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", + "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n this.layout.sidebar\n .querySelector(\".sidebar-content\")\n ?.classList?.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], + "mappings": "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", "names": [] } diff --git a/inst/components/dist/sidebar/sidebar.min.js b/inst/components/dist/sidebar/sidebar.min.js index 4c2e1d472..60cc653ce 100644 --- a/inst/components/dist/sidebar/sidebar.min.js +++ b/inst/components/dist/sidebar/sidebar.min.js @@ -1,3 +1,3 @@ /*! bslib 0.5.1.9000 | (c) 2012-2023 RStudio, PBC. | License: MIT + file LICENSE */ -"use strict";(()=>{var g=window.Shiny?Shiny.InputBinding:class{};function f(b,e){window.Shiny&&Shiny.inputBindings.register(new b,"bslib."+e)}var u=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let s=[];for(let r of e)r.target instanceof HTMLElement&&r.target.querySelector(".shiny-bound-output")&&r.target.querySelectorAll(".shiny-bound-output").forEach(o=>{if(s.includes(o))return;let{binding:l,onResize:d}=$(o).data("shinyOutputBinding");if(!l||!l.resize)return;let i=o.shinyResizeObserver;if(i&&i!==this||(i||(o.shinyResizeObserver=this),d(o),s.push(o),!o.classList.contains("shiny-plot-output")))return;let c=o.querySelector('img:not([width="100%"])');c&&c.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 n=class{constructor(e){n.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&&t.classList.add("accordion-flush"),this.layout.toggle&&(this._initEventListeners(),this._initSidebarCounters(),this._initDesktop()),n.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let s=e.querySelector(":scope > script[data-bslib-sidebar-init]");s&&e.removeChild(s)}get isClosed(){return this.layout.container.classList.contains(n.classes.COLLAPSE)}static getInstance(e){return n.instanceMap.get(e)}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){n.onReadyScheduled||(n.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{n.initCollapsibleAll(!1)}));return}let t=`.${n.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&n.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(r=>new n(r))}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",s=>{s.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>this._finalizeState())}_initSidebarCounters(){let{container:e}=this.layout,t=`.${n.classes.LAYOUT}> .main > .${n.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function r(i){return i=i?i.parentElement:null,i&&i.classList.contains("main")&&(i=i.parentElement),i&&i.classList.contains(n.classes.LAYOUT)?i:null}let o=[e],l=r(e);for(;l;)o.unshift(l),l=r(l);let d={left:0,right:0};o.forEach(function(i,c){i.style.setProperty("--bslib-sidebar-counter",c.toString());let y=i.classList.contains("sidebar-right")?d.right++:d.left++;i.style.setProperty("--bslib-sidebar-overlap-counter",y.toString())})}_initDesktop(){var s;let{container:e}=this.layout;if(((s=e.dataset.bslibSidebarOpen)==null?void 0:s.trim())!=="desktop")return;window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-init-collapsed").trim()==="true"&&this.toggle("close")}toggle(e){typeof e=="undefined"&&(e="toggle");let{container:t,sidebar:s}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);e==="toggle"&&(e=r?"open":"close"),!(r&&e==="close"||!r&&e==="open")&&(e==="open"&&(s.hidden=!1),t.classList.add(n.classes.TRANSITIONING),t.classList.toggle(n.classes.COLLAPSE))}_finalizeState(){let{container:e,sidebar:t,toggle:s}=this.layout;e.classList.remove(n.classes.TRANSITIONING),t.hidden=this.isClosed,s.setAttribute("aria-expanded",this.isClosed?"false":"true");let r=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(r),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},a=n;a.shinyResizeObserver=new u,a.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning"},a.onReadyScheduled=!1,a.instanceMap=new WeakMap;var p=class extends g{find(e){return $(e).find(`.${a.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=a.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let s=t?"open":"close";this.receiveMessage(e,{method:s})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(s){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let s=a.getInstance(e.parentElement);s&&s.toggle(t.method)}};f(p,"sidebar");window.bslib=window.bslib||{};window.bslib.Sidebar=a;})(); +"use strict";(()=>{var g=window.Shiny?Shiny.InputBinding:class{};function y(b,e){window.Shiny&&Shiny.inputBindings.register(new b,"bslib."+e)}var u=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let s=[];for(let r of e)r.target instanceof HTMLElement&&r.target.querySelector(".shiny-bound-output")&&r.target.querySelectorAll(".shiny-bound-output").forEach(o=>{if(s.includes(o))return;let{binding:l,onResize:d}=$(o).data("shinyOutputBinding");if(!l||!l.resize)return;let i=o.shinyResizeObserver;if(i&&i!==this||(i||(o.shinyResizeObserver=this),d(o),s.push(o),!o.classList.contains("shiny-plot-output")))return;let c=o.querySelector('img:not([width="100%"])');c&&c.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 n=class{constructor(e){var r,o;n.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&&((o=(r=this.layout.sidebar.querySelector(".sidebar-content"))==null?void 0:r.classList)==null||o.add("has-accordion"),t.classList.add("accordion-flush")),this.layout.toggle&&(this._initEventListeners(),this._initSidebarCounters(),this._initDesktop()),n.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let s=e.querySelector(":scope > script[data-bslib-sidebar-init]");s&&e.removeChild(s)}get isClosed(){return this.layout.container.classList.contains(n.classes.COLLAPSE)}static getInstance(e){return n.instanceMap.get(e)}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){n.onReadyScheduled||(n.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{n.initCollapsibleAll(!1)}));return}let t=`.${n.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&n.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(r=>new n(r))}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",s=>{s.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>this._finalizeState())}_initSidebarCounters(){let{container:e}=this.layout,t=`.${n.classes.LAYOUT}> .main > .${n.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function r(i){return i=i?i.parentElement:null,i&&i.classList.contains("main")&&(i=i.parentElement),i&&i.classList.contains(n.classes.LAYOUT)?i:null}let o=[e],l=r(e);for(;l;)o.unshift(l),l=r(l);let d={left:0,right:0};o.forEach(function(i,c){i.style.setProperty("--bslib-sidebar-counter",c.toString());let h=i.classList.contains("sidebar-right")?d.right++:d.left++;i.style.setProperty("--bslib-sidebar-overlap-counter",h.toString())})}_initDesktop(){var s;let{container:e}=this.layout;if(((s=e.dataset.bslibSidebarOpen)==null?void 0:s.trim())!=="desktop")return;window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-init-collapsed").trim()==="true"&&this.toggle("close")}toggle(e){typeof e=="undefined"&&(e="toggle");let{container:t,sidebar:s}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);e==="toggle"&&(e=r?"open":"close"),!(r&&e==="close"||!r&&e==="open")&&(e==="open"&&(s.hidden=!1),t.classList.add(n.classes.TRANSITIONING),t.classList.toggle(n.classes.COLLAPSE))}_finalizeState(){let{container:e,sidebar:t,toggle:s}=this.layout;e.classList.remove(n.classes.TRANSITIONING),t.hidden=this.isClosed,s.setAttribute("aria-expanded",this.isClosed?"false":"true");let r=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(r),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},a=n;a.shinyResizeObserver=new u,a.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning"},a.onReadyScheduled=!1,a.instanceMap=new WeakMap;var p=class extends g{find(e){return $(e).find(`.${a.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=a.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let s=t?"open":"close";this.receiveMessage(e,{method:s})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(s){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let s=a.getInstance(e.parentElement);s&&s.toggle(t.method)}};y(p,"sidebar");window.bslib=window.bslib||{};window.bslib.Sidebar=a;})(); //# sourceMappingURL=sidebar.min.js.map diff --git a/inst/components/dist/sidebar/sidebar.min.js.map b/inst/components/dist/sidebar/sidebar.min.js.map index fc2cc02ea..ed1b007d6 100644 --- a/inst/components/dist/sidebar/sidebar.min.js.map +++ b/inst/components/dist/sidebar/sidebar.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../../srcts/src/components/_utils.ts", "../../../../srcts/src/components/_shinyResizeObserver.ts", "../../../../srcts/src/components/sidebar.ts"], - "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], - "mappings": "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", - "names": ["InputBinding", "registerBinding", "inputBindingClass", "name", "ShinyResizeObserver", "entries", "resizeEvent", "resized", "entry", "el", "binding", "onResize", "owner", "img", "idxEl", "_Sidebar", "container", "sideAccordion", "initScript", "el", "flushResizeObserver", "initSelector", "_a", "toggle", "ev", "selectorChildLayouts", "nextSidebarParent", "layouts", "parent", "count", "x", "i", "thisCount", "method", "sidebar", "isClosed", "event", "Sidebar", "ShinyResizeObserver", "SidebarInputBinding", "InputBinding", "scope", "sb", "value", "callback", "data", "registerBinding"] + "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n this.layout.sidebar\n .querySelector(\".sidebar-content\")\n ?.classList?.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], + "mappings": "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", + "names": ["InputBinding", "registerBinding", "inputBindingClass", "name", "ShinyResizeObserver", "entries", "resizeEvent", "resized", "entry", "el", "binding", "onResize", "owner", "img", "idxEl", "_Sidebar", "container", "_a", "_b", "sideAccordion", "initScript", "el", "flushResizeObserver", "initSelector", "toggle", "ev", "selectorChildLayouts", "nextSidebarParent", "layouts", "parent", "count", "x", "i", "thisCount", "method", "sidebar", "isClosed", "event", "Sidebar", "ShinyResizeObserver", "SidebarInputBinding", "InputBinding", "scope", "sb", "value", "callback", "data", "registerBinding"] } From 37042975b941ad3fb22c4f76e1a77bfb5eb815e8 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 11:56:09 -0400 Subject: [PATCH 06/29] chore: inline new icon --- R/sidebar.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/sidebar.R b/R/sidebar.R index 248c2f732..25e6a5071 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -292,7 +292,7 @@ sidebar_toggle <- toggle_sidebar collapse_icon <- function() { if (!is_installed("bsicons")) { - icon <- "" + icon <- "" return(HTML(icon)) } bsicons::bs_icon("chevron-left", class = "collapse-icon", size = NULL) From 3c18c931d03be5b2ac7bf213c35815a0fed11739 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 11:57:53 -0400 Subject: [PATCH 07/29] chore: Remove draft code --- R/sidebar.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/sidebar.R b/R/sidebar.R index 25e6a5071..4fd84da43 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -124,7 +124,6 @@ sidebar <- function( title = "Toggle sidebar", "aria-expanded" = if (open %in% c("open", "desktop")) "true" else "false", "aria-controls" = id, - div(class = "collapse-backdrop"), collapse_icon() ) } From 4726b8df56d3b1941f78dff5dc3ca6854f3c999e Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Wed, 13 Sep 2023 16:03:15 +0000 Subject: [PATCH 08/29] Resave distributed files (GitHub Action) --- inst/components/dist/sidebar/sidebar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/dist/sidebar/sidebar.css b/inst/components/dist/sidebar/sidebar.css index 512d57f1f..834b61e7d 100644 --- a/inst/components/dist/sidebar/sidebar.css +++ b/inst/components/dist/sidebar/sidebar.css @@ -1 +1 @@ -.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-collapse-toggle-transform: 90deg;--bslib-collapse-toggle-right-transform: -90deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;background-color:var(--bslib-sidebar-bg);color:var(--bslib-sidebar-fg)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:first-child{margin-top:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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>.sidebar-title+.accordion{margin-top:calc(-1rem - var(--bs-card-border-width, var(--bs-border-width)))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.sidebar-title:has(+.accordion){border-bottom:none}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(-1 * var(--bslib-sidebar-icon-size));bottom:calc(var(--bslib-sidebar-padding) + var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)));border:var(--bslib-collapse-toggle-border);border-left:none;border-radius:0 var(--bs-border-radius) var(--bs-border-radius) 0;padding:7px 0;background-color:var(--bslib-sidebar-bg);color:var(--bslib-sidebar-fg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotate(var(--bslib-collapse-toggle-transform));transition:transform cubic-bezier(0.68, -0.55, 0.27, 1.55) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2 / 3;left:calc(-1 * var(--bslib-sidebar-icon-size));right:unset;border-radius:var(--bs-border-radius) 0 0 var(--bs-border-radius);border-right:none;border-left:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotate(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: -90deg;--bslib-collapse-toggle-right-transform: 90deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{right:calc(-1 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-1 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout,.bslib-sidebar-layout.sidebar-right{--bslib-sidebar-vert-border: none;--bslib-sidebar-horiz-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-collapse-toggle-transform: -180deg;--bslib-collapse-toggle-right-transform: -180deg;grid-template-columns:1fr !important;grid-template-rows:fit-content(var(--bslib-sidebar-max-height-mobile, auto)) minmax(0, 1fr)}.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{grid-row:1 / 2;grid-column:1 / 2;width:100%;border:none;border-bottom:var(--bslib-sidebar-horiz-border);border-radius:0}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-row:2 / 3;grid-column:1 / 2;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout>.collapse-toggle,.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-row:2 / 3;grid-column:1 / 2;border-top:none !important;border:var(--bslib-collapse-toggle-border);border-radius:0 0 var(--bs-border-radius) var(--bs-border-radius);padding:0 4px}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon,.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transition-duration:calc(var(--bslib-sidebar-transition-duration) * 0.33)}.bslib-sidebar-layout>.collapse-toggle,.bslib-sidebar-layout.sidebar-right>.collapse-toggle,.bslib-sidebar-layout.sidebar-right>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-right>.collapse-toggle{top:calc(-1 * var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-right.sidebar-collapsed>.collapse-toggle{top:0}.bslib-sidebar-layout>.collapse-toggle,.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-right>.collapse-toggle,.bslib-sidebar-layout.sidebar-right.sidebar-right.sidebar-collapsed>.collapse-toggle{right:calc(var(--bslib-sidebar-padding) + var(--bslib-sidebar-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)));bottom:initial;left:initial}.bslib-sidebar-layout.sidebar-collapsed,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed{--bslib-collapse-toggle-transform: 0deg;--bslib-collapse-toggle-right-transform: 0deg;grid-template-rows:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed>.main,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.main{border-top-left-radius:inherit;border-top-right-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed>.sidebar,.bslib-sidebar-layout.sidebar-right.sidebar-collapsed>.sidebar{border-bottom:none}} +.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout{grid-template-columns:100% 0}.bslib-sidebar-layout:not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout.sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout.sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}} From 370bdbe23f3ed9d40e07b673249d162c7c57d7ba Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 14:11:46 -0400 Subject: [PATCH 09/29] fix(sidebar): Remove top padding if no toggle button --- inst/components/scss/sidebar.scss | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 56b26a362..e5c523996 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -120,6 +120,13 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } } + &[data-bslib-sidebar-open="always"] { + > .sidebar > .sidebar-content { + // remove toggle button padding adjustment if there isn't a button + padding-top: var(--bslib-sidebar-padding); + } + } + > .collapse-toggle { grid-row: 1 / 2; grid-column: 1 / 2; @@ -294,6 +301,14 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } } + > .main { + opacity: 0; + transition: opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration) + } + &.sidebar-collapsed > .main { + opacity: 1; + } + &:not(.sidebar-right) > .main { padding-left: calc(var(--bslib-sidebar-padding) * 2); } From 39fb83de260480397496f19087e7bd88ca277f6c Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 14:12:58 -0400 Subject: [PATCH 10/29] feat(sidebar): Use arrow-bar-left icon for sidebar toggle --- R/sidebar.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/sidebar.R b/R/sidebar.R index 4fd84da43..3d2ccca6b 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -291,10 +291,10 @@ sidebar_toggle <- toggle_sidebar collapse_icon <- function() { if (!is_installed("bsicons")) { - icon <- "" + icon <- "" return(HTML(icon)) } - bsicons::bs_icon("chevron-left", class = "collapse-icon", size = NULL) + bsicons::bs_icon("arrow-bar-left", class = "collapse-icon", size = NULL) } sidebar_init_js <- function() { From 2c5bc1bc3df84ac29a84de0ad8b60733ecc72d22 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Wed, 13 Sep 2023 14:39:12 -0400 Subject: [PATCH 11/29] feat: Always open sidebars go to flow mode plus other clean up --- inst/components/scss/sidebar.scss | 81 ++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index e5c523996..09bab06a2 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -276,44 +276,69 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } .bslib-sidebar-layout { - &:not(.sidebar-collapsed) { - > .sidebar { z-index: 1; } - > .collapse-toggle { z-index: 1; } + // Remove left or right edge sidebar borders in mobile view + &:not(.sidebar-right) { + > .sidebar { border-right: none } } - - $full-closed: 100% 0; - $closed-full: 0 100%; - grid-template-columns: $full-closed; &.sidebar-right { - grid-template-columns: $closed-full; + > .sidebar { border-left: none } + } + + // Always open sidebars become "flow" layouts in mobile view + &[data-bslib-sidebar-open="always"] { + display: block !important; } - &.sidebar-collapsed { - grid-template-columns: $closed-full; + &:not([data-bslib-sidebar-open="always"]) { + // Sidebar layer has to be lifted up to cover other (nested) sidebars + &:not(.sidebar-collapsed) { + > .sidebar { z-index: 1; } + > .collapse-toggle { z-index: 1; } + } + + // Either sidebar or main area take up entire layout depending on state + $full-closed: 100% 0; + $closed-full: 0 100%; + grid-template-columns: $full-closed; &.sidebar-right { - grid-template-columns: $full-closed; + grid-template-columns: $closed-full; } - } - &, &.sidebar-right { - > .main { - grid-column: 1 / 3; + &.sidebar-collapsed { + grid-template-columns: $closed-full; + &.sidebar-right { + grid-template-columns: $full-closed; + } } - } - > .main { - opacity: 0; - transition: opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration) - } - &.sidebar-collapsed > .main { - opacity: 1; - } + // Main area takes up entire layout area to avoid layout shift when + // sidebar is expanded as an overlay. + &, &.sidebar-right { + > .main { + grid-column: 1 / 3; + } + } - &:not(.sidebar-right) > .main { - padding-left: calc(var(--bslib-sidebar-padding) * 2); - } - &.sidebar-right > .main { - padding-right: calc(var(--bslib-sidebar-padding) * 2); + // Keep padding on main contents when sidebar is expanded (avoid shifts) + &:not(.sidebar-right) { + > .main { + padding-left: calc(var(--bslib-sidebar-padding) * 2); + } + } + &.sidebar-right { + > .main { + padding-right: calc(var(--bslib-sidebar-padding) * 2); + } + } + + // Make main contents transparent while sidebar is expanded + > .main { + opacity: 0; + transition: opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration) + } + &.sidebar-collapsed > .main { + opacity: 1; + } } } } From 7ef7297bf047919115de4a11ca2de78772e2e5d2 Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Wed, 13 Sep 2023 18:44:44 +0000 Subject: [PATCH 12/29] Resave distributed files (GitHub Action) --- inst/components/dist/sidebar/sidebar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/dist/sidebar/sidebar.css b/inst/components/dist/sidebar/sidebar.css index 834b61e7d..27d763ffa 100644 --- a/inst/components/dist/sidebar/sidebar.css +++ b/inst/components/dist/sidebar/sidebar.css @@ -1 +1 @@ -.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout{grid-template-columns:100% 0}.bslib-sidebar-layout:not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout.sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout.sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}} +.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout:not(.sidebar-right)>.sidebar{border-right:none}.bslib-sidebar-layout.sidebar-right>.sidebar{border-left:none}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main,.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} From 7c030c54f57b879fceb24d32b87e42868a5fd582 Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Wed, 13 Sep 2023 18:44:44 +0000 Subject: [PATCH 13/29] Resave data (GitHub Action) --- R/sysdata.rda | Bin 199857 -> 200080 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/R/sysdata.rda b/R/sysdata.rda index 5f69d4ab9653af1593ff93f6e2c128cbaeb01482..ed0482730edf6a7291b1bb47bd8498fd67dcfeb2 100644 GIT binary patch literal 200080 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 literal 199857 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 F_~cq3zFYtR From c36ede05f3a84c3d617139a476a1dc795fc735bc Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 09:17:01 -0400 Subject: [PATCH 14/29] chore: Apply suggestions from code review Co-authored-by: Carson Sievert --- R/sidebar.R | 2 +- srcts/src/components/sidebar.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/R/sidebar.R b/R/sidebar.R index 3d2ccca6b..b5dbff6ea 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -291,7 +291,7 @@ sidebar_toggle <- toggle_sidebar collapse_icon <- function() { if (!is_installed("bsicons")) { - icon <- "" + icon <- "" return(HTML(icon)) } bsicons::bs_icon("arrow-bar-left", class = "collapse-icon", size = NULL) diff --git a/srcts/src/components/sidebar.ts b/srcts/src/components/sidebar.ts index 2972fa45f..893ad4ff3 100644 --- a/srcts/src/components/sidebar.ts +++ b/srcts/src/components/sidebar.ts @@ -93,9 +93,8 @@ class Sidebar { ":scope > .sidebar-content > .accordion" ); if (sideAccordion) { - this.layout.sidebar - .querySelector(".sidebar-content") - ?.classList?.add("has-accordion"); + // Add `.has-accordion` class to `.sidebar-content` container + sideAccordion.parentElement.classList.add("has-accordion"); sideAccordion.classList.add("accordion-flush"); } From fb8b86384ad32a05bc584db195023eb1bee2e9a1 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 09:45:00 -0400 Subject: [PATCH 15/29] chore: make typescript happy --- inst/components/dist/sidebar/sidebar.js | 4 ++-- inst/components/dist/sidebar/sidebar.js.map | 4 ++-- inst/components/dist/sidebar/sidebar.min.js | 2 +- inst/components/dist/sidebar/sidebar.min.js.map | 6 +++--- srcts/src/components/sidebar.ts | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/inst/components/dist/sidebar/sidebar.js b/inst/components/dist/sidebar/sidebar.js index 8289480eb..79437ee05 100644 --- a/inst/components/dist/sidebar/sidebar.js +++ b/inst/components/dist/sidebar/sidebar.js @@ -123,7 +123,7 @@ * @param {HTMLElement} container */ constructor(container) { - var _a, _b; + var _a; _Sidebar.instanceMap.set(container, this); this.layout = { container, @@ -137,7 +137,7 @@ ":scope > .sidebar-content > .accordion" ); if (sideAccordion) { - (_b = (_a = this.layout.sidebar.querySelector(".sidebar-content")) == null ? void 0 : _a.classList) == null ? void 0 : _b.add("has-accordion"); + (_a = sideAccordion == null ? void 0 : sideAccordion.parentElement) == null ? void 0 : _a.classList.add("has-accordion"); sideAccordion.classList.add("accordion-flush"); } if (this.layout.toggle) { diff --git a/inst/components/dist/sidebar/sidebar.js.map b/inst/components/dist/sidebar/sidebar.js.map index 549a46816..7e5910ad5 100644 --- a/inst/components/dist/sidebar/sidebar.js.map +++ b/inst/components/dist/sidebar/sidebar.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../../srcts/src/components/_utils.ts", "../../../../srcts/src/components/_shinyResizeObserver.ts", "../../../../srcts/src/components/sidebar.ts"], - "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n this.layout.sidebar\n .querySelector(\".sidebar-content\")\n ?.classList?.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], - "mappings": "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", + "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n // Add `.has-accordion` class to `.sidebar-content` container\n sideAccordion?.parentElement?.classList.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], + "mappings": ";;;;AAQA,MAAM,eACJ,OAAO,QAAQ,MAAM,eAAe,MAAM;AAAA,EAAC;AAG7C,WAAS,gBACP,mBACA,MACM;AACN,QAAI,OAAO,OAAO;AAChB,YAAM,cAAc,SAAS,IAAI,kBAAkB,GAAG,WAAW,IAAI;AAAA,IACvE;AAAA,EACF;;;ACXA,MAAM,sBAAN,MAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoDxB,cAAc;AACZ,WAAK,wBAAwB,CAAC;AAC9B,WAAK,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACpD,cAAM,cAAc,IAAI,MAAM,QAAQ;AACtC,eAAO,cAAc,WAAW;AAGhC,YAAI,CAAC,OAAO;AAAO;AAEnB,cAAM,UAAU,CAAC;AAEjB,mBAAW,SAAS,SAAS;AAC3B,cAAI,EAAE,MAAM,kBAAkB;AAAc;AAC5C,cAAI,CAAC,MAAM,OAAO,cAAc,qBAAqB;AAAG;AAExD,gBAAM,OACH,iBAA8B,qBAAqB,EACnD,QAAQ,CAAC,OAAO;AACf,gBAAI,QAAQ,SAAS,EAAE;AAAG;AAE1B,kBAAM,EAAE,SAAS,SAAS,IAAI,EAAE,EAAE,EAAE,KAAK,oBAAoB;AAC7D,gBAAI,CAAC,WAAW,CAAC,QAAQ;AAAQ;AAGjC,kBAAM,QAAS,GAAW;AAC1B,gBAAI,SAAS,UAAU;AAAM;AAE7B,gBAAI,CAAC;AAAO,cAAC,GAAW,sBAAsB;AAG9C,qBAAS,EAAE;AAEX,oBAAQ,KAAK,EAAE;AAGf,gBAAI,CAAC,GAAG,UAAU,SAAS,mBAAmB;AAAG;AACjD,kBAAM,MAAM,GAAG;AAAA,cACb;AAAA,YACF;AACA,gBAAI;AAAK,kBAAI,aAAa,SAAS,MAAM;AAAA,UAC3C,CAAC;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAQ,IAAuB;AAC7B,WAAK,eAAe,QAAQ,EAAE;AAC9B,WAAK,sBAAsB,KAAK,EAAE;AAAA,IACpC;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAU,IAAuB;AAC/B,YAAM,QAAQ,KAAK,sBAAsB,QAAQ,EAAE;AACnD,UAAI,QAAQ;AAAG;AAEf,WAAK,eAAe,UAAU,EAAE;AAChC,WAAK,sBAAsB,OAAO,OAAO,CAAC;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,QAAc;AACZ,WAAK,sBAAsB,QAAQ,CAAC,OAAO;AACzC,YAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAAG,eAAK,UAAU,EAAE;AAAA,MACpD,CAAC;AAAA,IACH;AAAA,EACF;;;ACjFA,MAAM,WAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBZ,YAAY,WAAwB;AAhFtC;AAiFI,eAAQ,YAAY,IAAI,WAAW,IAAI;AACvC,WAAK,SAAS;AAAA,QACZ;AAAA,QACA,MAAM,UAAU,cAAc,gBAAgB;AAAA,QAC9C,SAAS,UAAU,cAAc,mBAAmB;AAAA,QACpD,QAAQ,UAAU;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB,KAAK,OAAO,QAAQ;AAAA,QACxC;AAAA,MACF;AACA,UAAI,eAAe;AAEjB,6DAAe,kBAAf,mBAA8B,UAAU,IAAI;AAC5C,sBAAc,UAAU,IAAI,iBAAiB;AAAA,MAC/C;AAEA,UAAI,KAAK,OAAO,QAAQ;AACtB,aAAK,oBAAoB;AACzB,aAAK,qBAAqB;AAC1B,aAAK,aAAa;AAAA,MACpB;AAIA,eAAQ,oBAAoB,QAAQ,KAAK,OAAO,IAAI;AAEpD,gBAAU,gBAAgB,yBAAyB;AACnD,YAAM,aAAa,UAAU;AAAA,QAC3B;AAAA,MACF;AACA,UAAI,YAAY;AACd,kBAAU,YAAY,UAAU;AAAA,MAClC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBA,IAAI,WAAoB;AACtB,aAAO,KAAK,OAAO,UAAU,UAAU,SAAS,SAAQ,QAAQ,QAAQ;AAAA,IAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyCA,OAAc,YAAY,IAAsC;AAC9D,aAAO,SAAQ,YAAY,IAAI,EAAE;AAAA,IACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,OAAc,mBAAmB,sBAAsB,MAAY;AACjE,UAAI,SAAS,eAAe,WAAW;AACrC,YAAI,CAAC,SAAQ,kBAAkB;AAC7B,mBAAQ,mBAAmB;AAC3B,mBAAS,iBAAiB,oBAAoB,MAAM;AAClD,qBAAQ,mBAAmB,KAAK;AAAA,UAClC,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAEA,YAAM,eAAe,IAAI,SAAQ,QAAQ;AACzC,UAAI,CAAC,SAAS,cAAc,YAAY,GAAG;AAEzC;AAAA,MACF;AAEA,UAAI;AAAqB,iBAAQ,oBAAoB,MAAM;AAE3D,YAAM,aAAa,SAAS,iBAAiB,YAAY;AACzD,iBAAW,QAAQ,CAAC,cAAc,IAAI,SAAQ,SAAwB,CAAC;AAAA,IACzE;AAAA;AAAA;AAAA;AAAA;AAAA,IAMQ,sBAA4B;AA9NtC;AA+NI,YAAM,EAAE,OAAO,IAAI,KAAK;AAExB,aAAO,iBAAiB,SAAS,CAAC,OAAO;AACvC,WAAG,eAAe;AAClB,aAAK,OAAO,QAAQ;AAAA,MACtB,CAAC;AAMD,mBACG,cAAc,gBAAgB,MADjC,mBAEI,iBAAiB,iBAAiB,MAAM,KAAK,eAAe;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaQ,uBAA6B;AACnC,YAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,YAAM,uBACJ,IAAI,SAAQ,QAAQ,oBAEhB,SAAQ,QAAQ;AAEtB,YAAM,oBACJ,UAAU,cAAc,oBAAoB,MAAM;AAEpD,UAAI,CAAC,mBAAmB;AAEtB;AAAA,MACF;AAEA,eAAS,kBAAkB,IAA4C;AACrE,aAAK,KAAK,GAAG,gBAAgB;AAC7B,YAAI,MAAM,GAAG,UAAU,SAAS,MAAM,GAAG;AAEvC,eAAK,GAAG;AAAA,QACV;AACA,YAAI,MAAM,GAAG,UAAU,SAAS,SAAQ,QAAQ,MAAM,GAAG;AACvD,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,CAAC,SAAS;AAC1B,UAAI,SAAS,kBAAkB,SAAS;AAExC,aAAO,QAAQ;AAEb,gBAAQ,QAAQ,MAAM;AACtB,iBAAS,kBAAkB,MAAM;AAAA,MACnC;AAEA,YAAM,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;AAClC,cAAQ,QAAQ,SAAU,GAAgB,GAAiB;AACzD,UAAE,MAAM,YAAY,2BAA2B,EAAE,SAAS,CAAC;AAC3D,cAAM,UAAU,EAAE,UAAU,SAAS,eAAe;AACpD,cAAM,YAAY,UAAU,MAAM,UAAU,MAAM;AAClD,UAAE,MAAM;AAAA,UACN;AAAA,UACA,UAAU,SAAS;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAMQ,eAAqB;AA/S/B;AAgTI,YAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,YAAI,eAAU,QAAQ,qBAAlB,mBAAoC,YAAW,WAAW;AAC5D;AAAA,MACF;AAGA,YAAM,gBAAgB,OACnB,iBAAiB,SAAS,EAC1B,iBAAiB,mCAAmC;AAEvD,UAAI,cAAc,KAAK,MAAM,QAAQ;AACnC,aAAK,OAAO,OAAO;AAAA,MACrB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASO,OAAO,QAA+C;AAC3D,UAAI,OAAO,WAAW,aAAa;AACjC,iBAAS;AAAA,MACX;AAEA,YAAM,EAAE,WAAW,QAAQ,IAAI,KAAK;AACpC,YAAM,WAAW,KAAK;AAEtB,UAAI,CAAC,QAAQ,SAAS,QAAQ,EAAE,QAAQ,MAAM,MAAM,IAAI;AACtD,cAAM,IAAI,MAAM,kBAAkB,QAAQ;AAAA,MAC5C;AAEA,UAAI,WAAW,UAAU;AACvB,iBAAS,WAAW,SAAS;AAAA,MAC/B;AAEA,UAAK,YAAY,WAAW,WAAa,CAAC,YAAY,WAAW,QAAS;AAExE;AAAA,MACF;AAEA,UAAI,WAAW,QAAQ;AAGrB,gBAAQ,SAAS;AAAA,MACnB;AAIA,gBAAU,UAAU,IAAI,SAAQ,QAAQ,aAAa;AACrD,gBAAU,UAAU,OAAO,SAAQ,QAAQ,QAAQ;AAAA,IACrD;AAAA;AAAA;AAAA;AAAA;AAAA,IAMQ,iBAAuB;AAC7B,YAAM,EAAE,WAAW,SAAS,OAAO,IAAI,KAAK;AAC5C,gBAAU,UAAU,OAAO,SAAQ,QAAQ,aAAa;AACxD,cAAQ,SAAS,KAAK;AACtB,aAAO,aAAa,iBAAiB,KAAK,WAAW,UAAU,MAAM;AAGrE,YAAM,QAAQ,IAAI,YAAY,iBAAiB;AAAA,QAC7C,SAAS;AAAA,QACT,QAAQ,EAAE,MAAM,CAAC,KAAK,SAAS;AAAA,MACjC,CAAC;AACD,cAAQ,cAAc,KAAK;AAG3B,QAAE,OAAO,EAAE,QAAQ,oCAAoC;AACvD,QAAE,OAAO,EAAE,QAAQ,KAAK,WAAW,WAAW,OAAO;AAAA,IACvD;AAAA,EACF;AAnUA,MAAM,UAAN;AAeE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAfI,QAeW,sBAAsB,IAAI,oBAAoB;AA6E7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA5FI,QA4FmB,UAAU;AAAA;AAAA,IAE/B,QAAQ;AAAA;AAAA,IAER,UAAU;AAAA;AAAA,IAEV,eAAe;AAAA,EACjB;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA5GI,QA4GW,mBAAmB;AAOlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAnHI,QAmHW,cAA6C,oBAAI,QAAQ;AAwN1E,MAAM,sBAAN,cAAkC,aAAa;AAAA,IAC7C,KAAK,OAAoB;AACvB,aAAO,EAAE,KAAK,EAAE,KAAK,IAAI,QAAQ,QAAQ,+BAA+B;AAAA,IAC1E;AAAA,IAEA,SAAS,IAA0B;AACjC,YAAM,KAAK,QAAQ,YAAY,GAAG,aAA4B;AAC9D,UAAI,CAAC;AAAI,eAAO;AAChB,aAAO,CAAC,GAAG;AAAA,IACb;AAAA,IAEA,SAAS,IAAiB,OAAsB;AAC9C,YAAM,SAAS,QAAQ,SAAS;AAChC,WAAK,eAAe,IAAI,EAAE,OAAO,CAAC;AAAA,IACpC;AAAA,IAEA,UAAU,IAAiB,UAAgC;AACzD,QAAE,EAAE,EAAE;AAAA,QACJ;AAAA;AAAA,QAEA,SAAU,OAAO;AACf,mBAAS,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY,IAAiB;AAC3B,QAAE,EAAE,EAAE,IAAI,sBAAsB;AAAA,IAClC;AAAA,IAEA,eAAe,IAAiB,MAA0B;AACxD,YAAM,KAAK,QAAQ,YAAY,GAAG,aAA4B;AAC9D,UAAI;AAAI,WAAG,OAAO,KAAK,MAAM;AAAA,IAC/B;AAAA,EACF;AAEA,kBAAgB,qBAAqB,SAAS;AAG9C,EAAC,OAAe,QAAS,OAAe,SAAS,CAAC;AAClD,EAAC,OAAe,MAAM,UAAU;", "names": [] } diff --git a/inst/components/dist/sidebar/sidebar.min.js b/inst/components/dist/sidebar/sidebar.min.js index 60cc653ce..41cccfe23 100644 --- a/inst/components/dist/sidebar/sidebar.min.js +++ b/inst/components/dist/sidebar/sidebar.min.js @@ -1,3 +1,3 @@ /*! bslib 0.5.1.9000 | (c) 2012-2023 RStudio, PBC. | License: MIT + file LICENSE */ -"use strict";(()=>{var g=window.Shiny?Shiny.InputBinding:class{};function y(b,e){window.Shiny&&Shiny.inputBindings.register(new b,"bslib."+e)}var u=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let s=[];for(let r of e)r.target instanceof HTMLElement&&r.target.querySelector(".shiny-bound-output")&&r.target.querySelectorAll(".shiny-bound-output").forEach(o=>{if(s.includes(o))return;let{binding:l,onResize:d}=$(o).data("shinyOutputBinding");if(!l||!l.resize)return;let i=o.shinyResizeObserver;if(i&&i!==this||(i||(o.shinyResizeObserver=this),d(o),s.push(o),!o.classList.contains("shiny-plot-output")))return;let c=o.querySelector('img:not([width="100%"])');c&&c.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 n=class{constructor(e){var r,o;n.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&&((o=(r=this.layout.sidebar.querySelector(".sidebar-content"))==null?void 0:r.classList)==null||o.add("has-accordion"),t.classList.add("accordion-flush")),this.layout.toggle&&(this._initEventListeners(),this._initSidebarCounters(),this._initDesktop()),n.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let s=e.querySelector(":scope > script[data-bslib-sidebar-init]");s&&e.removeChild(s)}get isClosed(){return this.layout.container.classList.contains(n.classes.COLLAPSE)}static getInstance(e){return n.instanceMap.get(e)}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){n.onReadyScheduled||(n.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{n.initCollapsibleAll(!1)}));return}let t=`.${n.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&n.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(r=>new n(r))}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",s=>{s.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>this._finalizeState())}_initSidebarCounters(){let{container:e}=this.layout,t=`.${n.classes.LAYOUT}> .main > .${n.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function r(i){return i=i?i.parentElement:null,i&&i.classList.contains("main")&&(i=i.parentElement),i&&i.classList.contains(n.classes.LAYOUT)?i:null}let o=[e],l=r(e);for(;l;)o.unshift(l),l=r(l);let d={left:0,right:0};o.forEach(function(i,c){i.style.setProperty("--bslib-sidebar-counter",c.toString());let h=i.classList.contains("sidebar-right")?d.right++:d.left++;i.style.setProperty("--bslib-sidebar-overlap-counter",h.toString())})}_initDesktop(){var s;let{container:e}=this.layout;if(((s=e.dataset.bslibSidebarOpen)==null?void 0:s.trim())!=="desktop")return;window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-init-collapsed").trim()==="true"&&this.toggle("close")}toggle(e){typeof e=="undefined"&&(e="toggle");let{container:t,sidebar:s}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);e==="toggle"&&(e=r?"open":"close"),!(r&&e==="close"||!r&&e==="open")&&(e==="open"&&(s.hidden=!1),t.classList.add(n.classes.TRANSITIONING),t.classList.toggle(n.classes.COLLAPSE))}_finalizeState(){let{container:e,sidebar:t,toggle:s}=this.layout;e.classList.remove(n.classes.TRANSITIONING),t.hidden=this.isClosed,s.setAttribute("aria-expanded",this.isClosed?"false":"true");let r=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(r),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},a=n;a.shinyResizeObserver=new u,a.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning"},a.onReadyScheduled=!1,a.instanceMap=new WeakMap;var p=class extends g{find(e){return $(e).find(`.${a.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=a.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let s=t?"open":"close";this.receiveMessage(e,{method:s})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(s){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let s=a.getInstance(e.parentElement);s&&s.toggle(t.method)}};y(p,"sidebar");window.bslib=window.bslib||{};window.bslib.Sidebar=a;})(); +"use strict";(()=>{var g=window.Shiny?Shiny.InputBinding:class{};function f(b,e){window.Shiny&&Shiny.inputBindings.register(new b,"bslib."+e)}var u=class{constructor(){this.resizeObserverEntries=[],this.resizeObserver=new ResizeObserver(e=>{let t=new Event("resize");if(window.dispatchEvent(t),!window.Shiny)return;let s=[];for(let r of e)r.target instanceof HTMLElement&&r.target.querySelector(".shiny-bound-output")&&r.target.querySelectorAll(".shiny-bound-output").forEach(o=>{if(s.includes(o))return;let{binding:l,onResize:d}=$(o).data("shinyOutputBinding");if(!l||!l.resize)return;let i=o.shinyResizeObserver;if(i&&i!==this||(i||(o.shinyResizeObserver=this),d(o),s.push(o),!o.classList.contains("shiny-plot-output")))return;let c=o.querySelector('img:not([width="100%"])');c&&c.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 n=class{constructor(e){var r;n.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&&((r=t==null?void 0:t.parentElement)==null||r.classList.add("has-accordion"),t.classList.add("accordion-flush")),this.layout.toggle&&(this._initEventListeners(),this._initSidebarCounters(),this._initDesktop()),n.shinyResizeObserver.observe(this.layout.main),e.removeAttribute("data-bslib-sidebar-init");let s=e.querySelector(":scope > script[data-bslib-sidebar-init]");s&&e.removeChild(s)}get isClosed(){return this.layout.container.classList.contains(n.classes.COLLAPSE)}static getInstance(e){return n.instanceMap.get(e)}static initCollapsibleAll(e=!0){if(document.readyState==="loading"){n.onReadyScheduled||(n.onReadyScheduled=!0,document.addEventListener("DOMContentLoaded",()=>{n.initCollapsibleAll(!1)}));return}let t=`.${n.classes.LAYOUT}[data-bslib-sidebar-init]`;if(!document.querySelector(t))return;e&&n.shinyResizeObserver.flush(),document.querySelectorAll(t).forEach(r=>new n(r))}_initEventListeners(){var t;let{toggle:e}=this.layout;e.addEventListener("click",s=>{s.preventDefault(),this.toggle("toggle")}),(t=e.querySelector(".collapse-icon"))==null||t.addEventListener("transitionend",()=>this._finalizeState())}_initSidebarCounters(){let{container:e}=this.layout,t=`.${n.classes.LAYOUT}> .main > .${n.classes.LAYOUT}:not([data-bslib-sidebar-open="always"])`;if(!(e.querySelector(t)===null))return;function r(i){return i=i?i.parentElement:null,i&&i.classList.contains("main")&&(i=i.parentElement),i&&i.classList.contains(n.classes.LAYOUT)?i:null}let o=[e],l=r(e);for(;l;)o.unshift(l),l=r(l);let d={left:0,right:0};o.forEach(function(i,c){i.style.setProperty("--bslib-sidebar-counter",c.toString());let h=i.classList.contains("sidebar-right")?d.right++:d.left++;i.style.setProperty("--bslib-sidebar-overlap-counter",h.toString())})}_initDesktop(){var s;let{container:e}=this.layout;if(((s=e.dataset.bslibSidebarOpen)==null?void 0:s.trim())!=="desktop")return;window.getComputedStyle(e).getPropertyValue("--bslib-sidebar-js-init-collapsed").trim()==="true"&&this.toggle("close")}toggle(e){typeof e=="undefined"&&(e="toggle");let{container:t,sidebar:s}=this.layout,r=this.isClosed;if(["open","close","toggle"].indexOf(e)===-1)throw new Error(`Unknown method ${e}`);e==="toggle"&&(e=r?"open":"close"),!(r&&e==="close"||!r&&e==="open")&&(e==="open"&&(s.hidden=!1),t.classList.add(n.classes.TRANSITIONING),t.classList.toggle(n.classes.COLLAPSE))}_finalizeState(){let{container:e,sidebar:t,toggle:s}=this.layout;e.classList.remove(n.classes.TRANSITIONING),t.hidden=this.isClosed,s.setAttribute("aria-expanded",this.isClosed?"false":"true");let r=new CustomEvent("bslib.sidebar",{bubbles:!0,detail:{open:!this.isClosed}});t.dispatchEvent(r),$(t).trigger("toggleCollapse.sidebarInputBinding"),$(t).trigger(this.isClosed?"hidden":"shown")}},a=n;a.shinyResizeObserver=new u,a.classes={LAYOUT:"bslib-sidebar-layout",COLLAPSE:"sidebar-collapsed",TRANSITIONING:"transitioning"},a.onReadyScheduled=!1,a.instanceMap=new WeakMap;var p=class extends g{find(e){return $(e).find(`.${a.classes.LAYOUT} > .bslib-sidebar-input`)}getValue(e){let t=a.getInstance(e.parentElement);return t?!t.isClosed:!1}setValue(e,t){let s=t?"open":"close";this.receiveMessage(e,{method:s})}subscribe(e,t){$(e).on("toggleCollapse.sidebarInputBinding",function(s){t(!0)})}unsubscribe(e){$(e).off(".sidebarInputBinding")}receiveMessage(e,t){let s=a.getInstance(e.parentElement);s&&s.toggle(t.method)}};f(p,"sidebar");window.bslib=window.bslib||{};window.bslib.Sidebar=a;})(); //# sourceMappingURL=sidebar.min.js.map diff --git a/inst/components/dist/sidebar/sidebar.min.js.map b/inst/components/dist/sidebar/sidebar.min.js.map index ed1b007d6..c6eeefff3 100644 --- a/inst/components/dist/sidebar/sidebar.min.js.map +++ b/inst/components/dist/sidebar/sidebar.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../../srcts/src/components/_utils.ts", "../../../../srcts/src/components/_shinyResizeObserver.ts", "../../../../srcts/src/components/sidebar.ts"], - "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n this.layout.sidebar\n .querySelector(\".sidebar-content\")\n ?.classList?.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], - "mappings": "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", - "names": ["InputBinding", "registerBinding", "inputBindingClass", "name", "ShinyResizeObserver", "entries", "resizeEvent", "resized", "entry", "el", "binding", "onResize", "owner", "img", "idxEl", "_Sidebar", "container", "_a", "_b", "sideAccordion", "initScript", "el", "flushResizeObserver", "initSelector", "toggle", "ev", "selectorChildLayouts", "nextSidebarParent", "layouts", "parent", "count", "x", "i", "thisCount", "method", "sidebar", "isClosed", "event", "Sidebar", "ShinyResizeObserver", "SidebarInputBinding", "InputBinding", "scope", "sb", "value", "callback", "data", "registerBinding"] + "sourcesContent": ["import type { HtmlDep } from \"rstudio-shiny/srcts/types/src/shiny/render\";\n\nimport type { InputBinding as InputBindingType } from \"rstudio-shiny/srcts/types/src/bindings/input\";\n\n// Exclude undefined from T\ntype NotUndefined = T extends undefined ? never : T;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputBinding = (\n window.Shiny ? Shiny.InputBinding : class {}\n) as typeof InputBindingType;\n\nfunction registerBinding(\n inputBindingClass: new () => InputBindingType,\n name: string\n): void {\n if (window.Shiny) {\n Shiny.inputBindings.register(new inputBindingClass(), \"bslib.\" + name);\n }\n}\n\n// Return true if the key exists on the object and the value is not undefined.\n//\n// This method is mainly used in input bindings' `receiveMessage` method.\n// Since we know that the values are sent by Shiny via `{jsonlite}`,\n// then we know that there are no `undefined` values. `null` is possible, but not `undefined`.\nfunction hasDefinedProperty<\n Prop extends keyof X,\n X extends { [key: string]: any }\n>(\n obj: X,\n prop: Prop\n): obj is X & { [key in NonNullable]: NotUndefined } {\n return (\n Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined\n );\n}\n\n// TODO: Shiny should trigger resize events when the output\n// https://github.com/rstudio/shiny/pull/3682\nfunction doWindowResizeOnElementResize(el: HTMLElement): void {\n if ($(el).data(\"window-resize-observer\")) {\n return;\n }\n const resizeEvent = new Event(\"resize\");\n const ro = new ResizeObserver(() => {\n window.dispatchEvent(resizeEvent);\n });\n ro.observe(el);\n $(el).data(\"window-resize-observer\", ro);\n}\n\nfunction getAllFocusableChildren(el: HTMLElement): HTMLElement[] {\n // Cross-referenced with https://allyjs.io/data-tables/focusable.html\n const base = [\n \"a[href]\",\n \"area[href]\",\n \"button\",\n \"details summary\",\n \"input\",\n \"iframe\",\n \"select\",\n \"textarea\",\n '[contentEditable=\"\"]',\n '[contentEditable=\"true\"]',\n '[contentEditable=\"TRUE\"]',\n \"[tabindex]\",\n ];\n const modifiers = [':not([tabindex=\"-1\"])', \":not([disabled])\"];\n const selectors = base.map((b) => b + modifiers.join(\"\"));\n const focusable = el.querySelectorAll(selectors.join(\", \"));\n return Array.from(focusable) as HTMLElement[];\n}\n\nexport {\n InputBinding,\n registerBinding,\n hasDefinedProperty,\n doWindowResizeOnElementResize,\n getAllFocusableChildren,\n};\nexport type { HtmlDep };\n", "/**\n * A resize observer that ensures Shiny outputs resize during or just after\n * their parent container size changes. Useful, in particular, for sidebar\n * transitions or for full-screen card transitions.\n *\n * @class ShinyResizeObserver\n * @typedef {ShinyResizeObserver}\n */\nclass ShinyResizeObserver {\n /**\n * The actual ResizeObserver instance.\n * @private\n * @type {ResizeObserver}\n */\n private resizeObserver: ResizeObserver;\n /**\n * An array of elements that are currently being watched by the Resize\n * Observer.\n *\n * @details\n * We don't currently have lifecycle hooks that allow us to unobserve elements\n * when they are removed from the DOM. As a result, we need to manually check\n * that the elements we're watching still exist in the DOM. This array keeps\n * track of the elements we're watching so that we can check them later.\n * @private\n * @type {HTMLElement[]}\n */\n private resizeObserverEntries: HTMLElement[];\n\n /**\n * Watch containers for size changes and ensure that Shiny outputs and\n * htmlwidgets within resize appropriately.\n *\n * @details\n * The ShinyResizeObserver is used to watch the containers, such as Sidebars\n * and Cards for size changes, in particular when the sidebar state is toggled\n * or the card body is expanded full screen. It performs two primary tasks:\n *\n * 1. Dispatches a `resize` event on the window object. This is necessary to\n * ensure that Shiny outputs resize appropriately. In general, the window\n * resizing is throttled and the output update occurs when the transition\n * is complete.\n * 2. If an output with a resize method on the output binding is detected, we\n * directly call the `.onResize()` method of the binding. This ensures that\n * htmlwidgets transition smoothly. In static mode, htmlwidgets does this\n * already.\n *\n * @note\n * This resize observer also handles race conditions in some complex\n * fill-based layouts with multiple outputs (e.g., plotly), where shiny\n * initializes with the correct sizing, but in-between the 1st and last\n * renderValue(), the size of the output containers can change, meaning every\n * output but the 1st gets initialized with the wrong size during their\n * renderValue(). Then, after the render phase, shiny won't know to trigger a\n * resize since all the widgets will return to their original size (and thus,\n * Shiny thinks there isn't any resizing to do). The resize observer works\n * around this by ensuring that the output is resized whenever its container\n * size changes.\n * @constructor\n */\n constructor() {\n this.resizeObserverEntries = [];\n this.resizeObserver = new ResizeObserver((entries) => {\n const resizeEvent = new Event(\"resize\");\n window.dispatchEvent(resizeEvent);\n\n // the rest of this callback is only relevant in Shiny apps\n if (!window.Shiny) return;\n\n const resized = [] as HTMLElement[];\n\n for (const entry of entries) {\n if (!(entry.target instanceof HTMLElement)) continue;\n if (!entry.target.querySelector(\".shiny-bound-output\")) continue;\n\n entry.target\n .querySelectorAll(\".shiny-bound-output\")\n .forEach((el) => {\n if (resized.includes(el)) return;\n\n const { binding, onResize } = $(el).data(\"shinyOutputBinding\");\n if (!binding || !binding.resize) return;\n\n // if this output is owned by another observer, skip it\n const owner = (el as any).shinyResizeObserver;\n if (owner && owner !== this) return;\n // mark this output as owned by this shinyResizeObserver instance\n if (!owner) (el as any).shinyResizeObserver = this;\n\n // trigger immediate resizing of outputs with a resize method\n onResize(el);\n // only once per output and resize event\n resized.push(el);\n\n // set plot images to 100% width temporarily during the transition\n if (!el.classList.contains(\"shiny-plot-output\")) return;\n const img = el.querySelector(\n 'img:not([width=\"100%\"])'\n );\n if (img) img.setAttribute(\"width\", \"100%\");\n });\n }\n });\n }\n\n /**\n * Observe an element for size changes.\n * @param {HTMLElement} el - The element to observe.\n */\n observe(el: HTMLElement): void {\n this.resizeObserver.observe(el);\n this.resizeObserverEntries.push(el);\n }\n\n /**\n * Stop observing an element for size changes.\n * @param {HTMLElement} el - The element to stop observing.\n */\n unobserve(el: HTMLElement): void {\n const idxEl = this.resizeObserverEntries.indexOf(el);\n if (idxEl < 0) return;\n\n this.resizeObserver.unobserve(el);\n this.resizeObserverEntries.splice(idxEl, 1);\n }\n\n /**\n * This method checks that we're not continuing to watch elements that no\n * longer exist in the DOM. If any are found, we stop observing them and\n * remove them from our array of observed elements.\n *\n * @private\n * @static\n */\n flush(): void {\n this.resizeObserverEntries.forEach((el) => {\n if (!document.body.contains(el)) this.unobserve(el);\n });\n }\n}\n\nexport { ShinyResizeObserver };\n", "import { InputBinding, registerBinding } from \"./_utils\";\nimport { ShinyResizeObserver } from \"./_shinyResizeObserver\";\n\n/**\n * Methods for programmatically toggling the state of the sidebar. These methods\n * describe the desired state of the sidebar: `\"close\"` and `\"open\"` transition\n * the sidebar to the desired state, unless the sidebar is already in that\n * state. `\"toggle\"` transitions the sidebar to the state opposite of its\n * current state.\n * @typedef {SidebarToggleMethod}\n */\ntype SidebarToggleMethod = \"close\" | \"open\" | \"toggle\";\n\n/**\n * Data received by the input binding's `receiveMessage` method.\n * @typedef {SidebarMessageData}\n */\ntype SidebarMessageData = {\n method: SidebarToggleMethod;\n};\n\n/**\n * The DOM elements that make up the sidebar. `main`, `sidebar`, and `toggle`\n * are all direct children of `container` (in that order).\n * @interface SidebarComponents\n * @typedef {SidebarComponents}\n */\ninterface SidebarComponents {\n /**\n * The `layout_sidebar()` parent container, with class\n * `Sidebar.classes.LAYOUT`.\n * @type {HTMLElement}\n */\n container: HTMLElement;\n /**\n * The main content area of the sidebar layout.\n * @type {HTMLElement}\n */\n main: HTMLElement;\n /**\n * The sidebar container of the sidebar layout.\n * @type {HTMLElement}\n */\n sidebar: HTMLElement;\n /**\n * The toggle button that is used to toggle the sidebar state.\n * @type {HTMLElement}\n */\n toggle: HTMLElement;\n}\n\n/**\n * The bslib sidebar component class. This class is only used for collapsible\n * sidebars.\n *\n * @class Sidebar\n * @typedef {Sidebar}\n */\nclass Sidebar {\n /**\n * The DOM elements that make up the sidebar, see `SidebarComponents`.\n * @private\n * @type {SidebarComponents}\n */\n private layout: SidebarComponents;\n\n /**\n * A Shiny-specific resize observer that ensures Shiny outputs in the main\n * content areas of the sidebar resize appropriately.\n * @private\n * @type {ShinyResizeObserver}\n * @static\n */\n private static shinyResizeObserver = new ShinyResizeObserver();\n\n /**\n * Creates an instance of a collapsible bslib Sidebar.\n * @constructor\n * @param {HTMLElement} container\n */\n constructor(container: HTMLElement) {\n Sidebar.instanceMap.set(container, this);\n this.layout = {\n container,\n main: container.querySelector(\":scope > .main\") as HTMLElement,\n sidebar: container.querySelector(\":scope > .sidebar\") as HTMLElement,\n toggle: container.querySelector(\n \":scope > .collapse-toggle\"\n ) as HTMLElement,\n } as SidebarComponents;\n\n const sideAccordion = this.layout.sidebar.querySelector(\n \":scope > .sidebar-content > .accordion\"\n );\n if (sideAccordion) {\n // Add `.has-accordion` class to `.sidebar-content` container\n sideAccordion?.parentElement?.classList.add(\"has-accordion\");\n sideAccordion.classList.add(\"accordion-flush\");\n }\n\n if (this.layout.toggle) {\n this._initEventListeners();\n this._initSidebarCounters();\n this._initDesktop();\n }\n\n // Start watching the main content area for size changes to ensure Shiny\n // outputs resize appropriately during sidebar transitions.\n Sidebar.shinyResizeObserver.observe(this.layout.main);\n\n container.removeAttribute(\"data-bslib-sidebar-init\");\n const initScript = container.querySelector(\n \":scope > script[data-bslib-sidebar-init]\"\n );\n if (initScript) {\n container.removeChild(initScript);\n }\n }\n\n /**\n * Read the current state of the sidebar. Note that, when calling this method,\n * the sidebar may be transitioning into the state returned by this method.\n *\n * @description\n * The sidebar state works as follows, starting from the open state. When the\n * sidebar is closed:\n * 1. We add both the `COLLAPSE` and `TRANSITIONING` classes to the sidebar.\n * 2. The sidebar collapse begins to animate. On desktop devices, and where it\n * is supported, we transition the `grid-template-columns` property of the\n * sidebar layout. On mobile, the sidebar is hidden immediately. In both\n * cases, the collapse icon rotates and we use this rotation to determine\n * when the transition is complete.\n * 3. If another sidebar state toggle is requested while closing the sidebar,\n * we remove the `COLLAPSE` class and the animation immediately starts to\n * reverse.\n * 4. When the `transition` is complete, we remove the `TRANSITIONING` class.\n * @readonly\n * @type {boolean}\n */\n get isClosed(): boolean {\n return this.layout.container.classList.contains(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * Static classes related to the sidebar layout or state.\n * @public\n * @static\n * @readonly\n * @type {{ LAYOUT: string; COLLAPSE: string; TRANSITIONING: string; }}\n */\n public static readonly classes = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n LAYOUT: \"bslib-sidebar-layout\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n COLLAPSE: \"sidebar-collapsed\",\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TRANSITIONING: \"transitioning\",\n };\n\n /**\n * If sidebars are initialized before the DOM is ready, we re-schedule the\n * initialization to occur on DOMContentLoaded.\n * @private\n * @static\n * @type {boolean}\n */\n private static onReadyScheduled = false;\n /**\n * A map of initialized sidebars to their respective Sidebar instances.\n * @private\n * @static\n * @type {WeakMap}\n */\n private static instanceMap: WeakMap = new WeakMap();\n\n /**\n * Given a sidebar container, return the Sidebar instance associated with it.\n * @public\n * @static\n * @param {HTMLElement} el\n * @returns {(Sidebar | undefined)}\n */\n public static getInstance(el: HTMLElement): Sidebar | undefined {\n return Sidebar.instanceMap.get(el);\n }\n\n /**\n * Initialize all collapsible sidebars on the page.\n * @public\n * @static\n * @param {boolean} [flushResizeObserver=true] When `true`, we remove\n * non-existent elements from the ResizeObserver. This is required\n * periodically to prevent memory leaks. To avoid over-checking, we only flush\n * the ResizeObserver when initializing sidebars after page load.\n */\n public static initCollapsibleAll(flushResizeObserver = true): void {\n if (document.readyState === \"loading\") {\n if (!Sidebar.onReadyScheduled) {\n Sidebar.onReadyScheduled = true;\n document.addEventListener(\"DOMContentLoaded\", () => {\n Sidebar.initCollapsibleAll(false);\n });\n }\n return;\n }\n\n const initSelector = `.${Sidebar.classes.LAYOUT}[data-bslib-sidebar-init]`;\n if (!document.querySelector(initSelector)) {\n // no sidebars to initialize\n return;\n }\n\n if (flushResizeObserver) Sidebar.shinyResizeObserver.flush();\n\n const containers = document.querySelectorAll(initSelector);\n containers.forEach((container) => new Sidebar(container as HTMLElement));\n }\n\n /**\n * Initialize event listeners for the sidebar toggle button.\n * @private\n */\n private _initEventListeners(): void {\n const { toggle } = this.layout;\n\n toggle.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n this.toggle(\"toggle\");\n });\n\n // Remove the transitioning class when the transition ends. We watch the\n // collapse toggle icon because it's guaranteed to transition, whereas the\n // sidebar doesn't animate on mobile (or in browsers where animating\n // grid-template-columns is not supported).\n toggle\n .querySelector(\".collapse-icon\")\n ?.addEventListener(\"transitionend\", () => this._finalizeState());\n }\n\n /**\n * Initialize nested sidebar counters.\n *\n * @description\n * This function walks up the DOM tree, adding CSS variables to each direct\n * parent sidebar layout that count the layout's position in the stack of\n * nested layouts. We use these counters to keep the collapse toggles from\n * overlapping. Note that always-open sidebars that don't have collapse\n * toggles break the chain of nesting.\n * @private\n */\n private _initSidebarCounters(): void {\n const { container } = this.layout;\n\n const selectorChildLayouts =\n `.${Sidebar.classes.LAYOUT}` +\n \"> .main > \" +\n `.${Sidebar.classes.LAYOUT}:not([data-bslib-sidebar-open=\"always\"])`;\n\n const isInnermostLayout =\n container.querySelector(selectorChildLayouts) === null;\n\n if (!isInnermostLayout) {\n // There are sidebar layouts nested within this layout; defer to children\n return;\n }\n\n function nextSidebarParent(el: HTMLElement | null): HTMLElement | null {\n el = el ? el.parentElement : null;\n if (el && el.classList.contains(\"main\")) {\n // .bslib-sidebar-layout > .main > .bslib-sidebar-layout\n el = el.parentElement;\n }\n if (el && el.classList.contains(Sidebar.classes.LAYOUT)) {\n return el;\n }\n return null;\n }\n\n const layouts = [container];\n let parent = nextSidebarParent(container);\n\n while (parent) {\n // Add parent to front of layouts array, so we sort outer -> inner\n layouts.unshift(parent);\n parent = nextSidebarParent(parent);\n }\n\n const count = { left: 0, right: 0 };\n layouts.forEach(function (x: HTMLElement, i: number): void {\n x.style.setProperty(\"--bslib-sidebar-counter\", i.toString());\n const isRight = x.classList.contains(\"sidebar-right\");\n const thisCount = isRight ? count.right++ : count.left++;\n x.style.setProperty(\n \"--bslib-sidebar-overlap-counter\",\n thisCount.toString()\n );\n });\n }\n\n /**\n * Initialize the sidebar's initial state when `open = \"desktop\"`.\n * @private\n */\n private _initDesktop(): void {\n const { container } = this.layout;\n // If sidebar is marked open='desktop'...\n if (container.dataset.bslibSidebarOpen?.trim() !== \"desktop\") {\n return;\n }\n\n // then close sidebar on mobile\n const initCollapsed = window\n .getComputedStyle(container)\n .getPropertyValue(\"--bslib-sidebar-js-init-collapsed\");\n\n if (initCollapsed.trim() === \"true\") {\n this.toggle(\"close\");\n }\n }\n\n /**\n * Toggle the sidebar's open/closed state.\n * @public\n * @param {SidebarToggleMethod | undefined} method Whether to `\"open\"`,\n * `\"close\"` or `\"toggle\"` the sidebar. If `.toggle()` is called without an\n * argument, it will toggle the sidebar's state.\n */\n public toggle(method: SidebarToggleMethod | undefined): void {\n if (typeof method === \"undefined\") {\n method = \"toggle\";\n }\n\n const { container, sidebar } = this.layout;\n const isClosed = this.isClosed;\n\n if ([\"open\", \"close\", \"toggle\"].indexOf(method) === -1) {\n throw new Error(`Unknown method ${method}`);\n }\n\n if (method === \"toggle\") {\n method = isClosed ? \"open\" : \"close\";\n }\n\n if ((isClosed && method === \"close\") || (!isClosed && method === \"open\")) {\n // nothing to do, sidebar is already in the desired state\n return;\n }\n\n if (method === \"open\") {\n // unhide sidebar immediately when opening,\n // otherwise the sidebar is hidden on transitionend\n sidebar.hidden = false;\n }\n\n // Add a transitioning class just before adding COLLAPSE_CLASS since we want\n // some of the transitioning styles to apply before the collapse state\n container.classList.add(Sidebar.classes.TRANSITIONING);\n container.classList.toggle(Sidebar.classes.COLLAPSE);\n }\n\n /**\n * When the sidebar open/close transition ends, finalize the sidebar's state.\n * @private\n */\n private _finalizeState(): void {\n const { container, sidebar, toggle } = this.layout;\n container.classList.remove(Sidebar.classes.TRANSITIONING);\n sidebar.hidden = this.isClosed;\n toggle.setAttribute(\"aria-expanded\", this.isClosed ? \"false\" : \"true\");\n\n // Send browser-native event with updated sidebar state\n const event = new CustomEvent(\"bslib.sidebar\", {\n bubbles: true,\n detail: { open: !this.isClosed },\n });\n sidebar.dispatchEvent(event);\n\n // Trigger Shiny input and output binding events\n $(sidebar).trigger(\"toggleCollapse.sidebarInputBinding\");\n $(sidebar).trigger(this.isClosed ? \"hidden\" : \"shown\");\n }\n}\n\n/**\n * A Shiny input binding for a sidebar.\n * @class SidebarInputBinding\n * @typedef {SidebarInputBinding}\n * @extends {InputBinding}\n */\nclass SidebarInputBinding extends InputBinding {\n find(scope: HTMLElement) {\n return $(scope).find(`.${Sidebar.classes.LAYOUT} > .bslib-sidebar-input`);\n }\n\n getValue(el: HTMLElement): boolean {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (!sb) return false;\n return !sb.isClosed;\n }\n\n setValue(el: HTMLElement, value: boolean): void {\n const method = value ? \"open\" : \"close\";\n this.receiveMessage(el, { method });\n }\n\n subscribe(el: HTMLElement, callback: (x: boolean) => void) {\n $(el).on(\n \"toggleCollapse.sidebarInputBinding\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function (event) {\n callback(true);\n }\n );\n }\n\n unsubscribe(el: HTMLElement) {\n $(el).off(\".sidebarInputBinding\");\n }\n\n receiveMessage(el: HTMLElement, data: SidebarMessageData) {\n const sb = Sidebar.getInstance(el.parentElement as HTMLElement);\n if (sb) sb.toggle(data.method);\n }\n}\n\nregisterBinding(SidebarInputBinding, \"sidebar\");\n\n// attach Sidebar class to window for global usage\n(window as any).bslib = (window as any).bslib || {};\n(window as any).bslib.Sidebar = Sidebar;\n"], + "mappings": "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", + "names": ["InputBinding", "registerBinding", "inputBindingClass", "name", "ShinyResizeObserver", "entries", "resizeEvent", "resized", "entry", "el", "binding", "onResize", "owner", "img", "idxEl", "_Sidebar", "container", "_a", "sideAccordion", "initScript", "el", "flushResizeObserver", "initSelector", "toggle", "ev", "selectorChildLayouts", "nextSidebarParent", "layouts", "parent", "count", "x", "i", "thisCount", "method", "sidebar", "isClosed", "event", "Sidebar", "ShinyResizeObserver", "SidebarInputBinding", "InputBinding", "scope", "sb", "value", "callback", "data", "registerBinding"] } diff --git a/srcts/src/components/sidebar.ts b/srcts/src/components/sidebar.ts index 893ad4ff3..ae5c11357 100644 --- a/srcts/src/components/sidebar.ts +++ b/srcts/src/components/sidebar.ts @@ -94,7 +94,7 @@ class Sidebar { ); if (sideAccordion) { // Add `.has-accordion` class to `.sidebar-content` container - sideAccordion.parentElement.classList.add("has-accordion"); + sideAccordion?.parentElement?.classList.add("has-accordion"); sideAccordion.classList.add("accordion-flush"); } From fa5ab19b6b47cc8037b71ad05a8d58358f350281 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 09:45:25 -0400 Subject: [PATCH 16/29] chore: remove comment --- inst/components/scss/sidebar.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 09bab06a2..35ef5baae 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -66,7 +66,6 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), border-bottom-right-radius: 0; color: var(--bslib-sidebar-fg); background-color: var(--bslib-sidebar-bg); - // TODO: background can be transparent to be dark mode adaptive, need opaque "subtle" variant backdrop-filter: blur(5px); > .sidebar-content { From 48e6d6d9b1e27ca7e42f633384241d6e99576255 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 09:47:40 -0400 Subject: [PATCH 17/29] chore: consolidate rules --- inst/components/scss/sidebar.scss | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 35ef5baae..91fee6c7e 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -267,14 +267,14 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } @include media-breakpoint-down(sm) { - .bslib-sidebar-layout, .bslib-sidebar-layout.sidebar-right { - // required by sidebar init js when `sidebar(open = "desktop")` - &[data-bslib-sidebar-open="desktop"] { - --bslib-sidebar-js-init-collapsed: true; + .bslib-sidebar-layout { + // Tell sidebar init js we're on mobile for `sidebar(open = "desktop")` + &, &.sidebar-right { + &[data-bslib-sidebar-open="desktop"] { + --bslib-sidebar-js-init-collapsed: true; + } } - } - .bslib-sidebar-layout { // Remove left or right edge sidebar borders in mobile view &:not(.sidebar-right) { > .sidebar { border-right: none } From 20d84887ede2a96a5a387b047f58c8d59b06a23e Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 10:00:29 -0400 Subject: [PATCH 18/29] chore: Update comment about padding in always open sidebars --- inst/components/scss/sidebar.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 91fee6c7e..7f6a9e586 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -121,7 +121,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), &[data-bslib-sidebar-open="always"] { > .sidebar > .sidebar-content { - // remove toggle button padding adjustment if there isn't a button + // Always-open sidebars don't have a toggle & can use normal top padding padding-top: var(--bslib-sidebar-padding); } } From f585650c96572f41a54838be6c0e865415b401f4 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 10:05:25 -0400 Subject: [PATCH 19/29] chore: Add comment about need to unset collapse toggle button bg color --- inst/components/scss/sidebar.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 7f6a9e586..83f2d0d8f 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -143,7 +143,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), justify-content: center; padding: 0; color: var(--bslib-sidebar-fg); - background-color: unset; + background-color: unset; // don't take `button` background color transition: color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration), From de809dac779e0b1d1de507d529e75d2ab8f95470 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 10:17:41 -0400 Subject: [PATCH 20/29] feat(sidebar): `max_height_mobile` only applies when `open = "always"` --- R/sidebar.R | 14 ++++++++++---- inst/components/scss/sidebar.scss | 4 ++++ man/sidebar.Rd | 9 +++++---- tests/testthat/test-sidebar.R | 11 +++++++++++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/R/sidebar.R b/R/sidebar.R index b5dbff6ea..d8b264139 100644 --- a/R/sidebar.R +++ b/R/sidebar.R @@ -50,10 +50,11 @@ #' color, e.g. setting `bg` chooses an appropriate `fg` color. #' @param class CSS classes for the sidebar container element, in addition to #' the fixed `.sidebar` class. -#' @param max_height_mobile The maximum height of the horizontal sidebar when -#' viewed on mobile devices. The default is `250px` unless the sidebar is -#' included in a [layout_sidebar()] with a specified height, in which case -#' the default is to take up no more than 50% of the layout container. +#' @param max_height_mobile A [CSS length unit][htmltools::validateCssUnit()] +#' defining the maximum height of the horizontal sidebar when viewed on mobile +#' devices. Only applies to always-open sidebars that use `open = "always"`, +#' where by default the sidebar container is placed below the main content +#' container on mobile devices. #' @param gap A [CSS length unit][htmltools::validateCssUnit()] defining the #' vertical `gap` (i.e., spacing) between adjacent elements provided to `...`. #' @param padding Padding within the sidebar itself. This can be a numeric @@ -91,6 +92,11 @@ sidebar <- function( open <- rlang::arg_match(open) + if (!is.null(max_height_mobile) && open != "always") { + rlang::warn('The `max_height_mobile` argument only applies to when `open = "always"`.') + max_height_mobile <- NULL + } + if (!is.null(id)) { if (length(id) != 1 || is.na(id) || !nzchar(id)) { rlang::abort("`id` must be a non-empty, length-1 character string or `NULL`.") diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 83f2d0d8f..9651ff9a3 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -286,6 +286,10 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), // Always open sidebars become "flow" layouts in mobile view &[data-bslib-sidebar-open="always"] { display: block !important; + > .sidebar { + max-height: var(--bslib-sidebar-max-height-mobile); + overflow-y: auto; + } } &:not([data-bslib-sidebar-open="always"]) { diff --git a/man/sidebar.Rd b/man/sidebar.Rd index a53636b03..44dc491a6 100644 --- a/man/sidebar.Rd +++ b/man/sidebar.Rd @@ -82,10 +82,11 @@ color, e.g. setting \code{bg} chooses an appropriate \code{fg} color.} \item{class}{CSS classes for the sidebar container element, in addition to the fixed \code{.sidebar} class.} -\item{max_height_mobile}{The maximum height of the horizontal sidebar when -viewed on mobile devices. The default is \verb{250px} unless the sidebar is -included in a \code{\link[=layout_sidebar]{layout_sidebar()}} with a specified height, in which case -the default is to take up no more than 50\% of the layout container.} +\item{max_height_mobile}{A \link[htmltools:validateCssUnit]{CSS length unit} +defining the maximum height of the horizontal sidebar when viewed on mobile +devices. Only applies to always-open sidebars that use \code{open = "always"}, +where by default the sidebar container is placed below the main content +container on mobile devices.} \item{gap}{A \link[htmltools:validateCssUnit]{CSS length unit} defining the vertical \code{gap} (i.e., spacing) between adjacent elements provided to \code{...}.} diff --git a/tests/testthat/test-sidebar.R b/tests/testthat/test-sidebar.R index db1aecb22..d43758ed5 100644 --- a/tests/testthat/test-sidebar.R +++ b/tests/testthat/test-sidebar.R @@ -112,6 +112,17 @@ test_that("sidebar() - throws an error for invalid `open` values", { sidebar(open = character()) ) }) + +test_that("sidebar() - warns if `max_height_mobile` used with `open != 'always'", { + expect_warning( + sidebar(open = "open", max_height_mobile = "100px") + ) + + expect_silent( + sidebar(open = "always", max_height_mobile = "100px") + ) +}) + test_that("layout_sidebar() - errors with unexpected border, border_radius input values", { expect_error( layout_sidebar(sidebar(), border = "1px solid blue") From 253efd68ad9eca3fd5d19dead8e6c43c555c3d28 Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Thu, 14 Sep 2023 14:23:57 +0000 Subject: [PATCH 21/29] Resave distributed files (GitHub Action) --- inst/components/dist/sidebar/sidebar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/dist/sidebar/sidebar.css b/inst/components/dist/sidebar/sidebar.css index 27d763ffa..64ec8735e 100644 --- a/inst/components/dist/sidebar/sidebar.css +++ b/inst/components/dist/sidebar/sidebar.css @@ -1 +1 @@ -.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout:not(.sidebar-right)>.sidebar{border-right:none}.bslib-sidebar-layout.sidebar-right>.sidebar{border-left:none}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main,.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} +.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout:not(.sidebar-right)>.sidebar{border-right:none}.bslib-sidebar-layout.sidebar-right>.sidebar{border-left:none}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main,.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} From 020eb11e906602ab3145221c85122397a4344c77 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 14:38:48 -0400 Subject: [PATCH 22/29] chore: Apply comments from review --- inst/components/scss/sidebar.scss | 41 ++++++++++++------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 9651ff9a3..377d8e3b1 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -269,18 +269,19 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), @include media-breakpoint-down(sm) { .bslib-sidebar-layout { // Tell sidebar init js we're on mobile for `sidebar(open = "desktop")` - &, &.sidebar-right { - &[data-bslib-sidebar-open="desktop"] { - --bslib-sidebar-js-init-collapsed: true; - } + &[data-bslib-sidebar-open="desktop"] { + --bslib-sidebar-js-init-collapsed: true; } - // Remove left or right edge sidebar borders in mobile view - &:not(.sidebar-right) { - > .sidebar { border-right: none } - } - &.sidebar-right { - > .sidebar { border-left: none } + &, &.sidebar-right { + // Remove sidebar borders in mobile view (except always-open, added below) + > .sidebar { border: none } + + // Main area takes up entire layout area to avoid layout shift when + // sidebar is expanded as an overlay. + > .main { + grid-column: 1 / 3; + } } // Always open sidebars become "flow" layouts in mobile view @@ -289,6 +290,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), > .sidebar { max-height: var(--bslib-sidebar-max-height-mobile); overflow-y: auto; + border-top: var(--bslib-sidebar-vert-border); } } @@ -314,24 +316,13 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } } - // Main area takes up entire layout area to avoid layout shift when - // sidebar is expanded as an overlay. - &, &.sidebar-right { - > .main { - grid-column: 1 / 3; - } - } // Keep padding on main contents when sidebar is expanded (avoid shifts) - &:not(.sidebar-right) { - > .main { - padding-left: calc(var(--bslib-sidebar-padding) * 2); - } + &:not(.sidebar-right) > .main { + padding-left: calc(var(--bslib-sidebar-padding) * 2); } - &.sidebar-right { - > .main { - padding-right: calc(var(--bslib-sidebar-padding) * 2); - } + &.sidebar-right > .main { + padding-right: calc(var(--bslib-sidebar-padding) * 2); } // Make main contents transparent while sidebar is expanded From f6570dfd356a1dd3d2997db902de501c8bbf7f31 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 14:40:48 -0400 Subject: [PATCH 23/29] chore: Add comment about padding-top in `.sidebar-content` --- inst/components/scss/sidebar.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 377d8e3b1..11334513b 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -73,6 +73,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), flex-direction: column; gap: var(--bslib-spacer, 1rem); padding: var(--bslib-sidebar-padding); + // Add space for the toggle button (removed if sidebar is always open) padding-top: calc(var(--bslib-sidebar-padding, 1rem) * 2); > :last-child:not(.sidebar-title) { From 968800de7c2ab2ce5542e0e0c4d1e15fcc1e3d7c Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 14:41:36 -0400 Subject: [PATCH 24/29] chore: Add comment about why css variable is commented out Co-authored-by: Carson Sievert --- inst/components/scss/sidebar.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index 11334513b..de6709159 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -17,6 +17,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), --bslib-sidebar-toggle-bg: #{$bslib-sidebar-toggle-bg}; --bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5); --bslib-sidebar-icon-size: var(--bslib-spacer, 1rem); + // We intentionally don't give a value here, but it could be set by someone else // --bslib-collapse-toggle-border: ; --bslib-collapse-toggle-border-radius: var(--bs-border-radius, #{$border-radius}); --bslib-collapse-toggle-transform: 0deg; From cfe66e8e1ece74d9edcd1f6837d469c7c69535f6 Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Thu, 14 Sep 2023 18:47:34 +0000 Subject: [PATCH 25/29] Resave distributed files (GitHub Action) --- inst/components/dist/sidebar/sidebar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/dist/sidebar/sidebar.css b/inst/components/dist/sidebar/sidebar.css index 64ec8735e..047239b9c 100644 --- a/inst/components/dist/sidebar/sidebar.css +++ b/inst/components/dist/sidebar/sidebar.css @@ -1 +1 @@ -.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"],.bslib-sidebar-layout.sidebar-right[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout:not(.sidebar-right)>.sidebar{border-right:none}.bslib-sidebar-layout.sidebar-right>.sidebar{border-left:none}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main,.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{grid-column:1 / 3}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} +.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.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-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} From 48fb51756432ec6d345ebcb95ca782793590c307 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 15:00:21 -0400 Subject: [PATCH 26/29] refactor: consolidate icon padding and sizing calculations --- inst/components/scss/sidebar.scss | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/inst/components/scss/sidebar.scss b/inst/components/scss/sidebar.scss index de6709159..f5804f7a7 100644 --- a/inst/components/scss/sidebar.scss +++ b/inst/components/scss/sidebar.scss @@ -17,7 +17,9 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), --bslib-sidebar-toggle-bg: #{$bslib-sidebar-toggle-bg}; --bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5); --bslib-sidebar-icon-size: var(--bslib-spacer, 1rem); - // We intentionally don't give a value here, but it could be set by someone else + --bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2); + --bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5); + // We intentionally don't give a value here, but it could be set by someone else // --bslib-collapse-toggle-border: ; --bslib-collapse-toggle-border-radius: var(--bs-border-radius, #{$border-radius}); --bslib-collapse-toggle-transform: 0deg; @@ -75,7 +77,7 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), gap: var(--bslib-spacer, 1rem); padding: var(--bslib-sidebar-padding); // Add space for the toggle button (removed if sidebar is always open) - padding-top: calc(var(--bslib-sidebar-padding, 1rem) * 2); + padding-top: var(--bslib-sidebar-padding-icon); > :last-child:not(.sidebar-title) { // Remove margin-bottom from the last item because sidebar has padding. @@ -138,8 +140,8 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), top: calc(var(--bslib-sidebar-icon-size, 1rem) / 2); border: none; border-radius: var(--bslib-collapse-toggle-border-radius); - height: calc(var(--bslib-sidebar-icon-size) * 2); - width: calc(var(--bslib-sidebar-icon-size) * 2); + height: var(--bslib-sidebar-icon-button-size, 2rem); + width: var(--bslib-sidebar-icon-button-size, 2rem); display: flex; align-items: center; justify-content: center; @@ -236,10 +238,10 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), } &:not(.sidebar-right) > .main { - padding-left: calc(var(--bslib-sidebar-padding) * 2); + padding-left: var(--bslib-sidebar-padding-icon); } &.sidebar-right > .main { - padding-right: calc(var(--bslib-sidebar-padding) * 2); + padding-right: var(--bslib-sidebar-padding-icon); } > .collapse-toggle { @@ -321,10 +323,10 @@ $bslib-sidebar-column-sidebar: Min(calc(100% - var(--bslib-sidebar-icon-size)), // Keep padding on main contents when sidebar is expanded (avoid shifts) &:not(.sidebar-right) > .main { - padding-left: calc(var(--bslib-sidebar-padding) * 2); + padding-left: var(--bslib-sidebar-padding-icon); } &.sidebar-right > .main { - padding-right: calc(var(--bslib-sidebar-padding) * 2); + padding-right: var(--bslib-sidebar-padding-icon); } // Make main contents transparent while sidebar is expanded From 2aec2ef9351292b9ee2ac52314ff418427ec4750 Mon Sep 17 00:00:00 2001 From: gadenbuie Date: Thu, 14 Sep 2023 19:07:09 +0000 Subject: [PATCH 27/29] Resave distributed files (GitHub Action) --- inst/components/dist/sidebar/sidebar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/components/dist/sidebar/sidebar.css b/inst/components/dist/sidebar/sidebar.css index 047239b9c..79e906505 100644 --- a/inst/components/dist/sidebar/sidebar.css +++ b/inst/components/dist/sidebar/sidebar.css @@ -1 +1 @@ -.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:calc(var(--bslib-sidebar-padding, 1rem) * 2)}.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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:calc(var(--bslib-sidebar-icon-size) * 2);width:calc(var(--bslib-sidebar-icon-size) * 2);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.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-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:calc(var(--bslib-sidebar-padding) * 2)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} +.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, var(--bs-border-width)) solid var(--bs-card-border-color, var(--bs-border-color-translucent));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, .375rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media (prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.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(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1 / 2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-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(--bslib-sidebar-padding));margin-right:calc(-1 * var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1 * var(--bslib-sidebar-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[data-bslib-sidebar-open="always"]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1 / 2;grid-column:1 / 2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem) / 2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:0.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-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(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) Min(calc(100% - var(--bslib-sidebar-icon-size)), var(--bslib-sidebar-width, 250px))}.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(--bslib-sidebar-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(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-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}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc( var(--bslib-sidebar-overlap-counter, 0) * calc(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding) ) + var(--bslib-sidebar-icon-size, 1rem) / 2);right:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5 * var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media (min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media (max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open="desktop"]{--bslib-sidebar-js-init-collapsed: true}.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-bslib-sidebar-open="always"]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open="always"]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open="always"]).sidebar-collapsed>.main{opacity:1}} From bdd28d529c0b92886133ae9d027224d6c29b99f8 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 15:06:34 -0400 Subject: [PATCH 28/29] tests: accept snapshots --- tests/testthat/_snaps/page.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/_snaps/page.md b/tests/testthat/_snaps/page.md index 845fa5557..4a85ab9e7 100644 --- a/tests/testthat/_snaps/page.md +++ b/tests/testthat/_snaps/page.md @@ -55,7 +55,7 @@

- + From d317260597b74630fd30c8649f212ce47414a8c0 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Thu, 14 Sep 2023 15:10:21 -0400 Subject: [PATCH 29/29] docs: Add news item --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index f8e65a60c..d6ff739aa 100644 --- a/NEWS.md +++ b/NEWS.md @@ -31,6 +31,8 @@ * Improved the style and appearance of the button to enter full screen in `card()`s and `value_box()`es to better adapt to Bootstrap's dark mode. (#780) +* `layout_sidebar()` received a new design. The button to collapse and expand the sidebar now appears at the top edge of the sidebar, and we now use the [arrow-bar-left](https://icons.getbootstrap.com/icons/arrow-bar-left/) icon instead of [chevron-left](https://icons.getbootstrap.com/icons/chevron-left/). On mobile devices, the sidebar now fills the `layout_sidebar()` area as an overlay, rather than expanding from above the main content area. **Note** the `max_mobile_height` argument of `sidebar()` determines the maximum height of the sidebar area on mobile, but it now only applies when `open = "always"`. (#798) + ## Bug fixes * `toggle_switch()` now works correctly when called from within a Shiny module. `update_switch()` worked as expected, but `toggle_switch()` didn't apply the module's namespace to the `id` of the switch to be updated. (#769)