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'; import './dees-appui-tabs.js'; import type { DeesAppuiTabs } from './dees-appui-tabs.js'; @customElement('dees-appui-maincontent') export class DeesAppuiMaincontent extends DeesElement { public static demo = () => html` console.log('Overview') }, { key: 'Details', iconName: 'file', action: () => console.log('Details') }, { key: 'Settings', iconName: 'cog', action: () => console.log('Settings') }, ]} >

Main Content Area

This is where your application content goes.

`; // INSTANCE @property({ type: Array, }) public tabs: interfaces.ITab[] = [ { key: '⚠️ Please set tabs', action: () => console.warn('No tabs configured for maincontent') }, ]; @property({ type: Object }) public selectedTab: interfaces.ITab | null = 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%; user-select: none; } .content-area { position: absolute; top: 60px; left: 0; right: 0; bottom: 0; overflow: auto; } `, ]; public render(): TemplateResult { return html`
this.handleTabSelect(e)} >
`; } private handleTabSelect(e: CustomEvent) { this.selectedTab = e.detail.tab; // Re-emit the event this.dispatchEvent(new CustomEvent('tab-select', { detail: e.detail, bubbles: true, composed: true })); } async firstUpdated(_changedProperties: Map) { await super.firstUpdated(_changedProperties); // Tab selection is now handled by the dees-appui-tabs component // But we need to ensure the tabs component is ready const tabsComponent = this.shadowRoot.querySelector('dees-appui-tabs') as DeesAppuiTabs; if (tabsComponent) { await tabsComponent.updateComplete; } } }