144 lines
4.9 KiB
SCSS
144 lines
4.9 KiB
SCSS
@use './menu-button.scss';
|
|
|
|
:host {
|
|
--advanced-camera-card-menu-button-size: 40px;
|
|
--ha-icon-button-size: var(--advanced-camera-card-menu-button-size);
|
|
--mdc-icon-size: calc(var(--ha-icon-button-size) / 2);
|
|
|
|
pointer-events: auto;
|
|
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
:host([data-style='outside']) {
|
|
width: 100%;
|
|
}
|
|
|
|
/*******************************************************
|
|
* Non-hover styles should not interact with the pointer
|
|
*******************************************************/
|
|
|
|
:host(:not([data-style*='hover'])) {
|
|
pointer-events: none;
|
|
}
|
|
|
|
/***********************************
|
|
* Aligned divs: matching & opposing
|
|
***********************************/
|
|
|
|
div.matching,
|
|
div.opposing {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
flex-direction: row;
|
|
align-items: flex-start;
|
|
|
|
// Allow the divs to be resized.
|
|
min-width: 0px;
|
|
min-height: 0px;
|
|
}
|
|
div.matching {
|
|
justify-content: flex-start;
|
|
}
|
|
div.opposing {
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
/********************************************************
|
|
* Hack: Ensure host & div expand for column flex layouts
|
|
********************************************************/
|
|
|
|
:host(:not([data-style='outside'])[data-position='left']) {
|
|
// Awful hack: Flexbox column wrapping doesn't work properly in most major
|
|
// browsers -- the element boundary does not expand to cover the full wrapped
|
|
// content as it should. This results in the wrapped 'content' appearing
|
|
// outside the element background (the linear gradient in this case). The
|
|
// workaround is to use flex row direction for both rows & columns, and use
|
|
// vertical-lr/vertical-rl as the writing mode for columns -- resetting
|
|
// writing-mode for descendant elements.
|
|
//
|
|
// For more information see the Chromium bug as an example:
|
|
// - https://bugs.chromium.org/p/chromium/issues/detail?id=507397
|
|
writing-mode: vertical-lr;
|
|
}
|
|
:host(:not([data-style='outside'])[data-position='right']) {
|
|
// See "Awful hack" above.
|
|
writing-mode: vertical-rl;
|
|
}
|
|
:host(:not([data-style='outside'])[data-style='overlay'][data-position='left']) div > *,
|
|
:host(:not([data-style='outside'])[data-style='overlay'][data-position='right']) div > *,
|
|
:host(:not([data-style='outside'])[data-style*='hover'][data-position='left']) div > *,
|
|
:host(:not([data-style='outside'])[data-style*='hover'][data-position='right']) div > *,
|
|
:host(:not([data-style='outside'])[data-style='hidden'][data-position='left']) div > *,
|
|
:host(:not([data-style='outside'])[data-style='hidden'][data-position='right']) div > * {
|
|
// See "Awful hack" above. Note that this "cancelation" of writing mode only
|
|
// affects from beyond the divs, i.e. the writing mode hack applies to host
|
|
// and divs both.
|
|
writing-mode: horizontal-tb;
|
|
}
|
|
|
|
/**********************
|
|
* "Reverse" alignments
|
|
**********************/
|
|
|
|
:host(:not([data-style='outside'])[data-position='left'][data-alignment='bottom']),
|
|
:host(:not([data-style='outside'])[data-position='right'][data-alignment='bottom']),
|
|
:host([data-position='top'][data-alignment='right']),
|
|
:host([data-position='bottom'][data-alignment='right']),
|
|
:host(:not([data-style='outside'])[data-position='left'][data-alignment='bottom']) div,
|
|
:host(:not([data-style='outside'])[data-position='right'][data-alignment='bottom']) div,
|
|
:host([data-position='top'][data-alignment='right']) div,
|
|
:host([data-position='bottom'][data-alignment='right']) div {
|
|
flex-direction: row-reverse;
|
|
}
|
|
|
|
/****************************
|
|
* Wrap upwards on the bottom
|
|
****************************/
|
|
|
|
:host(:not([data-style='outside'])[data-position='bottom']) div {
|
|
// If the menu has more content that allows, "wrap upwards" to keep the Iris
|
|
// button in the same place.
|
|
flex-wrap: wrap-reverse;
|
|
}
|
|
|
|
/********************************************
|
|
* Positioning for absolute based menu styles
|
|
********************************************/
|
|
|
|
:host([data-style='overlay'][data-position='top']),
|
|
:host([data-style='overlay'][data-position='bottom']),
|
|
:host([data-style*='hover'][data-position='top']),
|
|
:host([data-style*='hover'][data-position='bottom']),
|
|
:host([data-style='hidden'][data-position='top']),
|
|
:host([data-style='hidden'][data-position='bottom']) {
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
:host([data-style='overlay'][data-position='left']),
|
|
:host([data-style='overlay'][data-position='right']),
|
|
:host([data-style*='hover'][data-position='left']),
|
|
:host([data-style*='hover'][data-position='right']),
|
|
:host([data-style='hidden'][data-position='left']),
|
|
:host([data-style='hidden'][data-position='right']) {
|
|
width: auto;
|
|
height: 100%;
|
|
}
|
|
|
|
/************
|
|
* Menu theme
|
|
************/
|
|
|
|
// When the menu uses the hidden style, and is not expanded, the remaining
|
|
// permanent menu buttons use the menu background color instead of the button
|
|
// background color.
|
|
:host([data-style='hidden']:not([expanded])) ha-icon-button {
|
|
background: var(--advanced-camera-card-menu-background);
|
|
}
|
|
|
|
// Further theme related styling is dynamically applied by `menu.ts`, see
|
|
// `_renderPerInstanceStyle`.
|