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