1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimport { element } from '../BaseElement'; 17fb726d48Sopenharmony_ciimport { LitTabpane } from './lit-tabpane'; 18fb726d48Sopenharmony_ciimport { SpStatisticsHttpUtil } from '../../statistics/util/SpStatisticsHttpUtil'; 19fb726d48Sopenharmony_ciimport { LitTabsHtml } from './lit-tabs.html'; 20fb726d48Sopenharmony_ciimport { shadowRootInput } from '../../trace/component/trace/base/shadowRootInput'; 21fb726d48Sopenharmony_ci 22fb726d48Sopenharmony_ci@element('lit-tabs') 23fb726d48Sopenharmony_ciexport class LitTabs extends HTMLElement { 24fb726d48Sopenharmony_ci private tabPos: unknown; 25fb726d48Sopenharmony_ci private nav: HTMLDivElement | undefined | null; 26fb726d48Sopenharmony_ci private line: HTMLDivElement | undefined | null; 27fb726d48Sopenharmony_ci private slots: HTMLSlotElement | undefined | null; 28fb726d48Sopenharmony_ci 29fb726d48Sopenharmony_ci constructor() { 30fb726d48Sopenharmony_ci super(); 31fb726d48Sopenharmony_ci const shadowRoot = this.attachShadow({ mode: 'open' }); 32fb726d48Sopenharmony_ci shadowRoot.innerHTML = LitTabsHtml; 33fb726d48Sopenharmony_ci } 34fb726d48Sopenharmony_ci 35fb726d48Sopenharmony_ci static get observedAttributes(): string[] { 36fb726d48Sopenharmony_ci return ['activekey', 'mode', 'position']; 37fb726d48Sopenharmony_ci } 38fb726d48Sopenharmony_ci 39fb726d48Sopenharmony_ci get position(): string { 40fb726d48Sopenharmony_ci return this.getAttribute('position') || 'top'; 41fb726d48Sopenharmony_ci } 42fb726d48Sopenharmony_ci 43fb726d48Sopenharmony_ci set position(value) { 44fb726d48Sopenharmony_ci this.setAttribute('position', value); 45fb726d48Sopenharmony_ci } 46fb726d48Sopenharmony_ci 47fb726d48Sopenharmony_ci get mode(): string { 48fb726d48Sopenharmony_ci return this.getAttribute('mode') || 'flat'; 49fb726d48Sopenharmony_ci } 50fb726d48Sopenharmony_ci 51fb726d48Sopenharmony_ci set mode(value) { 52fb726d48Sopenharmony_ci this.setAttribute('mode', value); 53fb726d48Sopenharmony_ci } 54fb726d48Sopenharmony_ci 55fb726d48Sopenharmony_ci get activekey(): string { 56fb726d48Sopenharmony_ci return this.getAttribute('activekey') || ''; 57fb726d48Sopenharmony_ci } 58fb726d48Sopenharmony_ci 59fb726d48Sopenharmony_ci set activekey(value: string) { 60fb726d48Sopenharmony_ci this.setAttribute('activekey', value); 61fb726d48Sopenharmony_ci } 62fb726d48Sopenharmony_ci 63fb726d48Sopenharmony_ci set onTabClick(fn: unknown) { 64fb726d48Sopenharmony_ci //@ts-ignore 65fb726d48Sopenharmony_ci this.addEventListener('onTabClick', fn); 66fb726d48Sopenharmony_ci } 67fb726d48Sopenharmony_ci 68fb726d48Sopenharmony_ci updateLabel(key: string, value: string): void { 69fb726d48Sopenharmony_ci if (this.nav) { 70fb726d48Sopenharmony_ci let item = this.nav.querySelector(`.nav-item[data-key='${key}']`); 71fb726d48Sopenharmony_ci if (item) { 72fb726d48Sopenharmony_ci item.querySelector<HTMLSpanElement>('span')!.innerHTML = value; 73fb726d48Sopenharmony_ci this.initTabPos(); 74fb726d48Sopenharmony_ci } 75fb726d48Sopenharmony_ci } 76fb726d48Sopenharmony_ci } 77fb726d48Sopenharmony_ci 78fb726d48Sopenharmony_ci updateDisabled(key: string, value: string): void { 79fb726d48Sopenharmony_ci if (this.nav) { 80fb726d48Sopenharmony_ci let item = this.nav.querySelector(`.nav-item[data-key='${key}']`); 81fb726d48Sopenharmony_ci if (item) { 82fb726d48Sopenharmony_ci if (value) { 83fb726d48Sopenharmony_ci item.setAttribute('data-disabled', ''); 84fb726d48Sopenharmony_ci } else { 85fb726d48Sopenharmony_ci item.removeAttribute('data-disabled'); 86fb726d48Sopenharmony_ci } 87fb726d48Sopenharmony_ci this.initTabPos(); 88fb726d48Sopenharmony_ci } 89fb726d48Sopenharmony_ci } 90fb726d48Sopenharmony_ci } 91fb726d48Sopenharmony_ci 92fb726d48Sopenharmony_ci updateCloseable(key: string, value: string): void { 93fb726d48Sopenharmony_ci if (this.nav) { 94fb726d48Sopenharmony_ci let item = this.nav.querySelector(`.nav-item[data-key='${key}']`); 95fb726d48Sopenharmony_ci if (item) { 96fb726d48Sopenharmony_ci if (value) { 97fb726d48Sopenharmony_ci item.setAttribute('data-closeable', ''); 98fb726d48Sopenharmony_ci } else { 99fb726d48Sopenharmony_ci item.removeAttribute('data-closeable'); 100fb726d48Sopenharmony_ci } 101fb726d48Sopenharmony_ci this.initTabPos(); 102fb726d48Sopenharmony_ci } 103fb726d48Sopenharmony_ci } 104fb726d48Sopenharmony_ci } 105fb726d48Sopenharmony_ci 106fb726d48Sopenharmony_ci updateHidden(key: string, value: string): void { 107fb726d48Sopenharmony_ci if (this.nav) { 108fb726d48Sopenharmony_ci let item = this.nav.querySelector(`.nav-item[data-key='${key}']`); 109fb726d48Sopenharmony_ci if (item) { 110fb726d48Sopenharmony_ci if (value === 'true') { 111fb726d48Sopenharmony_ci item.setAttribute('data-hidden', ''); 112fb726d48Sopenharmony_ci } else { 113fb726d48Sopenharmony_ci item.removeAttribute('data-hidden'); 114fb726d48Sopenharmony_ci } 115fb726d48Sopenharmony_ci this.initTabPos(); 116fb726d48Sopenharmony_ci } 117fb726d48Sopenharmony_ci } 118fb726d48Sopenharmony_ci } 119fb726d48Sopenharmony_ci 120fb726d48Sopenharmony_ci initTabPos(): void { 121fb726d48Sopenharmony_ci const items = this.nav!.querySelectorAll<HTMLDivElement>('.nav-item'); 122fb726d48Sopenharmony_ci Array.from(items).forEach((a, index) => { 123fb726d48Sopenharmony_ci // @ts-ignore 124fb726d48Sopenharmony_ci this.tabPos[a.dataset.key] = { 125fb726d48Sopenharmony_ci index: index, 126fb726d48Sopenharmony_ci width: a.offsetWidth, 127fb726d48Sopenharmony_ci height: a.offsetHeight, 128fb726d48Sopenharmony_ci left: a.offsetLeft, 129fb726d48Sopenharmony_ci top: a.offsetTop, 130fb726d48Sopenharmony_ci label: a.textContent, 131fb726d48Sopenharmony_ci }; 132fb726d48Sopenharmony_ci }); 133fb726d48Sopenharmony_ci if (this.activekey) { 134fb726d48Sopenharmony_ci if (this.position.startsWith('left')) { 135fb726d48Sopenharmony_ci this.line?.setAttribute( 136fb726d48Sopenharmony_ci 'style', //@ts-ignore 137fb726d48Sopenharmony_ci `height:${this.tabPos[this.activekey].height}px;transform:translate(100%,${ 138fb726d48Sopenharmony_ci //@ts-ignore 139fb726d48Sopenharmony_ci this.tabPos[this.activekey].top 140fb726d48Sopenharmony_ci }px)` 141fb726d48Sopenharmony_ci ); 142fb726d48Sopenharmony_ci } else if (this.position.startsWith('top')) { 143fb726d48Sopenharmony_ci //@ts-ignore 144fb726d48Sopenharmony_ci if (this.tabPos[this.activekey]) { 145fb726d48Sopenharmony_ci this.line?.setAttribute( 146fb726d48Sopenharmony_ci 'style', //@ts-ignore 147fb726d48Sopenharmony_ci `width:${this.tabPos[this.activekey].width}px;transform:translate(${ 148fb726d48Sopenharmony_ci //@ts-ignore 149fb726d48Sopenharmony_ci this.tabPos[this.activekey].left 150fb726d48Sopenharmony_ci }px,100%)` 151fb726d48Sopenharmony_ci ); 152fb726d48Sopenharmony_ci } 153fb726d48Sopenharmony_ci } else if (this.position.startsWith('right')) { 154fb726d48Sopenharmony_ci this.line?.setAttribute( 155fb726d48Sopenharmony_ci 'style', //@ts-ignore 156fb726d48Sopenharmony_ci `height:${this.tabPos[this.activekey].height}px;transform:translate(-100%,${ 157fb726d48Sopenharmony_ci //@ts-ignore 158fb726d48Sopenharmony_ci this.tabPos[this.activekey].top 159fb726d48Sopenharmony_ci }px)` 160fb726d48Sopenharmony_ci ); 161fb726d48Sopenharmony_ci } else if (this.position.startsWith('bottom')) { 162fb726d48Sopenharmony_ci this.line?.setAttribute( 163fb726d48Sopenharmony_ci 'style', //@ts-ignore 164fb726d48Sopenharmony_ci `width:${this.tabPos[this.activekey].width}px;transform:translate(${this.tabPos[this.activekey].left}px,100%)` 165fb726d48Sopenharmony_ci ); 166fb726d48Sopenharmony_ci } 167fb726d48Sopenharmony_ci } 168fb726d48Sopenharmony_ci } 169fb726d48Sopenharmony_ci 170fb726d48Sopenharmony_ci connectedCallback(): void { 171fb726d48Sopenharmony_ci this.tabPos = {}; 172fb726d48Sopenharmony_ci this.nav = this.shadowRoot?.querySelector('#nav'); 173fb726d48Sopenharmony_ci this.line = this.shadowRoot?.querySelector('#tab-line'); 174fb726d48Sopenharmony_ci this.slots = this.shadowRoot?.querySelector('#slot'); 175fb726d48Sopenharmony_ci this.slots?.addEventListener('slotchange', () => { 176fb726d48Sopenharmony_ci const elements: Element[] | undefined = this.slots?.assignedElements(); 177fb726d48Sopenharmony_ci let panes = this.querySelectorAll<LitTabpane>('lit-tabpane'); 178fb726d48Sopenharmony_ci if (this.activekey) { 179fb726d48Sopenharmony_ci panes.forEach((a) => { 180fb726d48Sopenharmony_ci if (a.key === this.activekey) { 181fb726d48Sopenharmony_ci a.style.display = 'block'; 182fb726d48Sopenharmony_ci } else { 183fb726d48Sopenharmony_ci a.style.display = 'none'; 184fb726d48Sopenharmony_ci } 185fb726d48Sopenharmony_ci }); 186fb726d48Sopenharmony_ci } else { 187fb726d48Sopenharmony_ci panes.forEach((a, index) => { 188fb726d48Sopenharmony_ci if (index === 0) { 189fb726d48Sopenharmony_ci a.style.display = 'block'; 190fb726d48Sopenharmony_ci this.activekey = a.key || ''; 191fb726d48Sopenharmony_ci } else { 192fb726d48Sopenharmony_ci a.style.display = 'none'; 193fb726d48Sopenharmony_ci } 194fb726d48Sopenharmony_ci }); 195fb726d48Sopenharmony_ci } 196fb726d48Sopenharmony_ci this.setItemNode(elements); 197fb726d48Sopenharmony_ci }); 198fb726d48Sopenharmony_ci this.nav!.onclick = (e): void => { 199fb726d48Sopenharmony_ci if ((e.target! as HTMLElement).closest('div')!.hasAttribute('data-disabled')) { 200fb726d48Sopenharmony_ci return; 201fb726d48Sopenharmony_ci } 202fb726d48Sopenharmony_ci let key = (e.target! as HTMLElement).closest('div')!.dataset.key; 203fb726d48Sopenharmony_ci if (key) { 204fb726d48Sopenharmony_ci this.activeByKey(key); 205fb726d48Sopenharmony_ci } 206fb726d48Sopenharmony_ci let label = (e.target! as HTMLElement).closest('div')!.querySelector('span')!.textContent; 207fb726d48Sopenharmony_ci this.dispatchEvent( 208fb726d48Sopenharmony_ci new CustomEvent('onTabClick', { 209fb726d48Sopenharmony_ci detail: { key: key, tab: label }, 210fb726d48Sopenharmony_ci }) 211fb726d48Sopenharmony_ci ); 212fb726d48Sopenharmony_ci }; 213fb726d48Sopenharmony_ci 214fb726d48Sopenharmony_ci new ResizeObserver((entries) => { 215fb726d48Sopenharmony_ci let filling = this.shadowRoot!.querySelector<HTMLDivElement>('#tab-filling'); 216fb726d48Sopenharmony_ci 217fb726d48Sopenharmony_ci this.shadowRoot!.querySelector<HTMLDivElement>('.tab-nav-vessel')!.style.height = filling!.offsetWidth + 'px'; 218fb726d48Sopenharmony_ci }).observe(this.shadowRoot!.querySelector('#tab-filling')!); 219fb726d48Sopenharmony_ci } 220fb726d48Sopenharmony_ci 221fb726d48Sopenharmony_ci setItemNode(elements: Element[] | undefined): void { 222fb726d48Sopenharmony_ci let navHtml: string = ''; 223fb726d48Sopenharmony_ci elements 224fb726d48Sopenharmony_ci ?.map((it) => it as LitTabpane) 225fb726d48Sopenharmony_ci .forEach((a) => { 226fb726d48Sopenharmony_ci if (a.disabled) { 227fb726d48Sopenharmony_ci navHtml += `<div class="nav-item" data-key="${a.key}" data-disabled ${a.closeable ? 'data-closeable' : ''}> 228fb726d48Sopenharmony_ci ${a.icon ? `<lit-icon name='${a.icon}'></lit-icon>` : ''} 229fb726d48Sopenharmony_ci <span>${a.tab}</span> 230fb726d48Sopenharmony_ci <lit-icon class="close-icon" name='close' size="16"></lit-icon><div class="no-close-icon" style="margin-right: 12px"></div> 231fb726d48Sopenharmony_ci </div>`; 232fb726d48Sopenharmony_ci } else if (a.hidden) { 233fb726d48Sopenharmony_ci navHtml += `<div class="nav-item" data-key="${a.key}" data-hidden ${a.closeable ? 'data-closeable' : ''}> 234fb726d48Sopenharmony_ci ${a.icon ? `<lit-icon name='${a.icon}'></lit-icon>` : ''} 235fb726d48Sopenharmony_ci <span>${a.tab}</span> 236fb726d48Sopenharmony_ci <lit-icon class="close-icon" name='close' size="16"></lit-icon><div class="no-close-icon" style="margin-right: 12px"></div> 237fb726d48Sopenharmony_ci </div>`; 238fb726d48Sopenharmony_ci } else { 239fb726d48Sopenharmony_ci if (a.key === this.activekey) { 240fb726d48Sopenharmony_ci navHtml += `<div class="nav-item" data-key="${a.key}" data-selected ${a.closeable ? 'data-closeable' : ''}> 241fb726d48Sopenharmony_ci ${a.icon ? `<lit-icon name='${a.icon}'></lit-icon>` : ''} 242fb726d48Sopenharmony_ci <span>${a.tab}</span> 243fb726d48Sopenharmony_ci <lit-icon class="close-icon" name='close' size="16"></lit-icon><div class="no-close-icon" style="margin-right: 12px"></div> 244fb726d48Sopenharmony_ci </div>`; 245fb726d48Sopenharmony_ci } else { 246fb726d48Sopenharmony_ci navHtml += `<div class="nav-item" data-key="${a.key}" ${a.closeable ? 'data-closeable' : ''}> 247fb726d48Sopenharmony_ci ${a.icon ? `<lit-icon name='${a.icon}'></lit-icon>` : ''} 248fb726d48Sopenharmony_ci <span>${a.tab}</span> 249fb726d48Sopenharmony_ci <lit-icon class="close-icon" name='close' size="16"></lit-icon><div class="no-close-icon" style="margin-right: 12px"></div> 250fb726d48Sopenharmony_ci </div>`; 251fb726d48Sopenharmony_ci } 252fb726d48Sopenharmony_ci } 253fb726d48Sopenharmony_ci }); 254fb726d48Sopenharmony_ci this.nav!.innerHTML = navHtml; 255fb726d48Sopenharmony_ci this.initTabPos(); 256fb726d48Sopenharmony_ci this.nav!.querySelectorAll<HTMLElement>('.close-icon').forEach((a) => { 257fb726d48Sopenharmony_ci a.onclick = (e): void => { 258fb726d48Sopenharmony_ci e.stopPropagation(); 259fb726d48Sopenharmony_ci const closeKey = (e.target! as HTMLElement).parentElement!.dataset.key; 260fb726d48Sopenharmony_ci this.dispatchEvent( 261fb726d48Sopenharmony_ci new CustomEvent('close-handler', { 262fb726d48Sopenharmony_ci detail: { key: closeKey }, 263fb726d48Sopenharmony_ci composed: true, 264fb726d48Sopenharmony_ci }) 265fb726d48Sopenharmony_ci ); 266fb726d48Sopenharmony_ci }; 267fb726d48Sopenharmony_ci }); 268fb726d48Sopenharmony_ci } 269fb726d48Sopenharmony_ci 270fb726d48Sopenharmony_ci activeByKey(key: string, isValid: boolean = true): void { 271fb726d48Sopenharmony_ci if (key === null || key === undefined) { 272fb726d48Sopenharmony_ci return; 273fb726d48Sopenharmony_ci } //如果没有key 不做相应 274fb726d48Sopenharmony_ci this.nav!.querySelectorAll('.nav-item').forEach((a) => { 275fb726d48Sopenharmony_ci if (a.querySelector('span')?.innerText === 'Comparison') { 276fb726d48Sopenharmony_ci a.setAttribute('id', 'nav-comparison'); 277fb726d48Sopenharmony_ci } 278fb726d48Sopenharmony_ci if (a.getAttribute('data-key') === key) { 279fb726d48Sopenharmony_ci a.setAttribute('data-selected', 'true'); 280fb726d48Sopenharmony_ci this.byKeyIsValid(isValid, a); 281fb726d48Sopenharmony_ci } else { 282fb726d48Sopenharmony_ci a.removeAttribute('data-selected'); 283fb726d48Sopenharmony_ci } 284fb726d48Sopenharmony_ci }); 285fb726d48Sopenharmony_ci let panes = this.querySelectorAll<LitTabpane>('lit-tabpane'); 286fb726d48Sopenharmony_ci panes.forEach((a) => { 287fb726d48Sopenharmony_ci if (a.key === key) { 288fb726d48Sopenharmony_ci a.style.display = 'block'; 289fb726d48Sopenharmony_ci this.activekey = a.key; 290fb726d48Sopenharmony_ci this.initTabPos(); 291fb726d48Sopenharmony_ci } else { 292fb726d48Sopenharmony_ci a.style.display = 'none'; 293fb726d48Sopenharmony_ci } 294fb726d48Sopenharmony_ci }); 295fb726d48Sopenharmony_ci let tbp = this.querySelector(`lit-tabpane[key='${key}']`); 296fb726d48Sopenharmony_ci if (tbp) { 297fb726d48Sopenharmony_ci setTimeout(() => { 298fb726d48Sopenharmony_ci shadowRootInput.preventBubbling(tbp); 299fb726d48Sopenharmony_ci }, 500); 300fb726d48Sopenharmony_ci } 301fb726d48Sopenharmony_ci } 302fb726d48Sopenharmony_ci 303fb726d48Sopenharmony_ci byKeyIsValid(isValid: boolean, a: Element): void { 304fb726d48Sopenharmony_ci if (isValid) { 305fb726d48Sopenharmony_ci let span = a.querySelector('span') as HTMLSpanElement; 306fb726d48Sopenharmony_ci let title = span.innerText; 307fb726d48Sopenharmony_ci let rowType = document 308fb726d48Sopenharmony_ci .querySelector<HTMLElement>('sp-application')! 309fb726d48Sopenharmony_ci .shadowRoot?.querySelector<HTMLElement>('sp-system-trace')! 310fb726d48Sopenharmony_ci .getAttribute('clickRow'); 311fb726d48Sopenharmony_ci if (title === 'Counters' || title === 'Thread States') { 312fb726d48Sopenharmony_ci title += `(${rowType})`; 313fb726d48Sopenharmony_ci } 314fb726d48Sopenharmony_ci if (title === 'Analysis') { 315fb726d48Sopenharmony_ci let rowId = document 316fb726d48Sopenharmony_ci .querySelector<HTMLElement>('sp-application')! 317fb726d48Sopenharmony_ci .shadowRoot?.querySelector<HTMLElement>('sp-system-trace')! 318fb726d48Sopenharmony_ci .getAttribute('rowId'); 319fb726d48Sopenharmony_ci if (rowId!.indexOf('DiskIOLatency') > -1) { 320fb726d48Sopenharmony_ci title += '(disk-io)'; 321fb726d48Sopenharmony_ci } else if (rowId!.indexOf('VirtualMemory') > -1) { 322fb726d48Sopenharmony_ci title += '(virtual-memory-cell)'; 323fb726d48Sopenharmony_ci } else { 324fb726d48Sopenharmony_ci title += `(${rowType})`; 325fb726d48Sopenharmony_ci } 326fb726d48Sopenharmony_ci } 327fb726d48Sopenharmony_ci if (title === 'Slices' || title === 'Current Selection') { 328fb726d48Sopenharmony_ci let rowName = document 329fb726d48Sopenharmony_ci .querySelector<HTMLElement>('sp-application')! 330fb726d48Sopenharmony_ci .shadowRoot?.querySelector<HTMLElement>('sp-system-trace')! 331fb726d48Sopenharmony_ci .getAttribute('rowName'); 332fb726d48Sopenharmony_ci if (rowName && rowName!.indexOf('deliverInputEvent') > -1) { 333fb726d48Sopenharmony_ci title += '(deliverInputEvent)'; 334fb726d48Sopenharmony_ci } else { 335fb726d48Sopenharmony_ci let rowType = document 336fb726d48Sopenharmony_ci .querySelector<HTMLElement>('sp-application')! 337fb726d48Sopenharmony_ci .shadowRoot?.querySelector<HTMLElement>('sp-system-trace')! 338fb726d48Sopenharmony_ci .getAttribute('clickRow'); 339fb726d48Sopenharmony_ci title += `(${rowType})`; 340fb726d48Sopenharmony_ci } 341fb726d48Sopenharmony_ci } 342fb726d48Sopenharmony_ci SpStatisticsHttpUtil.addOrdinaryVisitAction({ 343fb726d48Sopenharmony_ci event: title, 344fb726d48Sopenharmony_ci action: 'trace_tab', 345fb726d48Sopenharmony_ci }); 346fb726d48Sopenharmony_ci } 347fb726d48Sopenharmony_ci } 348fb726d48Sopenharmony_ci 349fb726d48Sopenharmony_ci activePane(key: string): boolean { 350fb726d48Sopenharmony_ci if (key === null || key === undefined) { 351fb726d48Sopenharmony_ci return false; 352fb726d48Sopenharmony_ci } 353fb726d48Sopenharmony_ci let tbp = this.querySelector(`lit-tabpane[key='${key}']`); 354fb726d48Sopenharmony_ci if (tbp) { 355fb726d48Sopenharmony_ci this.activeByKey(key); 356fb726d48Sopenharmony_ci return true; 357fb726d48Sopenharmony_ci } else { 358fb726d48Sopenharmony_ci return false; 359fb726d48Sopenharmony_ci } 360fb726d48Sopenharmony_ci } 361fb726d48Sopenharmony_ci 362fb726d48Sopenharmony_ci disconnectedCallback(): void {} 363fb726d48Sopenharmony_ci 364fb726d48Sopenharmony_ci adoptedCallback(): void {} 365fb726d48Sopenharmony_ci 366fb726d48Sopenharmony_ci attributeChangedCallback(name: string, oldValue: string, newValue: string): void { 367fb726d48Sopenharmony_ci if (name === 'activekey' && this.nav && oldValue !== newValue && newValue !== '') { 368fb726d48Sopenharmony_ci this.activeByKey(newValue, false); 369fb726d48Sopenharmony_ci } 370fb726d48Sopenharmony_ci } 371fb726d48Sopenharmony_ci} 372