diff --git a/public/app/core/components/popover/popover.ts b/public/app/core/components/popover/popover.ts index 26b088f95d2..5c4534ad500 100644 --- a/public/app/core/components/popover/popover.ts +++ b/public/app/core/components/popover/popover.ts @@ -8,15 +8,44 @@ import Drop from 'tether-drop'; export function popoverDirective() { return { restrict: 'E', - link: function(scope, elem, attrs) { + transclude: true, + link: function(scope, elem, attrs, ctrl, transclude) { var inputElem = elem.prev(); - console.log(inputElem); - var drop = new Drop({ - target: inputElem[0], - content: 'Welcome to the future!', - position: 'right middle', - classes: 'drop-theme-arrows-bounce-dark', - openOn: 'click' + if (inputElem.length === 0) { + console.log('Failed to find input element for popover'); + return; + } + + + transclude(function(clone, newScope) { + var content = document.createElement("div"); + _.each(clone, (node) => { + content.appendChild(node); + }); + + var drop = new Drop({ + target: inputElem[0], + content: content, + position: 'right middle', + classes: 'drop-popover', + openOn: 'click', + tetherOptions: { + offset: "0 -10px" + } + }); + + // inputElem.on('focus.popover', function() { + // drop.open(); + // }); + // + // inputElem.on('blur.popover', function() { + // close(); + // }); + + scope.$on('$destroy', function() { + drop.destroy(); + }); + }); } }; diff --git a/public/app/features/datasources/partials/http_settings.html b/public/app/features/datasources/partials/http_settings.html index cbcc471647e..93a47f4065a 100644 --- a/public/app/features/datasources/partials/http_settings.html +++ b/public/app/features/datasources/partials/http_settings.html @@ -6,8 +6,17 @@
Url - - Help + + +

Specify a complete HTTP url (http://your_server:8080)

+

+ When access method is Direct then this url needs to be + accessable from your browser. +

+

+ Your access method is currently Proxy then the url needs to + be accessable from the grafana backend. +

diff --git a/public/sass/components/_popovers.scss b/public/sass/components/_popovers.scss index f97ae454c99..e069fd8a78f 100644 --- a/public/sass/components/_popovers.scss +++ b/public/sass/components/_popovers.scss @@ -124,183 +124,5 @@ bottom: -$popoverArrowWidth; } } - } -.drop-element, .drop-element:after, .drop-element:before, .drop-element *, .drop-element *:after, .drop-element *:before { - box-sizing: border-box; } - -.drop-element { - position: absolute; - display: none; } - .drop-element.drop-open { - display: block; } - -.drop-element.drop-theme-arrows-bounce-dark { - max-width: 100%; - max-height: 100%; } - .drop-element.drop-theme-arrows-bounce-dark .drop-content { - border-radius: 5px; - position: relative; - font-family: inherit; - background: #000; - color: #fff; - padding: 1em; - font-size: 1.1em; - line-height: 1.5em; } - .drop-element.drop-theme-arrows-bounce-dark .drop-content:before { - content: ""; - display: block; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-width: 12px; - border-style: solid; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-center .drop-content { - margin-bottom: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-center .drop-content:before { - top: 100%; - left: 50%; - margin-left: -12px; - border-top-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-center .drop-content { - margin-top: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-center .drop-content:before { - bottom: 100%; - left: 50%; - margin-left: -12px; - border-bottom-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-right.drop-element-attached-middle .drop-content { - margin-right: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-right.drop-element-attached-middle .drop-content:before { - left: 100%; - top: 50%; - margin-top: -12px; - border-left-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-left.drop-element-attached-middle .drop-content { - margin-left: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-left.drop-element-attached-middle .drop-content:before { - right: 100%; - top: 50%; - margin-top: -12px; - border-right-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content { - margin-top: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content:before { - bottom: 100%; - left: 12px; - border-bottom-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content { - margin-top: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content:before { - bottom: 100%; - right: 12px; - border-bottom-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content { - margin-bottom: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content:before { - top: 100%; - left: 12px; - border-top-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content { - margin-bottom: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content:before { - top: 100%; - right: 12px; - border-top-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content { - margin-right: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content:before { - top: 12px; - left: 100%; - border-left-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content { - margin-left: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content:before { - top: 12px; - right: 100%; - border-right-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content { - margin-right: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content:before { - bottom: 12px; - left: 100%; - border-left-color: #000; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content { - margin-left: 12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content:before { - bottom: 12px; - right: 100%; - border-right-color: #000; } - -.drop-element.drop-theme-arrows-bounce-dark { - -webkit-transform: translateZ(0); - transform: translateZ(0); - -webkit-transition: opacity 100ms; - transition: opacity 100ms; - opacity: 0; } - .drop-element.drop-theme-arrows-bounce-dark .drop-content { - -webkit-transition: -webkit-transform 0.3s cubic-bezier(0, 0, 0.265, 1.55); - transition: transform 0.3s cubic-bezier(0, 0, 0.265, 1.55); - -webkit-transform: scale(0) translateZ(0); - transform: scale(0) translateZ(0); } - .drop-element.drop-theme-arrows-bounce-dark.drop-open { - display: none; } - .drop-element.drop-theme-arrows-bounce-dark.drop-open-transitionend { - display: block; } - .drop-element.drop-theme-arrows-bounce-dark.drop-after-open { - -webkit-transition: none; - transition: none; - opacity: 1; } - .drop-element.drop-theme-arrows-bounce-dark.drop-after-open .drop-content { - -webkit-transform: scale(1) translateZ(0); - transform: scale(1) translateZ(0); } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-center .drop-content { - -webkit-transform-origin: 50% calc(100% + 12px); - -ms-transform-origin: 50% calc(100% + 12px); - transform-origin: 50% calc(100% + 12px); } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-center .drop-content { - -webkit-transform-origin: 50% -12px; - -ms-transform-origin: 50% -12px; - transform-origin: 50% -12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-right.drop-element-attached-middle .drop-content { - -webkit-transform-origin: calc(100% + 12px) 50%; - -ms-transform-origin: calc(100% + 12px) 50%; - transform-origin: calc(100% + 12px) 50%; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-left.drop-element-attached-middle .drop-content { - -webkit-transform-origin: -12px 50%; - -ms-transform-origin: -12px 50%; - transform-origin: -12px 50%; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content { - -webkit-transform-origin: 0 -12px; - -ms-transform-origin: 0 -12px; - transform-origin: 0 -12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content { - -webkit-transform-origin: 100% -12px; - -ms-transform-origin: 100% -12px; - transform-origin: 100% -12px; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content { - -webkit-transform-origin: 0 calc(100% + 12px); - -ms-transform-origin: 0 calc(100% + 12px); - transform-origin: 0 calc(100% + 12px); } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content { - -webkit-transform-origin: 100% calc(100% + 12px); - -ms-transform-origin: 100% calc(100% + 12px); - transform-origin: 100% calc(100% + 12px); } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content { - -webkit-transform-origin: calc(100% + 12px) 0; - -ms-transform-origin: calc(100% + 12px) 0; - transform-origin: calc(100% + 12px) 0; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content { - -webkit-transform-origin: -12px 0; - -ms-transform-origin: -12px 0; - transform-origin: -12px 0; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content { - -webkit-transform-origin: calc(100% + 12px) 100%; - -ms-transform-origin: calc(100% + 12px) 100%; - transform-origin: calc(100% + 12px) 100%; } - .drop-element.drop-theme-arrows-bounce-dark.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content { - -webkit-transform-origin: -12px 100%; - -ms-transform-origin: -12px 100%; - transform-origin: -12px 100%; } diff --git a/public/sass/components/_tether_drop.scss b/public/sass/components/_tether_drop.scss index dc91d4dc2ea..28b563383b0 100644 --- a/public/sass/components/_tether_drop.scss +++ b/public/sass/components/_tether_drop.scss @@ -1,245 +1,307 @@ - -@mixin tether($themePrefix: "tether") { - .#{ $themePrefix }-element, .#{ $themePrefix }-element * { - &, &:after, &:before { - box-sizing: border-box; - } - } - - .#{ $themePrefix }-element { - position: absolute; - display: none; - } - - &.#{ $themePrefix }-open { - display: block; - } -} - -@mixin tether-theme-arrows($themePrefix: "tether", $themeName: "arrows", $arrowSize: 16px, $arrowPointerEvents: null, $backgroundColor: #fff, $color: inherit, $useDropShadow: false) { - .#{ $themePrefix }-element.#{ $themePrefix }-theme-#{ $themeName } { - max-width: 100%; - max-height: 100%; - - .#{ $themePrefix }-content { - border-radius: 5px; - position: relative; - font-family: inherit; - background: $backgroundColor; - color: $color; - padding: 1em; - font-size: 1.1em; - line-height: 1.5em; - - @if $useDropShadow { - transform: translateZ(0); - filter: drop-shadow(0 1px 4px rgba(0, 0, 0, .2)); - } - - &:before { - content: ""; - display: block; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-width: $arrowSize; - border-style: solid; - pointer-events: $arrowPointerEvents; - } - } - - // Centers and middles - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-center .#{ $themePrefix }-content { - margin-bottom: $arrowSize; - - &:before { - top: 100%; - left: 50%; - margin-left: - $arrowSize; - border-top-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-center .#{ $themePrefix }-content { - margin-top: $arrowSize; - - &:before { - bottom: 100%; - left: 50%; - margin-left: - $arrowSize; - border-bottom-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-element-attached-middle .#{ $themePrefix }-content { - margin-right: $arrowSize; - - &:before { - left: 100%; - top: 50%; - margin-top: - $arrowSize; - border-left-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-element-attached-middle .#{ $themePrefix }-content { - margin-left: $arrowSize; - - &:before { - right: 100%; - top: 50%; - margin-top: - $arrowSize; - border-right-color: $backgroundColor; - } - } - - // Target middle/center, element corner - - &.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-center .#{ $themePrefix }-content { - left: - $arrowSize * 2; - } - - &.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-center .#{ $themePrefix }-content { - left: $arrowSize * 2; - } - - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-middle .#{ $themePrefix }-content { - margin-top: $arrowSize; - - &:before { - bottom: 100%; - left: $arrowSize; - border-bottom-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-middle .#{ $themePrefix }-content { - margin-top: $arrowSize; - - &:before { - bottom: 100%; - right: $arrowSize; - border-bottom-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-middle .#{ $themePrefix }-content { - margin-bottom: $arrowSize; - - &:before { - top: 100%; - left: $arrowSize; - border-top-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-middle .#{ $themePrefix }-content { - margin-bottom: $arrowSize; - - &:before { - top: 100%; - right: $arrowSize; - border-top-color: $backgroundColor; - } - } - - // Top and bottom corners - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-bottom .#{ $themePrefix }-content { - margin-top: $arrowSize; - - &:before { - bottom: 100%; - left: $arrowSize; - border-bottom-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-bottom .#{ $themePrefix }-content { - margin-top: $arrowSize; - - &:before { - bottom: 100%; - right: $arrowSize; - border-bottom-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-top .#{ $themePrefix }-content { - margin-bottom: $arrowSize; - - &:before { - top: 100%; - left: $arrowSize; - border-top-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-top .#{ $themePrefix }-content { - margin-bottom: $arrowSize; - - &:before { - top: 100%; - right: $arrowSize; - border-top-color: $backgroundColor; - } - } - - // Side corners - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-left .#{ $themePrefix }-content { - margin-right: $arrowSize; - - &:before { - top: $arrowSize; - left: 100%; - border-left-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-top.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-right .#{ $themePrefix }-content { - margin-left: $arrowSize; - - &:before { - top: $arrowSize; - right: 100%; - border-right-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-right.#{ $themePrefix }-target-attached-left .#{ $themePrefix }-content { - margin-right: $arrowSize; - - &:before { - bottom: $arrowSize; - left: 100%; - border-left-color: $backgroundColor; - } - } - - &.#{ $themePrefix }-element-attached-bottom.#{ $themePrefix }-element-attached-left.#{ $themePrefix }-target-attached-right .#{ $themePrefix }-content { - margin-left: $arrowSize; - - &:before { - bottom: $arrowSize; - right: 100%; - border-right-color: $backgroundColor; - } - } - } -} - -$themePrefix: "drop"; -$themeName: "arrows-bounce-dark"; -$arrowSize: 12px; -$backgroundColor: #000; -$color: #fff; +$arrowPointerEvents: null; +$color: inherit; +$useDropShadow: false; +$arrowSize: 1rem; +$backgroundColor: $btn-secondary-bg; +$color: $text-color; $useDropShadow: false; $attachmentOffset: $arrowSize; $easing: cubic-bezier(0, 0, 0.265, 1.55); -@include tether($themePrefix: $themePrefix); -@include tether-theme-arrows($themePrefix: $themePrefix, $themeName: $themeName, $arrowSize: $arrowSize, $backgroundColor: $backgroundColor, $color: $color, $useDropShadow: $useDropShadow); +.drop-element { + position: absolute; + display: none; + + &.drop-open { + display: block; + // hide when out of bounds + &.drop-out-of-bounds { + display: none; + } + } + + ul { + margin: 0 0 1rem 1rem; + } +} + +.drop-element, .drop-element * { + box-sizing: border-box; +} + +.drop-element.drop-popover { + max-width: 100%; + max-height: 100%; + + .drop-content { + border-radius: $border-radius-lg; + position: relative; + font-family: inherit; + background: $backgroundColor; + color: $color; + padding: 1em; + font-size: $font-size-sm; + max-width: 20rem; + + @if $useDropShadow { + transform: translateZ(0); + filter: drop-shadow(0 1px 4px rgba(0, 0, 0, .2)); + } + + &:before { + content: ""; + display: block; + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-width: $arrowSize; + border-style: solid; + pointer-events: $arrowPointerEvents; + } + } + + // Centers and middles + + &.drop-element-attached-bottom.drop-element-attached-center .drop-content { + margin-bottom: $arrowSize; + + &:before { + top: 100%; + left: 50%; + margin-left: - $arrowSize; + border-top-color: $backgroundColor; + } + } + + &.drop-element-attached-top.drop-element-attached-center .drop-content { + margin-top: $arrowSize; + + &:before { + bottom: 100%; + left: 50%; + margin-left: - $arrowSize; + border-bottom-color: $backgroundColor; + } + } + + &.drop-element-attached-right.drop-element-attached-middle .drop-content { + margin-right: $arrowSize; + + &:before { + left: 100%; + top: 50%; + margin-top: - $arrowSize; + border-left-color: $backgroundColor; + } + } + + &.drop-element-attached-left.drop-element-attached-middle .drop-content { + margin-left: $arrowSize; + + &:before { + right: 100%; + top: 50%; + margin-top: - $arrowSize; + border-right-color: $backgroundColor; + } + } + + // Target middle/center, element corner + &.drop-element-attached-left.drop-target-attached-center .drop-content { + left: - $arrowSize * 2; + } + + &.drop-element-attached-right.drop-target-attached-center .drop-content { + left: $arrowSize * 2; + } + + &.drop-element-attached-top.drop-element-attached-left.drop-target-attached-middle .drop-content { + margin-top: $arrowSize; + + &:before { + bottom: 100%; + left: $arrowSize; + border-bottom-color: $backgroundColor; + } + } + + &.drop-element-attached-top.drop-element-attached-right.drop-target-attached-middle .drop-content { + margin-top: $arrowSize; + + &:before { + bottom: 100%; + right: $arrowSize; + border-bottom-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-middle .drop-content { + margin-bottom: $arrowSize; + + &:before { + top: 100%; + left: $arrowSize; + border-top-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-middle .drop-content { + margin-bottom: $arrowSize; + + &:before { + top: 100%; + right: $arrowSize; + border-top-color: $backgroundColor; + } + } + + // Top and bottom corners + &.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content { + margin-top: $arrowSize; + + &:before { + bottom: 100%; + left: $arrowSize; + border-bottom-color: $backgroundColor; + } + } + + &.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content { + margin-top: $arrowSize; + + &:before { + bottom: 100%; + right: $arrowSize; + border-bottom-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content { + margin-bottom: $arrowSize; + + &:before { + top: 100%; + left: $arrowSize; + border-top-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content { + margin-bottom: $arrowSize; + + &:before { + top: 100%; + right: $arrowSize; + border-top-color: $backgroundColor; + } + } + + // Side corners + &.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content { + margin-right: $arrowSize; + + &:before { + top: $arrowSize; + left: 100%; + border-left-color: $backgroundColor; + } + } + + &.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content { + margin-left: $arrowSize; + + &:before { + top: $arrowSize; + right: 100%; + border-right-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content { + margin-right: $arrowSize; + + &:before { + bottom: $arrowSize; + left: 100%; + border-left-color: $backgroundColor; + } + } + + &.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content { + margin-left: $arrowSize; + + &:before { + bottom: $arrowSize; + right: 100%; + border-right-color: $backgroundColor; + } + } +} -// +drop-animation-scale($themePrefix: $themePrefix, $themeName: $themeName, $attachmentOffset: $attachmentOffset, $easing: $easing) +@mixin drop-animation-scale($themePrefix: "drop", $themeName: "default", $attachmentOffset: 0, $easing: "linear") { + .#{$themePrefix}-element.#{$themePrefix}-#{$themeName} { + transform: translateZ(0); + transition: opacity 100ms; + opacity: 0; + .#{$themePrefix}-content { + transition: transform 0.2s $easing; + transform: scale(0) translateZ(0); + } + &.#{$themePrefix}-open { + display: none; + } + &.#{$themePrefix}-open-transitionend { + display: block; + } + &.#{$themePrefix}-after-open { + transition: none; + opacity: 1; + .#{$themePrefix}-content { + transform: scale(1) translateZ(0); + } + } + // Centers and middles + &.#{$themePrefix}-element-attached-bottom.#{$themePrefix}-element-attached-center .#{$themePrefix}-content { + transform-origin: 50% calc(100% + #{$attachmentOffset}); + } + &.#{$themePrefix}-element-attached-top.#{$themePrefix}-element-attached-center .#{$themePrefix}-content { + transform-origin: 50% (-$attachmentOffset); + } + &.#{$themePrefix}-element-attached-right.#{$themePrefix}-element-attached-middle .#{$themePrefix}-content { + transform-origin: calc(100% + #{$attachmentOffset}) 50%; + } + &.#{$themePrefix}-element-attached-left.#{$themePrefix}-element-attached-middle .#{$themePrefix}-content { + transform-origin: -($attachmentOffset 50%); + } + // Top and bottom corners + &.#{$themePrefix}-element-attached-top.#{$themePrefix}-element-attached-left.#{$themePrefix}-target-attached-bottom .#{$themePrefix}-content { + transform-origin: 0 (-$attachmentOffset); + } + &.#{$themePrefix}-element-attached-top.#{$themePrefix}-element-attached-right.#{$themePrefix}-target-attached-bottom .#{$themePrefix}-content { + transform-origin: 100% (-$attachmentOffset); + } + &.#{$themePrefix}-element-attached-bottom.#{$themePrefix}-element-attached-left.#{$themePrefix}-target-attached-top .#{$themePrefix}-content { + transform-origin: 0 calc(100% + #{$attachmentOffset}); + } + &.#{$themePrefix}-element-attached-bottom.#{$themePrefix}-element-attached-right.#{$themePrefix}-target-attached-top .#{$themePrefix}-content { + transform-origin: 100% calc(100% + #{$attachmentOffset}); + } + // Side corners + &.#{$themePrefix}-element-attached-top.#{$themePrefix}-element-attached-right.#{$themePrefix}-target-attached-left .#{$themePrefix}-content { + transform-origin: calc(100% + #{$attachmentOffset}) 0; + } + &.#{$themePrefix}-element-attached-top.#{$themePrefix}-element-attached-left.#{$themePrefix}-target-attached-right .#{$themePrefix}-content { + transform-origin: (-$attachmentOffset) 0; + } + &.#{$themePrefix}-element-attached-bottom.#{$themePrefix}-element-attached-right.#{$themePrefix}-target-attached-left .#{$themePrefix}-content { + transform-origin: calc(100% + #{$attachmentOffset}) 100%; + } + &.#{$themePrefix}-element-attached-bottom.#{$themePrefix}-element-attached-left.#{$themePrefix}-target-attached-right .#{$themePrefix}-content { + transform-origin: (-$attachmentOffset) 100%; + } + } +} + +@include drop-animation-scale("drop", "popover", $attachmentOffset: $attachmentOffset, $easing: $easing);