Portal Community

DataGrid

The DataGrid widget displays tabular data with built-in sort, filter, and pagination. All data is fetched via AIExtension.Service.

Config PropertyTypeDescription
dataSourcestringAIExtension.Service method name
paramsobjectParameters passed to the data source (supports tokens)
columnsColumn[]Column definitions: field, header, sortable, width, cellRenderer
pageSizenumberRows per page (default 20)
selectablebooleanEnable row selection (fires onRowSelect event)
filterablebooleanShow column filter inputs in header
exportablebooleanShow CSV export button

Chart

Renders Bar, Line, or Pie charts. Data is fetched via GetChartDataAsync in AIExtension.Service.

Config PropertyTypeDescription
chartType"bar" | "line" | "pie"Chart visualization type
dataSourcestringAIExtension.Service method name
xAxisstringField name for x-axis (or pie labels)
yAxisstring | string[]Field name(s) for y-axis values (multiple for grouped bar)
colorsstring[]Color overrides for each series
legendbooleanShow legend (default true)

Metric (KPI Card)

A number-focused KPI display card, ideal for dashboards showing a single headline figure with a trend.

Config PropertyTypeDescription
valuestring / tokenThe headline number (e.g., {{ service.GetTotalLeads() }})
labelstringDisplay label below the value
trendnumber% change — positive = green arrow up, negative = red arrow down
iconstringFont Awesome icon name
colorThresholdobject{ warn: 50, danger: 20 } — value below danger → red, below warn → yellow
prefixstringText before value (e.g., "$")
suffixstringText after value (e.g., "%")

Text Widget

Renders rich text or Markdown content. Supports {{ token }} expressions inline in the content string.

// Text widget config example
{
  "content": "### Welcome, {{ context.name }}\nYou have **{{ variables.pendingCount }}** tasks pending.",
  "renderAs": "markdown",   // "markdown" | "html" | "plain"
  "fontSize": "1rem"
}

Container Widget

An invisible layout wrapper that can contain other widgets. Useful for grouping widgets with shared padding, background, or layout direction without creating a new Pane.

// Container widget config
{
  "layout": "flex",
  "direction": "row",
  "gap": 12,
  "padding": 16,
  "background": "surface",  // "transparent" | "surface" | "surface2" | hex color
  "borderRadius": 8
}

Tabs Widget

Provides a tabbed interface where each tab shows a different child Pane. The active tab is controlled by an activeTab variable or a default index.

// Tabs widget config
{
  "tabs": [
    { "label": "Overview", "paneId": "overview-pane" },
    { "label": "Activities", "paneId": "activities-pane" },
    { "label": "Documents", "paneId": "docs-pane" }
  ],
  "defaultTab": 0,            // index of default active tab
  "activeTabVariable": "currentTab"  // syncs tab to this app variable
}