Angular タブ・ピル・アコーディオンコンポーネント | ng-hub-ui-panels

タブ、ピル、アコーディオンとしてレンダリングできる Angular コンテンツパネルコンポーネント。Router、リアクティブフォーム、キーボード操作、CSS 変数に対応します。

API リファレンス

panels の完全な仕様をここにまとめました。バインド、リッスン、プロジェクション、テーマ設定ができるすべてが一か所に集約されています。必要なものを接続し、好きなようにスタイリングしてください — standalone で signal フレンドリーです。

インプット

20 個のインプットで panels を調整。通常の Angular @Input と同じようにバインドできます。

名前デフォルト説明
type'tabs' | 'pills' | 'accordion' | 'card''tabs'コンテナの表示形式: 下線付きタブ、角丸ピル、または積み重なったアコーディオンパネル。
verticalbooleanfalseヘッダーストリップをコンテンツの横に垂直に積み重ねます(tabs/pills ビュー)。
justifiedbooleanfalseヘッダーを引き伸ばし、利用可能な幅を均等に分け合います。
scrollablebooleanfalseヘッダーストリップがあふれたときに、前後へのスクロールボタンを追加します。
isKeysAllowedbooleantrueキーボードナビゲーションを有効にします(矢印 / Home / End / Delete)。
multiplebooleanfalse複数のパネルを同時にアクティブにできます。アコーディオンビューではすべてが展開されます。tabs/pills ビューでは、各アクティブヘッダーが表示パネルブロックを開始し、それに続く非アクティブヘッダーは、次のアクティブヘッダーが新しいブロックを開始するまで、そのブロックの上にグループ化されたまま残ります。フォーム値は配列になります。
flushbooleanfalseアコーディオンビュー: 外側のボーダーや角丸のない端から端までのパネル。
bindValuestringundefined発行されるフォーム値を取得するために各パネルの値に適用されるドット記法のパス(例: 'meta.key')。
compareWith(a: unknown, b: unknown) => boolean(a, b) => a === bフォーム値とパネル値を照合するために使用される等価判定。
headingstringundefinedhub-panel: プレーンテキストのヘッダー。hubPanelHeading テンプレートが指定されている場合は無視されます。
appearance'card' | 'alert''card'hub-panel: 単独パネルの外観 — 'card'(既定)またはセマンティックな 'alert'。tabs/pills/accordion 表示では無視されます。
variant'primary' | 'success' | 'danger' | 'warning' | 'info'undefinedhub-panel: アラートのセマンティックカラー('primary' | 'success' | 'danger' | 'warning' | 'info')。中立的なアラートでは省略します。
valueunknownidhub-panel: コンテナがフォームコントロールとして使用されるときに提供される値。
activeboolean (model)falsehub-panel: 双方向バインドされた active/expanded 状態。
disabledbooleanfalsehub-panel: パネルがアクティブ化されるのを防ぎます。
removablebooleanfalsehub-panel: ✕ のアフォーダンスを表示し、Delete キーでの削除を有効にします。
routerLinkstring | string[]undefinedhub-panel: パネルを <router-outlet> に支えられたルーティングパネルに変換します。
queryParamsParamsundefinedhub-panel: routerLink へのナビゲーション時に付加されるクエリパラメータ。
pathMatch'route' | 'full''route'hub-panel: ルーティングパネルをアクティブとしてマークするために使用される URL の比較。
customClassstringundefinedhub-panel: nav 項目とペインの両方に適用される追加の CSS クラス。

アウトプット

panels の動作に反応 — ロジックを接続できる 4 個のイベント。

名前説明
panelChangeEventEmitter<PanelChangeEvent>hub-panels: ユーザーが別のパネルをアクティブ化(オープン)したときに発行されます。{ current, prev } を提供します。
selectPanelEventEmitter<PanelComponent>hub-panel: パネルがアクティブになったときに発行されます。
deselectPanelEventEmitter<PanelComponent>hub-panel: パネルがアクティブでなくなったときに発行されます。
removedEventEmitter<PanelComponent>hub-panel: パネルが ✕ ボタンまたは Delete キーで削除されたときに発行されます。

テンプレート

自分好みに — 3 個のテンプレートスロットでカスタムマークアップをプロジェクションできます。

名前説明サンプル
hubPanelHeadinghub-panel 内の <ng-template> を、そのパネルのカスタムヘッダー(tabs/pills ではストリップリンク、アコーディオンでは開閉ボタン)として指定し、プレーンテキストの heading 入力を置き換えます。<hub-panel> <ng-template hubPanelHeading> <i class="fa-solid fa-gear"></i> Settings <span class="badge text-bg-primary">3</span> </ng-template> Panel content </hub-panel>
hubPanelHeader / hubPanelFooterhub-panel 内の要素をパネルコンテンツのヘッダー/フッター帯として指定します。すべてのビュー(tabs、pills、accordion、card)で表示され、hubPanelHeading とは異なります。<hub-panel> <div hubPanelHeader>Card title</div> Card content <div hubPanelFooter>Actions</div> </hub-panel>
type="card"装飾のないカード表示:ナビゲーション帯がなく、すべてのパネルが常に表示されます。hub-panel は hub-panels の外で単独でも使用でき、その場合はカードとして表示されます。<hub-panels type="card"> <hub-panel>…</hub-panel> <hub-panel>…</hub-panel> </hub-panels>

CSS 変数

36 個の CSS 変数であらゆるピクセルをテーマ設定。:root で上書きするか、ラッパーにスコープを限定できます。

レイアウトと境界線

コンテナの全体構造:ストリップの方向、コンテンツのパディング、共有境界線トークン。

