From d61effc6150d44839135e1cf01df1e15ec292141 Mon Sep 17 00:00:00 2001 From: Eric Tuvesson Date: Mon, 8 Jul 2024 12:47:28 +0200 Subject: [PATCH] feat(editor): Deploy popup always mounted (#51) This removes the delayed loading when opening the deploy popup --- .../layout/BaseDialog/BaseDialog.module.scss | 251 +++++++++--------- .../layout/BaseDialog/BaseDialog.tsx | 5 +- .../src/views/DeployPopup/DeployPopup.tsx | 1 + 3 files changed, 133 insertions(+), 124 deletions(-) diff --git a/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.module.scss b/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.module.scss index 5652339..b4fa00e 100644 --- a/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.module.scss +++ b/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.module.scss @@ -1,123 +1,128 @@ -.Root { - border: none; - padding: 0; - background: transparent; - box-sizing: border-box; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - - &.has-backdrop { - background-color: var(--theme-color-bg-1-transparent); - } - - &.is-locking-scroll { - background-color: transparent; - } - - &:not(.has-backdrop):not(.is-locking-scroll) { - pointer-events: none; - } -} - -.VisibleDialog { - filter: drop-shadow(0 4px 15px var(--theme-color-bg-1-transparent-2)); - box-shadow: 0 0 10px -5px var(--theme-color-bg-1-transparent-2); - position: absolute; - width: var(--width); - pointer-events: all; - - .Root.is-centered & { - top: 50%; - left: 50%; - animation: enter-centered var(--speed-quick) var(--easing-base) both; - } - - .Root:not(.is-centered) &.is-visible { - &.is-variant-default { - animation: enter var(--speed-quick) var(--easing-base) both; - } - - &.is-variant-select { - transform: translate(var(--offsetX), var(--offsetY)); - } - } - - &::after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: var(--background); - border-radius: 2px; - overflow: hidden; - } -} - -.Arrow { - position: absolute; - width: 0; - height: 0; - top: var(--arrow-top); - left: var(--arrow-left); - pointer-events: none; - - &::after { - content: ''; - display: block; - width: 11px; - height: 11px; - transform: translate(-50%, -50%) rotate(45deg); - background: var(--background); - } - - &.is-contrast::after { - background: var(--backgroundContrast); - } -} - -.Title { - background-color: var(--backgroundContrast); - padding: 12px; -} - -.MeasuringContainer { - pointer-events: none; - height: 0; - overflow: visible; - opacity: 0; -} - -.ChildContainer { - position: relative; - z-index: 1; -} - -@keyframes enter { - from { - opacity: 0; - transform: translate( - calc(var(--animationStartOffsetX) + var(--offsetX)), - calc(var(--animationStartOffsetY) + var(--offsetY)) - ); - } - to { - opacity: 1; - transform: translate(var(--offsetX), var(--offsetY)); - } -} - -@keyframes enter-centered { - from { - opacity: 0; - transform: translate(-50%, calc(-50% + 16px)); - } - to { - opacity: 1; - transform: translate(-50%, -50%); - } -} +.Root { + border: none; + padding: 0; + background: transparent; + box-sizing: border-box; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + + &.is-hidden { + visibility: hidden; + pointer-events: none; + } + + &.has-backdrop { + background-color: var(--theme-color-bg-1-transparent); + } + + &.is-locking-scroll { + background-color: transparent; + } + + &:not(.has-backdrop):not(.is-locking-scroll) { + pointer-events: none; + } +} + +.VisibleDialog { + filter: drop-shadow(0 4px 15px var(--theme-color-bg-1-transparent-2)); + box-shadow: 0 0 10px -5px var(--theme-color-bg-1-transparent-2); + position: absolute; + width: var(--width); + pointer-events: all; + + .Root.is-centered & { + top: 50%; + left: 50%; + animation: enter-centered var(--speed-quick) var(--easing-base) both; + } + + .Root:not(.is-centered) &.is-visible { + &.is-variant-default { + animation: enter var(--speed-quick) var(--easing-base) both; + } + + &.is-variant-select { + transform: translate(var(--offsetX), var(--offsetY)); + } + } + + &::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--background); + border-radius: 2px; + overflow: hidden; + } +} + +.Arrow { + position: absolute; + width: 0; + height: 0; + top: var(--arrow-top); + left: var(--arrow-left); + pointer-events: none; + + &::after { + content: ''; + display: block; + width: 11px; + height: 11px; + transform: translate(-50%, -50%) rotate(45deg); + background: var(--background); + } + + &.is-contrast::after { + background: var(--backgroundContrast); + } +} + +.Title { + background-color: var(--backgroundContrast); + padding: 12px; +} + +.MeasuringContainer { + pointer-events: none; + height: 0; + overflow: visible; + opacity: 0; +} + +.ChildContainer { + position: relative; + z-index: 1; +} + +@keyframes enter { + from { + opacity: 0; + transform: translate( + calc(var(--animationStartOffsetX) + var(--offsetX)), + calc(var(--animationStartOffsetY) + var(--offsetY)) + ); + } + to { + opacity: 1; + transform: translate(var(--offsetX), var(--offsetY)); + } +} + +@keyframes enter-centered { + from { + opacity: 0; + transform: translate(-50%, calc(-50% + 16px)); + } + to { + opacity: 1; + transform: translate(-50%, -50%); + } +} diff --git a/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.tsx b/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.tsx index e991910..791df65 100644 --- a/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.tsx +++ b/packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.tsx @@ -42,6 +42,7 @@ export interface BaseDialogProps extends UnsafeStyleProps { isVisible?: boolean; hasBackdrop?: boolean; hasArrow?: boolean; + alwaysMounted?: boolean; children?: Slot; @@ -69,6 +70,7 @@ export function CoreBaseDialog({ isVisible, hasBackdrop, hasArrow, + alwaysMounted, children, @@ -261,7 +263,7 @@ export function CoreBaseDialog({ } }, [background]); - if (!isVisible) return null; + if (!isVisible && !alwaysMounted) return null; return (