Fields it adds

FieldTypeRequiredDescription
viz_layout_type string (layer) yes Normalized layout identifier.
viz_layout_blend_mode string (normal, multiply, screen, overlay) no Blend/composite mode applied to layered marks.
viz_layout_sync_interactions boolean no Whether interaction predicates are shared across layers.
viz_layout_shared_channels string[] no Channels that share a domain across layered marks.
viz_layout_order_hint string[] no Optional ordered list describing layer precedence.
viz_layout_projection string (cartesian, polar, radial) no Projection metadata forwarded to adapters and docs.

What it shows in each context

This trait places no component of its own.

Parameters

blendMode string
Blend/composite mode applied across stacked marks.
syncInteractions boolean
Whether interaction predicates propagate across all layers.
sharedChannels string[]
Channels whose scales remain synchronized across layers.
orderHint string[]
Optional list describing explicit bottom→top layer ordering. Entries name layers by mark options.id when set (preferred — repeated same-trait marks need distinct ids to be addressable), else by mark trait.
projection string
Projection hint for adapters when layering across spaces.

Objects that use it

No shipped object uses this trait.

The trait file

traits/viz/layout-layer.trait.yaml
trait:
  name: LayoutLayer
  version: 0.2.0
  description: >
    Governs sequencing, blending, and shared channel behavior for layered mark
    compositions.
  category: viz.layout
  tags:
    - viz
    - layout
    - layer
    - composition

parameters:
  - name: blendMode
    type: string
    required: false
    description: Blend/composite mode applied across stacked marks.
    default: normal
    validation:
      enum: [normal, multiply, screen, overlay]
  - name: syncInteractions
    type: boolean
    required: false
    description: Whether interaction predicates propagate across all layers.
    default: true
  - name: sharedChannels
    type: string[]
    required: false
    description: Channels whose scales remain synchronized across layers.
    default: [x, y, color]
  - name: orderHint
    type: string[]
    required: false
    description: >-
      Optional list describing explicit bottom→top layer ordering. Entries name
      layers by mark options.id when set (preferred — repeated same-trait marks
      need distinct ids to be addressable), else by mark trait.
  - name: projection
    type: string
    required: false
    description: Projection hint for adapters when layering across spaces.
    default: cartesian
    validation:
      enum: [cartesian, polar, radial]

schema:
  viz_layout_type:
    type: string
    required: true
    description: Normalized layout identifier.
    default: layer
    validation:
      enum: [layer]
  viz_layout_blend_mode:
    type: string
    required: false
    description: Blend/composite mode applied to layered marks.
    defaultFromParameter: blendMode
    validation:
      enum: [normal, multiply, screen, overlay]
  viz_layout_sync_interactions:
    type: boolean
    required: false
    description: Whether interaction predicates are shared across layers.
    defaultFromParameter: syncInteractions
  viz_layout_shared_channels:
    type: string[]
    required: false
    description: Channels that share a domain across layered marks.
    defaultFromParameter: sharedChannels
  viz_layout_order_hint:
    type: string[]
    required: false
    description: Optional ordered list describing layer precedence.
    defaultFromParameter: orderHint
  viz_layout_projection:
    type: string
    required: false
    description: Projection metadata forwarded to adapters and docs.
    defaultFromParameter: projection
    validation:
      enum: [cartesian, polar, radial]

semantics:
  viz_layout_type:
    semantic_type: viz.layout.type
    ui_hints:
      component: Badge
  viz_layout_blend_mode:
    semantic_type: viz.layout.layer.blend
    ui_hints:
      component: Badge
  viz_layout_sync_interactions:
    semantic_type: viz.layout.layer.sync_interactions
    ui_hints:
      component: BooleanPill
  viz_layout_shared_channels:
    semantic_type: viz.layout.shared_channels
    ui_hints:
      component: ListSummary
  viz_layout_order_hint:
    semantic_type: viz.layout.layer.order
    ui_hints:
      component: ListSummary
  viz_layout_projection:
    semantic_type: viz.layout.projection
    ui_hints:
      component: Badge

tokens:
  viz.layout.layer.blend: var(--cmp-viz-layer-blend)

dependencies:
  - trait: MarkBar
    optional: true
  - trait: MarkLine
    optional: true
  - trait: MarkPoint
    optional: true
  - trait: MarkArea
    optional: true

metadata:
  created: '2025-11-16'
  updated: '2026-02-28'
  owners:
    - viz@oods.systems
  maturity: beta
  accessibility:
    keyboard: Layer order is keyboard-traversable. Focus moves through layers bottom to top.
    screenreader: Announces layer count and blend mode (e.g., "Layered visualization, 3 layers, normal blend").
  examples:
    - LineWithConfidenceBand
    - BarWithTrendOverlay
    - ScatterWithRegressionLine
  references:
    - objects/provenance.v1.json#/references/ref-c52ae10b7f25