変数デフォルト説明
--hub-panels-flex-directionrowstring コンテンツに対するヘッダーストリップの方向。 rowrow-reverse
--hub-panels-border-width1pxlength タブストリップとアクティブタブで使用される境界線の幅。 02px
--hub-panels-border-color#dee2e6color タブストリップとコンテンツの境界線の色。 #ced4davar(--bs-border-color)
--hub-panels-border-radius0.375remlength タブヘッダーとコンテンツの角の半径。 00.5rem
--hub-panels-content-bg#fffcolor コンテンツ領域の背景。 transparent#f8f9fa
--hub-panels-header-bgvar(--hub-panels-content-bg)color 非アクティブなヘッダーとスペーサーゾーンの背後にあるタブ/ピルストリップ領域の背景。 #f8f9favar(--bs-tertiary-bg)
--hub-panels-content-box-shadownoneshadow コンテンツ領域のラッパーに適用されるボックスシャドウ。 none0 0.5rem 1rem rgba(0,0,0,.08)
--hub-panels-content-padding-x1remlength コンテンツ領域の水平パディング。 0.75rem1.5rem
--hub-panels-content-padding-y1remlength コンテンツ領域の垂直パディング。 0.75rem1.5rem

タブヘッダー

個々のタブ/ピルヘッダーのタイポグラフィ、間隔、色の状態。

変数デフォルト説明
--hub-panels-tab-font-weight500number ヘッダーラベルのフォントウェイト。 400600
--hub-panels-tab-padding-x1remlength ヘッダー内の水平パディング。 0.75rem1.25rem
--hub-panels-tab-padding-y0.5remlength ヘッダー内の垂直パディング。 0.375rem0.75rem
--hub-panels-tab-color#212529color 非アクティブなヘッダーのテキスト色。 #495057var(--bs-body-color)
--hub-panels-tab-bgtransparentcolor 非アクティブなヘッダーの背景。--hub-panels-header-bg を透過させるには透明のままにします。 transparent#f8f9fa
--hub-panels-tab-color-active#0d6efdcolor アクティブなヘッダーのテキスト色。 var(--bs-primary)#0b5ed7
--hub-panels-tab-bg-active#fffcolor アクティブなヘッダーの背景。デフォルトはコンテンツ表面で、アクティブタブがパネルと一体化します。 var(--bs-primary)var(--hub-panels-content-bg)
--hub-panels-tab-bg-hover#f8f9facolor ホバー時のヘッダーの背景。 #e9eceftransparent
--hub-panels-tab-border-color-active#0d6efdcolor アクティブタブの境界線の色。 var(--bs-primary)#0b5ed7
--hub-panels-tab-active-shadow0 -0.25rem 0.5rem rgba(0, 0, 0, 0.06)shadow 水平ボックスタブビューでアクティブタブが使用する立体シャドウ。 none0 -0.25rem 0.75rem rgba(0,0,0,.12)
--hub-panels-tab-active-shadow-vertical-0.25rem 0 0.5rem rgba(0, 0, 0, 0.06)shadow 垂直ボックスタブビューでアクティブタブが使用する立体シャドウ。 none-0.25rem 0 0.75rem rgba(0,0,0,.12)
--hub-panels-tab-focus-ring-colorrgba(13, 110, 253, 0.25)color キーボードフォーカスのフォーカスリングの色。 rgba(13,110,253,.4)

ピル

ピル表示に固有のトークン。

変数デフォルト説明
--hub-panels-pill-border-radius50remlength ピルヘッダーの角の半径。 0.5rem999px
--hub-panels-pill-bg-active#0d6efdcolor アクティブなピルの背景。 var(--bs-primary)#198754
--hub-panels-pill-color-active#fffcolor アクティブなピルのテキスト色。 #fff#000
--hub-panels-pill-gap0.5remlength ピルヘッダー間の間隔。 0.25rem0.75rem
--hub-panels-pill-content-border-width0length ピルコンテンツカードの境界線の幅。境界線付きのペインに戻すには共有境界線の幅に設定します。 01px
--hub-panels-nav-content-gap1remlength ピルストリップとコンテンツカードの間隔(垂直時はインライン間隔)。 0.75rem1.5rem

複数選択

タブ/ピルスタイルが複数のアクティブヘッダーを同時に許可する場合の、ブロックベースの複数ビューのレイアウト。

変数デフォルト説明
--hub-panels-pane-min-width16remlength コンテンツ領域が水平スクロールする前の、開いている各ペインの最小幅。 12rem20rem
--hub-panels-pane-min-height8remlength 垂直レイアウトにおける開いている各ペインの最小高さ。 6rem12rem
--hub-panels-pane-gap0length 複数のパネルブロック間の間隔。 01rem

accordion ビュー

accordion 表示用のトークン。各トークンはテーマ互換性のために対応する --hub-accordion-* 変数にフォールバックします。

変数デフォルト説明
--hub-panels-accordion-active-color#0c63e4color 展開された accordion ヘッダーのテキスト色。 var(--bs-primary)
--hub-panels-accordion-active-bg#e7f1ffcolor 展開された accordion ヘッダーの背景。 var(--bs-primary-bg-subtle)
--hub-panels-accordion-btn-padding-x1.25remlength 開示ボタンの水平パディング。 1rem1.5rem
--hub-panels-accordion-btn-padding-y1remlength 開示ボタンの垂直パディング。 0.75rem1.25rem
--hub-panels-accordion-btn-icon-transformrotate(-180deg)string 展開時にシェブロンへ適用される transform。 rotate(180deg)scaleY(-1)
--hub-panels-accordion-collapse-transition-duration0.25stransition 展開/折りたたみアニメーションの継続時間。 0.2s0.35s

スタイリングとテーマ設定

スタイリングのサンプルはまだドキュメント化されていません。このセクションには、カスタマイズのレシピやテーマ設定のサンプルが含まれる予定です。