コンテンツへスキップ

ツールチップ ​

ツールチップ メニュー オプション は、ノードとエッジのデフォルトおよびカスタム ツールチップを構成します。

デフォルト:

  • ツールチップが有効になっています。
  • ノードとエッジのタイトル/サブタイトルは、それぞれのヘッダー マップから取得されます。
  • プロパティはノード/エッジのプロパティ マップから取得されます。

ツールチップの無効化 ​

enabled プロパティを false に設定するだけで非常に簡単です。

ts
const options = {
    UI: {
        tooltip: { 
            enabled: false
        }
    }
}

ツールチップを表示するものの選択 ​

enabled は、いくつかのツールチップが必要なグラフの場合、種類または関数のマップも受け取ります。 ホバリングのみ。種類は nodes、edges、groups で、グループは Simplify 描く。欠落しているキーは true であるため、{ edges: false } はノードとグループを保持します。

カーソルを置くとノードがすでに詳細なカードに成長しているグラフでは、ノード ツールチップは使用できません。 ただし、グループは開く前にツールチップで説明するだけです。

ts
const options = {
    UI: {
        tooltip: { 
            enabled: { nodes: false, edges: false, groups: true }
        }
    }
}

ホバーするたびに、要素とその種類 ('node'、'edge'、または 'group')。スローする関数は false としてカウントされ、エラーは要素ごとに 1 回ログに記録されます。

ts
const options = {
    UI: {
        tooltip: { 
            enabled: (element, kind) => kind === 'node' && element.getData().important === true
        }
    }
}

ツールチップ自体は、enabled が false の場合、またはすべての種類がオフになっているマップの場合にのみ省略されます。

ヘッダーマッピング ​

サイドバーのメインヘッダーで行われるマッピングと同様に、ノードとエッジの両方のツールヒントのヘッダーにマッピングを提供できます。

ts
const options = {
    UI: {
        tooltip: {  
            nodeHeaderMap: {
                title: node => `Node ${node.id}`,
                subtitle: node => node.data.description ?? ''
            },
            edgeHeaderMap: {
                title: edge => `Edge ${edge.from} → ${edge.to}`,
                subtitle: edge => edge.data.label ?? ''
            }
        }
    }
}

追加コンテンツ ​

サイドバーの 追加コンテンツ と同様に、ツールヒントの最後に追加する追加コンテンツを定義できます。

ts
const options = {
    UI: {
        tooltip: { 
            renderNodeExtra: (node) => {
                const div = document.createElement('div')
                div.textContent = `Type: ${node.data.type ?? 'Unknown'}`
                return div
            },
            renderEdgeExtra: (edge) => `Weight: ${edge.data.weight ?? '0'}`
        }
    }
}

カスタムレンダリング ​

最後に、render 関数を使用してツールヒントのコンテンツを完全にオーバーライドできます。

ts
const options = {
    UI: {
        tooltip: {
            render: (element) => {
                const div = document.createElement('div')
                div.textContent = `Element ID: ${element.id}`
                div.style.fontWeight = 'bold'
                return div
            }
        }
    }
}

ツールチップのコンテンツを取得しています ​

render、renderNodeExtra、renderEdgeExtra、nodePropertiesMap、 edgePropertiesMap はすべて async になる可能性があります。ツールチップにはプレースホルダーが表示されますが、 Promise は保留中であり、解決されたときにコンテンツを交換し、再配置します。 拡張されたツールチップが画面上に留まるようにします。

ts
const options = {
    UI: {
        tooltip: {
            renderNodeExtra: async (node, { signal }) => { 
                const res = await fetch(`/enrich/${node.getData().uuid}`, { signal })
                return renderChips(await res.json())
            },
        },
    },
}

ツールチップは、単一のツールチップであるため、これが最も重要な面です。 再利用されたコンテナ が 400 ミリ秒の遅延後にオープンされました: 1 つのノードのフェッチが開始されました それ以外の場合は、すでに別のツールチップを説明しているツールチップが表示されます。ここではそれはできません — 2 番目のノードをホバリングすると、最初のレンダリングの signal が中止され、その結果が削除されます。 たとえそれが最後に解決されたとしても。詳細については、非同期コンテンツを参照してください。 完全なコントラクトと UI.asyncContent の場合、プレースホルダーをカスタマイズします。

保留中のツールチップを固定する

コンテンツがまだ読み込まれている間にピン留めしても問題ありません。 最初に別のホバーによって置き換えられない限り、フェッチは解決されます。