Web Components Dock Manager (ドック マネージャー) の概要
Infragistics Web Components Dock Manager は、ペインでアプリケーションのレイアウトを管理する方法を提供します。エンド ユーザーはペインをピン固定、サイズ変更、移動、最大化、非表示にすることでカスタマイズできます。
Web Components ドック マネージャーの例
この例は、アプリケーションで使用できる IgcDockManagerComponent
のほとんどの機能とドッキング オプションを示しています。
EXAMPLE
TS
HTML
DockManagerStyles.css
index.css
import './DockManagerStyles.css'
import { defineCustomElements } from 'igniteui-dockmanager/loader' ;
import { IgcDockManagerPaneType } from 'igniteui-dockmanager' ;
import { IgcSplitPaneOrientation } from 'igniteui-dockmanager' ;
import { IgcDockManagerComponent } from 'igniteui-dockmanager' ;
defineCustomElements();
export class DockManagerOverview {
private dockManager: IgcDockManagerComponent;
constructor ( ) {
this .dockManager = document .getElementById('dockManager' ) as IgcDockManagerComponent;
this .dockManager.layout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Content Pane 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content2' ,
header : 'Unpinned Pane 1' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.documentHost,
size : 200 ,
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
allowEmpty : true ,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 1' ,
contentId : 'content3' ,
documentOnly : true
},
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 2' ,
contentId : 'content4' ,
documentOnly : true
}
]
}
]
}
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content5' ,
header : 'Unpinned Pane 2' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content6' ,
header : 'Tab 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content7' ,
header : 'Tab 2'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content8' ,
header : 'Tab 3'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content9' ,
header : 'Tab 4'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content10' ,
header : 'Tab 5'
}
]
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content11' ,
header : 'Content Pane 2'
}
]
}
]
},
floatingPanes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingHeight : 150 ,
floatingWidth : 250 ,
floatingLocation : { x : 300 , y : 200 },
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content12' ,
header : 'Floating Pane'
}
]
}
]
};
}
}
new DockManagerOverview();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > DockManagerOverview</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<div class ="container sample" >
<igc-dockmanager id ="dockManager" >
<div slot ="content1" class ="dockManagerContent" > Content 1</div >
<div slot ="content2" class ="dockManagerContent" > Content 2</div >
<div slot ="content3" class ="dockManagerContent" > Content 3</div >
<div slot ="content4" class ="dockManagerContent" > Content 4</div >
<div slot ="content5" class ="dockManagerContent" > Content 5</div >
<div slot ="content6" class ="dockManagerContent" > Content 6</div >
<div slot ="content7" class ="dockManagerContent" > Content 7</div >
<div slot ="content8" class ="dockManagerContent" > Content 8</div >
<div slot ="content9" class ="dockManagerContent" > Content 9</div >
<div slot ="content10" class ="dockManagerContent" > Content 10</div >
<div slot ="content11" class ="dockManagerContent" > Content 11</div >
<div slot ="content12" class ="dockManagerContent" > Content 12</div >
</igc-dockmanager >
</div >
</div >
<% if (false) { %><script src ="src/index.ts" > </script > <% } %>
</body >
</html >
html コピー
.dockManagerContent {
padding : 0.5rem ;
height : calc (100% - 1rem );
width : calc (100% - 1rem );
display : flex;
flex-direction : column;
}
css コピー
このサンプルが気に入りましたか? 完全な Ignite UI for Web Componentsツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
ドック マネージャー パッケージをインストールするには、以下のコマンドを実行します。
npm install --save igniteui-dockmanager
cmd
次に defineCustomElements() 関数をインポートして呼び出します。
import { defineCustomElements } from 'igniteui-dockmanager/loader' ;
defineCustomElements();
ts
使用方法
ドック マネージャーをインポートした後、ページに追加できます。
<igc-dockmanager id ="dockManager" >
</igc-dockmanager >
html
ドック マネージャー コンポーネントは ShadowDOM とスロットを使用するため、Internet Explorer 11 および Edge 18 以前 (Chromium 以外のバージョン) などの古いブラウザーではサポートされません。
ドック マネージャーにはペインのレイアウトを説明する layout
プロパティがあります。レイアウトの定義するには、rootPane
プロパティを設定し、子ペインを追加します。以下は、単一のコンテンツ ペインでレイアウトを定義する方法です。
import { IgcDockManagerPaneType, IgcSplitPaneOrientation, IgcDockManagerComponent } from 'igniteui-dockmanager' ;
this .dockManager = document .getElementById("dockManager" ) as IgcDockManagerComponent;
this .dockManager.layout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1'
}
]
}
};
ts
ペインのコンテンツをロードするために、ドック マネージャーはスロット を使用します。コンテンツ要素の slot 属性はレイアウト構成のコンテンツ ペインの contentId
と一致する必要があります。エンドユーザーがペインのサイズを変更する場合は、予測可能な応答のために、コンテンツ要素の幅と高さを 100% に設定することを強くお勧めします。
<igc-dockmanager id ="dockManager" >
<div slot ="content1" style ="width: 100%; height: 100%;" > Content 1</div >
</igc-dockmanager >
html
ドック マネージャーは複数の pane types を定義します。
各タイプのペインには size
プロパティがあります。親の方向に応じて、サイズはペインの幅または高さに影響します。ペインのサイズはその兄弟ペインのサイズに相対し、デフォルトは 100 です。2 つの兄弟ペインがあり、最初のペインのサイズが 200 に設定され、2 番目のペインのサイズが 100 に設定されている場合、最初のペインは 2 番目のペインの 2 倍のサイズになり、これら 2 つのペインが使用可能なスペースをすべて埋めてしまいます。親の絶対サイズが 900px の場合、それぞれ 600px と 300px にサイズ設定されます。特定のペインのサイズをピクセル単位で指定する場合は、使用可能なすべてのスペースの相対的な配分に依存するのではなく、親の分割ペインの useFixedSize
を設定する必要があります。詳細については、分割ペインの固定サイズ モード トピックを参照してください。
エンドユーザーは、ランタイムにレイアウトをカスタマイズするために以下のアクションを実行できます。
ペインをピン設定 / ピン解除します。
ペインをサイズ変更します。
ペインを閉じます。
ペインをフロートさせるためにドラッグします。
フローティング ペインを移動します。
フローティング ペインをドックします。
ペインを最大化します。
これらはすべてドック マネージャーの layout
プロパティに反映されます。
コンテンツ ペイン
IgcContentPane
ヘッダーとコンテンツを含むペインを表します。スプリットされたペインまたはタブ グループ ペイン内でホストできます。以下はコンテンツ ペインの定義方法です。
const contentPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1'
}
ts
header
プロパティはコンテンツ ペインのテキスト ヘッダーを提供するために使用されます。このテキストは複数の場所で描画されます。トップコンテンツペインヘッダー、ペインがタブグループにある場合はタブヘッダー、ペインが固定解除されている場合は固定解除ヘッダーです。headerId
、tabHeaderId
および unpinnedHeaderId
プロパティを使用してそれぞれこれらの場所にカスタム スロット コンテンツを提供できます。これらのプロパティのいずれかが設定されていない場合、header
テキストが使用されます。以下は、タブ ヘッダー スロット コンテンツを提供する方法です。
<igc-dockmanager id ="dockManager" >
<div slot ="content1" style ="width: 100%; height: 100%;" > Content 1</div >
<span slot ="tabHeader1" > Pane 1 Tab</span >
</igc-dockmanager >
html
const contentPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1' ,
tabHeaderId : 'tabHeader1'
}
ts
ペインのピン固定が解除されると、ドック マネージャーのいずれかの端にタブ ヘッダーとして表示されます。エンドユーザーに選択されると、そのコンテンツはドッキングされたピン固定ペインの上に表示されます。コンテンツ ペインのピン固定を解除するには、isPinned
プロパティを false に設定します。
const contentPane = {
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1' ,
isPinned : false
}
ts
isPinned
プロパティはドキュメント ホストの外部にドッキングされているコンテンツ ペインのみに影響します。また、フローティング ペインでホストされているコンテンツ ペインのピン固定を解除することはできません。
デフォルトでは、コンテンツ ペインのピン固定解除先は、ドキュメント ホストに対するペインの相対的な位置に基づいて自動的に計算されます。複数のドキュメント ホストが定義されている場合、ピン固定されていないコンテンツ ペインの親階層で最も近いホストが使用されます。ドキュメント ホストが定義されていない場合、デフォルトの場所 Left
が使用されます。unpinnedLocation
プロパティを使用してピン固定が解除されたペインの行き先を設定することも可能です。
allowClose
、allowPinning
、allowDocking
および allowFloating
プロパティを使用して、コンテンツ ペインで許可されるエンドユーザー操作を設定できます。
コンテンツ ペインを定義するときに、documentOnly
プロパティを true に設定して、ペインをドキュメント ホストにのみドッキングできるようにすることができます。
コンテンツ ペインとそのコンテンツに対するユーザーの操作を制限するには、disabled
プロパティを true に設定します。これにより、単一のフローティング ペインでない限り、すべてのユーザーがペインを操作できなくなります。後者は移動、最大化、または閉じることができるため (最大化および閉じるためのペインの設定に従って)、ユーザーはその下の要素を見ることができますが、そのコンテンツを操作することはできません。
デフォルトでは、ペインを閉じると、layout
オブジェクトから削除されます。ただし、場合によってはペインを一時的に非表示にして後で表示することもできます。layout
オブジェクトを変更せずにそれを行うには、コンテンツペインの hidden
プロパティを使用できます。プロパティを true に設定すると UI から非表示になりますが、layout
オブジェクトに残ります。デフォルトの閉じる動作をオーバーライドするには、このように PaneClose
イベントにサブスクライブできます。
this .dockManager.addEventListener('paneClose' , ev => {
for (const pane of ev.detail.panes) {
pane.hidden = true ;
}
ev.preventDefault();
});
ts
分割ペイン
IgcSplitPane
は、orientation
プロパティに基づいてすべての子 panes
を水平または垂直に積み重ねるコンテナー ペインです。以下は、2 つの子コンテンツ ペインを持つ水平の分割ペインの定義方法です。
const splitPane: IgcSplitPane = {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content2' ,
header : 'Pane 2'
}
]
}
ts
分割ペインは、他のスプリットされたペインを含むすべてのペイン タイプの子ペインを含むことができます。
デフォルトでは、分割ペインが空の場合は表示されません。ただし、その動作を変更したい場合は、allowEmpty
プロパティを true に設定すると、内部にペインがない場合でも、分割ペインが UI に表示されます。
タブ グループ ペイン
IgcTabGroupPane
は、その子コンテンツ panes
をタブ コンポーネントのタブとして表示します。以下は、2 つのタブそれぞれにコンテンツ ペインを持つタブ グループ ペインの定義方法です。
const tabGroupPane: IgcTabGroupPane = {
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Pane 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content2' ,
header : 'Pane 2'
}
]
}
ts
すべてのタブ ヘッダーを表示する十分なスペースがない場合、タブ グループは非表示タブを含む [その他のタブ] メニューを表示します。そのメニューのタブ項目をクリックすると、タブが選択され、最初の位置に移動します。
タブは、それらが配置されているタブ グループから切り離さずに並べ替えることもできます。タブをクリックして、希望の位置まで左または右にドラッグできます。選択したタブをタブ領域の外にドラッグすると、フローティング ペインにデタッチされます。
タブがないときにタブ グループ ペインを UI に表示する場合は、allowEmpty
プロパティを true に設定します。
ドキュメント ホスト
IgcDocumentHost
コード編集やデザイン ビュー用の Visual Studio のタブと同様のドキュメント タブ領域です。以下は、2 つのドキュメント タブを持つドキュメント ホストを定義する方法です。
const docHost: IgcDocumentHost = {
type : IgcDockManagerPaneType.documentHost,
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Grid'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content4' ,
header : 'List'
}
]
}
]
}
}
ts
フローティング ペイン
フローティング ペインは、フローティング ウィンドウで他のペインの上に描画される分割ペインです。フローティング ペインの定義は、layout
の floatingPanes
プロパティに保存されます。以下は、単一のコンテンツ ペインを含むフローティング ペインを追加する方法です。
const layout: IgcDockManagerLayout = {
rootPane : {
},
floatingPanes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingLocation : { x : 80 , y : 80 },
floatingWidth : 200 ,
floatingHeight : 150 ,
floatingResizable : true ,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Floating Pane 1'
}
]
}
]
};
ts
floatingLocation
、floatingWidth
と floatingHeight
プロパティは絶対寸法をピクセル単位で表します。これらのプロパティは、floatingPanes
配列の分割ペインにのみ適用されることに注意してください。
floatingResizable
と allowFloatingPanesResize
を使用して、フローティング ペインのサイズ変更を許可するかどうかを設定できます。allowFloatingPanesResize
は IgcDockManagerComponent プロパティであるため、値が false に設定されている場合、フローティング ペインのサイズを変更することはできません。floatingResizable
プロパティは、floatPanes
配列の各分割ペインに個別に適用できます。プロパティ値が設定されていない場合、デフォルトで allowFloatingPanesResize
プロパティの値になります。floatingResizable
プロパティが特定のペインに設定されている場合、その値は allowFloatingPanesResize
プロパティ値に優先されます。
アクティブ ペイン
ドック マネージャー コンポーネントは、フォーカスを含むコンテンツ ペインをハイライト表示し、activePane
プロパティで公開します。プロパティを設定することによってアクティブ ペインをプログラムで変更できます。ActivePaneChanged
イベントにサブスクライブして、activePane
プロパティの変更をリッスンすることもできます。
this .dockManager.addEventListener('activePaneChanged' , ev => {
console .log(ev.detail.oldPane);
console .log(ev.detail.newPane);
});
ts
ドッキング
フローティング ペインのドラッグを開始すると、ドラッグしたペインの位置に応じて異なるドッキング インジケーターが表示されます。ドッキングには、ルート ドッキング、ペイン ドッキング、ドキュメント ホスト ドッキング、スプリッター ドッキングの 4 つの主なタイプがあります。
ルート ドッキング
このタイプのドッキングでは、ペインをドラッグしているときに、ドックマネージャーの四隅付近に 4 つの矢印ドッキングインジケーターが表示されます。ペインをドロップすると、Dock Manager の rootPane
の直接の子要素になります。視覚的には、新しくドッキングされたペインはそれぞれの端にスナップされ、ドック マネージャーの幅または高さの最大半分を占め、他のすべてのコンテンツは残りの半分に移動します。
ペイン ドッキング
フローティング ペインをコンテンツ ペインまたはタブ グループ ペインの上にドラッグすると、ドッキング インジケーターがペインの中央に表示されます。ペインをドロップすると、ターゲット ペインの任意の側にスナップされるか、ターゲット ペインとグループ化されてタブ付きレイアウトが作成されます。初期レイアウトとドッキング位置の組み合わせにより、ドッキング操作により、ドラッグされたペインとターゲットペインの両方の新しい親となる分割されたペインまたはタブ グループ ペインが動的に作成されることがあります。
ドキュメント ホスト ドッキング
ドラッグしたペインがドキュメント ホストの上にある場合は、ターゲット ペインまたはドキュメント ホスト全体に対するドッキングを可能にする追加のドッキング インジケーターが表示されます。
スプリッター ドッキング
フローティング ペインをドラッグしているときに、マウス カーソルがスプリッターに近づくと、その上にドッキング インジケーターが表示されます。ドラッグしたペインがドッキングされている場合、そのペインは対象のスプリッターを持つ分割ペインの子要素になります。スプリッター ドッキングは、Dock Manager の allowSplitterDock
プロパティを false に設定することで無効にできます。
レイアウトの編集
一部のシナリオでは、ペインの追加または削除、方向の変更などによって、Dock Manager のレイアウトをカスタマイズする必要がある場合があります。次に例を示します。
const splitPane = this .dockManager.layout.rootPane.panes[0 ] as IgcSplitPane;
const contentPane = splitPane.panes[0 ] as IgcContentPane;
this .dockManager.removePane(contentPane);
ts
これは、レイアウト オブジェクトを更新するだけです。Dock Manager の更新をトリガーして変更を UI に反映するには、レイアウト オブジェクトを再割り当てする必要があります。
this .dockManager.layout = { ...this.dockManager.layout };
ts
レイアウトの保存/読み込み
レイアウトを復元または永続化するには、layout
プロパティの値を取得または設定します。以下は、文字列化された JSON としてレイアウトを保存する方法です。
private savedLayout: string ;
private saveLayout ( ) {
this .savedLayout = JSON .stringify(this .dockManager.layout);
}
private loadLayout ( ) {
this .dockManager.layout = JSON .parse(this .savedLayout);
}
ts
実行時にペインを追加する
コンテンツとペインは、実行時に layout
に追加できます。以下の例では、コンテンツ、ドキュメント、およびフローティング ペインを追加する方法を確認できます。
EXAMPLE
TS
HTML
DockManagerStyles.css
index.css
import './DockManagerStyles.css'
import { defineCustomElements } from 'igniteui-dockmanager/loader' ;
import {
IgcContentPane,
IgcDockManagerPaneType,
IgcSplitPane,
IgcSplitPaneOrientation,
IgcTabGroupPane,
IgcDockManagerComponent,
IgcDockManagerPane
} from 'igniteui-dockmanager' ;
defineCustomElements();
export class DockManagerAddContentRuntime {
private dockManager: IgcDockManagerComponent;
private counter: number = 1 ;
private docHostRootPane: IgcSplitPane = {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
allowEmpty : true ,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 1' ,
contentId : 'content3'
},
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 2' ,
contentId : 'content4'
}
]
}
]
};
constructor ( ) {
this .dockManager = document .getElementById('dockManager' ) as IgcDockManagerComponent;
const addContentPaneBtn = document .getElementById('contentPaneBtn' );
const addTabGroupPaneBtn = document .getElementById('tabGroupPaneBtn' );
const addFloatingPaneBtn = document .getElementById('floatingPaneBtn' );
this .dockManager.layout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Content Pane 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content2' ,
header : 'Unpinned Pane 1' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.documentHost,
size : 200 ,
rootPane : this .docHostRootPane
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content5' ,
header : 'Unpinned Pane 2' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content6' ,
header : 'Tab 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content7' ,
header : 'Tab 2'
},
]
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content8' ,
header : 'Content Pane 2'
}
]
}
]
},
floatingPanes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingHeight : 150 ,
floatingWidth : 250 ,
floatingLocation : { x : 300 , y : 200 },
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content9' ,
header : 'Floating Pane'
},
]
},
]
};
addContentPaneBtn!.addEventListener('click' , () => {
const cp: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
contentId : `newContent${this .counter} ` ,
header : `New Pane ${this .counter} ` ,
};
this .dockManager.layout.rootPane.panes.push(cp);
this .attachPane();
})
addTabGroupPaneBtn!.addEventListener('click' , () => {
const cp: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
contentId : `newContent${this .counter} ` ,
header : `New Document ${this .counter} ` ,
};
let tabGroup = this .docHostRootPane.panes.find((p: IgcDockManagerPane ) =>
p.type === IgcDockManagerPaneType.tabGroupPane) as IgcTabGroupPane;
if (tabGroup) {
tabGroup.panes.push(cp);
} else {
const tg: IgcTabGroupPane = {
type : IgcDockManagerPaneType.tabGroupPane,
panes : [cp]
};
this .docHostRootPane.panes.push(tg);
}
this .attachPane();
})
addFloatingPaneBtn!.addEventListener('click' , () => {
const sp: IgcSplitPane = {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingHeight : 150 ,
floatingWidth : 250 ,
floatingLocation : { x : 900 , y : 300 },
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : `newContent${this .counter} ` ,
header : `New Floating Pane ${this .counter} `
},
]
}
this .dockManager.layout.floatingPanes!.push(sp);
this .attachPane();
})
}
private attachPane ( ) {
const content = document .createElement('DIV' );
content.slot = `newContent${this .counter} ` ;
content.innerHTML = 'This pane is added at runtime' ;
this .dockManager.appendChild(content);
this .dockManager.layout = { ...this.dockManager.layout };
this .counter++;
}
}
new DockManagerAddContentRuntime();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > DockManagerAddContentRuntime</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<div class ="container sample" >
<div class ="options horizontal" >
<button id ="contentPaneBtn" > Add content pane</button >
<button id ="tabGroupPaneBtn" > Add document</button >
<button id ="floatingPaneBtn" > Add floating pane</button >
</div >
<igc-dockmanager id ="dockManager" >
<div slot ="content1" > Content 1</div >
<div slot ="content2" > Content 2</div >
<div slot ="content3" > Content 3</div >
<div slot ="content4" > Content 4</div >
<div slot ="content5" > Content 5</div >
<div slot ="content6" > Content 6</div >
<div slot ="content7" > Content 7</div >
<div slot ="content8" > Content 8</div >
<div slot ="content9" > Content 9</div >
</igc-dockmanager >
</div >
</div >
<% if (false) { %><script src ="src/index.ts" > </script > <% } %>
</body >
</html >
html コピー
igc-dockmanager > div {
padding : 0.5rem ;
height : calc (100% - 1rem );
width : calc (100% - 1rem );
display : flex;
flex-direction : column;
}
css コピー
イベント
ドック マネージャー コンポーネントは、ペインを閉じる、ピン固定、サイズ変更、ドラッグするなど、特定のエンドユーザーの操作が実行されるとイベントを発生させます。ドック マネージャーのイベントの完全なリストは、こちら です。
PaneClose
イベントのイベント リスナーを追加する方法は以下の通りです。
this .dockManager.addEventListener('paneClose' , ev => console .log(ev.detail));
ts
EXAMPLE
TS
HTML
DockManagerStyles.css
index.css
import "./DockManagerStyles.css" ;
import { defineCustomElements } from "igniteui-dockmanager/loader" ;
import {
IgcContentPane,
IgcDockManagerComponent,
IgcDockManagerLayout,
IgcDockManagerPaneType,
IgcPaneCloseEventArgs,
IgcSplitPaneOrientation } from "igniteui-dockmanager" ;
defineCustomElements();
export class DockManagerHidePanes {
private dockManager: IgcDockManagerComponent;
private paneSelect: HTMLSelectElement;
private hiddenPanes: IgcContentPane[] = [];
layout: IgcDockManagerLayout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content1" ,
header : "Content Pane 1"
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content2" ,
header : "Unpinned Pane 1" ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.documentHost,
size : 300 ,
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
header : "MainWindow.xaml" ,
contentId : "content3"
},
{
type : IgcDockManagerPaneType.contentPane,
header : "MainWindow.xaml.cs" ,
contentId : "content4"
}
]
}
]
}
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content5" ,
header : "Tab 1"
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content6" ,
header : "Tab 2"
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content7" ,
header : "Tab 3"
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content8" ,
header : "Tab 4"
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content9" ,
header : "Tab 5"
}
]
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content10" ,
header : "Content Pane 2"
}
]
}
]
},
floatingPanes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingHeight : 150 ,
floatingWidth : 250 ,
floatingLocation : { x : 300 , y : 200 },
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : "content11" ,
header : "Floating Pane"
}
]
}
]
};
constructor ( ) {
this .paneSelect = document .getElementById("panes" ) as HTMLSelectElement;
this .dockManager = document .getElementById("dockManager" ) as IgcDockManagerComponent;
this .dockManager.layout = { ...this.layout };
this .dockManager.addEventListener("paneClose" , (ev: CustomEvent<IgcPaneCloseEventArgs> ) => {
this .handlePaneClose(ev);
});
let showOnePane = document .getElementById("showOnePane" );
if (showOnePane) {
showOnePane.addEventListener("click" , () => {this .onClickShowOnePane(); });
}
let showAllPanes = document .getElementById("showAllPanes" );
if (showAllPanes) {
showAllPanes.addEventListener("click" , () => {this .onClickShowAllPanes(); });
}
}
private handlePaneClose (ev: CustomEvent<IgcPaneCloseEventArgs> ) {
for (const pane of ev.detail.panes) {
pane.hidden = true ;
this .setHiddenPane(pane);
if (this .dockManager.maximizedPane)
{
if (this .dockManager.maximizedPane === pane ||
(this .dockManager.maximizedPane.type === IgcDockManagerPaneType.tabGroupPane &&
this .dockManager.maximizedPane.panes.findIndex(() => pane as IgcContentPane) > -1 )) {
this .dockManager.maximizedPane.isMaximized = false ;
this .dockManager.maximizedPane = null ;
}
}
}
ev.preventDefault();
}
private setHiddenPane (pane: IgcContentPane ) {
let option = document .createElement("option" );
option.textContent = pane.header;
this .paneSelect.appendChild(option);
this .hiddenPanes.push(pane);
}
private onClickShowOnePane ( ) {
const index = this .paneSelect.selectedIndex;
if (index >= 0 ) {
this .hiddenPanes[index].hidden = false ;
this .hiddenPanes.splice(index, 1 );
this .paneSelect.removeChild(this .paneSelect.options[index]);
this .dockManager.layout = { ...this.dockManager.layout };
}
}
private onClickShowAllPanes ( ) {
if (this .hiddenPanes.length > 0 ) {
for (const pane of this .hiddenPanes) {
pane.hidden = false ;
}
this .hiddenPanes = [];
this .dockManager.layout = { ...this.dockManager.layout };
this .clearOptions();
}
}
private clearOptions ( ) {
this .paneSelect.options.length = 0 ;
}
}
new DockManagerHidePanes();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > DockManagerHidingPanes</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<div class ="container sample" >
<div class ="options horizontal" >
<label htmlFor ="panes" class ="options-label" style ="margin-top: 0.25rem;" > Hidden Panes:</label >
<select name ="panes" id ="panes" class ="options-text" > </select >
<button id ="showOnePane" type ="button" > Show One Pane</button >
<button id ="showAllPanes" type ="button" > Show All Panes</button >
</div >
<igc-dockmanager id ="dockManager" >
<div slot ="content1" class ="dockManagerContent" > Content 1</div >
<div slot ="content2" class ="dockManagerContent" > Content 2</div >
<div slot ="content3" class ="dockManagerContent" > Content 3</div >
<div slot ="content4" class ="dockManagerContent" > Content 4</div >
<div slot ="content5" class ="dockManagerContent" > Content 5</div >
<div slot ="content6" class ="dockManagerContent" > Content 6</div >
<div slot ="content7" class ="dockManagerContent" > Content 7</div >
<div slot ="content8" class ="dockManagerContent" > Content 8</div >
<div slot ="content9" class ="dockManagerContent" > Content 9</div >
<div slot ="content10" class ="dockManagerContent" > Content 10</div >
<div slot ="content11" class ="dockManagerContent" > Content 11</div >
</igc-dockmanager >
</div >
</div >
<% if (false) { %><script src ="src/index.ts" > </script > <% } %>
</body >
</html >
html コピー .dockManagerContent {
padding : 0.5rem ;
height : calc (100% - 1rem );
width : calc (100% - 1rem );
display : flex;
flex-direction : column;
}
css コピー
カスタマイズ
Dock Manager コンポーネントは、スロットとパーツを使用してすべてのボタンをカスタマイズするオプションを提供します。ボタンを変更するには、Dock Manager 内で独自の要素を定義し、slot 属性を対応する識別子に設定します。
これらのスロットとパーツを使用して、カスタマイズされた Dock Manager レイアウトを作成してみましょう。最初に、closeButton
、maximizeButton
、minimizeButton
、pinButton
、および unpinButton
スロットを使用して独自のアイコンを提供します。
<igc-dockmanager id ="dockManager" >
<div slot ="content1" class ="dockManagerContent" > Content 1</div >
<div slot ="content2" class ="dockManagerContent" > Content 2</div >
<div slot ="content3" class ="dockManagerContent" > Content 3</div >
<button slot ="closeButton" > x</button >
<button slot ="maximizeButton" >
<img src ="https://www.svgrepo.com/show/419558/arrow-top-chevron-chevron-top.svg" alt ="" />
</button >
<button slot ="minimizeButton" >
<img src ="https://www.svgrepo.com/show/419557/bottom-chevron-chevron-down.svg" alt ="" />
</button >
<button slot ="pinButton" >
<img src ="https://www.svgrepo.com/show/154123/pin.svg" alt ="" />
</button >
<button slot ="unpinButton" >
<img src ="https://www.svgrepo.com/show/154123/pin.svg" alt ="" />
</button >
</igc-dockmanager >
html
次に、スタイルシートで公開されたパーツを使用します。このようにして、コンポーネントのスタイル設定を完全に制御できます。
igc-dockmanager::part (unpinned-tab-area) {
background : #bee9ec ;
}
igc-dockmanager::part (unpinned-tab-area--left ) {
border-right : 1px dashed #004d7a ;
}
igc-dockmanager::part (unpinned-tab-area--bottom ) {
border-top : 1px dashed #004d7a ;
}
igc-dockmanager::part (tab-header -close-button ),
igc-dockmanager::part (pane-header -close-button ) {
background-color : #e73c7e ;
}
igc-dockmanager::part (pane-header -pin-button ),
igc-dockmanager::part (pane-header -unpin-button ) {
background : rgb (218 , 218 , 218 );
border : none;
width : 24px ;
height : 24px ;
color : #fff ;
}
igc-dockmanager::part (tabs-maximize-button ),
igc-dockmanager::part (tabs-minimize-button ),
igc-dockmanager::part (pane-header -minimize-button ),
igc-dockmanager::part (pane-header -maximize-button ) {
width : 24px ;
height : 24px ;
border : none;
transition : opacity 250ms ease-in-out;
opacity : 0.3 ;
margin-right : 15px ;
margin-top : -5px ;
margin-left : 0px ;
}
css
すべて適切に設定できると、カスタマイズされたアイコンとタブ領域を持つ DockManager が表示されます。以下は結果です。
EXAMPLE
TS
HTML
DockManagerStyles.css
index.css
import './DockManagerStyles.css'
import { defineCustomElements } from 'igniteui-dockmanager/loader' ;
import { IgcDockManagerPaneType } from 'igniteui-dockmanager' ;
import { IgcSplitPaneOrientation } from 'igniteui-dockmanager' ;
import { IgcDockManagerComponent } from 'igniteui-dockmanager' ;
defineCustomElements();
export class DockManagerButtonsCustomization {
private dockManager: IgcDockManagerComponent;
constructor ( ) {
this .dockManager = document .getElementById('dockManager' ) as IgcDockManagerComponent;
this .dockManager.layout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content1' ,
header : 'Content Pane 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content2' ,
header : 'Unpinned Pane 1' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.documentHost,
size : 200 ,
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
allowEmpty : true ,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 1' ,
contentId : 'content3' ,
documentOnly : true
},
{
type : IgcDockManagerPaneType.contentPane,
header : 'Document 2' ,
contentId : 'content4' ,
documentOnly : true
}
]
}
]
}
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content5' ,
header : 'Unpinned Pane 2' ,
isPinned : false
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 200 ,
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content6' ,
header : 'Tab 1'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content7' ,
header : 'Tab 2'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content8' ,
header : 'Tab 3'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content9' ,
header : 'Tab 4'
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content10' ,
header : 'Tab 5'
}
]
},
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content11' ,
header : 'Content Pane 2'
}
]
}
]
},
floatingPanes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
floatingHeight : 150 ,
floatingWidth : 250 ,
floatingLocation : { x : 300 , y : 200 },
panes : [
{
type : IgcDockManagerPaneType.contentPane,
contentId : 'content12' ,
header : 'Floating Pane'
}
]
}
]
};
}
}
new DockManagerButtonsCustomization();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > DockManagerCustomizeButtons</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<div class ="container sample" >
<igc-dockmanager id ="dockManager" >
<button slot ="closeButton" > x</button >
<button slot ="maximizeButton" >
<img src ="https://www.svgrepo.com/show/419558/arrow-top-chevron-chevron-top.svg" width ="17" height ="17" alt ="" />
</button >
<button slot ="minimizeButton" >
<img src ="https://www.svgrepo.com/show/419557/bottom-chevron-chevron-down.svg" width ="17" height ="17" alt ="" />
</button >
<button slot ="pinButton" >
<img src ="https://www.svgrepo.com/show/154123/pin.svg" width ="17" height ="17" alt ="" />
</button >
<button slot ="unpinButton" >
<img src ="https://www.svgrepo.com/show/154123/pin.svg" width ="17" height ="17" alt ="" />
</button >
<div slot ="content1" class ="dockManagerContent" > Content 1</div >
<div slot ="content2" class ="dockManagerContent" > Content 2</div >
<div slot ="content3" class ="dockManagerContent" > Content 3</div >
<div slot ="content4" class ="dockManagerContent" > Content 4</div >
<div slot ="content5" class ="dockManagerContent" > Content 5</div >
<div slot ="content6" class ="dockManagerContent" > Content 6</div >
<div slot ="content7" class ="dockManagerContent" > Content 7</div >
<div slot ="content8" class ="dockManagerContent" > Content 8</div >
<div slot ="content9" class ="dockManagerContent" > Content 9</div >
<div slot ="content10" class ="dockManagerContent" > Content 10</div >
<div slot ="content11" class ="dockManagerContent" > Content 11</div >
<div slot ="content12" class ="dockManagerContent" > Content 12</div >
</igc-dockmanager >
</div >
</div >
<% if (false) { %><script src ="src/index.ts" > </script > <% } %>
</body >
</html >
html コピー
.dockManagerContent {
padding : 0.5rem ;
height : calc (100% - 1rem );
width : calc (100% - 1rem );
display : flex;
flex-direction : column;
}
igc-dockmanager::part (unpinned-tab-area) {
background : #bee9ec ;
}
igc-dockmanager::part (unpinned-tab-area--left ) {
border-right : 1px dashed #004d7a ;
}
igc-dockmanager::part (unpinned-tab-area--bottom ) {
border-top : 1px dashed #004d7a ;
}
igc-dockmanager::part (tab-header -close-button ),
igc-dockmanager::part (pane-header -close-button ) {
background-color : #e73c7e ;
}
igc-dockmanager::part (context-menu -unpin-button ),
igc-dockmanager::part (pane-header -pin-button ),
igc-dockmanager::part (pane-header -unpin-button ) {
background : rgb (218 , 218 , 218 );
border : none;
width : 24px ;
height : 24px ;
color : #fff ;
}
igc-dockmanager::part (tabs-maximize-button ),
igc-dockmanager::part (tabs-minimize-button ),
igc-dockmanager::part (pane-header -minimize-button ),
igc-dockmanager::part (pane-header -maximize-button ) {
width : 24px ;
height : 24px ;
border : none;
transition : opacity 250ms ease-in-out;
opacity : 0.3 ;
margin-right : 15px ;
margin-top : -5px ;
margin-left : 0px ;
}
css コピー
以下は、すべてのボタンとスプリッター ハンドルのスロット名のリストです。
スロット名
説明
closeButton
閉じるボタン。
paneHeaderCloseButton
ペイン ヘッダーの閉じるボタン。
tabHeaderCloseButton
タブ ヘッダーの閉じるボタン。
moreTabsButton
その他のタブボタン。
moreOptionsButton
その他のオプションボタン。
maximizeButton
最大化ボタン。
minimizeButton
最小化ボタン。
pinButton
ピン固定ボタン。
unpinButton
ピン固定解除ボタン。
splitterHandle
スプリッターのハンドル。
各スロットの対応するパーツは、このページのスタイル設定 セクションの CSS パーツ にあります。
CSS 変数
次の表では、ドック マネージャー コンポーネントのスタイル設定に使用されるすべての CSS 変数について説明します。
CSS 変数
説明
--igc-background-color
ペイン ナビゲーター コンポーネント内のヘッダーの背景色。
--igc-accent-color
フォーカスされているペイン ヘッダー アクション パーツ内のボタンの背景色。
--igc-active-color
アクティブな状態のコンポーネントに使用されるテキストとボックス シャドウの色。
--igc-border-color
ペイン ヘッダー コンポーネントのボーダー下線の色。
--igc-font-family
ドック マネージャー コンポーネントの font-family。
--igc-dock-background
ドック マネージャー、タブ、およびフローティング ペイン コンポーネントの背景色。
--igc-dock-text
ドック マネージャーおよびフローティング ペイン コンポーネントのテキストの色。
--igc-pane-header-background
ペイン ヘッダー コンポーネントの背景色。
--igc-pane-header-text
ペイン ヘッダー コンポーネントのテキストの色。
--igc-pane-content-background
ドック マネージャーおよびタブ パネル コンポーネント内のコンテンツの背景色。
--igc-pane-content-text
ドック マネージャーおよびタブ パネル コンポーネント内のコンテンツのテキストの色。
--igc-tab-text
タブ ヘッダー コンポーネントのテキストの色。
--igc-tab-background
タブ ヘッダー コンポーネントの背景色。
--igc-tab-border-color
タブ ヘッダー コンポーネントの境界線の色。
--igc-tab-text-active
選択したタブ ヘッダー コンポーネントのテキストの色。
--igc-tab-background-active
選択したタブ ヘッダー コンポーネントの背景色。
--igc-tab-border-color-active
選択したタブ ヘッダー コンポーネントのボーダーの色。
--igc-pinned-header-background
ピン固定されていないペイン ヘッダー コンポーネントの背景色。
--igc-pinned-header-text
ピン固定されていないペイン ヘッダー コンポーネントのテキストの色。
--igc-splitter-background
スプリッター コンポーネントの背景色。
--igc-splitter-handle
スプリッター ハンドルの背景色。
--igc-button-text
ペイン ヘッダー アクション パーツ内のボタンの色。
--igc-flyout-shadow-color
コンテンツ ペイン コンポーネントのボックス シャドウの色。
--igc-joystick-background
ジョイスティックとルート ドッキング インジケーター コンポーネントの背景色。
--igc-joystick-border-color
ジョイスティックとルート ドッキング インジケーター コンポーネントのボーダーの色。
--igc-joystick-icon-color
ジョイスティックとルート ドッキング インジケーター コンポーネントのアイコンの色。
--igc-joystick-background-active
ジョイスティックとルート ドッキング インジケーター コンポーネントのホバー背景色。
--igc-joystick-icon-color-active
ジョイスティックとルート ドッキング インジケーター コンポーネントのホバー アイコンの色。
--igc-floating-pane-border-color
フローティング ペインのボーダーの色。
--igc-context-menu-background
コンテキスト メニュー項目の背景色。
--igc-context-menu-background-active
ホバーおよびフォーカス時のコンテキスト メニュー項目の背景色。
--igc-context-menu-color
コンテキスト メニュー項目のテキストの色。
--igc-context-menu-color-active
ホバーおよびフォーカス時のコンテキスト メニュー項目のテキストの色。
--igc-drop-shadow-background
ドロップ シャドウの背景色。
--igc-disabled-color
無効状態のコンポーネントのテキストの色。
キーボード ナビゲーション
キーボード ナビゲーションは、ドック マネージャー のアクセシビリティを強化し、すべてのペインをナビゲートしたり、アクティブなペインをドッキングしてビューを複数の方向に分割したりするなど、エンドユーザーにさまざまな操作を提供します。
ショートカットは以下のとおりです。
ドッキング
Cmd/Ctrl + Shift + ↑ グローバルの上へのドック。
Cmd/Ctrl + Shift + ↓ グローバルの下へのドック。
Cmd/Ctrl + Shift + → グローバルの右へのドック。
Cmd/Ctrl + Shift + ← グローバルのの左へのドック。
Shift + ↑ タブ グループに複数のタブがある場合、ビューが分割され、フォーカスされたタブが上にドッキングされます。
Shift + ↓ タブ グループに複数のタブがある場合、ビューが分割され、フォーカスされたタブが下にドッキングされます。
Shift + → タブ グループに複数のタブがある場合、ビューが分割され、フォーカスされたタブが右にドッキングされます。
Shift + ← タブ グループに複数のタブがある場合、ビューが分割され、フォーカスされたタブが左にドッキングされます。
ナビゲーション
Cmd/Ctrl + F6 または Cmd/Ctrl + → ドキュメント ホストの次のタブにフォーカスします。
Cmd/Ctrl + Shift + F6 または Cmd/Ctrl + ← ドキュメント ホストの前のタブにフォーカスします。
Alt + F6 次のコンテンツ ペインにフォーカスします。
Alt + Shift + F6 前のコンテンツ ペインにフォーカスします。
ペイン ナビゲーター
次のキーボード ショートカットは、ペインやドキュメントをを反復できるナビゲーターを示しています。
Cmd/Ctrl + F7 または Cmd/Ctrl + F8 最初のドキュメントから開始します。
Alt + F7 または Alt + F8 最初のペインから開始します。
Cmd/Ctrl + Shift + F7 または Cmd/Ctrl + Shift + F8 最後のドキュメントから逆方向に開始します。
Alt + Shift + F7 または Alt + Shift + F8 最後のペインから逆方向に開始します。
その他
サンプル demo で上記のすべてのアクションを練習しましょう。
スタイル設定
ドック マネージャーは、シャドウ DOM を使用してスタイルと動作をカプセル化します。その結果、通常の CSS セレクターでその内部要素を単純にターゲットにすることはできません。そのため :: part CSS セレクターでターゲットにできるコンポーネント parts を公開しています。
igc-dockmanager::part (content -pane) {
border-radius : 10px ;
}
css
次の例では、公開した CSS パーツのいくつかを使用してドック マネージャーをカスタマイズする機能を紹介します。
EXAMPLE
DATA
TS
HTML
DockManagerStyles.css
index.css
const template = document .createElement('template' );
template.innerHTML = `
<div class="menu">
<button id="expand-btn" class="expandBtn">
<igc-icon-component name="more" />
</button>
<div id="menu-items">
<button id="pin" class="item">
<span>Unpin</span>
<igc-icon-component name="unpin" />
</button>
<button id="close" class="item">
Close
<igc-icon-component name="close" />
</button>
</div>
</div>
<style>
:host {
--main-color: rgb(227,230,233);
--font-color: rgb(113,115,116);
}
#expand-btn {
margin-top: 7px;
border: none;
background-color: transparent;
color: var(--font-color);
}
#menu-items {
width: 70px;
padding: 10px;
position: absolute;
right: 10px;
z-index: 1;
background-color: var(--main-color);
border-radius: 10px;
display: none;
flex-direction: column;
}
.item {
display: flex;
justify-content: space-between;
width: inherit;
border: none;
background-color: var(--main-color);
color: var(--font-color);
}
.item:hover {
color: rgb(74, 76, 77);
}
</style>
`
export class MenuComponent extends HTMLElement {
shadow : any ;
handlePaneClose: Event;
handlePinPane: Event;
menuItems: HTMLElement;
constructor ( ) {
super ();
this .shadow = this .shadowRoot;
this .shadow = this .attachShadow({mode : 'closed' });
this .shadow.appendChild(template.content.cloneNode(true ));
this .handlePaneClose = new CustomEvent('closePane' , {
bubbles : true ,
cancelable : false
});
this .handlePinPane = new CustomEvent('pinPane' , {
bubbles : true ,
cancelable : false
});
this .menuItems = this .shadow.getElementById('menu-items' );
}
connectedCallback ( ) {
this .shadow.getElementById('expand-btn' ).addEventListener('click' , () => this .expandMenu());
this .shadow.getElementById('pin' ).addEventListener('click' , () => {
this .dispatchEvent(this .handlePinPane);
this .menuItems.style.display = 'none' ;
this .changePinIcon();
});
this .shadow.getElementById('close' ).addEventListener('click' , () => this .dispatchEvent(this .handlePaneClose));
document .addEventListener('click' , (event ) => {
if (event.target !== this ) {
this .menuItems.style.display = 'none'
}
});
}
expandMenu ( ) {
this .menuItems.style.display === '' || this .menuItems.style.display === 'none' ?
(this .menuItems.style.display = 'flex' ) : (this .menuItems.style.display = 'none' );
}
changePinIcon ( ) {
if (this .shadow.getElementById('pin' ).children[1 ].name === 'unpin' ) {
this .shadow.getElementById('pin' ).children[1 ].name = 'pin' ;
this .shadow.getElementById('pin' ).children[0 ].innerText = 'Pin' ;
} else {
this .shadow.getElementById('pin' ).children[1 ].name = 'unpin' ;
this .shadow.getElementById('pin' ).children[0 ].innerText = 'Unpin' ;
}
}
}
ts コピー import "./DockManagerStyles.css" ;
import { MenuComponent } from "./menu-component" ;
import { defineCustomElements } from "igniteui-dockmanager/loader" ;
import { IgcContentPane, IgcDockManagerComponent, IgcDockManagerLayout, IgcDockManagerPaneType, IgcSplitPaneOrientation } from "igniteui-dockmanager" ;
defineCustomElements();
window .customElements.define("menu-component" , MenuComponent);
import {
defineComponents,
IgcAvatarComponent,
IgcButtonComponent,
IgcListComponent,
IgcListHeaderComponent,
IgcListItemComponent,
IgcRadioComponent,
IgcRadioGroupComponent,
IgcCardComponent,
IgcCardHeaderComponent,
IgcCardContentComponent,
IgcCardMediaComponent,
IgcCardActionsComponent,
IgcRippleComponent,
registerIconFromText,
IgcIconButtonComponent,
IgcIconComponent
} from "igniteui-webcomponents" ;
import 'igniteui-webcomponents/themes/light/bootstrap.css' ;
defineComponents(
IgcAvatarComponent,
IgcButtonComponent,
IgcListComponent,
IgcListHeaderComponent,
IgcListItemComponent,
IgcRadioComponent,
IgcRadioGroupComponent,
IgcCardComponent,
IgcCardHeaderComponent,
IgcCardContentComponent,
IgcCardMediaComponent,
IgcCardActionsComponent,
IgcRippleComponent,
IgcIconButtonComponent,
IgcIconComponent
);
export class DockManagerStylePanes {
private dockManager: IgcDockManagerComponent;
private arrowDown = '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 10l5 5 5-5H7z"/></svg>' ;
private arrowUp = '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 14l5-5 5 5H7z"/></svg>' ;
private maxWidth = 1200 ;
private minWidth = 800 ;
private accountPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
header : "ACCOUNTS" ,
contentId : "content1" ,
headerId : "accountHeader" ,
floatingHeaderId : "accountFloatingHeader" ,
isPinned : true ,
allowMaximize : false ,
allowClose : false ,
allowPinning : false
};
private cardsPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
header : "PHYSICAL CARDS" ,
contentId : "content5" ,
headerId : "cardsHeader" ,
floatingHeaderId : "cardsFloatingHeader" ,
isPinned : true ,
allowMaximize : false ,
allowPinning : false ,
allowClose : false
};
private transactionsPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
header : "TRANSACTIONS" ,
contentId : "content3" ,
headerId : "transactionsHeader" ,
floatingHeaderId : "transactionsFloatingHeader" ,
isPinned : true ,
allowMaximize : false ,
allowClose : false ,
allowPinning : false
};
private popularStocksPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
header : "POPULAR STOCKS" ,
contentId : "content4" ,
floatingHeaderId : "popularStocksFloatingHeader" ,
headerId : "popularStocksHeader" ,
isPinned : true ,
allowMaximize : false ,
allowPinning : false ,
allowClose : false
};
private topMoversPane: IgcContentPane = {
type : IgcDockManagerPaneType.contentPane,
header : "TODAY'S TOP MOVERS" ,
contentId : "content2" ,
headerId : "todayTopMovers" ,
floatingHeaderId : "todayTopMoversFloatingHeader" ,
isPinned : true ,
allowMaximize : false ,
allowClose : false ,
allowPinning : false
};
layout: IgcDockManagerLayout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
size : 300 ,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [this .accountPane, this .cardsPane]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [this .transactionsPane]
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
size : 130 ,
panes : [this .topMoversPane]
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 200 ,
panes : [this .popularStocksPane]
}
]
},
floatingPanes : []
};
layout1: IgcDockManagerLayout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
size : 300 ,
panes : [
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 100 ,
panes : [this .accountPane, this .cardsPane]
},
this .transactionsPane
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
size : 300 ,
panes : [this .popularStocksPane]
}
]
},
{
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.horizontal,
size : 130 ,
panes : [this .topMoversPane]
}
]
}
]
}
};
layout2: IgcDockManagerLayout = {
rootPane : {
type : IgcDockManagerPaneType.splitPane,
orientation : IgcSplitPaneOrientation.vertical,
panes : [
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 200 ,
panes : [this .accountPane, this .cardsPane, this .transactionsPane]
},
{
type : IgcDockManagerPaneType.tabGroupPane,
size : 300 ,
panes : [this .popularStocksPane, this .topMoversPane]
}
]
}
};
layouts:IgcDockManagerLayout[] = [];
index = 0 ;
newIndex = -1 ;
constructor ( ) {
this .layouts = [this .layout, this .layout1, this .layout2];
this .dockManager = document .getElementById("dockManager" ) as IgcDockManagerComponent;
this .handleLayoutViews(document .body.clientWidth);
this .dockManager.addEventListener("closePane" , () => this .handleClosePane());
this .dockManager.addEventListener("pinPane" , () => this .handlePinPane());
document .getElementById("close" )!.addEventListener("click" , () => this .handleClosePane());
registerIconFromText("arrow-down" , this .arrowDown, "material" );
registerIconFromText("arrow-up" , this .arrowUp, "material" );
document .defaultView!.addEventListener("resize" , () => this .handleLayoutViews(this .dockManager.offsetWidth));
document .querySelectorAll(".closeButton" ).forEach((closeBtn ) => {
closeBtn.addEventListener("click" , () => this .handleClosePane());
});
}
handleClosePane ( ) {
this .dockManager.activePane.hidden = true ;
this .dockManager.layout = { ...this.dockManager.layout };
}
handlePinPane ( ) {
this .dockManager.activePane.isPinned = !this .dockManager.activePane.isPinned;
this .dockManager.layout = { ...this.dockManager.layout };
}
handleLayoutViews (width: number ) {
if (width > this .maxWidth) {
this .index = 0 ;
}
if (width <= this .maxWidth) {
this .index = 1 ;
}
if (width <= this .minWidth) {
this .index = 2 ;
}
this .setLayoutView(this .layouts[this .index]);
this .newIndex = this .index;
}
setLayoutView (layout: IgcDockManagerLayout ) {
if (this .index !== this .newIndex) {
if (this .dockManager.activePane) {
this .dockManager.focus();
}
this .dockManager.layout = JSON .parse(JSON .stringify(layout));
}
}
}
new DockManagerStylePanes();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > DockManagerStyling</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<igc-dockmanager id ="dockManager" >
<div slot ="accountHeader" class ="header" >
<span > ACCOUNTS</span >
<menu-component > </menu-component >
</div >
<div slot ="accountFloatingHeader" class ="floatingHeader" >
<span > ACCOUNTS</span >
<button id ="close" class ="closeButton" >
<igc-icon-component name ="close" />
</button >
</div >
<div class ="dockManagerFull" slot ="content1" >
<igc-card style ="overflow-y: auto;" elevated >
<igc-card-content >
<div class ="account-content" >
<div >
<h1 > $2980.00</h1 >
<span style ="font-size: 12pt;" > United States Dollar</span >
</div >
<igc-avatar style ="margin: 0.5rem;" class ="size-medium" src ="https://static.infragistics.com/xplatform/images/flags/USA.png"
shape ="rounded" > USA</igc-avatar >
</div >
</igc-card-content >
<igc-card-actions >
<div >
<igc-button variant ="fab" class ="size-medium" slot ="start" >
Add Money
</igc-button >
<igc-button variant ="fab" class ="size-medium" slot ="start" >
Send
</igc-button >
</div >
</igc-card-actions >
</igc-card >
</div >
<div slot ="todayTopMovers" class ="header" >
<span > TODAY'S TOP MOVERS</span >
<menu-component > </menu-component >
</div >
<div slot ="todayTopMoversFloatingHeader" class ="floatingHeader" >
<span > TODAY'S TOP MOVERS</span >
<button id ="close" class ="closeButton" >
<igc-icon-component name ="close" />
</button >
</div >
<div class ="dockManagerFull" slot ="content2" style ="overflow-y: auto;" >
<div class ="top-movers-content size-large" >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/tesla.png" shape ="circle" > TSLA</igc-avatar >
<span > 1017,08$</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 12,54%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/amc.png" shape ="circle" > AMC</igc-avatar >
<span > 39,33$</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 12,72%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/canoo.png" shape ="circle" > GOEV</igc-avatar >
<span > 12,33$</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 45,92%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/lucid.png" shape ="circle" > LCID</igc-avatar >
<span > 58,14$</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 29,42%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/nio.png" shape ="circle" > NIO</igc-avatar >
<span > 21,67$</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 7,25%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/stoneco.png" shape ="circle" > STNE</igc-avatar >
<span > 22,48$</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 28,68%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/roku.png" shape ="circle" > ROKU</igc-avatar >
<span > 249,35$</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 9,5%</div >
</div >
<div class ="top-move-stock-item" >
<igc-avatar src ="https://static.infragistics.com/xplatform/images/company/maxar.png" shape ="circle" > MAXR</igc-avatar >
<span > 33,14$</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 8,12%</div >
</div >
</div >
</div >
<div slot ="transactionsHeader" class ="header" >
<span > TRANSACTIONS</span >
<menu-component > </menu-component >
</div >
<div slot ="transactionsFloatingHeader" class ="floatingHeader" >
<span > TRANSACTIONS</span >
<button id ="close" class ="closeButton" >
<igc-icon-component name ="close" />
</button >
</div >
<div class ="dockManagerFull" slot ="content3" >
<igc-list id ="list" style ="overflow-y: auto;" >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/cash-2.svg" shape ="circle" > AMZN</igc-avatar >
<h2 slot ="title" > Money added via **0000</h2 >
<span slot ="subtitle" > 14:40</span >
<div slot ="end" class ="stock-price" >
<span > + 2000$</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/cash-only.svg" shape ="circle" > SET</igc-avatar >
<h2 slot ="title" > Sports Event Tickets</h2 >
<span slot ="subtitle" > Jun 21, 06:15, Declined because your card is inactive</span >
<div slot ="end" class ="stock-price" >
<span style ="text-decoration: line-through;" > 1017,08 $</span >
<span style ="color: lightgray;" > 900,08 $</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/cash-only.svg" shape ="circle" > AT</igc-avatar >
<h2 slot ="title" > Airplane Tickets</h2 >
<span slot ="subtitle" > Jun 21, 06:15, Declined because your card is inactive</span >
<div slot ="end" class ="stock-price" >
<span style ="text-decoration: line-through;" > 985,00 $</span >
<span style ="color: lightgray;" > 980,00 $</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/building.svg" shape ="circle" > H</igc-avatar >
<h2 slot ="title" > Hotel</h2 >
<span slot ="subtitle" > Jun 21, 06:15</span >
<div slot ="end" class ="stock-price" >
<span > - 400,00 $</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/atm.svg" shape ="circle" > ATM</igc-avatar >
<h2 slot ="title" > Cash at ATM 000000</h2 >
<span slot ="subtitle" > 14:40</span >
<div slot ="end" class ="stock-price" >
<span > - 140$</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/cash-1.svg" shape ="circle" > U</igc-avatar >
<h2 slot ="title" > Utilities</h2 >
<span slot ="subtitle" > 21/06/2021 16:00</span >
<div slot ="end" class ="stock-price" >
<span > - 200$</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/atm.svg" shape ="circle" > ATM</igc-avatar >
<h2 slot ="title" > Cash at ATM 000001</h2 >
<span slot ="subtitle" > 10:10</span >
<div slot ="end" class ="stock-price" >
<span > - 280$</span >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/cash-2.svg" shape ="circle" > MA</igc-avatar >
<h2 slot ="title" > Money added via **0000</h2 >
<span slot ="subtitle" > 14:40</span >
<div slot ="end" class ="stock-price" >
<span > + 2000$</span >
</div >
</igc-list-item >
</igc-list >
</div >
<div slot ="popularStocksHeader" class ="header" >
<span > POPULAR STOCKS</span >
<menu-component > </menu-component >
</div >
<div slot ="popularStocksFloatingHeader" class ="floatingHeader" >
<span > POPULAR STOCKS</span >
<button id ="close" class ="closeButton" >
<igc-icon-component name ="close" />
</button >
</div >
<div class ="dockManagerFull" slot ="content4" >
<igc-list id ="list" style ="overflow-y: auto;" >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/tesla.png" shape ="circle" > TSLA</igc-avatar >
<h2 slot ="title" > Tesla</h2 >
<span slot ="subtitle" > TSLA - Electric Vehicles</span >
<div slot ="end" class ="stock-price" >
<span > 1017,08 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 12,54%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/apple.png" shape ="circle" > APPL</igc-avatar >
<h2 slot ="title" > Apple</h2 >
<span slot ="subtitle" > APPL - iPhones and Macs</span >
<div slot ="end" class ="stock-price" >
<span > 150,47 $</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 0,2%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/nio.png" shape ="circle" > NIO</igc-avatar >
<h2 slot ="title" > NIO</h2 >
<span slot ="subtitle" > NIO - Electric Vehicles</span >
<div slot ="end" class ="stock-price" >
<span > 40,07 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 7,25%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/amazon.png" shape ="circle" > AMZN</igc-avatar >
<h2 slot ="title" > Amazon</h2 >
<span slot ="subtitle" > AMZN - E-Commerce</span >
<div slot ="end" class ="stock-price" >
<span > 3582,32 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 2,68%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/gme.png" shape ="circle" > GME</igc-avatar >
<h2 slot ="title" > Game Stop</h2 >
<span slot ="subtitle" > GME - Video Games Retail</span >
<div slot ="end" class ="stock-price" >
<span > 205,60 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 5,96%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/amc.png" shape ="circle" > AMC</igc-avatar >
<h2 slot ="title" > AMC</h2 >
<span slot ="subtitle" > AMC - Entertainment</span >
<div slot ="end" class ="stock-price" >
<span > 39,33 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 12,72%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/microsoft.png" shape ="circle" > MSFT</igc-avatar >
<h2 slot ="title" > Microsoft</h2 >
<span slot ="subtitle" > MSFT - Tech Giant</span >
<div slot ="end" class ="stock-price" >
<span > 335,66 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 0,39%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/spce.png" shape ="circle" > SPCE</igc-avatar >
<h2 slot ="title" > Virgin Galactic</h2 >
<span slot ="subtitle" > SPCE - Space Tourism</span >
<div slot ="end" class ="stock-price" >
<span > 18,90 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 1,66%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/pfizer.png" shape ="circle" > PFE</igc-avatar >
<h2 slot ="title" > Pfizer</h2 >
<span slot ="subtitle" > PFE - Pharmaceuticals</span >
<div slot ="end" class ="stock-price" >
<span > 49,43 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 0,60%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/google.png" shape ="circle" > GOOGL</igc-avatar >
<h2 slot ="title" > Alpabet (Class A)</h2 >
<span slot ="subtitle" > GOOGL - Tech Giant</span >
<div slot ="end" class ="stock-price" >
<span > 2972,88 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 0,02%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/meta.png" shape ="circle" > FB</igc-avatar >
<h2 slot ="title" > Meta Platforms</h2 >
<span slot ="subtitle" > FB - Tech Giant</span >
<div slot ="end" class ="stock-price" >
<span > 347,86 $</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 2,04%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/palantir.png" shape ="circle" > PLTR</igc-avatar >
<h2 slot ="title" > Palantir</h2 >
<span slot ="subtitle" > PLTR - Data Analytics</span >
<div slot ="end" class ="stock-price" >
<span > 23,30 $</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 2,06%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/aa.png" shape ="circle" > AAL</igc-avatar >
<h2 slot ="title" > American Airlines</h2 >
<span slot ="subtitle" > AAL - Airline Service</span >
<div slot ="end" class ="stock-price" >
<span > 20,45 $</span >
<div class ="stock-item-movement-up" > <igc-icon name ="arrow-up" collection ="material" > </igc-icon > 0.79%</div >
</div >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://static.infragistics.com/xplatform/images/company/netflix.png" shape ="circle" > NFLX</igc-avatar >
<h2 slot ="title" > Netflix</h2 >
<span slot ="subtitle" > NFLX - TV Streaming</span >
<div slot ="end" class ="stock-price" >
<span > 679,39 $</span >
<div class ="stock-item-movement-down" > <igc-icon name ="arrow-down" collection ="material" > </igc-icon > 0,47%</div >
</div >
</igc-list-item >
</igc-list >
</div >
<div slot ="cardsHeader" class ="header" >
<span > PHYSICAL CARDS</span >
<menu-component > </menu-component >
</div >
<div slot ="cardsFloatingHeader" class ="floatingHeader" >
<span > TODAY'S TOP MOVERS</span >
<button id ="close" class ="closeButton" >
<igc-icon-component name ="close" />
</button >
</div >
<div class ="dockManagerFull" slot ="content5" >
<igc-card style ="overflow-y: auto;" elevated >
<igc-card-content >
<igc-button class ="size-small" variant ="flat" class ="add-card-btn" >
+ Add Card
</igc-button >
<igc-list id ="list" style ="overflow-y: auto;" >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/mastercard.svg" shape ="circle" > MC</igc-avatar >
<h2 slot ="title" > Standard **0000</h2 >
<span slot ="subtitle" > Expires on 11/26</span >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/visa.svg" shape ="circle" > VISA</igc-avatar >
<h2 slot ="title" > Rose gold **0000</h2 >
<span slot ="subtitle" > Expires on 11/24</span >
</igc-list-item >
<igc-list-item >
<igc-avatar slot ="start" src ="https://raw.githubusercontent.com/IgniteUI/material-icons-extended/363c7f3e2da72df5fc2eb63b762a4e69f6fbc603/src/svgs/visa.svg" shape ="circle" > VISA</igc-avatar >
<h2 slot ="title" > Virtual card **0000</h2 >
<span slot ="subtitle" > Expires on 10/22</span >
</igc-list-item >
</igc-list >
</igc-card-content >
</igc-card >
</div >
</igc-dockmanager >
</div >
<% if (false) { %>
<script src ="src/index.ts" > </script >
<% } %>
</body >
</html >
html コピー :root {
--main -color : rgb (227 ,230 ,233 );
--secondary-color : rgb (113 ,115 ,116 );
--white: #ffffff ;
--font -color : rgb (113 ,115 ,116 );
display : flex;
flex-direction : column;
height : 100% ;
}
igc-dockmanager {
background-color : var (--main-color);
padding : 20px ;
}
igc-dockmanager::part (pane-header ) {
background-color : var (--white);
border-bottom : 2px solid var (--main-color);
}
igc-dockmanager::part (pane-header active) {
font-weight : 700 ;
color : var (--secondary-color);
box-shadow : none;
border-bottom : 2px solid var (--secondary-color);
}
igc-dockmanager::part (pane-header -content ) {
color : rgba (104 , 97 , 97 , 0.938 );
}
igc-dockmanager::part (splitter) {
flex : 0 0 15px ;
}
igc-dockmanager::part (splitter-base) {
background : transparent;
}
igc-dockmanager::part (splitter-base)::after {
content : none;
}
igc-dockmanager::part (content -pane) {
border-radius : 10px ;
}
igc-dockmanager::part (tab-header bottom ) {
border-bottom-right-radius : 10px ;
border-bottom-left-radius : 10px ;
background-color : var (--main-color);
}
igc-dockmanager::part (tab-header active selected bottom ) {
font-weight : 700 ;
color : var (--secondary-color);
box-shadow : inset 0 2px 0 0 var (--secondary-color);
}
igc-dockmanager::part (tab-strip-area bottom ) {
border-radius : 0 0 10px 10px ;
border-bottom : 2px solid var (--main-color);
background-color : var (--white);
}
igc-dockmanager::part (tab-strip-actions bottom ) {
display : none;
}
igc-dockmanager::part (tabs-content ) {
border-radius : 10px 10px 0 0 ;
background-color : var (--white);
}
igc-dockmanager::part (root-docking-indicator),
igc-dockmanager::part (docking-indicator) {
background-color : rgba (49 , 45 , 49 , 0.733 );
color : var (--white);
border : none;
border-radius : 5px ;
margin : 2px
}
igc-dockmanager::part (docking-preview) {
background-color : var (--main-color);
opacity : 0.7 ;
}
igc-dockmanager::part (unpinned-pane-header ) {
border-radius : 5px ;
margin-bottom : 5px ;
box-shadow : inset 0 2px 0 0 var (--secondary-color);
background-color : var (--white);
}
igc-dockmanager::part (floating-window) {
border-radius : 10px ;
}
.header {
display : flex;
flex-direction : row;
justify-content : space-between;
}
.floatingHeader {
display : flex;
justify-content : space-between;
}
.dockManagerFull {
padding : 0rem ;
margin : 0rem ;
height : 100% ;
width : 100% ;
display : flex;
flex-direction : column;
overflow : hidden;
}
.closeButton {
width : inherit;
border : none;
background : transparent;
color : var (--font-color);
font-size : 14px ;
}
.stock-price {
display : flex;
flex-direction : column;
align-items : flex-end;
}
.stock-item-movement-up {
display : flex;
color : rgb (0 ,153 ,255 );
}
.stock-item-movement-down {
display : flex;
color : rgb (233 , 80 , 164 );
}
igc-avatar::part (image) {
background-color : white;
}
igc-card {
height : inherit;
}
igc-card-content {
padding-top : 5px ;
padding-bottom : 0px ;
}
.account-content {
display : flex;
flex-direction : row;
justify-content : space-between;
}
.top-movers-content {
margin : 0 auto;
width : 100% ;
display : grid;
grid-template-columns : repeat (auto-fit, 150px );
justify-content : space-evenly;
}
.top-move-stock-item {
margin : 1rem ;
display : flex;
flex-direction : column;
align-items : center;
}
.add-card-btn {
display : flex;
justify-content : flex-end;
margin-bottom : 0.5rem ;
}
.size-small {
--ig-size: var (--ig-size-small);
}
.size-medium {
--ig-size: var (--ig-size-medium);
}
.size-large {
--ig-size: var (--ig-size-large);
}
css コピー
CSS パーツ
パーツ名
説明
content-pane
コンテンツ ペイン コンポーネント。
pane-header
コンテンツ ペインのヘッダー コンポーネント。
pane-header-content
コンテンツ ペイン ヘッダーのコンテンツ領域。
pane-header-actions
コンテンツ ペイン ヘッダーのアクション領域。
active
アクティブ状態を示します。pane-header
、pane-header-content
、pane-header-actions
、tab-header
に適用されます。
floating
フローティング ペインの配置を示します。pane-header
、pane-header-content
、pane-header-actions
に適用されます。
window
フローティング ウィンドウの配置を示します。pane-header
、pane-header-content
、pane-header-actions
に適用されます。
split-pane
スプリット ペイン コンポーネント。
splitter
サイズ変更スプリッター コンポーネント。
splitter-base
スプリッター コンポーネントの基本要素。
splitter-ghost
スプリッター コンポーネントのゴースト要素。
unpinned-pane-header
固定されていないペイン ヘッダー コンポーネント。
tab-header
タブ ヘッダー コンポーネント。
tab-header-more-options-button
タブ ヘッダーのその他のオプション ボタン。
tab-header-close-button
タブ ヘッダーの閉じるボタン。
selected
選択状態を示します。tab-header
および tab-header-close-button
に適用されます。
hovered
ホバー状態を示します。tab-header-close-button
に適用されます。
header-title
タブ ヘッダーのテキスト タイトル。
tab-strip-area
タブ ヘッダーを含むタブ ストリップ領域。
tab-strip-actions
タブ アクションを含むタブ ストリップ領域。
top
タブの上位置を示します。tab-header
、tab-strip-area
、tab-strip-actions
に適用されます。
bottom
タブの下位置を示します。tab-header
、tab-strip-area
、tab-strip-actions
に適用されます。
context-menu
コンテキスト メニュー コンポーネント。
context-menu-item
コンテキスト メニュー コンポーネントの項目。
docking-preview
ドッキング プレビュー地域。
docking-indicator
非ルート ドッキング インジケーター。
root-docking-indicator
ルート ドッキング インジケーター。
splitter-docking-indicator
スプリッター ドッキング インジケーター。
pane-navigator
ペイン ナビゲーター コンポーネント。
pane-navigator-header
ペイン ナビゲーターのヘッダー領域。
pane-navigator-body
ペイン ナビゲーターの本体領域。
pane-navigator-items-group
ペイン ナビゲーター コンポーネントの項目グループ。
pane-navigator-items-group-title
ペイン ナビゲーターの項目グループのタイトル要素。
pane-navigator-item
ペイン ナビゲーターの項目。
pane-header-close-button
ペイン ヘッダーの閉じるボタン。
pane-header-maximize-button
ペイン ヘッダーの最大化ボタン。
pane-header-minimize-button
ペイン ヘッダーの最小化ボタン。
pane-header-pin-button
ペイン ヘッダーのピン固定ボタン。
pane-header-unpin-button
ペイン ヘッダーのピン固定解除ボタン。
tabs-maximize-button
タブの最大化ボタン。
tabs-minimize-button
タブの最小化ボタン。
tabs-more-button
その他のタブ ボタン。
context-menu-unpin-button
コンテキスト メニューのピン固定解除ボタン。
context-menu-close-button
コンテキスト メニューの閉じるボタン。
splitter-handle
スプリッターのハンドル。
horizontal
水平位置を示します。splitter-handle
に適用されます。
vertical
垂直位置を示します。splitter-handle
に適用されます。
テーマ
ドック マネージャーには、light (明るい) テーマと dark (暗い) テーマがあります。Light テーマがデフォルトです。Dark に変更するには、igc.themes.css ファイルを css にインポートし、dark-theme クラスをドック マネージャーまたはその親に追加します。
@import '~igniteui-dockmanager/dist/collection/styles/igc.themes' ;
scss
<igc-dockmanager class ="dark-theme" >
html
ローカライズ
ドック マネージャー コンポーネントは、コンテキスト メニュー、ツールチップ、および aria 属性で使用される文字列のローカライズをサポートします。デフォルトでは、ドック マネージャー はその親の lang 属性を検索してページの言語を検出します。lang 属性が設定されていないか、ドック マネージャーがサポートしない値に設定されている場合、デフォルトの言語は 英語 (en) です。ドック マネージャーは、英語 (en) 、日本語 (jp) 、韓国語 (ko) 、スペイン語 (es) の組み込みローカライズ文字列を提供します。その他の言語のリソース文字列を提供するには、addResourceStrings メソッドを使用します。
import { addResourceStrings } from 'igniteui-dockmanager' ;
const dockManagerStringsFr: IgcDockManagerResourceStrings = {
close : 'Fermer' ,
};
addResourceStrings('fr' , dockManagerStringsFr);
ts
ドック マネージャーは、文字列を変更できる resourceStrings
プロパティを公開します。resourceStrings
プロパティを設定すると、ドック マネージャーはどの lang 属性が設定されていても文字列を使用します。
API リファレンス