UNPKG

@vscode/webview-ui-toolkit

Version:

A component library for building webview-based extensions in Visual Studio Code.

106 lines (105 loc) 2.92 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { Tab as FoundationTab, TabPanel as FoundationTabPanel, Tabs as FoundationTabs, tabPanelTemplate, TabsOrientation, tabsTemplate, tabTemplate, } from '@microsoft/fast-foundation'; import { panelsStyles } from './panels.styles.js'; import { panelTabStyles } from './panel-tab.styles.js'; import { panelViewStyles } from './panel-view.styles.js'; /** * The Visual Studio Code panels class. * * @public */ export class Panels extends FoundationTabs { /** * Component lifecycle method that runs when the component is inserted * into the DOM. * * @internal */ connectedCallback() { super.connectedCallback(); // This will override any usage of the orientation attribute // inherited by the FAST Foundation Tabs component so that // VSCodePanels are always oriented horizontally if (this.orientation) { this.orientation = TabsOrientation.horizontal; } // Sets a default ARIA label on the panels component only if an // aria-label attribute does not already exist const ariaLabelValue = this.getAttribute('aria-label'); if (!ariaLabelValue) { this.setAttribute('aria-label', 'Panels'); } } } /** * The Visual Studio Code panels component registration. * * @remarks * HTML Element: `<vscode-panels>` * * @public */ export const vsCodePanels = Panels.compose({ baseName: 'panels', template: tabsTemplate, styles: panelsStyles, }); /** * The Visual Studio Code panel tab class. * * @public */ export class PanelTab extends FoundationTab { /** * Component lifecycle method that runs when the component is inserted * into the DOM. * * @internal */ connectedCallback() { super.connectedCallback(); // This will override any usage of the disabled attribute // inherited by the FAST Foundation Tab component so that // VSCodePanelTab can never be disabled if (this.disabled) { this.disabled = false; } if (this.textContent) { this.setAttribute('aria-label', this.textContent); } } } /** * The Visual Studio Code panel tab component registration. * * @remarks * HTML Element: `<vscode-panel-tab>` * * @public */ export const vsCodePanelTab = PanelTab.compose({ baseName: 'panel-tab', template: tabTemplate, styles: panelTabStyles, }); /** * The Visual Studio Code panel view class. * * @public */ export class PanelView extends FoundationTabPanel { } /** * The Visual Studio Code panel view component registration. * * @remarks * HTML Element: `<vscode-panel-view>` * * @public */ export const vsCodePanelView = PanelView.compose({ baseName: 'panel-view', template: tabPanelTemplate, styles: panelViewStyles, });