Logo
NeoArc Studio

Document Projection Node Types Reference

Complete reference for all 9 node types in the document projection flow editor: source root, filter, selector, loop, decision, scalar output, array output, chart output, and responsive row.

The document projection flow editor uses a directed graph of typed nodes to control how model data is iterated, filtered, branched, and rendered into published document content. Nodes are placed on a grid and connected by edges. Context (the current data scope) propagates along edges, accumulating as the flow passes through selectors and loops.

FlowNodeType Union

export type FlowNodeType =
  | 'selector'
  | 'loop'
  | 'filter'
  | 'decision'
  | 'scalar-output'
  | 'array-output'
  | 'chart-output'
  | 'responsive-row'
  | 'terminator';

Common Node Fields

Every node in the flow shares the following base fields.

FieldTypeDescription
idstring (UUID)Unique identifier for the node.
typeFlowNodeTypeDiscriminator that determines which config interface applies.
gridXnumberGrid column position.
gridYnumberGrid row position.
gridWnumberWidth in grid cells.
gridHnumberHeight in grid cells.
labelstringDisplay label shown on the node in the flow canvas.
configobject | nullNode-specific configuration. Shape varies by type.

Default Node Sizes

Node TypeWidth (cells)Height (cells)
selector21
loop21
filter21
decision22
scalar-output21
array-output21
chart-output21
responsive-row21
terminator11

Source Root (Terminator)

The source root is a special terminator node that is auto-created when a document projection flow is initialised. It serves as the entry point and cannot be deleted or edited. It anchors the top of the flow and provides the initial context scope containing all model entities.

AspectDetail
Type valueterminator
Confignull (no configuration)
DeletableNo
EditableNo
Context outputAll model entities and their properties are available in the downstream scope.
VisualNeutral grey circle with stop icon.

Selector

Scopes the flow context into a specific entity. All downstream nodes operate within the context of the selected entity until another selector or loop changes scope.

Config FieldTypeRequiredDescription
entityIdstringYesThe ID of the model entity to scope into.
AspectDetail
Context effectAdds an entity scope frame to the context. Downstream nodes see the selected entity's properties and metadata.
VisualBlue rectangle with target icon.
Default labelSelect entity

Loop

Iterates over a collection in the current context, executing all downstream nodes once per item. The loop body receives a new context frame for each iteration.

Config FieldTypeRequiredDescription
loopTypeLoopTypeYesWhat collection to iterate over: 'entity', 'property', 'quality-rule', 'enum-value', or 'relationship'.
entityIdstringNoFor property, quality-rule, enum-value, and relationship loops: which entity to iterate within. Inherited from context if omitted.
Loop TypeIterates OverContext Frame Added
entityAll entities in the model (or filtered set)One entity scope per iteration with all entity metadata and properties.
propertyAll properties of the current entityOne property scope per iteration with property name, type, constraints, governance, etc.
quality-ruleAll quality rules on the current entity or propertyOne quality-rule scope per iteration.
enum-valueAll enum values of the current property (if type is enum)One enum-value scope per iteration.
relationshipAll relationships the current entity participates inOne relationship scope per iteration with target entity, cardinality, etc.

Filter

Reduces a collection in the current context based on one or more conditions. Only items matching all conditions (AND mode) or any condition (OR mode) pass through to downstream nodes.

Config FieldTypeRequiredDescription
filterTargetLoopTypeYesWhat collection to filter. Auto-detected from context: entity, property, quality-rule, enum-value, or relationship.
conditionsFilterCondition[]YesArray of conditions to apply. Each condition has fieldPath, operator, and optional value.
joinModeFilterJoinModeYesHow to combine conditions: 'and' (all must match) or 'or' (any must match). Default is 'and'.
AspectDetail
Context effectReduces the collection that downstream loops iterate over. Does not change the scope type.
Filter-aware pillsDownstream output nodes show filtered counts in their source field pills.
VisualOrange rectangle with filter icon.
Default labelFilter

Decision

A conditional branch that evaluates a single condition against the current context and routes the flow along one of two paths: pass (true) or fail (false).

Config FieldTypeRequiredDescription
fieldPathstringYesContext field path to evaluate (e.g. 'property.governance.classification').
operatorDecisionOperatorYesComparison operator to apply.
valuestringNoComparison value. Not required for 'exists' and 'not-exists' operators.

Decision Operators

OperatorDescriptionRequires Value
existsField is present and non-nullNo
not-existsField is absent or nullNo
equalsField equals the specified valueYes
not-equalsField does not equal the specified valueYes
greater-thanField is greater than the value (numeric comparison)Yes
less-thanField is less than the value (numeric comparison)Yes
in-setField is one of the comma-separated valuesYes
containsField contains the value as a substringYes
not-containsField does not contain the value as a substringYes
count-equalsCount of items equals the valueYes
count-greater-thanCount of items is greater than the valueYes
count-less-thanCount of items is less than the valueYes
AspectDetail
Outgoing edgesTwo: one with outcome 'pass' and one with outcome 'fail'. Each edge can carry a display label.
VisualGreen diamond shape (rotated square) with branch icon.
Default labelCondition

Scalar Output

Produces a single block of rich text content in the published document. The content is an HTML string that can include pill spans referencing context fields and inline expressions.

