src/vs/workbench/browser/parts/panel/panelPart.ts/BasePanelPart/constructor
class BasePanelPart:	constructor(
		@INotificationService notificationService: INotificationService,
		@IStorageService storageService: IStorageService,
		@ITelemetryService telemetryService: ITelemetryService,
		@IContextMenuService contextMenuService: IContextMenuService,
		@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
		@IKeybindingService keybindingService: IKeybindingService,
		@IInstantiationService instantiationService: IInstantiationService,
		@IThemeService themeService: IThemeService,
		@IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService,
		@IContextKeyService protected readonly contextKeyService: IContextKeyService,
		@IExtensionService private readonly extensionService: IExtensionService,
		private readonly partId: Parts.PANEL_PART | Parts.AUXILIARYBAR_PART,
		activePanelSettingsKey: string,
		protected readonly pinnedPanelsKey: string,
		protected readonly placeholdeViewContainersKey: string,
		panelRegistryId: string,
		private readonly backgroundColor: string,
		private readonly viewContainerLocation: ViewContainerLocation,
		private readonly activePanelContextKey: IContextKey<string>,
		private panelFocusContextKey: IContextKey<boolean>,
		private readonly panelOptions: IPanelPartOptions,
	) {
		super(
			notificationService,
			storageService,
			telemetryService,
			contextMenuService,
			layoutService,
			keybindingService,
			instantiationService,
			themeService,
			Registry.as<PaneCompositeRegistry>(panelRegistryId),
			activePanelSettingsKey,
			viewDescriptorService.getDefaultViewContainer(viewContainerLocation)?.id || '',
			'panel',
			'panel',
			undefined,
			partId,
			panelOptions
		);

		this.panelRegistry = Registry.as<PaneCompositeRegistry>(panelRegistryId);

		this.dndHandler = new CompositeDragAndDrop(this.viewDescriptorService, this.viewContainerLocation,
			(id: string, focus?: boolean) => (this.openPaneComposite(id, focus) as Promise<IPaneComposite | undefined>).then(panel => panel || null),
			(from: string, to: string, before?: Before2D) => this.compositeBar.move(from, to, before?.horizontallyBefore),
			() => this.compositeBar.getCompositeBarItems()
		);

		this.compositeBar = this._register(this.instantiationService.createInstance(CompositeBar, this.getCachedPanels(), {
			icon: !!this.panelOptions.useIcons,
			orientation: ActionsOrientation.HORIZONTAL,
			activityHoverOptions: this.getActivityHoverOptions(),
			openComposite: (compositeId, preserveFocus) => this.openPaneComposite(compositeId, !preserveFocus).then(panel => panel || null),
			getActivityAction: compositeId => this.getCompositeActions(compositeId).activityAction,
			getCompositePinnedAction: compositeId => this.getCompositeActions(compositeId).pinnedAction,
			getCompositeBadgeAction: compositeId => this.getCompositeActions(compositeId).badgeAction,
			getOnCompositeClickAction: compositeId => this.instantiationService.createInstance(PanelActivityAction, assertIsDefined(this.getPaneComposite(compositeId)), this.viewContainerLocation),
			fillExtraContextMenuActions: actions => this.fillExtraContextMenuActions(actions),
			getContextMenuActionsForComposite: compositeId => this.getContextMenuActionsForComposite(compositeId),
			getDefaultCompositeId: () => viewDescriptorService.getDefaultViewContainer(this.viewContainerLocation)?.id,
			hidePart: () => this.layoutService.setPartHidden(true, this.partId),
			dndHandler: this.dndHandler,
			compositeSize: 0,
			overflowActionSize: 44,
			colors: theme => ({
				activeBackgroundColor: theme.getColor(this.backgroundColor), // Background color for overflow action
				inactiveBackgroundColor: theme.getColor(this.backgroundColor), // Background color for overflow action
				activeBorderBottomColor: theme.getColor(PANEL_ACTIVE_TITLE_BORDER),
				activeForegroundColor: theme.getColor(PANEL_ACTIVE_TITLE_FOREGROUND),
				inactiveForegroundColor: theme.getColor(PANEL_INACTIVE_TITLE_FOREGROUND),
				badgeBackground: theme.getColor(badgeBackground),
				badgeForeground: theme.getColor(badgeForeground),
				dragAndDropBorder: theme.getColor(PANEL_DRAG_AND_DROP_BORDER)
			})
		}));

		this.registerListeners();
		this.onDidRegisterPanels([...this.getPaneComposites()]);

		// Global Panel Actions
		this.globalActions = this._register(this.instantiationService.createInstance(CompositeMenuActions, partId === Parts.PANEL_PART ? MenuId.PanelTitle : MenuId.AuxiliaryBarTitle, undefined, undefined));
		this._register(this.globalActions.onDidChange(() => this.updateGlobalToolbarActions()));
	}