mirror of
https://github.com/mathuo/dockview
synced 2025-02-13 11:55:45 +00:00
Merge pull request #856 from mathuo/833-vanilla-js-expand-header-buttons
chore: add template example
This commit is contained in:
commit
cd1aa81d93
23
packages/docs/templates/dockview/group-actions/typescript/src/index.css
vendored
Normal file
23
packages/docs/templates/dockview/group-actions/typescript/src/index.css
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.dockview-groupcontrol-demo {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: white;
|
||||||
|
background-color: black;
|
||||||
|
padding: 0px 8px;
|
||||||
|
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px dotted orange;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.dockview-groupcontrol-demo .dockview-groupcontrol-demo-group-active {
|
||||||
|
padding: 0px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dockview-groupcontrol-demo .dockview-groupcontrol-demo-active-panel {
|
||||||
|
color: yellow;
|
||||||
|
padding: 0px 8px;
|
||||||
|
}
|
||||||
|
|
178
packages/docs/templates/dockview/group-actions/typescript/src/index.ts
vendored
Normal file
178
packages/docs/templates/dockview/group-actions/typescript/src/index.ts
vendored
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
import 'dockview-core/dist/styles/dockview.css';
|
||||||
|
import {
|
||||||
|
createDockview,
|
||||||
|
DockviewGroupPanel,
|
||||||
|
GroupPanelPartInitParameters,
|
||||||
|
IContentRenderer,
|
||||||
|
IGroupHeaderProps,
|
||||||
|
IHeaderActionsRenderer,
|
||||||
|
} from 'dockview-core';
|
||||||
|
import './index.css';
|
||||||
|
|
||||||
|
class Panel implements IContentRenderer {
|
||||||
|
private readonly _element: HTMLElement;
|
||||||
|
|
||||||
|
get element(): HTMLElement {
|
||||||
|
return this._element;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this._element = document.createElement('div');
|
||||||
|
this._element.style.display = 'flex';
|
||||||
|
this._element.style.justifyContent = 'center';
|
||||||
|
this._element.style.alignItems = 'center';
|
||||||
|
this._element.style.color = 'gray';
|
||||||
|
this._element.style.height = '100%';
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parameters: GroupPanelPartInitParameters): void {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PrefixHeader implements IHeaderActionsRenderer {
|
||||||
|
private readonly _element: HTMLElement;
|
||||||
|
|
||||||
|
get element(): HTMLElement {
|
||||||
|
return this._element;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(group: DockviewGroupPanel) {
|
||||||
|
this._element = document.createElement('div');
|
||||||
|
this._element.className = 'dockview-groupcontrol-demo';
|
||||||
|
this._element.innerText = '🌲';
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parameters: IGroupHeaderProps): void {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose(): void {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RightHeaderActions implements IHeaderActionsRenderer {
|
||||||
|
private readonly _element: HTMLElement;
|
||||||
|
private readonly _disposables: (() => void)[] = [];
|
||||||
|
|
||||||
|
get element(): HTMLElement {
|
||||||
|
return this._element;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(group: DockviewGroupPanel) {
|
||||||
|
this._element = document.createElement('div');
|
||||||
|
this._element.className = 'dockview-groupcontrol-demo';
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parameters: IGroupHeaderProps): void {
|
||||||
|
const group = parameters.group;
|
||||||
|
|
||||||
|
const span = document.createElement('span');
|
||||||
|
span.className = 'dockview-groupcontrol-demo-group-active';
|
||||||
|
|
||||||
|
this._element.appendChild(span);
|
||||||
|
|
||||||
|
const d1 = group.api.onDidActiveChange(() => {
|
||||||
|
span.style.background = group.api.isActive ? 'green' : 'red';
|
||||||
|
span.innerText = `${
|
||||||
|
group.api.isActive ? 'Group Active' : 'Group Inactive'
|
||||||
|
}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
span.style.background = group.api.isActive ? 'green' : 'red';
|
||||||
|
span.innerText = `${
|
||||||
|
group.api.isActive ? 'Group Active' : 'Group Inactive'
|
||||||
|
}`;
|
||||||
|
|
||||||
|
this._disposables.push(() => d1.dispose());
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose(): void {
|
||||||
|
this._disposables.forEach((dispose) => dispose());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LeftHeaderActions implements IHeaderActionsRenderer {
|
||||||
|
private readonly _element: HTMLElement;
|
||||||
|
private readonly _disposables: (() => void)[] = [];
|
||||||
|
|
||||||
|
get element(): HTMLElement {
|
||||||
|
return this._element;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(group: DockviewGroupPanel) {
|
||||||
|
console.log('group', group);
|
||||||
|
this._element = document.createElement('div');
|
||||||
|
this._element.className = 'dockview-groupcontrol-demo';
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parameters: IGroupHeaderProps): void {
|
||||||
|
const group = parameters.group;
|
||||||
|
|
||||||
|
const span = document.createElement('span');
|
||||||
|
span.className = 'dockview-groupcontrol-demo-active-panel';
|
||||||
|
|
||||||
|
this._element.appendChild(span);
|
||||||
|
|
||||||
|
const d1 = group.api.onDidActivePanelChange((event) => {
|
||||||
|
console.log('event', event);
|
||||||
|
span.innerText = `activePanel: ${event.panel?.id || 'null'}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('group.activePanel', group.activePanel);
|
||||||
|
|
||||||
|
span.innerText = `activePanel: ${group.activePanel?.id || 'null'}`;
|
||||||
|
|
||||||
|
this._disposables.push(() => d1.dispose());
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose(): void {
|
||||||
|
this._disposables.forEach((dispose) => dispose());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const api = createDockview(document.getElementById('app'), {
|
||||||
|
className: 'dockview-theme-abyss',
|
||||||
|
createComponent: (options): IContentRenderer => {
|
||||||
|
switch (options.name) {
|
||||||
|
case 'default':
|
||||||
|
return new Panel();
|
||||||
|
default:
|
||||||
|
throw new Error('Panel not found');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
createPrefixHeaderActionComponent: (group): IHeaderActionsRenderer => {
|
||||||
|
return new PrefixHeader(group);
|
||||||
|
},
|
||||||
|
createLeftHeaderActionComponent: (group): IHeaderActionsRenderer => {
|
||||||
|
return new LeftHeaderActions(group);
|
||||||
|
},
|
||||||
|
createRightHeaderActionComponent: (group): IHeaderActionsRenderer => {
|
||||||
|
return new RightHeaderActions(group);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
api.addPanel({
|
||||||
|
id: 'panel_1',
|
||||||
|
component: 'default',
|
||||||
|
title: 'Panel 1',
|
||||||
|
});
|
||||||
|
|
||||||
|
api.addPanel({
|
||||||
|
id: 'panel_2',
|
||||||
|
component: 'default',
|
||||||
|
title: 'Panel 2',
|
||||||
|
position: {
|
||||||
|
direction: 'right',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
api.addPanel({
|
||||||
|
id: 'panel_3',
|
||||||
|
component: 'default',
|
||||||
|
title: 'Panel 3',
|
||||||
|
position: {
|
||||||
|
direction: 'below',
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user