Curiosity Components

The workspace ships pre-built Tesserae components that wrap search, graph traversal, and visualization against the live data — so you compose UI without re-implementing query shapes.

SearchArea

A full search experience: input box, facets, paginated results, ranking-aware. Configure with the same SearchRequest you'd use in an endpoint.

var search = SearchArea()
    .OnSearch(req => req.BeforeTypesFacet = new HashSet<string> { N.SupportCase.Type })
    .WithFacets();

OnSearch runs before each query and lets you mutate the SearchRequest (add TargetUIDs, switch on HybridSearch, narrow facets). For ACL-aware front-end search, the component already calls CreateSearchAsUserAsync under the hood — the caller's session is implicit.

Neighbors

Lists nodes reachable via a specific edge from a starting node. Useful in entity-centric views (parts of a device, messages of a case).

var parts = Neighbors(deviceNode.UID, N.Part.Type, E.HasPart)
                .WithFacets()
                .WithLimit(50);

GraphExplorerView

An interactive force-graph visualization. Give it a set of UIDs (or a query); the workspace expands neighbors on click.

var explorer = GraphExplorerView.ComponentFor(
    enableInteraction: true,
    uids:              myUIDs);

For a one-shot snapshot without panning/zooming, pass enableInteraction: false.

NodeViewer

Render a node using its registered INodeRenderer. Pass the UID; the workspace looks up the renderer for that node type.

var preview = NodeViewer.PreviewFor(caseNode.UID);
var full    = NodeViewer.ViewFor   (caseNode.UID);

This is how the default sidebar shows "preview on hover" and the search results render. Custom views can mix and match.

ChatPanel

A pre-built chat surface that wraps a custom endpoint. Designed for RAG endpoints that return { answer, citations[] }.

var chat = ChatPanel.For(
    endpointPath:    "kb-chat",
    citationRenderer: c => Link(c.SourceUrl).Children(TextBlock($"[{c.ArticleId}] {c.Title}")));

The component handles message history, RelayStatusAsync streaming, and rendering each citation through your callback.

Charts

Charts come from Tesserae's built-in charting components — LineChart(), AreaChart(), BarChart(), Sparkline(...) and Metric(...):

var chart = BarChart()
    .Series("Cases", xs, ys)
    .Title("Cases by manufacturer");

They support zoom, pan and a value readout, and export a PNG with the current theme colours applied. See the Charts & Visualization reference for the full API.

The Plotly wrapper is gone

The external charting library and its Plotly wrapper package are no longer referenced by the front-end projects — every chart in the interface renders through the built-in components instead, which removes that library from the download entirely. A custom front-end that charted through the old wrapper has to move to the components above.

© 2026 Curiosity. All rights reserved.