Config FieldTypeRequiredDescription
contentstring (HTML)YesRich text content with embedded pill spans. Pills are replaced with resolved values at publish time.
skipConditionSkipConditionNoOptional condition. When true, this node produces no output for the current iteration.
AspectDetail
Published outputAn rte (rich text) content block in the page.
VisualViolet rectangle with file-text icon.
Default labelContent

Array Output

Produces a table, bulleted list, or numbered list from an array in the current context. Commonly used inside loops to render property tables or relationship lists.

Config FieldTypeRequiredDescription
arrayPathstringYesPath to the array in the current context to iterate.
formatArrayOutputFormatYes'table', 'bullets', or 'numbered'.
tableHeadersstring[]For table formatColumn header labels. Auto-named from field selection.
tableColumnBindingsstring[]For table formatOne field path per column, binding each column to a data field.
listTemplatestring (HTML)For list formatHTML template with pill spans for each list item.
rowFilterArrayRowFilterNoOptional filter to include only items matching a condition.
skipConditionSkipConditionNoOptional condition. When true, this node produces no output.
AspectDetail
Published outputA table content block (for table format) or rte content block with list markup (for bullets/numbered).
Column reorderingTable columns can be reordered using up/down controls in the config panel.
Parent scope fieldsTable columns can reference fields from the parent scope (e.g. entity name in a property table).
VisualViolet rectangle with table icon.
Default labelArray

Chart Output

Produces a data-driven chart (rendered with ECharts and SVG) from the current context. Supports 5 chart types and 4 data modes.

Config FieldTypeRequiredDescription
chartTypeChartTypeYes'bar-horizontal', 'bar-vertical', 'stacked-bar', 'donut', or 'gauge'.
dataSourceChartDataSourceYesDefines what data drives the chart. See data modes below.
titlestringNoChart title displayed above the visualisation.
xAxisLabelstringNoLabel for the X axis (bar charts only).
yAxisLabelstringNoLabel for the Y axis (bar charts only).
maxItemsnumberNoMaximum items to display. Excess items are grouped as 'Other'.
sortOrderstringNo'value-desc', 'value-asc', 'label-asc', 'label-desc', or 'natural'.
showValuesbooleanNoWhether to display data labels on the chart.
showLegendbooleanNoWhether to display a legend.
skipConditionSkipConditionNoOptional condition. When true, this node produces no output.
templateIdstringNoID of the pre-built template this chart was created from.

Chart Data Modes

ModeDescriptionKey Fields
per-entityOne bar or segment per entity. Value is a count or sum of a field.valueField (optional), valueFilter (optional)
distributionGroup items by a field value and count per group.groupByField
stacked-per-entityOne bar per entity with segments stacked by a category field.stackField
gaugeSingle percentage value calculated as numerator divided by denominator.gaugeNumerator, gaugeDenominator, gaugeLabel
AspectDetail
Published outputA chart content block rendered using ECharts with SVG renderer.
Templates22 pre-built templates across 6 categories are available in the template picker.
Auto-cappingWhen placed inside a responsive row, charts are auto-capped at 10 items.
VisualTeal rectangle with bar-chart icon.
Default labelChart

Responsive Row

A flex-wrap container holding multiple cells that adapt to available width. Each cell can contain text (RTE), a table, or a chart. Cells wrap to new rows when the container is too narrow.

Config FieldTypeRequiredDescription
cellsResponsiveCell[]YesArray of cells in this row. Each cell has its own type and configuration.
gapnumberYesGap between cells in pixels. Default is 16.
skipConditionSkipConditionNoOptional condition. When true, this row produces no output.

ResponsiveCell Fields

FieldTypeDescription
idstring (UUID)Unique identifier for stable identity and reordering.
cellTypeResponsiveCellType'text', 'table', or 'chart'.
minWidthnumberMinimum width in pixels for flexbox layout. Default is 300.
fixedHeightnumber (optional)Fixed height in pixels. When set, text and tables scroll and charts use dataZoom. 0 or undefined means auto height.
textContentstring (HTML)For text cells: RTE content with pill spans.
tableConfigArrayOutputConfigFor table cells: reuses the array output configuration.
chartConfigChartOutputConfigFor chart cells: reuses the chart output configuration.
AspectDetail
Published outputA responsive-row content block with nested cells.
Full-screen expandEach cell supports a full-screen expand toggle in the published viewer.
Inline RTE editingText cells support inline rich text editing in the config panel.
VisualAmber rectangle with columns icon.
Default labelResponsive Row

Edges

Edges connect nodes in the flow graph and carry context from source to target. Decision nodes produce edges with an outcome field.

FieldTypeDescription
idstring (UUID)Unique edge identifier.
sourceNodeIdstringID of the source node.
targetNodeIdstringID of the target node.
outcome'pass' | 'fail' (optional)For decision nodes: which output branch this edge represents.
labelstring (optional)Display label shown on the edge (e.g. 'Has PII', 'No PII').

Skip Conditions

Scalar output, array output, chart output, and responsive row nodes support an optional skip condition. When the condition evaluates to true, the node produces no output for the current iteration. The skip condition uses the same operator set as decision nodes.

FieldTypeDescription
fieldPathstringContext field path to evaluate.
operatorDecisionOperatorComparison operator (same set as decision nodes).
valuestring (optional)Comparison value for non-exists operators.