/*//////////////////////////////////////////////////////////////////////////////////////*/ /* _ _ ____ _ _ ___ ____ */ /* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ /* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ /* */ /*//////////////////////////////////////////////////////////////////////////////////////*/ /* SPDX-FileCopyrightText: Simon Schneegans */ /* SPDX-FileCopyrightText: Elfi Ox */ /* SPDX-License-Identifier: CC0-1.0 */ .menu-node { --child-distance: 80px; --grandchild-distance: 16px; --center-size: 80px; --icon-size: 40px; --connector-width: 10px; --menu-transition: transform 200ms ease, opacity 200ms ease; --connector-transition: width 200ms ease, opacity 200ms ease; transition: var(--menu-transition); /* Positioning ---------------------------------------------------------------------- */ /* Child items are positioned around the active node. */ &.child.type-submenu { transform: translate( calc( max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x) ), calc( max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y) ) ); } &.child:not(.type-submenu) { transform: translate( calc( max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x) ), calc( max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y) ) ) !important; } /* Grandchild items are positioned around the child items. */ &.grandchild { transform: translate( calc(var(--grandchild-distance) * var(--dir-x)), calc(var(--grandchild-distance) * var(--dir-y)) ); } /* Theme Layers --------------------------------------------------------------------- */ /* We hide all icons by default. They will be shown further down in this file for the the child items. */ .icon-container { position: relative; top: 0; left: 0; width: 100%; opacity: 0; clip-path: circle(45% at 50% 50%); transition: var(--menu-transition); color: var(--accent-color); } .label-layer, .icon-layer { position: absolute; transition: var(--menu-transition); } .label-layer { opacity: 0; background-color: var(--label-background-color); color: var(--text-color); border: 2px solid var(--border-color); white-space: nowrap; height: var(--icon-size); border-radius: var(--icon-size); top: calc(-1 * var(--icon-size) / 2); padding: calc(var(--icon-size) / 5) calc(var(--icon-size) / 3); font-size: calc(var(--icon-size) / 2.7); } &.hovered > .label-layer { color: var(--hover-color); border-color: var(--hover-color); box-shadow: 0 0 6px var(--hover-color) inset; } &.right > .label-layer { left: calc(-1 * var(--icon-size) / 2); padding-left: calc(var(--icon-size) + 5px); } &.left > .label-layer { right: calc(-1 * var(--icon-size) / 2); padding-right: calc(var(--icon-size) + 5px); } &.top > .label-layer { bottom: calc(0.4 * var(--icon-size)); top: inherit; transform: translateX(-50%); } &.bottom > .label-layer { top: calc(0.4 * var(--icon-size)); transform: translateX(-50%); } .icon-layer { top: calc(-1 * var(--icon-size) / 2); left: calc(-1 * var(--icon-size) / 2); width: var(--icon-size); height: var(--icon-size); border-radius: 50%; box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); background-color: var(--circle-color); z-index: 1; } &.active > .icon-layer { top: calc(-1 * var(--center-size) / 2); left: calc(-1 * var(--center-size) / 2); width: var(--center-size); height: var(--center-size); } &.grandchild > .icon-layer { top: calc(-1 * var(--grandchild-size) / 2); left: calc(-1 * var(--grandchild-size) / 2); width: var(--grandchild-size); height: var(--grandchild-size); box-shadow: none; } /* The active menu item is the center of the menu. */ &.child > .label-layer { opacity: 1; } /* Show the icons of the parent and child items. */ &.active > .icon-layer > .icon-container, &.parent > .icon-layer > .icon-container, &.child > .icon-layer > .icon-container { opacity: 1; } /* We disable any transition for dragged submenu items. */ &.dragged.type-submenu { transition: none; } /* Connectors ----------------------------------------------------------------------- */ .connector { transition: var(--connector-transition); height: var(--connector-width); top: calc(-1 * var(--connector-width) / 2); background-color: var(--connector-color); opacity: 0; box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); } &:has(> .dragged) > .connector, &:has(> .clicked) > .connector { transition: none; } &:has(> .parent) > .connector, &:has(> .active.type-submenu) > .connector, &:has(> .dragged.type-submenu) > .connector { opacity: 1; } } /* Center Text ------------------------------------------------------------------------ */ .center-text { display: none; }