import * as interfaces from './interfaces/index.js'; import { DeesElement, type TemplateResult, property, customElement, html, css, cssManager, } from '@design.estate/dees-element'; import * as domtools from '@design.estate/dees-domtools'; @customElement('dees-appui-maincontent') export class DeesAppuiMaincontent extends DeesElement { public static demo = () => html``; // INSTANCE @property({ type: Array, }) public tabs: interfaces.ITab[] = [ { key: 'option 1', action: () => {} }, { key: 'a very long option', action: () => {} }, { key: 'reminder: set your tabs', action: () => {} }, { key: 'option 4', action: () => {} }, ]; @property() public selectedTab = null; public static styles = [ cssManager.defaultStyles, css` :host { color: #fff; display: block; width: 100%; height: 100%; position: relative; background: #161616; } .maincontainer { position: absolute; height: 100%; right: 0px; top: 0px; width: 100%; } .topbar { position: absolute; width: 100%; background: #000000; user-select: none; } .topbar .tabsContainer { padding-top: 20px; padding-bottom: 0px; position: relative; z-index: 1; display: grid; margin-left: 24px; font-size: 14px; } .topbar .tabsContainer .tab { color: #a0a0a0; white-space: nowrap; margin-right: 30px; padding-top: 4px; padding-bottom: 12px; transition: color 0.1s; } .topbar .tabsContainer .tab:hover { color: #ffffff; } .topbar .tabsContainer .tab.selectedTab { color: #e0e0e0; } .topbar .tabIndicator { position: absolute; z-index: 0; left: 40px; bottom: 0px; height: 40px; width: 40px; background: #161616; transition: all 0.1s; border-top-left-radius: 8px; border-top-right-radius: 8px; border-top: 1px solid #444444; } .mainicon { } `, ]; public render(): TemplateResult { return html`
${this.tabs.map((tabArg) => { return html`
${tabArg.key}
`; })}
`; } /** * updates the indicator */ private updateTabIndicator() { let selectedTab = this.selectedTab; const tabIndex = this.tabs.indexOf(selectedTab); const selectedTabElement: HTMLElement = this.shadowRoot.querySelector( `.tabsContainer .tab:nth-child(${tabIndex + 1})` ); const tabsContainer: HTMLElement = this.shadowRoot.querySelector('.tabsContainer'); const marginLeft = parseInt(window.getComputedStyle(tabsContainer).getPropertyValue("margin-left")); const tabIndicator: HTMLElement = this.shadowRoot.querySelector('.tabIndicator'); tabIndicator.style.width = selectedTabElement.clientWidth + 24 + 'px'; tabIndicator.style.left = selectedTabElement.offsetLeft + marginLeft - 12 + 'px'; } private updateTab(tabArg: interfaces.ITab) { this.selectedTab = tabArg; this.updateTabIndicator(); this.selectedTab.action(); } firstUpdated() { this.updateTab(this.tabs[0]); } }