media-chrome
Version:
Custom elements (web components) for making audio and video player controls that look great in your website or app.
68 lines (58 loc) • 1.97 kB
text/typescript
import { globalThis, document } from '../utils/server-safe-globals.js';
import { MediaChromeMenu } from './media-chrome-menu.js';
import { getMediaController } from '../utils/element-utils.js';
const template: HTMLTemplateElement = document.createElement('template');
// prettier-ignore
template.innerHTML = MediaChromeMenu.template.innerHTML + /*html*/`
<style>
:host {
--_menu-bg: rgb(20 20 30 / .8);
background: var(--media-settings-menu-background,
var(--media-menu-background,
var(--media-control-background,
var(--media-secondary-color, var(--_menu-bg)))));
min-width: var(--media-settings-menu-min-width, 170px);
border-radius: 2px 2px 0 0;
overflow: hidden;
}
@-moz-document url-prefix() {
:host{
--_menu-bg: rgb(20 20 30);
}
}
:host([role="menu"]) {
${/* Bottom fix setting menu items for animation when the height expands. */ ''}
justify-content: end;
}
slot:not([name]) {
justify-content: var(--media-settings-menu-justify-content);
flex-direction: var(--media-settings-menu-flex-direction, column);
overflow: visible;
}
#container.has-expanded {
--media-settings-menu-item-opacity: 0;
}
</style>
`;
/**
* @extends {MediaChromeMenu}
*
* @cssproperty --media-settings-menu-justify-content - `justify-content` of the menu.
*/
class MediaSettingsMenu extends MediaChromeMenu {
static template = template;
/**
* Returns the anchor element when it is a floating menu.
*/
get anchorElement() {
if (this.anchor !== 'auto') return super.anchorElement;
return getMediaController(this).querySelector<HTMLElement>(
'media-settings-menu-button'
);
}
}
if (!globalThis.customElements.get('media-settings-menu')) {
globalThis.customElements.define('media-settings-menu', MediaSettingsMenu);
}
export { MediaSettingsMenu };
export default MediaSettingsMenu;